Ansible ролей, требующих других ansible ролей - PullRequest
2 голосов
/ 05 марта 2020

В моей пьесе есть следующая структура каталогов:

deploy-thing
├── README.md
├── files
│   ├── thing.service
│   └── ld.local.conf
├── main.yml
├── roles
│   ├── ansible-role-add-swap
│   │   ├── README.md
│   │   ├── defaults
│   │   │   └── main.yml
│   │   └── tasks
│   │       └── main.yml
│   ├── ansible-role-build-pkgs
│   │   └── tasks
│   │       └── main.yml
│   ├── ansible-role-deploy-other-thing
│   │   ├── README.md
│   │   ├── main.yml
│   │   ├── roles
│   │   │   ├── ansible-role-build-pkgs
│   │   │   │   └── tasks
│   │   │   │       └── main.yml
│   │   │   └── ansible-role-build-redis
│   │   │       ├── README.md
│   │   │       └── tasks
│   │   │           └── main.yml
│   │   ├── tasks
│   │   │   └── main.yml
└── vars.yml

В main.yml вызывается следующее:

  roles:
    - {role: ./roles/ansible-role-deploy-other-thing}

В ролях / ansible -role- deploy-other-thing / tasks / main.yml, называется следующее:

  - include_role:
      name: ansible-role-build-redis

При запуске это include_role вызывает следующую ошибку:

ОШИБКА! роль 'ansible -role-build-redis' не найдена в /Users/myuser/playbooks/deploy-thing/roles:/Users/myuser/.ansible/roles:/usr/share/ansible/roles:/ etc / ansible / role: / Users / myuser / playbooks / deploy-thing

Похоже, что родитель выполняет поиск только по своему пути ролей, а не по пути ролей роли, которую мы используя (ansible -role-deploy-other-thing). Как я могу заставить его искать свой собственный путь к ролям, позволяя мне развертывать роли внутри ролей?

1 Ответ

1 голос
/ 05 марта 2020

Q: «Как заставить его искать свой собственный путь к ролям, позволяя мне развертывать роли внутри ролей?»

A: Укажите путь на роли в конфигурации. См. DEFAULT_ROLES_PATH . По умолчанию

~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles

Как видно из сообщения об ошибке Ansible выполняет поиск ролей в настроенных путях плюс текущий каталог playbook

/Users/myuser/playbooks/deploy-thing/roles:
/Users/myuser/.ansible/roles:
/usr/share/ansible/roles:
/etc/ansible/roles:
/Users/myuser/playbooks/deploy-thing

У вас будет добавить каждый путь вложенных ролей в конфигурацию. Это делает идею вложенных ролей не очень практичной. Лучшая практика - сохранять роли на одном уровне. Подробнее см. В Пути поиска в Ansible.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...