Ansible 变量

Ansible 变量

变量定义的方式

命令行定义变量
在play文件定义变量
在主机清单里定义变量

变量的优先级

命令行 > playbook文件 > Inventory文件

如何定义变量

playbook中定义变量

playbook变量可以通过多种方式进行定义,最简单的方式就是在playbook的开头通过vars进行定义。

- hosts: web_group
  vars:
    - pkg: nginx
    - pkg2: tree
  tasks:
    - name: Create File
      file:
        path: /root/{{ pkg }}
        state: touch
    - name: Install {{ pkg2 }}
      yum:
        name: "{{ pkg2 }}"
        state: present

vars_file中定义变量

在playbook中使用vars定义变量,有一个缺陷,就是其他的playbook无法使用该变量。所以我们可以
采取第二种定义变量的方式,在vars_file中定义变量。

[root@m01 ansible]# cat bianliang.yml
pkg: httpd
pkg2: tree
pkg3: mariadb-server

[root@m01 ansible]# vim test_vars.yml
- hosts: web_group
  vars_files: /root/ansible/bianliang.yml
  tasks:
    - name: Create File
      file:
        path: /root/{{ pkg2 }}
        state: touch
    - name: Install {{ pkg2 }}
      yum:
        name: "{{ pkg2 }}"
        state: present
[root@m01 ansible]# vim bianliang.yml
pkg:
  - httpd
  - tree
  - mariadb-server
## 内置变量
- hosts: web_group
  vars_files: /root/ansible/bianliang.yml
  tasks:
    - name: Create File
      file:
      path: /root/{{ ansible_fqdn }}_{{ ansible_default_ipv4.address }}_{{ansible_memtotal_mb }}
      state: touch

inventory定义变量

注意:在Inventory中定义变量,主机的变量要高于主机组的变量,所以该方法不推荐使用,容易将环境弄乱。

1.命令行
2.playbook
	- vars_file
	- vars
3.主机清单
	- host_vars
	- group_vars
	- inv.host
	- inv.group

官方推荐的变量定义位置

## 1.创建两个目录
group_vars
host_vars

## 2.测试主机清单优先级

/etc/ansible/hosts

[web_group:vars]
filename=inventory_webgroup

[web01:vars]
filename=inventory_web01

[web02:vars]
filename=inventory_web02

[web03:vars]
filename=inventory_web03

hosts_vars

[root@m01 host_vars]# cat ./*

web01
filename: web01

web02
filename: web02

web03
filename: web03

[root@m01 group_vars]# vim web_group
filename: web_group

变量注册

如上执行结果可见,当我们使用shell模块执行ls -l /时,ansible给我们返回的只有changed我们无法看到执行之后的
结果,所以此时我们需要使用到变量注册

#编辑playbook

[root@m01 ~]# vim register.yml
- hosts: web_group
  tasks:
    - name: Test Register Vars
      shell: "ls -l /"
      register: list_dir
    - name: Return Result
      debug:
      msg: "{{ list_dir }}"
	  
#查看执行结果

[root@m01 ~]# ansible-playbook register.yml

PLAY [web_group]
TASK [Gathering Facts]
*************************************************************************************
ok: [web01] ##后面一团乱
ok: [web02] ##后面一团乱
TASK [Test Register Vars]
*************************************************************************************
changed: [web01]
changed: [web02]
TASK [Return Result]
************************************************************************************
ok: [web01]
ok: [web02]
	}
}
PLAY RECAP
*************************************************************************************
web01 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

web02 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

#只输出自己想要的内容

[root@m01 ~]# vim register.yml
- hosts: web_group
  tasks:
    - name: Test Register Vars
      shell: "ls -l /"
      register: list_dir
    - name: Return Result
      debug:
      msg: "{{ list_dir.stdout_lines }}"
	  
#查看结果
[root@m01 ~]# ansible-playbook register.yml
PLAY [web_group]
*************************************************************************************
TASK [Gathering Facts]
*************************************************************************************
ok: [web02]
ok: [web01]

TASK [Test Register Vars]
*************************************************************************************
changed: [web01]
changed: [web02]

TASK [Return Result]
*************************************************************************************

