我想在ansible中使用json文件进行用户管理。因此,我创建了一个包含所有用户和组的json文件,如下所示(user_group_management.json):
{
"linux_users": [
{
"name": "myuser",
"uid": 1003,
"group": "myuser",
"groups": "users,sudo",
"shell": "/bin/bash",
"password": <password as sha-512>,
"create_home": "yes",
"home": "/home/rcug",
"hosts": ["hostname1","hostname2","hostname3"]
},
{...},
...
],
"linux_groups": [...],
}
现在,我编写了一个用于添加用户和组(user_group_management.yml)的ansible脚本:
- name: User and group management
hosts: all
vars_files:
- user_group_management.json
tasks:
[part for adding groups (no problems here)]
- name: Add users
ignore_errors: yes
user:
name: item.name
uid: item.uid
group: item.group
groups: item.groups
shell: item.shell
password: item.password
create_home: item.create_home
home: item.home
state: present
when: ansible_hostname in item.hosts
loop: "{{ linux_users }}"
使用ansible-playbook --check user_management.yml
运行ansible脚本时,我收到有关“添加用户”任务的以下错误消息:
"msg": "The value 'item.create_home' is not a valid boolean. Valid booleans include: 0, 'on', 'f', 'false', 1, 'no', 'n', '1', '0', 't', 'y', 'off', 'yes', 'true'"
我尝试通过将"create_home": "yes",
替换为"create_home": 1,
来解决此问题,但没有任何改变。现在,我在变量(item.create_home
-> "{{ item.create_home }}"
)周围添加了大括号,从而解决了该问题。因此,现在我不再收到任何错误消息。
可悲的是,我不明白为什么这对我有所帮助。我以为item.create_home
首先是一个字符串(“是”),并且在编辑json文件后应该是整数(1)。但是两者都给了我错误。有这种现象的解释吗?
答案 0 :(得分:3)
如果没有太多使用json操作的经验,那么您是否尝试过更改
"create_home": "yes",
到
"create_home": true,
另一种解决方案是在使用时使用jinja过滤器|bool
来转换您期望为布尔值的值。
- debug:
msg: test
when: some_string_value | bool
以when
条件为例。
您的情况应该是
create_home: item.create_home
应成为
create_home: "{{ item.create_home | bool }}"
一般建议:您应将变量包含在"{{ }}"