【发布时间】:2019-11-21 16:34:29
【问题描述】:
我是ansible的新手,请原谅。我没有从 ansible docs 中找到或可能了解相关信息。
我需要在系统(Debian 9)中所有用户的 .ssh/autorized_keys 中按块放置一些 ssh 密钥,而不在任务中使用 shell。 Ansible 2.7.5
我的计划是:
从密码文件中获取所有用户;
只选择非系统用户,例如可以是passwd中有/bin/bash shell的用户,也可以不是/usr/sbin/nologin /bin/false;
提取用户名和主目录到变量;
将其作为变量放入 blockinfile 模块中。
我正在尝试使用下面的 getent 模块从 passwd 文件中获取所有用户。
- getent:
database: passwd
key:
register: allusers
# - debug:
# var: allusers
# - debug:
# msg: "{{ ansible_facts.getent_passwd }}"
# - name: Select actual users
# set_fact:
# passwd_user: "{{ item.key }}"
# passwd_hdir: "{{ item.value.4 }}"
# loop: "{{ allusers.ansible_facts.getent_passwd | dict2items }}"
- name: "Show file path only"
debug:
msg:
- "Located user: {{ item.key }}"
- "Home Dir: {{ item.value.4 }}"
loop: "{{ allusers.ansible_facts.getent_passwd | dict2items }}"
在这里,我得到了一个带有键的字典:用户和值:主目录。但我不知道如何按 shell 类型过滤它以及如何将所有用户和那里的目录分配给 var。
- name: "Add ssh keys"
blockinfile:
path: "{{ passwd_hdir }}/.ssh/authorized_keys"
create: yes
owner: "{{ passwd_user }}"
group: "{{ passwd_user }}"
block: "{{ item }}"
with_file:
- "defaults/main.yml" # file in role's dir with ssh-keys
结果我只为一个用户添加密钥。如何使用用户列表作为循环变量从该任务中创建一个循环。
附言
我的问题的第二部分是如何处理变量结果:列表、字符串、字典。我想我了解如何使用过滤器进行转换,但我可以在哪里阅读更多关于检测 var 类型并从中提取数据的信息。我不清楚:https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
谢谢。
【问题讨论】:
标签: ansible ansible-2.x