linux Ansible行动手册不适用于多值列表

tvmytwxo  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(127)

我试图写一个剧本,创建多个用户,但它不工作,当我把我的变量在一个列表的形式。

不适用行动手册

[root@ansible-master playbooks]# cat users_list_new.yml
---
users:
  - username:
      - amba
      - ruchita

[root@ansible-master playbooks]# cat multi_users_new.yml
---
- name: Creating the multi users with a new approach
  hosts: california
  become: true
  vars_files:
    - users_list_new.yml
  tasks:
    - name: Create the user
      user:
        name: "{{ item.username[0] }}"
      loop: "{{ users }}"

它只创建了第一个用户,因为我已经把下标0放在了用户模块中。我的问题是我们如何在用户名上创建一个循环。例如,我修改了我的剧本,但它不起作用

---
- name: Creating the multi users with a new approach
  hosts: california
  become: true
  vars_files:
    - users_list_new.yml
  tasks:
    - name: Create the user
      user:
        name: "{{ item }}"
      loop: "{{ users.username }}"

当我运行行动手册时,它抛出了以下错误

PLAY [Creating the multi users with a new approach]********************************************************************************************************************

TASK [Gathering Facts]*************************************************************************************************************************************************
ok: [10.128.0.5]

TASK [Create the user]*************************************************************************************************************************************************
fatal: [10.128.0.5]: FAILED! => {"msg": "'list object' has no attribute 'username'"}

PLAY RECAP*************************************************************************************************************************************************************
10.128.0.5                 : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

[root@ansible-master playbooks]#

请帮我想个办法

EDIT假设我想创建两个用户。变量声明的最佳实践是什么?

第一次接近

users:
  - username:
      - amba
      - ruchita
  - shell:
      - /bin/bash
      - /bin/ksh

第二种方法

users:
  - username: amba
    shell: /bin/bash
  - username: ruchita
    shell: /bin/bash
wj8zmpe1

wj8zmpe11#

您的问题是您的变量结构users包含一个列表而不是一个字典,因此您不能将username作为它的键来访问,因为它是一个列表而不是一个字典。您需要以users[0]的身份访问才能访问用户名列表。
第一个

之前

root@ff9c44b4c94f:/local# id amba; id ruchita
id: ‘amba’: no such user   
id: ‘ruchita’: no such user

之后

root@ff9c44b4c94f:/local# id amba; id ruchita
uid=8257(amba) gid=8257(amba) groups=8257(amba)
uid=8258(ruchita) gid=8258(ruchita) groups=8258(ruchita)

相关问题