我正在运行 Ansible 2.2.0.0 以在 CentOS 7 服务器上创建用户,内容如下:
- name: User creation
user: name="{{item.username}}"
group="{{item.username if users_create_per_user_group
else item.group}}"
groups="{{item.groups | join(',')}}"
shell="{{item.shell if item.shell is defined else users_default_shell}}"
comment="{{item.name}}"
uid="{{item.uid}}"
home="{{item.home if item.home is defined else []}}"
password="{{ item.password if item.password is defined else '!' }}"
with_items: "{{users}}"
tags: ['users','configuration']
我将“wordpress”分配给“primary_group”(以便内容开发人员可以在他们的 wordpress 区域中读取和写入,而不必担心 chgrp 他们的文件),并且我看到变量在剧本输出中被正确分配:
ok: [someserver] => (item={u'username': u'someuser', **u'group': [u'wordpress']**, u'name': u'somefirstname somelastname', u'ssh_key': [u'ssh-rsa AN_SSH_PUBLIC_KEY'], u'groups': [u'someuser', u'apache', u'sftpusers'], u'password': u'A UNIX PASSWORD HASH', u'uid': 2101})
但尽管没有产生错误,用户的主要组仍然是“someuser”,而不是“wordpress”。
答案1
进一步阐述康斯坦丁的想法:
在创建用户之前添加一个调试语句来检查
users_create_per_user_group
- name: Debug users_create_per_user_group debug: var=users_create_per_user_group
更新用户创建,以便您可以将其
group
作为列表处理- name: User creation user: name="{{item.username}}" group="{{item.username if users_create_per_user_group else (item.group if item.group is string else item.group[0]) }}" groups="{{item.groups | join(',')}}" shell="{{item.shell | default(users_default_shell) }}" comment="{{item.name}}" uid="{{item.uid}}" home="{{item.home | default([])}}" password="{{ item.password | default('!') }}" tags: ['users','configuration']