我正在使用Ansible将用户添加到各种服务器.某些服务器定义了不同的UNIX组.我想为Ansible找到一种方法来检查我指定的组是否存在,如果该组存在,则将其添加到用户的辅助组列表中(但如果该组不存在则忽略该语句).
有关如何使用Ansible进行此操作的任何想法?
这是我的出发点.
命令
ansible-playbook -i 'localhost,' -c local ansible_user.yml
Run Code Online (Sandbox Code Playgroud)
ansible_user.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"
Run Code Online (Sandbox Code Playgroud)
更新:根据@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
Run Code Online (Sandbox Code Playgroud)
udo*_*dan 11
你有什么东西可以识别那些不同的宿主类型吗?
如果没有,您首先需要检查该主机上存在哪些组.您可以使用groups | tr -s " " "\012"将每行输出一个组的命令来执行此操作.
您可以将此作为单独的任务使用,如下所示:
- shell: groups | tr -s " " "\012"
register: unix_groups
Run Code Online (Sandbox Code Playgroud)
然后,当您要添加用户组时,可以在以后使用注册结果
- user: ...
when: "some_group" in unix_groups.stdout_lines
Run Code Online (Sandbox Code Playgroud)
Fra*_*ank 10
所述getent模块可用于读取/ etc /组
- name: Determine available groups
getent:
database: group
- name: Add additional groups to user
user: name="{{user}}" groups="{{item}}" append=yes
when: item in ansible_facts.getent_group
with_items:
- sudo
- wheel
Run Code Online (Sandbox Code Playgroud)