本節內容:html
迭代node
模板(JInjia2相關)linux
Jinja2相關nginx
當有須要重複性執行的任務時,web
可使用迭代機制。其使用格式爲將須要迭代的內容定義爲item變量引用,並經過with_items語句來指明迭代的元素列表便可。例如:apache
- name: add several users user: name={{ item }} state=present groups=wheel with_items: - testuser1 - testuser2
上面語句的功能等同於下面的語句:vim
- name: add user testuser1 user: name=testuser1 state=present groups=wheel - name: add user testuser2 user: name=testuser2 state=present groups=wheel
另外,with_items中使用的元素還能夠是hashes,例如:app
- name: add several users user: name={{ item.name }} state=present groups={{ item.groups }} with_items: - { name: 'testuser1', groups: 'wheel'} - { name: 'testuser2', groups: 'root'}
【注意】:item是固定變量名。
運維
假如爲兩臺webserver安裝httpd,而他們的配置文件,172.16.7.152上的httpd須要監聽80端口,172.16.7.153須要監聽8080端口,ServerName也是不同的,因此咱們就須要兩個配置文件,這管理起來極爲不便。ide
在這種狀況下,咱們能夠考慮在配置文件中使用變量來定義。
[root@node1 ~]# mkdir templates [root@node1 ~]# cp conf/httpd.conf templates/ [root@node1 ~]# mv templates/httpd.conf templates/httpd.conf.j2
後綴爲j2代表是Jinja2模板。編輯這個模板:
[root@node1 ~]# vim templates/httpd.conf.j2
這個模板複製到每臺主機上時都應該將這文件裏的變量換成對應的值。這個模板就是Jinjia2模板。
設置每臺主機使用的變量值:
[root@node1 ~]# vim /etc/ansible/hosts
固然這http_port和maxClients也能夠在playbook中定義。可是那樣咱們無法區別每臺主機使用不一樣的值了。所以咱們要想讓每一個主機變量名相同但值不一樣時只能使用主機變量來定義。下面定義playbook:
[root@node1 ~]# vim apache.yml - hosts: nginx remote_user: root vars: - package: apache tasks: - name: install httpd package yum: name={{ package }} state=latest - name: install configuration file for httpd template: src=/root/conf/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf notify: - restart httpd - name: start httpd service service: enabled=true name=httpd state=started handlers: - name: restart httpd service: name=httpd state=restarted
[root@node1 ~]# ansible-playbook apache.yml
執行完成後,去查看兩個節點的配置文件,發生變量都被替換了。
參考https://www.w3cschool.cn/automate_with_ansible/automate_with_ansible-gm1w27pd.html
本文出自https://www.w3cschool.cn/automate_with_ansible/automate_with_ansible-gm1w27pd.html
自動化運維工具Ansible入門教程(六)變量與facts
連接http://www.linuxe.cn/post-277.html
ansible facts 獲取硬件信息
連接http://www.javashuo.com/article/p-psqjmgom-o.html
使用 ansible 批量獲取 IP MAC OOB 地址對應關係
連接https://www.codercto.com/a/37130.html
ansible facts獲取主機ip
{{ hostvars[inventory_hostname].ansible_eth0.ipv4.address }}