知識點1:編寫和運行PLAYBOOK
PLAYBOOK是以YAML格式編寫的文本文件,擴展名.yml
PLAYBOOK使用空格字符縮進來表示其數據結構,包含兩個基本規則。
處於層次結構中同一級別的數據元素(例如同一列表中的項目)必須具有相同的縮進量。
如果項目屬於其他項目的子項,其縮進量必須大於父項。
PLAYBOOK開頭由三個破折號組成,這是開始的標記(---)
結尾用三個圓點標記,一般會省略(...)
- name:***** #第一個鍵,簡述該play用途
host:**** #第二個鍵,表示任務主機或組
tasks:**** #第三個鍵,PLAY運行的任務列表
提高輸出的詳細程度,共4級
[student@workstation deploy-review]$ ansible-playbook -v
[student@workstation deploy-review]$ ansible-playbook -vv
[student@workstation deploy-review]$ ansible-playbook -vvv
[student@workstation deploy-review]$ ansible-playbook -vvvv
語法驗證
[student@workstation deploy-review]$ ansible-playbook --syntax-check webserver.yml
執行空運行
[student@workstation deploy-review]$ ansible-playbook -c webserver.yml #僅報告在該執行PLAYBOOK時將會發生什麼更改,但不會對受管主機進行任何實際的更改
知識點1練習:編輯site.yml
---
- name: Install and Start Apache HTTPD
hosts: web
tasks:
- name: httpd package is present
yum:
name: httpd
state: present
- name: Correct index.html is present
copy:
src: files/index.html
dest: /var/www/html/index.html
- name: httpd is started
service:
name: httpd
state: started
enabled: true
[student@workstation playbook-basic]$ ansible-playbook --syntax-check site.yml
playbook: site.yml
[student@workstation playbook-basic]$ ansible-playbook site.yml
PLAY [Install and Start Apache HTTPD] **************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [serverc.lab.example.com]
ok: [serverd.lab.example.com]
TASK [httpd package is present] ********************************************************************************************************************
changed: [serverd.lab.example.com]
changed: [serverc.lab.example.com]
TASK [Correct index.html is present] ***************************************************************************************************************
changed: [serverd.lab.example.com]
changed: [serverc.lab.example.com]
TASK [httpd is started] ****************************************************************************************************************************
changed: [serverc.lab.example.com]
changed: [serverd.lab.example.com]
PLAY RECAP *****************************************************************************************************************************************
serverc.lab.example.com : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
serverd.lab.example.com : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
知識點2:編寫實施多個PLAYBOOK
PLAY中的遠程用戶和特權升級
查找用於任務的模塊 -l
[student@workstation playbook-basic]$ansilbe-doc -l
用於示例輸出 -s
[student@workstation playbook-basic]$ansible-doc -s
用於輸出詳細結果 -v
[student@workstation playbook-basic]$ansible-playbook internet.yml -v
知識點2:示例inventery.yml
---
- name: Enable intranet services
hosts: servera.lab.example.com
become: yes
tasks:
- name: latest version of httpd and firewall installed
yum:
name:
- httpd
- firewalld
state: latest
- name: Test html page is installed
copy:
content: "Welcome to the example.com intranet!\n"
dest: /var/www/html/index.html
- name: Firewalld enabled and running
service:
name: firewalld
enabled: true
state: started
- name: Firewalld permits acess to httpd service
firewalld:
service: http
permanent: true
state: enabled
immediate: yes
- name: httpd enabled and running
service:
name: httpd
enabled: true
state: started
- name: Test intranet web server
hosts: localhost
become: no
tasks:
- name: Connect to intranet web server
uri:
url: http://servera.lab.example.com
return_content: yes
status_code: 200
知識點2:示例3 internet.yml
---
- name: Enable internet services
hosts: serverb.lab.example.com
become: yes
tasks:
- name: latest version of all required packages installed
yum:
name:
- firewalld
- httpd
- mariadb-server
- php
- php-mysqlnd
state: latest
- name: firewalld enabled and running
service:
name: firewalld
enabled: true
state: started
- name: firewalld permits http service
firewalld:
service: http
permanent: true
state: enabled
immediate: yes
- name: httpd enabled and running
service:
name: httpd
enabled: true
state: started
- name: mariadb enabled and running
service:
name: mariadb
enabled: true
state: started
- name: test php page is installed
get_url:
url: "http://materials.example.com/labs/playbook-review/index.php"
dest: /var/www/html/index.php
mode: 0644
- name: Test internet web server
hosts: localhost
become: no
tasks:
- name: connect to internet web server
uri:
url: http://serverb.lab.example.com
status_code: 200
總結:
PLAY是一個有序的任務列表,這些任務針對清單中選定的主機運行。
Playbook是一個文本文件,其中包含由一個或多個按順序運行的play組成的列表。
Ansible Playbook以YAML格式編寫。
YMAL文件的結構中使用空格縮進來代表數據層次結構。
任務的實施使用標準化代碼,這些代碼打包爲Ansible模塊。
ansible-doc命令可以列出已安裝的模塊,同時提供關於如何在playbook中使用模塊的文檔和示例代碼片段。
ansible-playbook命令用於驗證playbook語法並運行playbook.