Ansible的詳細解讀之【inventory 主機清單和playbook劇本】
- 一、inventory 主機清單
- 1.1 主機變數
- 1.2 組變數
- 1.3 組嵌套
- 二、劇本(playbook)
- 2.1 playbook介紹
- 2.2 playbooks 的組成
- 2.3 案例:撰寫httpd的playbook
一、inventory 主機清單
Inventory支持對主機進行分組,每個組內可以定義多個主機,每個主機都可以定義在任何一個或多個主機組內,
如果是名稱類似的主機,可以使用串列的方式表示各個主機
vim /etc/ansible/hosts
[webservers]
192.168.80.50:2222 #冒號后定義遠程連接埠,默認是ssh的22埠
192.168.80.5[1:5] #范圍是:192.168.80.51到192.168.80.55
[dbservers]
db-[a:f].example.org #支持匹配 a~f
inventory 中的變數
| Inventory變數名 | 含義 |
|---|---|
| ansible_host | ansible連接節點時的IP地址 |
| ansible_port | 連接對方的埠號,ssh連 接時默認為22 |
| ansible_user | 連接對方主機時使用的主機名,不指定時,將使用執行ansible或ansible-playbook命令的用戶 |
| ansible_passwd | 連接時的用戶的ssh密碼,僅在未使用密鑰對驗證的情況下有效 |
| ansible_ssh_private_key_file | 指定密鑰認證ssh連接時的私鑰檔案 |
| ansible_ssh_common_args | 提供給ssh、sftp、 scp命 令的額外引數 |
| ansible_become | 允許進行權限提升 |
| ansible_become_method | 指定提升權限的方式,例如可使用sudo/su/runas等方式 |
| ansible_become_user | 提升為哪個用戶的權限,默認提升為root |
| ansible_become_password | 提升為指定用戶權限時的密碼 |
1.1 主機變數
[webservers]
192.168.80.50 ansible_port=22 ansible_user=root ansible_password=abc123 #不建立將密碼直接寫入配置,不安全
1.2 組變數
[webservers:vars] #表示為 webservers 組內所有主定義變數
ansible_user=root
ansible_password=abc1234
[all:vars] #表示為所有組內的所有主機定義變數
ansible_port=22
1.3 組嵌套
[nginx]
192.168.80.50
192.168.80.60
192.168.80.70
[apache]
192.168.80.5[0:3]
[webservers:children]
nginx #表示為 webservers 主機組中包含了nginx組和apache組內的所有主機
apache
二、劇本(playbook)
2.1 playbook介紹
____playbook是ansible用于配置,部署,和管理被控節點的劇本,通過playbook的詳細描述,執行其中的tasks,可以讓遠端主機達到預期的狀態,playbook是由一個或多個”play”組成的串列, 當對一臺機器做環境初始化的時候往往需要不止做一件事情,這時使用playbook會更加適合,通過playbook你可以一次在多臺機器執行多個指令,通過這種預先設計的配置保持了機器的配置統一,并很簡單的執行日常任務,
____ansible通過不同的模塊實作相應的管理,管理的方式通過定義的清單檔案(hosts)所管理的主機包括認證的方式連接的埠等,所有的功能都是通過呼叫不同的模塊(modules)來完成不同的功能的,不管是執行單條命令還是play-book都是基于清單檔案,
playbook格式:
-
playbook由YMAL語言撰寫,YMAL格式是類似于JSON的檔案格式,便于人理解和閱讀,同時便于書寫,
-
一個劇本里面可以有多個play,每個play只能有一個tasks,每個tasks可以有多個name,
2.2 playbooks 的組成
- Tasks:任務,即通過 task 呼叫 ansible 的模塊將多個操作組織在一個playbook 中運行,
- Variables:變數
- Templates:模板
- Handlers:處理器,當 changed 狀態條件滿足時,(notify)觸發執行的操作,
- Roles:角色
2.3 案例:撰寫httpd的playbook
vim test1.yaml
--- #yaml檔案以---開頭,以表明這是一個yaml檔案,可省略
- name: first play #定義一個play的名稱,可省略
gather_facts: false #設定不進行facts資訊收集,這可以加快執行速度,可省略
hosts: webservers #指定要執行任務的被管理主機組,如多個主機組用冒號分隔
remote_user: root #指定被管理主機上執行任務的用戶
tasks: #定義任務串列,任務串列中的各任務按次序逐個在hosts中指定的主機上執行
- name: test connection #自定義任務名稱
ping: #使用 module: [options] 格式來定義一個任務
- name: disable selinux
command: '/sbin/setenforce 0' #command模塊和shell模塊無需使用key=value格式
ignore_errors: True #如執行命令的回傳值不為0,就會報錯,tasks停止,可使用ignore_errors忽略失敗的任務
- name: disable firewalld
service: name=firewalld state=stopped #使用 module: options 格式來定義任務,option使用key=value格式
- name: install httpd
yum: name=httpd state=latest
- name: install configuration file for httpd
copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf #這里需要一個事先準備好的/opt/httpd.conf檔案
notify: "restart httpd" #如以上操作后為changed的狀態時,會通過notify指定的名稱觸發對應名稱的handlers操作
- name: start httpd service
service: enabled=true name=httpd state=started
handlers: #handlers中定義的就是任務,此處handlers中的任務使用的是service模塊
- name: restart httpd #notify和handlers中任務的名稱必須一致
service: name=httpd state=restarted
① Ansible 管理端撰寫好playbook劇本

② 在webservers端(client1)準備httpd模板組態檔

③ 在webservers端(client1)將準備好的httpd模板組態檔發送到Ansible管理端

④ 確認被控制端的httpd服務是否安裝,firewalld處于開啟狀態,本機的httpd模板檔案準備完成并且路徑和劇本配置一致

⑤ 執行playbook劇本

⑥ 檢查被deservers控制端(client2)192.168.80.60的httpd服務和防火墻狀態以及httpd組態檔


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292687.html
標籤:其他
上一篇:基于springboot+vue的學生選課系統(前后端分離)
下一篇:Utools效率工具集
