【发布时间】:2018-09-24 16:36:56
【问题描述】:
我正在编写一个剧本,将本地事实脚本部署到我的 Ansible 清单中的各个组,并且我将能够利用正在处理的组名称作为任务本身的变量。对于这个例子,假设我在我的 Ansible 机器上有传统的 Ansible 角色目录结构,并且在“files”目录下有名为“apache”、“web”和“db”的子目录。我现在举例说明,...
---
- hosts: apache:web:db
tasks:
- name: Set facts for facts directories
set_fact:
facts_dir_local: "files/{{ group_name }}"
facts_dir_remote: "/etc/ansible/facts.d"
- name: Deploy local facts
copy:
src: "{{ item }}"
dest: "{{ facts_dir_remote }}"
owner: ansible
group: ansible
mode: 0750
with_fileglob:
- "{{ facts_dir_local }}/*.fact"
目标是让上面的{{ group_name }} 为 apache 组中的主机取值“apache”,为 web 组中的主机取值“web”,为 db 组中的主机取值“db” .这样我就不必复制和粘贴此任务并为每个组分配自定义变量。任何有关如何完成此任务的建议将不胜感激。
【问题讨论】:
-
那么,您遇到了什么问题?您的任务根本没有工作或没有按您的意愿工作?
-
@KelsonSilva 我只想让 {{ group_name }} 承担正在执行剧本的组的价值。例如,如果它当前在我的“db”组中的所有节点上工作,我希望 {{ group_name }} 成为字符串“db”
-
@KelsonSilva 我认为在我的文件目录中有不同的子目录会很方便,这样我就可以说“将所有 .fact 文件从这个目录复制到那个目录”,所以我想组织这些目录并在我的清单中以组名命名它们是个好主意(即“db”、“web”、“apache”);例如,在 files/facts 下,我们将拥有子目录 files/facts/db、files/facts/web 和 files/facts/apache,在这些子目录下,我们将拥有实际的 .fact 文件
标签: ansible ansible-facts