ansible-playbook快速入門填坑

參考另一篇文章python

http://blog.51cto.com/weiweidefeng/1895261mysql

 when條件 參考http://blog.51cto.com/breezey/1757593nginx

安裝目錄:sql

    程序:
        ansible
        ansible-playbook 
        ansible-doc
    配置文件:
        /etc/ansible/ansible.cfg
    主機清單:
        /etc/ansible/hosts 
    插件目錄:
        /usr/share/ansible_plugins/

 

ansible playbookshell

   roles/{mysql,nginx,..}/ 目錄結構json

defaults   默認尋找路徑
tasks      此目錄中至少應該有一個名爲main.yml的文件,用於定義各task;其它的文件須要由main.yml進行「包含」調用;
files      存儲由copy或script等模塊調用的文件
templates  存儲由template模塊調用的模板文本;
handlers   notify調用部分,此目錄中至少應該有一個名爲main.yml的文件,用於定義各handler;其它的文件須要由main.yml進行「包含」調用;
vars       roles內變量存放路徑,此目錄中至少應該有一個名爲main.yml的文件,用於定義各variable;其它的文件須要由main.yml進行「包含」調用;
meta 此目錄中至少應該有一個名爲main.yml的文件,定義當前角色的特殊設定及其依賴關係;其它的文件須要由main.yml進行「包含」調用;
ansible.cfg 覆蓋/etc/ansible/ansible.cfg的相同配置,以下配置在nginx目錄下,做用是:添加一個ansible查找role的路徑,這樣ansible-playbook運行時能夠識別到路徑

 

 
運行playbook,使用ansible-playbook命令

    (1) 檢測語法
        ansible-playbook  --syntax-check  /path/to/playbook.yaml
    (2) 測試運行
        ansible-playbook -C /path/to/playbook.yaml
            --list-hosts
            -list-tasks
            --list-tags
    (3) 運行
        ansible-playbook  /path/to/playbook.yaml
            -t TAGS, --tags=TAGS
            --skip-tags=SKIP_TAGS
            --start-at-task=START_AT
1.任務:tasks main.yml 主要執行的操做
---
-name install nginx
yum: name=nginx state=present #yum安裝軟件
-name start service nginx
service: name=nginx state=restarted #service重啓
2.變量:Variables
  第一種、自定義變量
    ---
    - hosts: all
 vars:
        key: aaa
        kkk: bbb
     tasks:
      - name display vars
       debug: msg='{{key}}--->{{kkk}}'  
  第二種 自定義變量 經過文件
#vars.yml
    ---
    - hosts: all
     vars_files:
      - var.file  
     tasks:
      - name display vars
       debug: msg='{{key}}--->{{kkk}}'  
     #var.yml
---
     key: 111
     kkk: 222
第三種 第一個task結果的值傳遞給第二個task register    
    ---
    - hosts: all
     tasks:
      - name register vars
       shell: hostname
       register: info #shell裏的hostname值傳給info
      - name display vars
       debug: msg='{{info.stdout}}' #info是個字典,取key爲stdout的值
第四種 循環執行任務 with_items
    4.1 一層for循環
    ---
    - hosts: all
     tasks:
      - name debug
       debug: msg='{{item.key}},,,{{item.valu}}'
       with_items:
        - {key: "aa",value: "bb"}
        - {key: "cc",value: "dd"}
    4.2 嵌套循環 for for..
     ...
       debug: msg='{{item[0]}} , {{item[1]}}'
       with_nested:
        - ["a","b"]
        - ["A","B","C"]
3.模板:Templates    nginx.conf.j2 (*.j2結尾)
文本文件,內部嵌套有模板語言腳本(使用Jinja2模板語言編寫)
4.角色:roles main.yml

以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、files等目錄;

5.執行入口yml
---
- hosts: all
 gather_facts: no
roles:
- nginx #這裏填寫目錄,好比nginx目錄 mysql目錄等

 

inventory 靜態文件centos

#host-------------這一行不在以下文件內
---
- hosts all
  remote_user: root #遠程ssh主機認證用戶
  gather_facts no #執行ansible時,不收集遠端主機信息,執行速度會加快
  vars:
    nginx_ports:80
  vars_files:
    - "b.yml" #音樂var文件,當前路徑

  ansible -i  (hosts文件或hosts目錄) ssh

 

inventory 動態文件ide

  動態inventory的意思是全部的變量能夠從外部獲取,也就是說咱們能夠從CMDB以及zabbix系統拉取全部的主機信息而後使用ansible進行管理。測試

cat  inverti.py
#!/usr/bin/env python
# coding=utf-8
import json
host1ip = ['192.168.1.15']
host2ip = ['192.168.1.110']
group = 'test11'
group2 = 'test22'
hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}}
print json.dumps(hostdata,indent=4)

  執行命令

[root@vagrant-centos65 opt]# ansible -i inverti.py all  -a 'uptime' -k
SSH password: 
192.168.1.15 | SUCCESS | rc=0 >>
 07:25:27 up  3:56,  3 users,  load average: 0.00, 0.00, 0.00
192.168.1.110 | SUCCESS | rc=0 >>
 07:25:27 up 7 min,  3 users,  load average: 0.00, 0.02, 0.00
相關文章
相關標籤/搜索