ansible debug 与变量
一、debug 模块
debug 调试模块:
msg: 打印自定义消息
var: 要调试的变量名,与msg 选项互斥,只能用一个;
verbosity: 一个控制调试运行时的数字,如果设置为3;
msg 的使用:
---
- name: 变量引用
hosts: host
tasks:
- name: "命令行变量引用"
debug:
msg: print param name value:{{name}}
命令行执行的结果:
root@master:/home/user1# ansible-playbook -i ansible_host -e name=lsis test2.yml
[WARNING]: Found variable using reserved name: name
PLAY [变量引用] *********************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [192.168.108.23]
ok: [192.168.108.22]
TASK [命令行变量引用] ******************************************************************************************************************************************************
ok: [192.168.108.22] => {}
MSG:
print param name value:lsis
var 变量使用
测试debug 模块的var 变量使用,需要将其在前面保存,后面在进行打印出出来;
- name: 变量引用
hosts: host
tasks:
- name: "命令行变量引用,使用msg"
debug:
msg: print param name value:{{name}}
- name: "命令行变量引用,使用var"
shell: echo "{{name}}"
register: echo_name
- debug:
var: echo_name
二、变量
1、命令行变量
如:
--- - name: 变量引用 hosts: host tasks: - name: "命令行变量引用,使用msg" debug: msg: - print param name value:{{name}} msg debug 模块的使用; - print param age value:{{age}} - name: "命令行变量引用,使用var" shell: echo "{{name}}" register: echo_name msg var 变量模块的使用; - debug: var: echo_name
命令行使用为: ansible-playbook -i ansible_host -e name=lsis -e age=20 test_var.yml
在这里的命令需要给定所有play 里面的参数;
注意:
在多个参数的时候,每个参数前面均需添加-e 参数;
2、hosts 文件中定义变量
主机变量 可称为局部变量
主机组变量 可称为全局变量
注意:
1、主机变量等级高于主机组变量,即:当主机与主机组中定义了同名的变量,在使用的过程中会使用主机变量;
2、执行playbook时候通过参数-e传入变量,这样传入的变量在整个playbook中都可以被调用属于全局变量;
如:
test_var.yml,文件内容:
--- - name: 变量引用 hosts: all tasks: - name: "host 文件的变量" debug: msg: - "host 文件的单个主机变量: {{name}}" - "host 文件的主机组变量:{{name}}"
ansible_host,文件内容:
[host] 192.168.108.22 192.168.108.23 name=zhangsan2 [server:children] host [server:vars] name=lisi
命令行执行命令查看结果:
root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml -C PLAY [变量引用] ********************************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************************** ok: [192.168.108.22] ok: [192.168.108.23] TASK [host 文件的变量] *************************************************************************************************************************************************** ok: [192.168.108.22] => {} MSG: ['host 文件的单个主机变量: lisi', 'host 文件的主机组变量:lisi'] ok: [192.168.108.23] => {} MSG: ['host 文件的单个主机变量: zhangsan2', 'host 文件的主机组变量:zhangsan2']
3、在playbook 中定义变量
编写playbook时,直接在里面定义变量,然后直接引用,可以定义多个变量;
注意:
1、如果在执行playbook时,又通过-e参数指定变量的值,那么会以-e参数指定的为准;
如:test_var 文件内容:
--- - name: 变量引用 hosts: all vars: dir: /home/user1 method: create tasks: - name: var_play "变量引用" debug: msg: "获取play book 中定义的变量,dir: {{dir}},method:{{method}}"
脚本执行结果:
root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml -C -e method=delete PLAY [变量引用] ********************************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************************** ok: [192.168.108.23] ok: [192.168.108.22] TASK [var_play "变量引用"] ********************************************************************************************************************************************** ok: [192.168.108.22] => {} MSG: 获取play book 中定义的变量,dir: /home/user1,method:delete ok: [192.168.108.23] => {} MSG:
获取play book 中定义的变量,dir: /home/user1,method:delete
结果显示的method 变量选择了在命令行通过-e 传入的值,dir变量直接使用play book 中定义值;
4、setup 变量使用
setup属于一个模块
如:test_var.yml
--- - name: 变量引用 hosts: all tasks: - name: "引用setup 变量,即系统默认模块" debug: msg: "setup 模块的变量.ansible_fqdn.log : {{ansible_fqdn}}.log"
命令行执行脚本:
root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml
PLAY [变量引用] *********************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [192.168.108.22]
ok: [192.168.108.23]
TASK [引用setup 变量,即系统默认模块] *******************************************************************************************************************************************
ok: [192.168.108.22] => {}
MSG:
setup 模块的变量.ansible_fqdn.log : node1.log
ok: [192.168.108.23] => {}
MSG:
setup 模块的变量.ansible_fqdn.log : node2.log
5、在单独在文件中定义变量
为了方便管理将所有的变量统一放在一个独立的变量YAML文件中,playbook文件直接引用文件调用变量即可。
在playbook 中引用变量文件的文件格式:vars_files:./var.yml
如:test_vars.yml
--- - name: 变量引用 hosts: all vars_files: ./define_var.yml tasks: - name: "调用定义变量的外部文件" debug: msg: "外部文件的变量值: protocol:{{protocol}},port:{{port}},timeout:{{timeout}}"
外部yml中定义变量:
protocol: http port: 80
timeout: 20
执行命令结果:
root@master:/home/user1# ansible-playbook -i ansible_host test_var.yml -C
[WARNING]: Found variable using reserved name: port
PLAY [变量引用] *********************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [192.168.108.22]
ok: [192.168.108.23]
TASK [调用定义变量的外部文件] **************************************************************************************************************************************************
ok: [192.168.108.22] => {}
MSG:
外部文件的变量值: protocol:http,port:80,timeout:20
ok: [192.168.108.23] => {}
MSG:
外部文件的变量值: protocol:http,port:80,timeout:20
PLAY RECAP **********************************************************************************************************************************************************
192.168.108.22 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.108.23 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0