在平时运维工作中有时候需要根据不同的远程节点或者针对不同的IP的系统做不同的配置部署.Ansible可以根据不同的IP地址来对各个节点上的配置文件做不同的处理,这里就需要用到变量,变量可以定义在不同的地方。本节分为变量的定义和变量的使用两个部分
变量定义:
1.定义在hosts主机中:如
[http_server:vars]
http_port=80
maxRequestsPerChild=808
2.在playbook中直接定义:如
- hosts:db_server
vars:
mysql_port: 3306
3.通过文件包含和角色定义变量:如
---
http_port: 8099
max_clients: 321
变量使用:
在模板文件中使用变量:
My amp goes to {{ max_amp_value }}
在playbooks文件中使用变量:
template: src=foo.cfg.j2 dest={{ remote_install_path }}/foo.cfg
在定义变量中引用其他变量:
- hosts: app_servers
vars:
app_path: "{{ base_path }}/22"
使用系统的信息:facts
ansible hostname -m setup
关闭facts
如果你确信不需要主机的任何facts信息,而且对远程节点主机都了解的很清楚,那么可以将其关闭。远程操作节点较多的时候,关闭facts会提升ansible的性能。只需要在play中设置如下:
- hosts: whatever
gather_facts: no
注册变量:
一个任务的运行结果都可以保存到一个变量中,供稍后使用,有时候需要将运行的命令的角色保存起来,并作为下一个人任务的执行条件。在运行playbooks的时候可以使用-v参数来显示执行过程中的结果信息。如:
- hosts: webserver
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True
- shell: /usr/bin/bar
when: foo_result.rc == 5
使用系统变量案例
---
- hosts: test
vars:
http_port: 80
maxRequestsPerChild: 808
tasks:
- name: echo {{ansible_all_ipv4_addresses}}
echo:{{ansible_all_ipv4_addresses}}