ansible連載之playbook使用

ansible-playbook的使用

1. ansible playbook介紹:

簡單的說就是定義一個配置文件,文件中寫入你需要安裝的服務,配置文件,變量等信息,使他們可以按照事先定義好的機制完成一個任務。
ansible Playbook使用YAML語法結構,所以配置閱讀起來都比較簡單。

2. ansible playbook組成結構:

  • target section: 定義將要執行playbook的遠程主機組
  • variable section: 定義playbook運行時需要使用的變量
  • task section: 定義將要在遠程主機上執行的任務列表
  • handler section: 定義task執行完成以後需要調用的任務

3. ansible playbook主要參數:

3.1. Target section常用參數:

  • hosts:定義遠程主機組
  • remote_user:執行該任務的用戶
  • sudo: 設置爲yes的時候,執行任務的時候使用root權限
  • sudo_user 如果你設置用戶爲 admin ,那麼你執行的時候會使用 admin 用戶的權限
  • connection 通過什麼方式連接到遠程主機,默認是ssh
  • gather_facks 是否啓用在遠程主機執行setup模塊,默認是會執行的,可用同setup模塊獲取遠程主機的信息,在定義變量的時候使用

3.2 Variabler section常用參數:

  • vars: 定義格式 變量名:變量值
  • vars_files: 指定變量文件
  • vars_prompt: 用戶交互模式自定義變量
  • setup: 模塊取遠程主機的值

3.3 Task section常用參數:

  • name:輸出到屏幕的信息
  • action:定義執行的動作調用ansible的模塊例如:yum name=http state=installed就是安裝apache服務
  • copy:複製本地文件到遠程主機
  • template:複製.j2格式的變量文件到遠程主機,並且複製之後的文件替換變量的值
  • service :定義服務的狀態

3.4 handler section常用參數:

可以理解爲處理器,主要爲 task section 進行調用,爲任務列表操作完畢後的後續動作,當關注的資源發生變化時執行的操作

4. ansible playbook測試案例:

4.1 案例1: 安裝httpd服務

vim httpd_v1.yaml
- hosts: websrvs
  remote_user: root
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: start httpd service
    service: name=httpd state=started
ansible-playbook --syntax-check httpd_v1.yaml #檢查代碼語法
ansible-playbook httpd_v1.yaml

案例1主要是安裝apache httpd web服務器,通過yum模塊安裝,copy模塊將配置文件拷貝到遠程主機,並且啓動服務

4.2 案例2: 配置文件更新後自動重啓httpd服務:

vim httpd_v2.yaml
- hosts: websrvs
  remote_user: root
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    tags: config
    notify:
      - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted
ansible-playbook --syntax-check httpd_v2.yaml
ansible-playbook -t config httpd_v2.yaml

案例2使用了handlers模塊,只要httpd.conf配置文件更新了,比如我們更改了httpd的暴露端口,默認是80端口,現在我更改成8080,那麼就可以觸發服務重啓handlers. 同時針對複製配置文件專門打了tag,執行ansible-playbook -t config httpd_v2.yaml 可以實現只執行copy文件的這一個tasks;

4.3 案例3: 通過變量的方式修改配置文件的值:

vim httpd_v3.yaml
- hosts: websrvs
  remote_user: root
  vars:
    http_port: "8899"
    src_httpd_dir: /etc/httpd/conf
    dst_httpd_dir: "/etc/httpd/conf"
  tasks:
  - name: install httpd service
    yum: name=httpd state=present
  - name: copy httpd conf
    template: src="{{src_httpd_dir}}/httpd.conf.j2" dest="{{dst_httpd_dir}}/httpd.conf"
    notify:
      - restart httpd service
  - name: start httpd service
    service: name=httpd state=started
  handlers:
  - name: restart httpd service
    service: name=httpd state=restarted
cp -r /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.j2 #定義httpd的模板配置文件
vim /etc/httpd/conf/httpd.conf.j2  #修改模板配置文件,主要修改監聽的端口和主機名兩個地方
Listen {{ansible_default_ipv4['address']}}:{{http_port}}
ServerName {{ansible_nodename}}:{{http_port}}

此處用到了template模塊,可以拷貝含有變量的文件到目標機器,這裏實際上用到的是python的jinja2語法。源機器的配置文件裏面用到了自動以變量httpd_port,也用到了setup 中的 facts,facts的查看可以使用如下命令:

[root@rainbondmanager playbooks]# ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"
10.83.32.130 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.83.32.130"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}
10.83.32.131 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "10.83.32.131"
        ],
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

如果不使用filter過濾的話,會把所有的facts查詢出來,這些都是系統默認的,ansible默認可以獲取到的遠程主機信息,包括cpu、內存、磁盤、網卡、ip等信息;
今天的博文就寫到這裏了,下期還會繼續帶大家一起探討和學習ansible的使用。最近一個人生活,老婆和小孩都回老家了,所以有了更多的時間來看書、學習、運動,還有就是寫博文了。感謝大家一直以來的持續關注,最近我準備再出一系列專門針對新手的linux運維專欄,主要從最簡單的LNMP安裝 LAMP安裝 tomcat安裝 MYSQL安裝 linux基礎命令等入手。

博文的更詳細內容請關注我的個人微信公衆號 “雲時代IT運維”,本公衆號旨在共享互聯網運維新技術,新趨勢; 包括IT運維行業的諮詢,運維技術文檔分享。重點關注devops、jenkins、zabbix監控、kubernetes、ELK、各種中間件的使用,比如redis、MQ等;shell和python等運維編程語言;本人從事IT運維相關的工作有十多年。2008年開始專職從事Linux/Unix系統運維工作;對運維相關技術有一定程度的理解。本公衆號所有博文均是我的實際工作經驗總結,基本都是原創博文。我很樂意將我積累的經驗、心得、技術與大家分享交流!希望和大家在IT運維職業道路上一起成長和進步;

ansible連載之playbook使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章