1.inventory file中定义的变量
192.168.116.129 key=129 (--优先级大)
[nginx]
192.168.116.129
[nginx:vars]
ansible_python_interpreter=/usr/lib64/python2.7
key=130 (--优先级小)
编写一个playbook文件来调用
---
- hosts: nginx
gather_facts: False tasks: -name: diplay Host Variable from hostfile
debug: msg="The {{ inventory_hostname }} Vaule is {{ key }}"
2./etc/ansible/目录下,我们还可以使用在该目录下新建host_vars和group_vars目录来针对主机和主机组定义变量(优先级高于inventory,会覆盖inventory file里的变量)
head host_vars/*
==> host_vars/192.168.116.129 <==
key: 192.168.116.129
==> host_vars/192.168.116.130 <==
key: 192.168.116.130
3.通过ansible-playbook命令行传入(优先级高于前两个)
3.1 命令行传入变量
ansible-playbook /root/playbook/nginx-116.yaml -e "key=666"
3.2命令行指定文件的方式传入变量,变量文件的内容支持YAML和JSON两种格式:
# cat var.yaml
key: YAML
# cat var.json
{"key": "888json"}
ansible-playbook /root/playbook/nginx-116.yaml -e "@var.json"
---
- hosts: all
gather_facts: False vars: key: Ansible
--- - hosts: all
gather_facts: False vars_files: - var.yaml
5.使用register内的变量
Ansible playbook内task之间还可以互相传递数据,比如我们总共有两个tasks,其中第2个task是否执行是需要判断第1个task运行后的结果,这个时候我们就得在task之间传递数据,需要把第1个task 执行的结果传递给第2个task.
--- - hosts: all gather_facts: False
tasks: - name: register variable shell: hostname register: info - name: display variable debug: msg="The varibale is {{ info }}"
{{ info['stdout'] }}"只想显示的信息则只需要指定key就行6.
6.roles
当给一个主机应用角色的时候可以传递变量,然后在角色内使用这些变量,示例如下:
- hosts: webservers
roles:
- common
- { role: foo_app_instance, dir: '/opt/a', port: 5000 }
7.facts变量,可以通过 ansible hostname -m setup来获取。当然你也可以通过安装拓展包来获取更多的系统变量信息。例如拓展facter和ohai
8.vars_prompt交互方式传值