在 Ansible 任务中使用主机组作为变量
Using Host Group as Variable in Ansible Task
我正在编写一个剧本,将本地事实脚本部署到我的 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" 用于数据库组中的主机。这样我就不必复制和粘贴此任务并为每个组分配自定义变量。将不胜感激关于如何实现这一点的任何建议。
您可以使用组变量来实现此目的,可以在清单文件中指定,也可以在单独的 group_vars/<group>
文件中指定 - 请参阅 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
请注意,当您 运行 剧本时,这些组变量会被压缩到宿主变量中。列在多个组中的主机将以基于优先顺序的变量结束
虽然ansible中没有group_name
变量,但有一个group_names
(复数)。那是因为任何主机都可能属于一个或多个组。
group_names
List of groups the current host is part of
在最常见的情况下,每个主机只会是一个组的一部分,因此您只需说 group_names[0]
即可获得您想要的内容。
TLDR;
使用group_names[0]
.
我正在编写一个剧本,将本地事实脚本部署到我的 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" 用于数据库组中的主机。这样我就不必复制和粘贴此任务并为每个组分配自定义变量。将不胜感激关于如何实现这一点的任何建议。
您可以使用组变量来实现此目的,可以在清单文件中指定,也可以在单独的 group_vars/<group>
文件中指定 - 请参阅 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
请注意,当您 运行 剧本时,这些组变量会被压缩到宿主变量中。列在多个组中的主机将以基于优先顺序的变量结束
虽然ansible中没有group_name
变量,但有一个group_names
(复数)。那是因为任何主机都可能属于一个或多个组。
group_names List of groups the current host is part of
在最常见的情况下,每个主机只会是一个组的一部分,因此您只需说 group_names[0]
即可获得您想要的内容。
TLDR;
使用group_names[0]
.