Как исправить ошибку с получением значений из списка
Я пытался создать пользователей, используя 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"}
Где проблема?
1 ответ
Решение
users
это список, который не имеет атрибута user_name
, Имеет только items
и каждый item
имеет атрибут user_name
, Вы должны пройтись по списку users
, Что-то вроде:
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 }}"