我是ansible的新手,请原谅。我没有从ansible文档中找到或可能理解相关信息。
我需要在系统(Debian 9)中的所有用户的. ssh /autorized_key中按块放置一些ssh键,而无需在任务中使用shell。Ansible 2.7.5
我的计划是:
我正在尝试使用下面的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 }}"这里我得到了一个键:用户和值: home dir。但我不知道如何按shell类型过滤它,以及如何将所有用户和那里的dirs分配给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我只为一个用户添加键。如何使用用户列表作为循环变量从该任务中创建一个循环。
附注:
问题的第二部分是如何处理变量结果: list、string、dict。我想我了解如何使用过滤器进行转换,但是我可以更多地阅读有关检测var类型的内容,并从中提取数据。我不清楚:variables.html
谢谢。
发布于 2019-11-21 17:18:14
问:“如何使用用户列表作为循环变量从该任务中创建一个循环。”
A:读读密码。变量getent_passwd将由模块getent自动创建。
- getent:
database: passwd通过选择包含shell /bin/bash的记录来创建用户my_users列表
- set_fact:
my_users: "{{ getent_passwd|
dict2items|
json_query('[? contains(value,`/bin/bash`)].key') }}"循环列表my_users并使用钥匙配置authorized_keys
- authorized_key:
user: "{{ item }}"
key: "{{ lookup('file', 'defaults/main.yml') }}"
loop: "{{ my_users }}"(未测试)
https://stackoverflow.com/questions/58979607
复制相似问题