3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

简介

定义:使用固定的值去代表不固定的值,变量需要自己手动修改

为什么要使用变量

简化playbook项目的维护,使用一个固定的字符串表示一个不固定的值
比如说我们要下载包:
wget nginx-1.6.0的包,随着包版本更新,需要下载新的包,这时候需要我们将wget nginx-1.6.0.tar.gz 修改为wget nginx-{{ nginx_version }}.tar.gz。变量会用双花括号表示,内部写变量名称

定义变量:

通过playbook文件中的play进行定义,通过vars定义

定义变量:

vars:
  -v1:value1
  -v2:value2
  -v3:value3

练习

vim vars_1.yaml

- hosts: ljh 
  vars:
    - web_packages: httpd-2.4.6
    - ftp_packages: vsftpd-3.0.2
  tasks:
    - name: installed {{web_packages}} {{ ftp_packages }} packages
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

变量增加到name中可以显示详细版本号

通过inventory主机清单进行变量定义

通过定义一个变量文件,然后使用playbook进行调用

结构:

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

在当前目录创建一个vars_pub.yaml,用于存放包名

vim vars_pub.yaml

web_packages: httpd-2.4.6
ftp_packages: vsftpd-3.0.2

vim vars_1.yaml

- hosts: ljh 
  vars_files: 
    - ./vars_pub.yaml

  tasks:
    - name: installed {{web_packages}} {{ ftp_packages }} packages
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

执行结果

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

inventory清单创建

方式一(少见可以忽略):

vim /etc/ansible/hosts

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim var3.yaml

- hosts: ljh 
  tasks:
    - name: create file
      file: path=/tmp/{{ file_name }} state=touch

在/tmp下创建一个文件调用hosts文件中的名字:group_vars

执行并检测查看客户端是否生成group_vars文件:
ansible-playbook var3.yaml

客户端查看:

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

方式二:官方推荐

定义group_vars

创建两个目录
mkdir host_vars
mkdir group_vars

创建用户文件
vim group_vars/ljh

web_packages: wget
ftp_packages: tree

创建调用脚本
vim vars_4.yaml

- hosts: ljh 
  tasks:
    - name: installed {{ web_packages }} {{ ftp_packages }} packages
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present

这里的脚本不需要再加入var_files,因为系统会自动在当前目录寻找目录host_vars和group_vars,然后自动寻找下面的文件中的模块和包

检测

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

host_vars和group_vars目录下的文件名称模块匹配,如果还想使用第二个playbook需要自己重新创建file_vars,需要在hosts文件中先创建一个db清单,把原先的ljh文件复制修改名字为db,列出安装包列表

vim /etc/ansible/hosts

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim group_vars/db

web_packages: wget
ftp_packages: tree

vim vars_4.yaml

- hosts: db
  tasks:
    - name: installed {{ web_packages }} {{ ftp_packages }} packages
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

如果出现很多清单怎么办呢?
想要被共享的目录清单需要将文件名字改成all
mv group_vars/ljh group_vars/all
这样所有playbook都可以调用all里面的模块

总结:
默认情况下,groups_vars目录中文件名与hosts清单中的组名保持一致,如果在group_vars目录中创建了ljh组的变量,其他组是无法使用ljh组的变量。所以系统提供了一个特殊组,all,只需要在group_vars目录下建立一个all文件,编写好变量,所有组都可以使用

定义host_vars

类似于group_vars创建方式,在host_vars目录中创建一个文件,文件名与inventory清单中的主机名称要保持一致,如果是IP地址,则创建相同ip地址的文件即可

清单文件内容
vim /etc/ansible/hosts

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

创建列表文件
创建和ip相同的文件

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

编辑列表文件
cat 192.168.1.11

web_packages: pcre-devel
ftp_packages: zlib-devel
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

cat 192.168.1.12

这里什么都不用写,检测是否会调用group中的内容,顺便检测优先级

配置playbook

vim vars_5.yml

- hosts: 192.168.1.11
  tasks:
    - name: installed {{ web_packages }} {{ ftp_packages }} packages
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present

- hosts: 192.168.1.12
  tasks:
    - name: installed {{ web_packages }} {{ ftp_packages }} packages
      yum: 
        name:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"
        state: present

测试一下是否可以单独调用各自的配置文件

执行
ansible-playbook vars_5.yml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

总结:

host_vars 特殊的变量目录,针对单个主机进行变量
group_vars 特殊的变量目录,针对inventory主机清单中的组进行定义,对A组定义的变量 B组无法调用
group_vars/all 特殊的变量文件,可以针对所有的主机组定义变量

优先级为host_vars>group_vars

