我正在使用Ansible将用户添加到各种服务器中。有些服务器定义了不同的UNIX组。我希望找到一种方法,让Ansible检查我指定的组是否存在,如果该组存在,则将其添加到用户的辅助组列表中(但如果该组不存在,则忽略语句it)。
有什么想法我可以做这个与Ansible?
这是我的出发点。
命令
ansible-playbook -i 'localhost,' -c local ansible_user.yml
ansible_用户.yml
---
- hosts: all
user: root
become: yes
vars:
password: "!"
user: testa
tasks:
- name: add user
user: name="{{user}}"
state=present
password="{{password}}"
shell=/bin/bash
append=yes
comment="test User"
**更新:**基于@udondan建议的解决方案,我能够通过以下附加任务来实现此功能。
- name: Check if user exists
shell: /usr/bin/getent group | awk -F":" '{print $1}'
register: etc_groups
- name: Add secondary Groups to user
user: name="{{user}}" groups="{{item}}" append=yes
when: '"{{item}}" in etc_groups.stdout_lines'
with_items:
- sudo
- wheel
4条答案
按热度按时间q0qdq0h21#
getent模块可用于读取/etc/group
llew8vvj2#
你有什么东西可以识别这些不同的主机类型吗?
如果没有,你首先需要检查主机上存在哪些组,你可以用命令
getent group | cut -d: -f1
来完成,它将每行输出一个组。您可以将其作为单独的任务使用,如下所示:
之后,当您要添加用户组时,可以使用注册的结果
fkaflof63#
这就是我在剧本中处理这个问题的方法。想法很简单--取一个现有组的列表,找到用户希望加入的组与现有组之间的交集:
getent
模块输出'getent_group' Ansible事实,其中包含所有现有组及其详细信息。通过将其传送到| list
过滤器,我得到了组名的普通列表。intersect
过滤器找到了两个列表之间的共同点。这个解决方案的优点之一是我不需要使用
user
模块的 append 参数。这样就可以正确地将用户从我不想让其成为成员的组中删除。7vhp5slm4#
我也有类似的要求,然后我做了以下工作,
可靠性[核心2.12.2]
更新:谢谢你的建议@Jeter-work