gpt4 book ai didi

Ansible:剧本在角色目录中的目录中调用角色

转载 作者:行者123 更新时间:2023-12-04 16:33:29 25 4
gpt4 key购买 nike

我想塑造我的 ansible 角色和剧本的目录结构。

目前我有一个目录结构。

group_vars
* all
* group-one
- group-vars.yml
- group-vault.yml
...
host_vars
- server1.yml
plays
- java_plays
* deploy_fun_java_stuff.yml
* deploy_playbook.yml
roles
- role1
- tasks
* main.yml
- handlers
- (the rest of the needed directories)
- role2
- java
- java_role1
- tasks
* main.yml
- handlers
- (the rest of the needed directories)

我希望能够调用角色 java_role1剧中 deploy_fun_java_stuff.yml
我可以打电话
 ---
- name: deploy fun java stuff
hosts: java
roles:
- { role: role1 }

但我不能打电话(我试过多种方法)。这可能吗?


 - name: deploy fun java stuff
hosts: java
roles:
- { role: java/java_role1 }


我真正想要完成的是能够按照我的角色有序地组织我的戏剧。
我最终会得到大量的角色和戏剧,我想组织它们。

我可以为每个播放目录使用单独的 ansible.cfg 文件来处理这个问题,但我无法将这些 cfg 文件添加到 ansible 塔(所以我正在寻找替代解决方案)。

最佳答案

我认为问题在于您需要正确设置相对路径。 Ansible 首先应用相对于被调用的 playbooks 目录的给定路径,然后查看当前工作路径(您正在从中执行 ansible-playbook 命令),最后检查 /etc/ansible/roles ,而不是 { role: java/java_role1 }在您的目录结构中,您可以使用 { role: ../../roles/java/java_role1 }{ role: roles/java/java_role1 } .另一种选择是配置 ansible 寻找角色的路径。为此,您可以设置 roles_path在您的项目中 ansible.cfgAnsible docs 中所述.

根据您的示例:

目录树:

ansible/
├── hosts
│   └── dev
├── plays
│   └── java_plays
│   └── java.yml
└── roles
├── java
│   └── java_role1
│   └── tasks
│   └── main.yml
└── role1
└── tasks
└── main.yml

为了测试它,该剧将包括 java_role1role1 .

播放/java_plays/java.yml:
---
- name: deploy java stuff
hosts: java
roles:
- { role: roles/role1 }
- { role: roles/java/java_role1 }

出于测试目的,这些角色只需打印调试消息。

role1/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

关于Ansible:剧本在角色目录中的目录中调用角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com