通过执行playbook时使用-e参数指定变量

vim /etc/ansible/hosts

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim vars_4.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible-playbook vars_4.yaml
可以直接对两个组进行执行

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

还可以通过命令行进行执行

vim vars_4.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

使用-e指定变量host就是ljh

ansible-playbook vars_4.yaml -e "host=ljh"

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

指定变量host是db就执行db

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

如果在命令行重新指定变量,则会按照命令行为优先级最高规则执行

ansible-playbook vars_5.yaml -e web_packages=lrzsz

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

测试优先级

测试思路:
在playbook中定义vars变量
在playbook中定义vars_files变量,在当前目录中创建列表
在host_vars中定义变量
在group_vars中定义变量
通过执行命令传递变量

vim ceshi.yaml

- hosts: ljh 
  tasks:
    - name: create variables {{ file_name }}
      file: path=/tmp/{{ file_name }} state=touch

playbook
vim ceshi.yaml

- hosts: ljh 
#操作1在palybook中直接定义vars变量
  vars:
    file_name: play_vars
#操作2在playbook中定义vars_files变量,在当前目录中创建列表
  vars_files: ./vars_pub.yaml
  tasks:

    - name: create variables {{ file_name }}
      file: path=/tmp/{{ file_name }} state=touch

修改文件:
vim vars_pub.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim host_vars/192.168.1.11

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim group_vars/ljh

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim group_vars/all

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

测试

外置wz_file优先级最高

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

去掉外置直接执行

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

可知当前目录创建列表优先级第二

注释掉vars_files指定的内容继续执行

vim ceshi.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible-playbook ceshi.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

可知playbook中直接定义的play_vars优先级为第三

注释掉vars继续执行

vim ceshi.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible-playbook ceshi.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

删掉hosts_vars_gf继续执行

vim host_vars/192.168.1.11

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible-playbook ceshi.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

优先级继续降到group_vars

删除继续执行

vim group_vars/ljh

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible-playbook ceshi.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

总结:外置传参>playbook(vars_files>vars)>inventory(host_vars/host>group_vars/group_name>group_vars/all)

变量注册

vim vars_6.yaml

- hosts: ljh 
  tasks:
    - name: yum -y install httpd
      yum: name=httpd state=present

    - name: systemctl start httpd
      service: name=httpd state=started

    - name: check httpd server
      shell: ps aux|grep httpd
      register: check_httpd

    - name: output variables
      debug:
         msg: "{{check_httpd}}"
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

输出结果

ansible-playbook vars_6.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

修改配置文件,加入.stdout_lines

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

一般更常见的是加入stdout

重新执行

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

修改其他输出结果配置

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

总结:

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

facts变量

采集变量

setup 模块用来采集被控端状态指标,比如:IP地址,主机名称,cpu信息,内存等

ansible 192.168.1.11 -m setup > facts.txt

cat facts.txt

ip信息

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

系统版本信息

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

网卡信息

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

默认情况下facts变量名都已经预先定义好了,只需要采集被控端的信息,然后传递至facts变量即可

关闭方式

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

再执行汇报错,找不到变量

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

练习:获取主机名和IP地址

vim 1.yaml

- hosts: ljh 
  tasks:
    - name: output variables ansible facts
      debug:
        msg:  IPv4 address "{{ ansible_fqdn }}" is "{{ ansible_default_ipv4.address }}"

ansible-playbook 1.yaml

fqdn为主机名

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

输出

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

其他练习:

1通过facts变量检查被控端硬件CPU信息,而是生成不同Nginx配置文件

很多情况下,我们希望通过不同的服务器中的不同cpu修改不同配置文件中的参数实现最适合的参数发挥,所以需要在不同服务器中的相同配置文件配置不同的参数信息

2通过facts变量检测被控端主机名称信息,从而生成不同zabbix配置文件

简介:vim /etc/zabbix/zabbix_agentd.conf

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

zabbix server把配置文件拷贝到ansible server去

scp /etc/zabbix/zabbix_agentd.conf 192.168.1.10:/root/zabbix_agentd.conf.j2

vim 1.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

这里注意:
copy:将文件原样拷贝
template:会将拷贝的文件进行变量解析,然后再分发

受控端检测是否成功:

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

3通过facts变量检查被控制端内存状态信息,从而生成不同memcached配置文件

memcached了解

准备两台物理内存不一样的虚拟机:
192.168.1.11:2G
192.168.1.12:1G

控制端下载memcached
yum -y install memcached
vim /etc/sysconfig/memcached

开启memcached
systemctl start memcached

检测
netstat -anput | grep 11211

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

获取内存信息
ansible ljh -m setup | grep mem

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

