运行 Ansible 剧本中角色的子任务打破了相对路径
Run a subtask of a role in an Ansible playbook breaks relative paths
我正在寻找一种方法来从我的项目的根目录中 运行 一个角色,或者剧本中包含的角色的一部分。
我需要它能够运行角色的一部分,作为剧本,这样我就不需要运行类似的东西(见下面的例子):
ansible-playbook roles/role1/tasks/upgrade.yml
但是,我很难弄清楚如何解决相对路径的问题。
问题是,如果我有嵌套包含,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
剧本 运行 完整的 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
角色调用的任务,但也可以调用'stand-alone'
roles/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'
roles/role1/tasks/upgrade.yml:
---
- include_tasks: set_iptables.yml
有没有办法 运行 角色的一部分并正确解析路径?
有一种非常简单的方法可以运行角色的一部分(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
我正在寻找一种方法来从我的项目的根目录中 运行 一个角色,或者剧本中包含的角色的一部分。
我需要它能够运行角色的一部分,作为剧本,这样我就不需要运行类似的东西(见下面的例子):
ansible-playbook roles/role1/tasks/upgrade.yml
但是,我很难弄清楚如何解决相对路径的问题。
问题是,如果我有嵌套包含,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
剧本 运行 完整的 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
角色调用的任务,但也可以调用'stand-alone'
roles/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'
roles/role1/tasks/upgrade.yml:
---
- include_tasks: set_iptables.yml
有没有办法 运行 角色的一部分并正确解析路径?
有一种非常简单的方法可以运行角色的一部分(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