首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用多值列表的不可操作的剧本

不使用多值列表的不可操作的剧本
EN

Stack Overflow用户
提问于 2022-10-23 03:31:21
回答 1查看 28关注 0票数 0

我正在尝试编写一个创建多个用户的剧本,但当我将变量放在列表表单中时,它不起作用。

不工作的剧本

代码语言:javascript
复制
[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放在用户模块中。我的问题是如何在用户名上创建一个循环。例如,我修改了我的剧本,但它没有起作用

代码语言:javascript
复制
---
- 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 }}"

当我运行剧本时,它掉到了错误的下面。

代码语言:javascript
复制
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]#

请帮我找出解决办法

*编辑*假设我要创建两个用户。变量声明的最佳实践是什么?

第一种方法

代码语言:javascript
复制
users:
  - username:
      - amba
      - ruchita
  - shell:
      - /bin/bash
      - /bin/ksh

第二种方法

代码语言:javascript
复制
users:
  - username: amba
    shell: /bin/bash
  - username: ruchita
    shell: /bin/bash
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-23 07:51:13

您的问题是,您的可变结构users包含一个列表,而不是一个dict,所以您不能将username作为其中的一个键,因为它是一个列表而不是一个dict。您需要以users[0]的身份进行访问才能访问用户名列表。

代码语言:javascript
复制
---

- name: Creating the multi users with a new approach
  hosts: localhost
  vars_files:
    - users_list_new.yml
  tasks:
    - name: Create the user
      user:
        name: "{{ item }}"
      loop: "{{ users[0].username }}"
代码语言:javascript
复制
TASK [Create the user] ********************************************************************************************************************************************************************
Sunday 23 October 2022  08:47:41 +0100 (0:00:07.567)       0:00:08.179 ******** 
changed: [localhost] => (item=amba)
changed: [localhost] => (item=ruchita)

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

先于

代码语言:javascript
复制
root@ff9c44b4c94f:/local# id amba; id ruchita
id: ‘amba’: no such user   
id: ‘ruchita’: no such user

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74168483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档