这就是我想出的单一主机
- name: Check for Let's Encrypt certificate
block:
- name: Set default for variable
set_fact:
use_letsencrypt: false
- name: Get stat for cert file
stat:
path: /etc/letsencrypt/live/{{ hostname }}/cert.pem
register: certificate_file
- name: Set letsencrypt to true if certificate exists
set_fact:
use_letsencrypt: true
when: certificate_file.stat.exists
我怎样才能使这个更干燥?将主机名传递给它,它会为变量返回 true 或 false。
编辑:更多信息使其更清楚。它已经可以正常工作了。
我想将上述代码段用于不同剧本中的多个主机,而无需每次都复制和粘贴代码段。
我在不同的邮件和 Web 配置文件中使用变量 use_letsencrypt 并且想说,我正忙于为 example.com 设置配置,我是否有它的证书。
好的。因此,到处玩耍并阅读更多文档,我找到了答案。
您可以将上面的代码片段放在它自己的角色中,并在每次需要时包含它。
所以它就像一个模块,你只需传递一个 var。我现在可以在不同的剧本中多次使用该片段。
我不确定我是否理解正确。
我希望发布的代码只是完整剧本的一部分。
为了临时传递变量,可以使用 ansible-playbook 的 -e 参数:
所以你会像这样运行 ansible-playbook:
如果您不想在剧本/角色中指定的所有节点上运行,您也可以从命令行限制它。使用参数-l:
命令将是:
如果您希望 ansible 获取本地 hosname,可以通过 setup 模块获得。托盘使用 {{ ansible_hostname }} 而不是您的 {{ hostname }}。
如果您想查看 setup 模块提供的完整变量列表,只需运行: