Ansible 条件角色依赖关系

Ansible 条件角色依赖关系

我有一个问题困扰了我好久,却找不到合适的方法来解决它。我读了所有能找到的文档,但还是找不到令人满意的答案。

考虑一下我的情况:我有几个 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')] }}"

(未经测试)

相关内容