gpt4 book ai didi

python-3.x - Ansible - 使用 with_items 访问 shell 命令的输出

转载 作者:行者123 更新时间:2023-12-04 10:48:44 25 4
gpt4 key购买 nike

我编写了一个 python 脚本,它通过我的 ansible playbook 执行并通过 stdout 返回以下输出:

- { username: ansible, admin: yes}
- { username: test, admin: no }

然后输出应该保存在变量“users”中,并使用“with_items”(或较新的“循环”条件)我想遍历变量以便分别为每个用户分配正确的权限:
- name: execute python script
command: "python3 /tmp/parse_string.py --user_permissions={{ user_permissions }}"
register: output

- name: register
set_fact:
users: "{{ output.stdout }}"

- name: output
debug: msg="{{ users }}"

- name: Add user to group -admin
user:
name={{ item.username }}
groups=admin
append=yes
state=present
when: "item.admin == yes"
with_items: '{{users}}

但是,在启动剧本时,它说变量“用户”没有属性“用户名”。
TASK [create_users : output] ***************************************************
ok: [ansible] => {
"msg": "- { username: ansible, admin: yes }\n- { username: test, admin: no }\n- { username: test2, admin: no }"
}
TASK [create_users : Add user to group -admin ***************
fatal: [ansible]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'username'\n\nThe error appears to be in '***': line 29, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: \n ^ here\n"}

任何人都可以帮我处理这个案子吗?

BR

最佳答案

您正在设置您的 users var 为字符串。碰巧这个字符串是数据结构的 yaml 表示,但 ansible 目前对此一无所知。

为了满足您的要求,您需要将该字符串解析为 yaml 并注册结果。幸运的是,有一个 from_yaml filter为了这个目的

您只需要修改您的 set_fact任务如下,一切都应该按预期工作:

- name: register
set_fact:
users: "{{ output.stdout | from_yaml }}"

关于python-3.x - Ansible - 使用 with_items 访问 shell 命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59582761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com