我认为问题在于您需要正确设置相对路径。Ansible 首先应用相对于被调用 playbooks 目录的给定路径,然后查看当前工作路径(您正在执行ansible-playbook
命令的路径)并最后签入,因此您可以使用or/etc/ansible/roles
代替{ role: java/java_role1 }
您的 dir 结构。另一种选择是配置 ansible 寻找角色的路径。为此,您可以按照Ansible 文档中的说明设置项目内部。{ role: ../../roles/java/java_role1 }
{ role: roles/java/java_role1 }
roles_path
ansible.cfg
根据您的示例:
目录树:
ansible/
├── hosts
│ └── dev
├── plays
│ └── java_plays
│ └── java.yml
└── roles
├── java
│ └── java_role1
│ └── tasks
│ └── main.yml
└── role1
└── tasks
└── main.yml
为了测试它,该剧将包括java_role1
和role1
。
播放/java_plays/java.yml:
---
- name: deploy java stuff
hosts: java
roles:
- { role: roles/role1 }
- { role: roles/java/java_role1 }
出于测试目的,这些角色只需打印一个调试消息。
角色1/tasks/main.yml:
---
- debug: msg="Inside role1"
dev
hosts 文件只是将 localhost 设置为组java
。现在我可以使用剧本了:
fishi@zeus:~/workspace/ansible$ ansible-playbook -i hosts/dev plays/java_plays/java.yml
PLAY [deploy java stuff] *******************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [role1 : debug] ***********************************************
ok: [localhost] => {
"msg": "Inside role1"
}
TASK [java_role1 : debug] *************************************
ok: [localhost] => {
"msg": "Inside java_role1"
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
现在,当您使用时执行相同操作{ role: ../../roles/java/java_role1 }
,括号{ role: ../../roles/role1 }
内的日志输出TASK
将显示整个相对路径,而不仅仅是角色名称:
fishi@zeus:~/workspace/ansible$ ansible-playbook -i hosts/dev plays/java_plays/java.yml
PLAY [deploy java stuff] *******************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [../../roles/role1 : debug] ***********************************************
ok: [localhost] => {
"msg": "Inside role1"
}
TASK [../../roles/java/java_role1 : debug] *************************************
ok: [localhost] => {
"msg": "Inside java_role1"
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0