在Ansible剧本中运行角色的子任务会打破相对路径

时间:2018-09-19 12:51:54

标签: ansible ansible-role

我正在寻找一种从项目的根源运行角色或剧本中角色的一部分的方法。

我需要它能够扮演角色的一部分,如剧本,这样我就不需要运行类似的东西(请参见下面的示例):

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

但是,我很难弄清楚如何解决相对路径问题。

问题是,如果我嵌套了include,则如果我在剧本中扮演角色的一部分,则 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

roles / role1 / tasks / main.yml:

---

- include_tasks: task1.yml    

由角色调用的任务,但也可以称为“独立”任务
角色/角色1 /任务/任务1.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'

roles / role1 / tasks / upgrade.yml:

---

- include_tasks: set_iptables.yml

是否有一种方法可以运行角色,部分角色并正确解决路径?

1 个答案:

答案 0 :(得分:1)

有一种非常简单的方法来运行角色的一部分(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