在Ansible任务中使用主机组作为变量

时间:2018-09-24 16:36:57

标签: ansible ansible-facts

我正在整理一个剧本,它将在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”的值,对于数据库组。这样,我不必复制和粘贴此任务,也不必为每个组分配自定义变量。任何有关如何完成此操作的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用组变量来实现此目的,可以在清单文件中指定,也可以在单独的var='a/b/c/d' echo "${var//\//\\/}" 文件中指定-请参见https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

请注意,尽管在运行剧本时这些组变量被压缩为主机变量。在多个组中列出的主机将根据优先级顺序使用变量