Ansible之迭代、templates模板

本節內容:html

  • 迭代node

  • 模板(JInjia2相關)linux

  • Jinja2相關nginx

1、迭代

當有須要重複性執行的任務時,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是固定變量名。
運維


2、模板(JInjia2相關)

假如爲兩臺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

1132141-20171010093856512-1513671109.png

1132141-20171010093917996-738100015.png


這個模板複製到每臺主機上時都應該將這文件裏的變量換成對應的值。這個模板就是Jinjia2模板。

設置每臺主機使用的變量值:


[root@node1 ~]# vim /etc/ansible/hosts

1132141-20171010094009824-390832023.png

固然這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

1132141-20171010094149996-1170231815.png

[root@node1 ~]# ansible-playbook apache.yml

執行完成後,去查看兩個節點的配置文件,發生變量都被替換了。

Ansible 使用 Template 系統

參考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 }}
相關文章
相關標籤/搜索