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

在Ansible剧本中运行角色的子任务会中断相对路径,ansible,ansible-role,Ansible,Ansible Role,我正在寻找一种从我的项目的根开始运行角色或剧本中包含的角色的一部分的方法 我需要它来运行角色的一部分,作为剧本,这样我就不需要运行类似的东西(参见下面的示例): 然而,我很难想出如何解决相对路径的问题 问题是,如果我有嵌套的include,那么如果我在剧本中运行角色的一部分,或者如果我运行角色本身,那么变量、模板等的路径就不再正确 . +-- plb_run_role1.yml +-- plb_upgrade.yml +-- roles +-- role1 +-- tas

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

我需要它来运行角色的一部分,作为剧本,这样我就不需要运行类似的东西(参见下面的示例):

然而,我很难想出如何解决相对路径的问题

问题是,如果我有嵌套的include,那么如果我在剧本中运行角色的一部分,或者如果我运行角色本身,那么变量、模板等的路径就不再正确

.
+-- plb_run_role1.yml
+-- plb_upgrade.yml
+-- roles
    +-- role1
        +-- tasks
        |   +-- main.yml
        |   +-- task1.yml
        |   +-- upgrade.yml
        +-- templates
        |   +-- a-template.j2
        +-- vars
            +-- ftp-credentials.yml
运行完整角色1的剧本。 plb_运行角色1.yml:

#!/usr/bin/env ansible-playbook

---

- hosts: appservers
  roles:
    - role: role1
Playbook只运行角色1的任务。 plb_upgrade.yml:

#!/usr/bin/env ansible-playbook

---

- import_playbook: roles/role1/tasks/upgrade.yml
角色/role1/tasks/main.yml:

---

- include_tasks: task1.yml    
由角色调用的任务,但也可以称为“独立任务”
角色/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'
角色/role1/tasks/upgrade.yml:

---

- include_tasks: set_iptables.yml

是否有方法运行角色的一部分并正确解析路径

有一种非常简单的方法来运行角色的一部分(ansible 2.4+)

import\u角色
任务可以从角色执行特定的任务列表:

- name: Run foo from role bar
  import_role:
    name: bar
    tasks_from: foo
角色“bar”应具有要执行的“tasks/foo.yaml”


请参阅导入角色描述中的更多详细信息:

您的意思是:foo的任务吗?是的,已修复。谢谢
- name: Run foo from role bar
  import_role:
    name: bar
    tasks_from: foo