基本語法

  1. 看到 playbook 腳本中關鍵字 (Keywords) 不清楚時,可上 ansible 官網查詢。
  2. 最基本的 playbook 分成三個部分:
    1. 在哪些主機以什麼身份執行,例如:
      hosts: dev
      user: root
      
    2. 執行的任務,notify 當任務執行通知 "restart httpd",例如:
      tasks:
        - name: install httpd
          yum: pkg=httpd state=latest	
          notify: restart httpd
      
    3. 善後任務,例如:
      handlers:
        - name: restart httpd
          service: name=httpd state=restarted
      
  3. 以上基本語法寫成腳本 deploy.yml,其中 notify 當任務執行通知 headlers "restart httpd"。
    [deyu1@kvm19 ansible]$ vim deploy.yml
    [deyu1@kvm19 ansible]$ cat deploy.yml 
    ---
    - hosts: dev
      tasks:
      - name: install httpd
        yum: pkg=httpd state=latest
        notify: restart httpd
    
      handlers:
      - name: restart httpd
        service: name=httpd enabled=yes state=restarted
    
  4. 使用 ansible-playbook 執行 httpddeploy.xml 腳本,成功安裝並執行善後工作,設定開機啟動 httpd 及現在重啟。
    [deyu1@kvm19 ansible]$ ansible-playbook deploy.yml 
    
    PLAY [dev] *********************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [kvm11]
    
    TASK [install httpd] ***********************************************************
    changed: [kvm11]
    
    RUNNING HANDLER [restart httpd] ************************************************
    changed: [kvm11]
    
    PLAY RECAP *********************************************************************
    kvm11 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
    
  5. 使用 ad-hoc 命令檢查 dev 的 httpd 服務是否啟動?回傳 "changed": false, 表示服務已經啟動,沒有做任何改變。
    [deyu1@kvm19 ansible]$ ansible dev -m service -a "name=httpd state=started" --check
    kvm11.deyu.wang | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "name": "httpd",
        "state": "started",
        "status": {
    ...........
    
  6. 使用 ad-hoc 命令檢查 dev 的 httpd 服務是否開機啟動 (enabled)?回傳 "changed": false, 表示服務已經設定開機啟動,沒有做任何改變。
    [deyu1@kvm19 ansible]$ ansible dev -m service -a "name=httpd enabled=yes" --check
    kvm11.deyu.wang | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "enabled": true,
        "name": "httpd",
        "status": {
    ...........