这是我为单个主机提出的
- 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
我怎样才能让这更干? 将它传递给一个主机名,并为variables返回true或false。
编辑:更多信息,使其更清楚。 它已经正常工作。
我希望在不同的剧本中使用上面的代码片段,而不需要每次复制和粘贴代码片段。
我在不同的邮件和webconfiguration文件中使用了variablesuse_letsencrypt,并且想要说我正在为example.com设置一个configuration,我是否拥有一个证书。
好。 所以我四处游玩,阅读更多的文档,我find了答案。
您可以将上面的代码片段放在自己的angular色中,并在每次需要时join。
- name: Set use_letsencrypt include_role: name: has_letsencrypt vars: hostname: example.com
所以它就像一个模块,你只是传递一个变种。 我现在可以在不同的剧本中多次使用该片段。
我不确定我是否理解你的权利。
我期望发布的代码只是一个完整的手册的剪辑。
为了暂时传递variables,你可以使用-e参数的剧本:
-e EXTRA_VARS, --extra-vars=EXTRA_VARS set additional variables as key=value or YAML/JSON, if filename prepend with @
所以你会运行一个类似以下的剧本:
ansible-playbook -e "hostname=YourHostname" your.yaml
而且,如果您不想在playbook / role中指定的所有节点上运行,则也可以从命令行限制它。 使用参数-l:
-l SUBSET, --limit=SUBSET further limit selected hosts to an additional pattern
命令将是:
ansible-playbook -e "hostname=YourHostname" -l YourHostname your.yaml
如果你想要得到本地的hosname,可以通过setup模块获得。 托盘使用{{ansible_hostname}}而不是您的{{主机名}}。
如果您想查看安装模块提供的完整variables列表,请运行:
ansible -m setup <your host>