配置

vim 1.yaml

- hosts: ljh 
  tasks:
    - name: yum -y install memcached
      yum: name=memcached state=present
    
    - name: configure memcached server
      template: src=./memcached.j2 dest=/etc/sysconfig/memcached

    - name: service start memcached
      service: name=memcached state=started enabled=yes

    - name: check memcached server
      shell: ps aux | grep memcached
      register: check_mem

    - name: debug memcached variables
      debug:
        msg: "{{ check_mem.stdout_lines }}"

cp /etc/sysconfig/memcached ./memcached.j2

vim ./memcached.j2

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

说明:
/ 除法
// 除法,取整

ansible-playbook 1.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

测试

cat /etc/sysconfig/memcached

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

4:修改memcached最大连接数和端口号

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

5:通过facts变量渲染出不同主机nginx配置文件

work_process和cpu核心数保持一致即可
yum -y install nginx
cp -a /etc/nginx/nginx.conf ./nginx.conf.j2

ansible ljh -m setup | grep -C 3 cores

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim nginx.conf.j2

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

vim 1.yaml

- hosts: ljh 
  tasks:
    - name: yum -y install nginx
      yum: name=nginx state=present
    
    - name: configure nginx server
      template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf

    - name: service start nginx
      service: name=nginx state=started enabled=yes

    - name: check nginx server
      shell: ps aux | grep nginx
      register: check_cpu

    - name: debug nginx variables
      debug:
        msg: "{{ check_cpu.stdout_lines }}"

ansible-playbook 1.yaml

6:批量修改服务器主机名称(hostname)8-10位随机数

随机数生成方式:

echo $RANDOM|md5sum| cut -c 5-12

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible-playbook 1.yaml

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

输出内容太多了,修改一下

- hosts: ljh
  tasks:
    - name: shell
      shell: echo $RANDOM | md5sum | cut -c 5-12
      register: get_random

    - name: debug
      debug:
        msg: "{{  get_random.stdout_lines  }}"
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

输出结果

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

成功修改

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

7:批量修改主机名称,要求web_IP

vim 1.yaml

- hosts: ljh 
  tasks:

    - name: get facts
      debug:
        msg: "{{ ansible_default_ipv4.address }}"

    - name: hostname change
      hostname: name=web_{{ ansible_default_ipv4.address }}
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

内置主机变量

所谓内置变量其实就是ansible.cfg配置文件中的选项,在其前加上 ansible_ 即成为内置变量。当然 内置变拥有比ansible.cfg中选项更高的优先级,而且针对不同的主机,可以定义不同的值。 之所以叫内置主机变量,其实就是这些变量一般写在inventory的主机或主机组中。

# 一般连接
ansible_host #用于指定被管理的主机的真实IP
ansible_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_user #ssh连接时默认使用的用户名
# 特定ssh连接
ansible_connection #SSH连接的类型:local, ssh, paramiko,在ansible 1.2 之前默认是
paramiko,后来智能选择,优先使用基于ControlPersist的ssh(如果支持的话)
ansible_ssh_pass #ssh连接时的密码
ansible_ssh_private_key_file #秘钥文件路径,如果不想使用ssh‐agent管理秘钥文件时可以使用此选项
ansible_ssh_executable #如果ssh指令不在默认路径当中,可以使用该变量来定义其路径
# 特权升级
ansible_become #相当于ansible_sudo或者ansible_su,允许强制特权升级
ansible_become_user #通过特权升级到的用户,相当于ansible_sudo_user或者ansible_su_user
ansible_become_pass # 提升特权时,如果需要密码的话,可以通过该变量指定,相当于
ansible_sudo_pass或者ansible_su_pass
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
# 远程主机环境参数
ansible_shell_executable # 设置目标机上使用的shell,默认为/bin/sh
ansible_python_interpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指
定ruby 、perl 的路径
ansible_*_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以
是ruby或才perl等其他语

 示例: 定义server1主机的ansible_host变量,以及定义主机组[init_server]的组变量

[init_server]
server1 ansible_host=192.168.1.10
192.168.1.11
192.168.1.12
 
[init_server:vars]
ansible_ssh_pass=123
#ansible_ask_pass=False
#ansible_user=root

魔法变量

1 hostvars 2 group(groups、group_names)3 inventory(inventory_hostname、inventory_dir、inventory_file)

Ansible默认会提供一些内置的变量以实现一些特定的功能,我们称之为魔法变量。

1.    hostvars

获取inventory中定义的所有主机的相关变量。

例如:hosts文件如下

[dev]
node1
[test]
node2
[prod]
node3
node4
[balancers]
node5
[webservers:children]
prod

