我有一个问题困扰了我好久,却找不到合适的方法来解决它。我读了所有能找到的文档,但还是找不到令人满意的答案。
考虑一下我的情况:我有几个 Ansible 角色,它们设置了 Web 应用程序(经典 LAMP 堆栈)。根据我是否要使用自签名证书或来自 LetsEncrypt 的有效证书,我希望拉取并运行一个角色作为依赖项,然后从 LetsEncrypt 获取证书。
我过去所做的是这样的,它完成了以下工作:
dependencies:
- { role: thorian93.ansible_role_certbot, when: nextcloud_create_self_signed_cert == "false" }
问题是:Ansible Galaxy 不支持这种语法并拒绝导入。
阅读文档后,我将语法更改为以下内容:
dependencies:
- name: thorian93.ansible_role_certbot
version: master
这种语法(当然还有其他语法)可以工作并导入,但您可能已经发现了我的问题:条件消失了。
很简单:有人能指出一个可能的解决方案吗?或者这根本不可能吗?
答案1
问:“根据我是否想要使用自签名证书或来自 LetsEncrypt 的有效证书,我想要提取一个角色并将其作为依赖项运行,...“
答:创建发行者和所需角色的字典。根据发行者安装并包含角色。例如
- hosts: all
vars:
my_roles_path: "$HOME/.ansible/roles"
my_roles:
Let's Encrypt Authority X3: [role1, role2, role3]
default: [role91, role92, role93]
tasks:
- command:
cmd: "ansible-galaxy install {{ item }}"
creates: "{{ my_roles_path }}/{{ item }}"
loop: "{{ my_roles[issuer_CN|default('default')] }}"
delegate_to: localhost
- include_role:
name: "{{ item }}"
loop: "{{ my_roles[issuer_CN|default('default')] }}"
(未经测试)