Возникла неприятная проблема, которую я просто не могу понять.
Вот мой код. Если я полностью закомментирую группу и группирую переменные, все будет работать нормально. Но это как бы выплевывает ошибки ниже.
По сути, это говорит мне, что такой группы не существует. В этом примере написано 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
и можете быть уверены, что конфликтов никогда не будет.