playbook将会在获取到所有主机上的相关变量

hostvar.yaml

- hosts: prod
  gather_facts: no
 
  tasks: 
    - name: debug
      debug:
        msg:
          - "{{ hostvars }}"
3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

2.    inventory_hostname 

       inventory_hostname是Ansible所识别的当前正在运行task的主机的主机名。如果在inventory里定 义过别名,那么这里就是那个别名,如果inventory包含如下一行:

node1    ansible_ssh_host=192.168.1.10

 则 inventory_hostname 即为 node1

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

示例1: 利用 hostvars 和 inventory_hostname 变量,可以输出与当前主机相关联的所有变量

- hosts: prod
  gather_facts: no 
  tasks: 
    - name: debug
      debug:
        msg:
          - "{{ hostvars[inventory_hostname] }}"

输出结果:

ok: [node3] => {
    "msg": [
        {
            "ansible_check_mode": false,
            "ansible_diff_mode": false,
            "ansible_facts": {},
            "ansible_forks": 5,
            "ansible_inventory_sources": [
                "/home/greg/ansible/inventory"
            ],
            "ansible_playbook_python": "/usr/bin/python2",
            "ansible_run_tags": [
                "all"
            ],
            "ansible_skip_tags": [],
            "ansible_verbosity": 0,
            "ansible_version": {
                "full": "2.9.27",
                "major": 2,
                "minor": 9,
                "revision": 27,
                "string": "2.9.27"
            },
            "group_names": [ # 主机所属主机组
                "prod",
                "webservers"
            ],
            "groups": { # 所有主机组的列表,枚举主机组中的所有主机
                "all": [
                    "node5",
                    "node1",
                    "node2",
                    "node3",
                    "node4"
                ],
                "balancers": [
                    "node5"
                ],
                "dev": [
                    "node1"
                ],
                "prod": [
                    "node3",
                    "node4"
                ],
                "test": [
                    "node2"
                ],
                "ungrouped": [],
                "webservers": [
                    "node3",
                    "node4"
                ]
            },
            "inventory_dir": "/home/greg/ansible", # 机清单所在目录
            "inventory_file": "/home/greg/ansible/inventory", # 主机清单文件
            "inventory_hostname": "node3", # Ansible所识别的当前正在运行task的主机的主机名
            "inventory_hostname_short": "node3",
            "playbook_dir": "/home/greg/ansible"
        }
    ]
}
ok: [node4] => {
    "msg": [
        {
            "ansible_check_mode": false,
            "ansible_diff_mode": false,
            "ansible_facts": {},
            "ansible_forks": 5,
            "ansible_inventory_sources": [
                "/home/greg/ansible/inventory"
            ],
            "ansible_playbook_python": "/usr/bin/python2",
            "ansible_run_tags": [
                "all"
            ],
            "ansible_skip_tags": [],
            "ansible_verbosity": 0,
            "ansible_version": {
                "full": "2.9.27",
                "major": 2,
                "minor": 9,
                "revision": 27,
                "string": "2.9.27"
            },
            "group_names": [
                "prod",
                "webservers"
            ],
            "groups": {
                "all": [
                    "node5",
                    "node1",
                    "node2",
                    "node3",
                    "node4"
                ],
                "balancers": [
                    "node5"
                ],
                "dev": [
                    "node1"
                ],
                "prod": [
                    "node3",
                    "node4"
                ],
                "test": [
                    "node2"
                ],
                "ungrouped": [],
                "webservers": [
                    "node3",
                    "node4"
                ]
            },
            "inventory_dir": "/home/greg/ansible",
            "inventory_file": "/home/greg/ansible/inventory",
            "inventory_hostname": "node4",
            "inventory_hostname_short": "node4",
            "playbook_dir": "/home/greg/ansible"
        }
    ]
}

3.    group_names

group_names返回的是主机所属主机组,如果该主机在多个组中,则返回多个组,如果它不在组 中,则返回ungrouped这个特殊组。

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

ansible node3 -m debug -a "msg='{{ group_names }}'"

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

4.    groups

groups是inventory中所有主机组的列表,可用于枚举主机组中的所有主机。

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

5.    play_hosts

当前playbook会在哪些hosts上运行。

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

6.    inventory_dir

机清单所在目录

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

7.    inventory_file

主机清单文件

3、ansible变量(定义变量方式和优先级、变量注册、facts 变量、内置主机变量、魔法变量)

发布者:LJH,转发请注明出处:https://www.ljh.cool/33535.html

(0)
上一篇 2022年9月26日 上午2:37
下一篇 2022年12月29日 上午2:52

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注