我正在整理一个剧本,它将在Ansible清单中的各个组中部署本地事实脚本,并且我将能够使用正在处理的组名作为任务本身中的变量。对于此示例,假设我的Ansible机器上具有传统的Ansible角色目录结构,并且在“文件”目录下的子目录名为“ 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”的值,对于数据库组。这样,我不必复制和粘贴此任务,也不必为每个组分配自定义变量。任何有关如何完成此操作的建议将不胜感激。
答案 0 :(得分:0)
您可以使用组变量来实现此目的,可以在清单文件中指定,也可以在单独的var='a/b/c/d'
echo "${var//\//\\/}"
文件中指定-请参见https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
请注意,尽管在运行剧本时这些组变量被压缩为主机变量。在多个组中列出的主机将根据优先级顺序使用变量