天天看點

《Centos7——playbook快速入門》

目錄

    • 1. ansible執行方式
    • 2. playbook中的變量的定義和引用
    • 3. 引用變量
    • 4. playbook
    • 5. 第一觸發任務(handlers)
    • 6. playbook中的循環
    • 7. playbook中的判斷

1. ansible執行方式

通過ansible下發單個任務,這種執行方式:Ad-hoc,點對點!臨時任務,不複雜任務
           
1. mkdir httpd	&&	cd	httpd	&&	vim httpd.yml -----建立目錄,進入目錄,編輯檔案
2. 讀取playbook檔案執行任務!字尾.yml或.yaml
3. ansible-playbook httpd.yml -----執行playbook檔案
4. ansible-playbook --syntax-check httpd.yml ----文法檢測 
           

格式:

---
- hosts: webservers #主機組
  tasks:
    - name:	"安裝apache"
   	  yum:	name=httpd state=latest
   	- name: "啟動apache"
   	  service: name=httpd state=started enabled=yes
           

檢視ansible主機中遠端主機資訊

[[email protected] httpd]# ansible webservers --list-hosts
  hosts (1):
    192.168.179.131
           

修改任務傳回success顔色:

[[email protected] ~]# vim /etc/ansible/ansible.cfg -----編輯配置檔案
[colors] 
ok=purple #改為紫色
           

2. playbook中的變量的定義和引用

定義變量:

在playbook檔案中可以使用vars元素來定義變量

==例如:定義一個名為port的變量,值為80==
           
---
- hosts: nginx
  vars:
    port: 80
           

3. 引用變量

在playbook的任何位置都可以引用變量,變量需要加{{}} 引用例如
---
- hosts: nginx
  vars:
	port: 80
  tasks:
    - name: "監聽端口{{ port }}"
	  shell: echo "{{ port }}"
           
## 在模闆檔案中引用變量
           
定義變量
---
- hosts: webservers
  vars:
    port: 8000
  tasks:
    - name: "發送檔案"
  template: src=port.conf.j2  dest=/opt/port.conf
           
引用變量,編輯模闆檔案ort.conf.j2,通過template子產品變量讀入到模闆檔案中,并将檔案發送至被管理節點
# vim port.conf.j2
{{ port }}
           
我們也可以直接引用setup子產品的關鍵詞,當作變量,無需定義!
例如:
{{ ansible_hostname }}
           

4. playbook

給任務打标簽:
tags
一個任務可以擁有多個标簽
例子:
    - name: "建立測試頁面"
      shell: echo "nginx" > {{ ngx_root }}/index.html
      tags: 
        - page
    
使用标簽:
[[email protected] ~]# ansible-playbook -t page nginx.yml
           

5. 第一觸發任務(handlers)

handlers:
      handlers可以定義一些觸發任務,這些任務可以被其他任務引用!這些觸發任務隻會在引用的任務有更改時執行!
      handlers定義的觸發任務,一般要寫到檔案的末尾!在其他任務中通過(notiy: 觸發任務名稱)引用

   例子:
 tasks:
    - name: "推送模闆配置檔案"
      template: src=nginx.conf.j2   dest=/usr/local/nginx/conf/nginx.conf
      tags:
        - config-nginx
      notify: reload-nginx

 handlers:
    - name: "reload-nginx"
      shell: /usr/local/nginx/sbin/nginx -s reload
           

案例1

源碼部署nginx的playbook檔案内容,僅供參考
---
- hosts: webservers
  vars:
    ngx_root: /html
    ngx_port: 8000
    ngx_user: www
  tasks:
    - name: "安裝依賴環境"
      yum: name=gcc,pcre-devel,openssl-devel state=latest
    - name: "分發nginx源碼安裝包"
      unarchive: src=nginx-1.18.0.tar.gz  dest=/root/
    - name: "安裝nginx"
      shell: cd /root/nginx-1.18.0 && ./configure && make && make install
    - name: "啟動nginx"
      shell: /usr/local/nginx/sbin/nginx
      ignore_errors: True
    - name: "推送模闆配置檔案"
      template: src=nginx.conf.j2   dest=/usr/local/nginx/conf/nginx.conf
      tags: config-nginx
      notify: reload-nginx
    - name: "建立運作使用者"
      user: name={{ ngx_user }}
      tags: config-nginx
    - name: "建立網站根目錄"
      file: path={{ ngx_root }}  state=directory group={{ ngx_user }} owner={{ ngx_user }}
      tags: config-nginx
    - name: "建立測試頁面"
      shell: echo "{{ ngx_root }}" > {{ ngx_root }}/index.html
      tags:
        - page
        - config-nginx
  handlers:
    - name: "reload-nginx"
      shell: /usr/local/nginx/sbin/nginx -s reload
           

6. playbook中的循環

---
- hosts:
  tasks:
   - name: "安裝lamp相關元件"
     yum: name={{ item }} state=latest
     with_items:
       - php
       - php-mysql
       - php-gd
       - mysql
       - mysql-server
           
說明: item會依次等于php php-mysql php-gd mysql mysql-server,會循環執行5次
           

7. playbook中的判斷

用when來給任務添加條件,當滿足條件才能執行任務,不滿足的節點不執行

例子:

---
- hosts: webservers
  tasks:
    - name: "滿足主機名為:node-161,建立node-161.txt檔案"
      file: path=/opt/node-161.txt state=touch
      when: ansible_hostname == "node-161"

    - name: "滿足主機名為:node-162,建立node-162.txt檔案"
      file: path=/opt/node-162.txt state=touch
      when: ansible_hostname == "node-162"
           

繼續閱讀