Ansible 如何修复从列表中获取值的错误

Ansible 如何修复从列表中获取值的错误,ansible,createuser,Ansible,Createuser,我试图使用ansible创建用户。我创建了一个名为users的变量,其中包含用户列表和其他选项。这是: users: - { user_name: "user1", sudo_type: "full", password: "pass", ssh_pub_key: "ssh-rsa AAAAB..." } - { user_name: "user2", sudo_type: "limited", password: "somepass", ssh_pub_key: "ssh-rsa AA

我试图使用ansible创建用户。我创建了一个名为users的变量,其中包含用户列表和其他选项。这是:

users:
  - { user_name: "user1", sudo_type: "full", password: "pass", ssh_pub_key: "ssh-rsa AAAAB..." }
  - { user_name: "user2", sudo_type: "limited", password: "somepass", ssh_pub_key: "ssh-rsa AAAAB3..." }
然后,我创建了以下任务:

- name: create local users
  local_action: user name={{ users.user_name }} createhome=yes state=present password={{ users.password }} shell=/bin/bash generate_ssh_key=yes ssh_key_type=rsa ssh_key_comment="{{ ansible_hostname }}-{{ users.user_name }}"
当我运行playbook时,它失败了,错误如下:

fatal: [10.60.16.1]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'list object' has no attribute 'user_name'\n\nThe error appears to have been in '/root/ansible-builds/roles/users/tasks/main.yml': line 11, 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: create local users\n  ^ here\n"}

问题在哪里?

用户
是一个没有属性的列表
用户名
。它只有
,每个
都有一个属性
用户名
。您必须循环浏览
用户列表
。比如:

vars:
  users:
    - { user_name: "user1", sudo_type: "full", password: "pass", ssh_pub_key: "ssh-rsa AAAAB..." }
    - { user_name: "user2", sudo_type: "limited", password: "somepass", ssh_pub_key: "ssh-rsa AAAAB3..." }

tasks:
  - name: create local users
    shell: echo {{ item.user_name }}
    with_items: "{{ users }}"
因此,您的任务如下:

  - name: create local users
    local_action: user name={{ item.user_name }} createhome=yes state=present password={{ item.password }} shell=/bin/bash generate_ssh_key=yes ssh_key_type=rsa ssh_key_comment="{{ ansible_hostname }}-{{ item.user_name }}"
    with_items: "{{ users }}"

我已经更正了剧本,但是我仍然得到同样的错误。我刚刚做了。你更新的剧本与我建议的不一样。请再读一遍。我找不到任何不同的任务,所以我在您的示例中添加了一个额外的任务,该任务因相同的错误而失败。@techraf修复了它。你是对的。请参阅techraf的评论。我回滚了您根据答案的第一个版本所做的编辑,该版本引入了一个不同的问题。现在问题和答案相匹配。