Ansible-用于用户模块内部的循环



我最近发现了在Ansible中使用for循环,对此感到非常兴奋。尝试在调试模块中使用它,效果非常好,但当我尝试在"用户"模块中使用相同的模块时,控制流无法识别用户模块的"名称"关键字。下面是我的诗歌,

- hosts: testservers
tasks:
- name: Setting user facts
set_fact:
username: "{{ lookup('ini', 'name section=userDetails file=details.ini') }}"
userpass: "{{ lookup('ini', 'password section=userDetails file=details.ini') }}"
- name: User creation
become: true
# debug:
#    msg: |
#     {% for x,y in item.1,item.2 %}
#     {{ x }} is the username and its password is {{ y }}
#     {% endfor %}
# with_items: 
#     - { 1: "{{ username.split(',') }}", 2: "{{ userpass.split(',') }}" }
user: |
{% for x,y in item.1,item.2 %}
name: "{{ x }}"
password: "{{ y }}"
{% endfor %}
with_items:
- { 1: "{{ username.split(',') }}", 2: "{{ userpass.split(',') }}" }

下方的Details.ini文件内容

#User basic details
[userDetails]
name=vasanth,vasanthnagkv
password=vasanth12,pass2

上面的评论部分运行良好。但是未注释的部分抛出以下错误

failed: [10.0.0.47] (item={1: [u'vasanth', u'vasanthnagkv'], 2: [u'vasanth12', u'pass2']}) => {
"changed": false, 
"invocation": {
"module_args": {
"append": false, 
"create_home": true, 
"force": false, 
"move_home": false, 
"non_unique": false, 
"remove": false, 
"ssh_key_bits": 0, 
"ssh_key_comment": "ansible-generated on APUA-02", 
"ssh_key_type": "rsa", 
"state": "present", 
"system": false, 
"update_password": "always"
}
}, 
"item": {
"1": [
"vasanth", 
"vasanthnagkv"
], 
"2": [
"vasanth12", 
"pass2"
]
}, 
"msg": "missing required arguments: name"
}
to retry, use: --limit @/home/admin/ansiblePlaybooks/userCreation/userCreate.retry
PLAY RECAP ************************************************************************************************************************************************************************************
10.0.0.47                  : ok=2    changed=0    unreachable=0    failed=1 

感谢您的帮助。

此行user: |表示使用块样式指示符将字符串传递给用户模块:https://yaml-multiline.info/)

由于Ansible只会将其视为字符串,因此您不会将所需的name参数传递给user模块

尝试在第一个任务中查找后拆分名称,这样您就可以获得名称和密码列表:

- name: Setting user facts
set_fact:
username: "{{ lookup('ini', 'name section=userDetails file=details.ini').split(',') }}"
userpass: "{{ lookup('ini', 'password section=userDetails file=details.ini').split(',') }}"

一旦你有了用户名和密码列表,你就可以通过以下方式使用这两个变量:

- user:
name: "{{ item }}"
password: "{{ userpass[index] }}"
loop: "{{ username }}"
loop_control:
index_var: index

最新更新