Назад | Перейти на главную страницу

Ansible error with_topting и управление пользователями

Возникла неприятная проблема, которую я просто не могу понять.

Вот мой код. Если я полностью закомментирую группу и группирую переменные, все будет работать нормально. Но это как бы выплевывает ошибки ниже.

По сути, это говорит мне, что такой группы не существует. В этом примере написано msg: "Group" 'all' не существует. Я понятия не имею, что мне нужно сделать, чтобы исправить эту проблему.

 - name: Add new group if it doesn't exist already
   group:
    name: "{{ group }}"
   when: group is defined

 - name: Add multiple users
   user:
    name: "{{ item.0 }}"
    comment: "{{item.1 }}"
    uid: "{{ item.2 }}"
    group: "{{ group }}"
    groups: "{{ groups }}"
    append: yes

   with_together:
     - "{{ name }}"
     - "{{ comment }}"
     - "{{ uid }}"
     - "{{ group }}"
And variable file:
name:
 - test1
 - test2

comment:
 - "comment1"
 - "comment2"

uid:
 - 150
 - 151

group: sudo

groups:
 - admin
 - test



However, now I am receiving this error.


failed: [127.0.0.1] => (item=[u'test1', u'comment1', 150, u'sudo']) => {"failed": true, "invocation": {"module_args": {"append": true, "comment": "comment1", "createhome": true, "expires": null, "force": false, "generate_ssh_key": null, "group": "sudo", "groups": "{'ungrouped': ['127.0.0.1'], 'all': ['127.0.0.1']}", "home": null, "login_class": null, "move_home": false, "name": "test1", "non_unique": false, "password": null, "remove": false, "shell": null, "skeleton": null, "ssh_key_bits": "2048", "ssh_key_comment": "ansible-generated on ubuntu-512mb-sfo1-01", "ssh_key_file": null, "ssh_key_passphrase": null, "ssh_key_type": "rsa", "state": "present", "system": false, "uid": "150", "update_password": "always"}, "module_name": "user"}, "item": ["test1", "comment1", 150, "sudo"], "msg": "Group  'all': ['127.0.0.1']} does not exist"}
failed: [127.0.0.1] => (item=[u'test2', u'comment2', 151, None]) => {"failed": true, "invocation": {"module_args": {"append": true, "comment": "comment2", "createhome": true, "expires": null, "force": false, "generate_ssh_key": null, "group": "sudo", "groups": "{'ungrouped': ['127.0.0.1'], 'all': ['127.0.0.1']}", "home": null, "login_class": null, "move_home": false, "name": "test2", "non_unique": false, "password": null, "remove": false, "shell": null, "skeleton": null, "ssh_key_bits": "2048", "ssh_key_comment": "ansible-generated on ubuntu-512mb-sfo1-01", "ssh_key_file": null, "ssh_key_passphrase": null, "ssh_key_type": "rsa", "state": "present", "system": false, "uid": "151", "update_password": "always"}, "module_name": "user"}, "item": ["test2", "comment2", 151, null], "msg": "Group  'all': ['127.0.0.1']} does not exist"}

Проблема в конфликте имен переменных. groups - это зарезервированная переменная, в которой хранятся группы из реестра. И all - это автоматически сгенерированная группа, в которую входят все хосты вашего инвентаря.

Из документов:

Даже если вы не определили их самостоятельно, Ansible предоставит вам несколько переменных автоматически. Наиболее важные из них hostvars, group_names, и groups. Пользователи не должны использовать эти имена сами, поскольку они зарезервированы. environment также зарезервировано.

и

groups это список всех групп (и хостов) в инвентаре. Это можно использовать для перечисления всех хостов в группе.

Просто переименуйте свою переменную, и она должна работать. В общем случае рекомендуется ставить перед всеми переменными роли префикс имени роли. Это становится более важным, если вы используете сторонние роли, например от Ansible Galaxy, чтобы избежать конфликтов. Так что вместо groups вы могли бы использовать myrole_groups и можете быть уверены, что конфликтов никогда не будет.