[内容] Ansible 魔法变量

注意:

在使用 Ansible 魔法变量之前,要先安装 Ansible、添加被 Ansible 管理的主机,并且需要 root 权限

正文:

内容一:Ansible 常用魔法变量

1) inventory_hostname

显示服务器名


2) group_names

显示服务器所在组


3) groups

显示服务器所在组,以及组里的所有服务器


4) hostvars

显示所有相关信息

内容二:Ansible 魔法变量的使用

2.1 在命令行使用魔法变量

2.1.1 魔法变量的使用格式
# ansible <Ansible server name or Ansible group name> -m debug -a var=<Ansible magic variable name>
2.1.2 魔法变量的使用案例
2.1.2.1 显示所有魔法变量
# ansible -m debug -a var=hostvars all

(补充:这里以显示所有服务器上的所有魔法变量为例)

2.1.2.2 显示某 1 个魔法变量
# ansible -m debug -a var=inventory_hostname all

(补充:这里以显示所有服务器上的 inventory_hostname 魔法变量为例)

2.2 在 Ansible Playbook 使用魔法变量

2.2.1 在 Ansible Playbook 的变量中使用魔法变量
# vim test.yml
---
- name: test
  hosts: all
  vars:
    server_all:
    - server_name: IP_ADDRESS
      server_cont: "{{ ansible_default_ipv4.address }}"
    - server_name: HOST_NAME
      server_cont: "{{ inventory_hostname }}"
  tasks:
......


补充:这里以
1) 在 test.yml 中,
2) 创建 1 个名为 test,
3) 在所有服务器上执行,
4) 创建名为 server_all 的变量数组,
5) 里面有名为 IP_ADDRESS 的 IP 地址事实变量和名为 HOST_NAME 的服务器名称版本事实变量,
的 playbook 为例

2.2.2 在 Ansible Playbook 的条件判断 when 中使用魔法变量
2.2.2.1 案例一:使用 1 个魔法变量
# vim test.yml

添加以下内容:

......
when: "'test' in group_names"
......

(补充:这里以在 test.yml 中, test 为服务器的所属组为条件判断为例)

2.2.2.2 案例二:使用 2 个魔法变量
# vim test.yml

添加以下内容:

......
when: inventory_hostname in groups.test
......

(补充:这里以在 test.yml 中,服务器名在 test 组中为条件判断为例)

2.3 在 JSON 文档上使用魔法变量

2.3.1 在 JSON 文档上使用魔法变量
# vim hosts.j2

创建以下内容:

{% for host in groups['all'] %}
{{ hostvars[host]['ansible_facts']['hostname'] }} {{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }}
{% endfor %}

(补充:这里以创建所有服务器名和 IP 地址对应的关系,名为 hosts.j2 的 json 文件为例)

2.3.2 使用 JSON 文档的 Playbook
# vim test.yml

添加以下内容:

......
  - name: template
    template:
      src: hosts.j2
      dest: /root/hosts.txt
......

(补充:这里以在 test.yml 中,使用 hosts.j2 创建 /root/hosts.txt 为例)