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