Ansible变量与事实变量:
自定义变量:
变量可以在定义任务前进行定义,也可以从其他文件中调用。
下面我写了一个在任务前定义的变量,并用循环将其打印。
内部变量:
剧本如下:
---
- hosts: localhost
vars:
name:
- bob
- harry
tasks:
- name: print msg
debug:
msg: "{{ item }}"
loop: "{{ name }}"
结果:
变量被全部打印出来,item是ansible内置的循环变量,loop是循环语句。
外部引入变量:
接下来尝试从外部文件引入变量。
user.yml:
name:
- natasha
- salay
play.yml:
---
- hosts: localhost
vars_files:
- /root/ansible/user.yml
tasks:
- name: print msg
debug:
msg: "{{ item }}"
loop: "{{ name }}"
执行结果:
事实变量:
ansible提供的事实变量有很多,我举两个简单例子供参考。
内存:
打印内存的剧本:
---
- hosts: localhost
tasks:
- name: print memory
debug:
var: ansible_memtotal_mb
执行结果:
bios_version:
---
- hosts: localhost
tasks:
- name: print memory
debug:
var: ansible_bios_version
执行结果:
hostname:
---
- hosts: localhost
tasks:
- name: print memory
debug:
var: ansible_fqdn
执行结果:
以上是用ansible的debug模块将变量打印出来,还可以使用setup模块来收集事实。
setup:
ansible localhost -m setup
这条命令默认会收集所有事实,也可以加上参数限定收集的事实。
ansible localhost -m setup -a 'filter=ansible_hostname'
# 结果:
localhost | SUCCESS => {
"ansible_facts": {
"ansible_hostname": "Controller"
},
"changed": false
}
小技巧:
有时候可能会忘记某个事实变量的全称,但又需要的时候我们可以利用setup模块加上grep命令查找。
例:
ansible localhost -m setup | grep mem
这样就过滤出来与内存相关的事实变量了。
文章有问题请联系更正:wgq3135@163.com
烦请各位看完点赞 >_<