ok: [web01] => {
"msg": [
"总用量 28",
"lrwxrwxrwx. 1 root root 7 3月 9 2019 bin -> usr/bin",
"dr-xr-xr-x. 5 root root 4096 3月 9 2019 boot",
"drwxr-xr-x. 20 root root 3280 9月 8 12:25 dev",
"drwxr-xr-x. 80 root root 8192 9月 10 20:52 etc",
"drwxr-xr-x. 5 root root 41 9月 8 16:22 home",
"lrwxrwxrwx. 1 root root 7 3月 9 2019 lib -> usr/lib",
"lrwxrwxrwx. 1 root root 9 3月 9 2019 lib64 -> usr/lib64",
"drwxr-xr-x. 2 root root 6 4月 11 2018 media",
"drwxr-xr-x. 2 root root 6 4月 11 2018 mnt",
"drwxr-xr-x. 2 www www 6 9月 10 15:31 opt",
"dr-xr-xr-x. 128 root root 0 9月 8 12:25 proc",
"dr-xr-x---. 9 root root 4096 9月 10 21:16 root",
"drwxr-xr-x. 25 root root 740 9月 10 20:52 run",
"lrwxrwxrwx. 1 root root 8 3月 9 2019 sbin -> usr/sbin",
"drwxr-xr-x. 2 root root 6 4月 11 2018 srv",
"dr-xr-xr-x. 13 root root 0 9月 8 12:25 sys",
"drwxrwxrwt. 15 root root 4096 9月 16 11:54 tmp",
"drwxr-xr-x. 13 root root 155 3月 9 2019 usr",
"drwxr-xr-x. 21 root root 4096 9月 10 20:52 var"
]
}
ok: [web02] => {
"msg": [
"总用量 24",
"lrwxrwxrwx. 1 root root 7 3月 9 2019 bin -> usr/bin",
"dr-xr-xr-x. 5 root root 4096 3月 9 2019 boot",
"drwxr-xr-x. 20 root root 3260 9月 10 09:47 dev",
"drwxr-xr-x. 80 root root 8192 9月 10 20:52 etc",
"drwxr-xr-x. 5 root root 41 9月 8 16:22 home",
"lrwxrwxrwx. 1 root root 7 3月 9 2019 lib -> usr/lib",
"lrwxrwxrwx. 1 root root 9 3月 9 2019 lib64 -> usr/lib64",
"drwxr-xr-x. 2 root root 6 4月 11 2018 media",
"drwxr-xr-x. 2 root root 6 4月 11 2018 mnt",
"drwxr-xr-x. 2 www www 6 9月 10 15:31 opt",
"dr-xr-xr-x. 128 root root 0 8月 15 15:10 proc",
"dr-xr-x---. 6 root root 180 9月 10 21:16 root",
"drwxr-xr-x. 25 root root 740 9月 10 20:52 run",
"lrwxrwxrwx. 1 root root 8 3月 9 2019 sbin -> usr/sbin",
"drwxr-xr-x. 2 root root 6 4月 11 2018 srv",
"dr-xr-xr-x. 13 root root 0 8月 15 15:10 sys",
"drwxrwxrwt. 14 root root 4096 9月 16 11:54 tmp",
"drwxr-xr-x. 13 root root 155 3月 9 2019 usr",
"drwxr-xr-x. 21 root root 4096 9月 10 20:52 var"
]
}
PLAY RECAP
************************************************************************************

web01 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

web02 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

---------------------------------------debug模块常用参数-----------------------------------------

msg:                         #调试输出的消息
var:                         #将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity:                   #debug的级别(默认是0级,全部显示)

vim test_shell.yml
- hosts: web_group
  tasks:
    - name: xxx
      shell: ‘ls -l /etc/passwd /etc/shadow‘
      register: suibian
    - name: get result
      debug:
      msg: "{{ suibian.stdout_lines.1 }}"
	  
[root@m01 ~]# vim test_shell.yml
- hosts: web_group
  tasks:
    - name: ifconfig
      shell: ‘ifconfig‘
      register: suibian
    - name: get result
      debug:
      msg:
        - "{{ suibian.stdout_lines.0 }}"
        - "{{ suibian.stdout_lines.1 }}"
        - "{{ suibian.stdout_lines.2 }}"
        - "{{ suibian.stdout_lines.3 }}"
        - "{{ suibian.stdout_lines.4 }}"
        - "{{ suibian.stdout_lines.5 }}"
        - "{{ suibian.stdout_lines.6 }}"
        - "{{ suibian.stdout_lines.7 }}"
		
- hosts: web_group
  tasks:
    - name: ifconfig
      shell: ‘ifconfig‘
      register: suibian
    - name: get result
      debug:
      msg: "{{ suibian.stdout_lines[0:7] }}"
	  
- hosts: web_group
  tasks:
    - name: ifconfig
      shell: ‘ifconfig‘
      register: suibian
    - name: get result
      debug:
      msg: "{{ suibian.stdout_lines[:7] }}"

层级定义变量

lnmp:
  pkg:
    web: nginx
    db: mariadb-server
    php: php-fpm
	
- hosts: web01_zls
  tasks:
    - name: Install {{ lnmp.pkg.db }}
      yum:
      name: "{{ lnmp.pkg.db }}"
      state: present

facts缓存

## 关闭facts缓存(在未用到系统变量时关闭,可提高运行速度)
- hosts: web01_zls
  gather_facts: no
  tasks:
    - name: Install {{ lnmp.pkg.db }}
      yum:
        name: "{{ lnmp.pkg.db }}"
        state: present

Ansible 变量

上一篇:剑指-30:包含min函数的栈


下一篇:Windows程序以特定用户身份运行