Запуск подзадачи роли в пьесе Ansible разрывает относительные пути - PullRequest
0 голосов
/ 19 сентября 2018

Я ищу способ запуска роли или части роли, включенной в сборник пьес, из корня моего проекта.

Что мне нужно, чтобы иметь возможность запустить частьроль, как игровую книгу, так что мне не нужно запускать что-то вроде (см. пример ниже):

ansible-playbook roles/role1/tasks/upgrade.yml

Однако мне трудно понять, как решить проблему относительногоpaths.

Проблема в том, что, если я вложил включения, путь к vars , templates и т. д. больше не является правильным, если я выполняю часть ролив пьесе, или если я сам запустите роль.

.
+-- plb_run_role1.yml
+-- plb_upgrade.yml
+-- roles
    +-- role1
        +-- tasks
        |   +-- main.yml
        |   +-- task1.yml
        |   +-- upgrade.yml
        +-- templates
        |   +-- a-template.j2
        +-- vars
            +-- ftp-credentials.yml

Playbook для запуска полной роли role1 .plb_run_role1.yml:

#!/usr/bin/env ansible-playbook

---

- hosts: appservers
  roles:
    - role: role1

Playbook для запуска только задачи с ролью role1 .plb_upgrade.yml:

#!/usr/bin/env ansible-playbook

---

- import_playbook: roles/role1/tasks/upgrade.yml

role / role1 / tasks / main.yml:

---

- include_tasks: task1.yml    

Задача, которая вызывается ролью, но может также называться автономной'
role / role1 / tasks / task1.yml

    ---             

    - include_vars: ../vars/some-vars.yml           => If I call   ./plb_upgrade.yml                
    - include_vars: some-vars.yml       => If I call   ./plb_run_role1.yml            

    - name: copy the user profile update script
      template:
        src: ../templates/a-template.j2   => If I call   ./plb_upgrade.yml                
        src: a-template.j2   => If I call   ./plb_run_role1.yml            
        dest: '/etc/a-template'

role / role1 / tasks / upgrade.yml:

---

- include_tasks: set_iptables.yml

Есть ли способ запустить роль,части роли и правильно ли решен путь?

1 Ответ

0 голосов
/ 19 сентября 2018

Существует очень простой способ запустить часть роли (ansible 2.4 +).

import_role задача может выполнить определенный список задач из роли:

- name: Run foo from role bar
  import_role:
    name: bar
    tasks_from: foo

Роль 'bar' должна иметь для запуска 'tasks / foo.yaml'.

Подробнее см. В описании import_role: https://docs.ansible.com/ansible/2.4/import_role_module.html

...