ansible: получение ролей из playbook в подпапке
У меня есть это дерево:
├── plays
│ ├── ansible.cfg
│ ├── playbook_01.yml
│ ├── playbook_02.yml
│ └── playbook_03.yml
├── README.rst
├── roles
│ ├── role_A
│ │ ├── files
│ │ └── tasks
│ │ └── main.yml
│ └── role_B
│ ├── files
│ └── tasks
│ └── main.yml
├── serverlist
│ ├── client1_serverlist_prod
│ ├── client1_serverlist_test
│ ├── client1_serverlist_train
│ ├── client2_serverlist_prod
│ ├── client2_serverlist_test
│ └── client2_serverlist_train
└── vagrant
└── Vagrantfile
С ансиблем.cfg в папке play::
$ cat plays/ansible.cfg
[defaults]
roles_path=../roles/
$
Я звоню из вагранта ансибля.playbook::
$ grep playbook vagrant/Vagrantfile
ansible.playbook = "../plays/playbook_01.yml
На playbook_01.yml::
$ cat plays/playbook_01.yml
- hosts: vagrant
vars:
user: fox
home: /home/fox
roles:
- role_B
С role_B::
$ cat roles/role_B/tasks/main.yml
---
- name: Create user group
group: name={{ user }} state=present
- name: Create home directory for user
file: state=directory path={{ home }} group=www-data owner={{ user }}
$
Но ansible, когда только пошел посмотреть роли в папке play, я получаю эту ошибку::
vagrant$ vagrant provision
==> vagrant: Running provisioner: ansible...
PYTHONUNBUFFERED=1 ANSIBLE_HOST_KEY_CHECKING=false ANSIBLE_FORCE_COLOR=true
ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -o
ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook
--user=vagrant --connection=ssh --timeout=30 --limit='vagrant'
--inventory-file=/home/luis/lab/sandbox/akd-iac/stack/vagrant/.vagrant/provisioners/ansible/inventory
--sudo -vvvv ../plays/playbook_01.yml
ERROR: cannot find role in
~/stack/plays/roles/role_B or
~/stack/plays/role_B or /etc/ansible/roles/role_B
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
vagrant$
3 ответов:
Вероятно, вы можете использовать переменную
roles_path. Он указывает на папку, в которой хранятся ваши роли.
Как уже упоминалось, ваш
ansible.cfgвряд ли будет подобран ансиблем. Вы можете проверить, если ваш ансибль.cfg подбирается, устанавливая это:[defaults] roles_path = ./isnasiblegettingmycfgИ проверка вывода отладки. Анзибль.cfg ищется в :
- ANSIBLE_CONFIG (переменная окружения)
- ансибль.cfg (в текущем каталоге)
- .анзибль.cfg (в домашнем каталоге)
- / etc / ansible / ansible.cfg
Роли-это искал в директории исполняемого playbook, а также в директории roles/ относительно исполняемого playbook и roles_path. Итак, еще одно простое решение:
cd ~/stack/plays/ && ln -s ../roles
Я заставляю его работать, просто перемещая папку ролей в папку plays и удаляя play/ansible.cfg:
. ├── plays │ ├── playbook_01.yml │ ├── playbook_02.yml │ ├── playbook_03.yml │ └── roles │ ├── role_A │ │ ├── files │ │ └── tasks │ │ └── main.yml │ └── role_B │ ├── files │ └── tasks │ └── main.yml ├── README.rst ├── serverlist │ ├── client1_serverlist_prod │ ├── client1_serverlist_test │ ├── client1_serverlist_train │ ├── client2_serverlist_prod │ ├── client2_serverlist_test │ └── client2_serverlist_train └── vagrant └── VagrantfileПодробности о анзибль.конфигурация cfg, которая заставляет его работать::
Я все еще звоню из вагранта-ансибля.playbook::$ ls ~/.ansible.cfg ls: cannot access ~/.ansible.cfg: No such file or directory $ grep roles_path /etc/ansible/ansible.cfg #roles_path = /etc/ansible/roles $ echo $ANSIBLE_CONFIG $$ grep playbook vagrant/Vagrantfile ansible.playbook = "../plays/playbook_01.ymlНа playbook_01.yml::
$ cat plays/playbook_01.yml - hosts: vagrant vars: user: fox home: /home/fox roles: - role_BС role_B::
$ cat roles/role_B/tasks/main.yml --- - name: Create user group group: name={{ user }} state=present - name: Check Python version command: python --version register: pyver - name: Print version debug: msg: "Python Version: {{ pyver.stderr }}"С этой модификацией, которая работает как заклинание:
$ vagrant provision ==> vagrant: Running provisioner: ansible... PLAY [vagrant] ************************************************************ GATHERING FACTS *********************************************************** ok: [vagrant] TASK: [role_B | Create user group] **************************************** ok: [vagrant] TASK: [role_B | Check Python version] ************************************* changed: [vagrant] TASK: [role_B | Print version] ******************************************** ok: [vagrant] => { "msg": "Python Version: Python 2.7.9" } PLAY RECAP **************************************************************** vagrant : ok=4 changed=1 unreachable=0 failed=0 $Похоже, что папка ролей должна быть внутри папки playbooks lives.
Comments