在平時運維工作中有時候需要根據不同的遠程節點或者針對不同的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}}