成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ansible 劇本快速入門指南

運維 系統運維
我們已經寫了兩篇關于 Ansible 的文章,這是第三篇。如果你是 Ansible 新手,我建議你閱讀下面這兩篇文章,它會教你一些 Ansible 的基礎以及它是什么。如果你已經閱讀過了,那么在閱讀本文時你才不會感到突兀。

[[384413]]

我們已經寫了兩篇關于 Ansible 的文章,這是第三篇。

如果你是 Ansible 新手,我建議你閱讀下面這兩篇文章,它會教你一些 Ansible 的基礎以及它是什么。

如果你已經閱讀過了,那么在閱讀本文時你才不會感到突兀。

什么是 Ansible 劇本?

劇本playbook比點對點命令模式更強大,而且完全不同。

它使用了 /usr/bin/ansible-playbook 二進制文件,并且提供豐富的特性使得復雜的任務變得更容易。

如果你想經常運行一個任務,劇本是非常有用的。此外,如果你想在服務器組上執行多個任務,它也是非常有用的。

劇本是由 YAML 語言編寫。YAML 代表一種標記語言,它比其它常見的數據格式(如 XML 或 JSON)更容易讀寫。

下面這張 Ansible 劇本流程圖將告訴你它的詳細結構。

 

理解 Ansible 劇本的術語

  • 控制節點Control node:Ansible 安裝的機器,它負責管理客戶端節點。
  • 受控節點Managed node:控制節點管理的主機列表。
  • 劇本playbook:一個劇本文件包含一組自動化任務。
  • 主機清單Inventory:這個文件包含有關管理的服務器的信息。
  • 任務Task:每個劇本都有大量的任務。任務在指定機器上依次執行(一個主機或多個主機)。
  • 模塊Module: 模塊是一個代碼單元,用于從客戶端節點收集信息。
  • 角色Role:角色是根據已知文件結構自動加載一些變量文件、任務和處理程序的方法。
  • 動作Play:每個劇本含有大量的動作,一個動作從頭到尾執行一個特定的自動化。
  • 處理程序Handler: 它可以幫助你減少在劇本中的重啟任務。處理程序任務列表實際上與常規任務沒有什么不同,更改由通知程序通知。如果處理程序沒有收到任何通知,它將不起作用。

基本的劇本是怎樣的?

下面是一個劇本的模板:

  1. --- [YAML 文件應該以三個破折號開頭]
  2. - name: [腳本描述]
  3. hosts: group [添加主機或主機組]
  4. become: true [如果你想以 root 身份運行任務,則標記它]
  5. tasks: [你想在任務下執行什么動作]
  6. - name: [輸入模塊選項]
  7. module: [輸入要執行的模塊]
  8. module_options-1: value [輸入模塊選項]
  9. module_options-2: value
  10. .
  11. module_options-N: value

如何理解 Ansible 的輸出

Ansible 劇本的輸出有四種顏色,下面是具體含義:

  • 綠色ok 代表成功,關聯的任務數據已經存在,并且已經根據需要進行了配置。
  • 黃色changed 指定的數據已經根據任務的需要更新或修改。
  • 紅色FAILED 如果在執行任務時出現任何問題,它將返回一個失敗消息,它可能是任何東西,你需要相應地修復它。
  • 白色:表示有多個參數。

為此,創建一個劇本目錄,將它們都放在同一個地方。

  1. $ sudo mkdir /etc/ansible/playbooks

劇本-1:在 RHEL 系統上安裝 Apache Web 服務器

這個示例劇本允許你在指定的目標機器上安裝 Apache Web 服務器:

  1. $ sudo nano /etc/ansible/playbooks/apache.yml
  2.  
  3. ---
  4. - hosts: web
  5. become: yes
  6. name: "Install and Configure Apache Web server"
  7. tasks:
  8. - name: "Install Apache Web Server"
  9. yum:
  10. name: httpd
  11. state: latest
  12. - name: "Ensure Apache Web Server is Running"
  13. service:
  14. name: httpd
  15. state: started
  1. $ ansible-playbook apache1.yml

 

如何理解 Ansible 中劇本的執行

使用以下命令來查看語法錯誤。如果沒有發現錯誤,它只顯示劇本文件名。如果它檢測到任何錯誤,你將得到一個如下所示的錯誤,但內容可能根據你的輸入文件而有所不同。

  1. $ ansible-playbook apache1.yml --syntax-check
  2.  
  3. ERROR! Syntax Error while loading YAML.
  4. found a tab character that violate indentation
  5. The error appears to be in '/etc/ansible/playbooks/apache1.yml': line 10, column 1, but may
  6. be elsewhere in the file depending on the exact syntax problem.
  7. The offending line appears to be:
  8. state: latest
  9. ^ here
  10. There appears to be a tab character at the start of the line.
  11.  
  12. YAML does not use tabs for formatting. Tabs should be replaced with spaces.
  13. For example:
  14. - name: update tooling
  15. vars:
  16. version: 1.2.3
  17. # ^--- there is a tab there.
  18. Should be written as:
  19. - name: update tooling
  20. vars:
  21. version: 1.2.3
  22. # ^--- all spaces here.

或者,你可以使用這個 URL YAML Lint 在線檢查 Ansible 劇本內容。

執行以下命令進行“演練”。當你運行帶有 --check 選項的劇本時,它不會對遠程機器進行任何修改。相反,它會告訴你它將要做什么改變但不是真的執行。

  1. $ ansible-playbook apache.yml --check
  2.  
  3. PLAY [Install and Configure Apache Webserver] ********************************************************************
  4.  
  5. TASK [Gathering Facts] *******************************************************************************************
  6. ok: [node2.2g.lab]
  7. ok: [node1.2g.lab]
  8.  
  9. TASK [Install Apache Web Server] *********************************************************************************
  10. changed: [node2.2g.lab]
  11. changed: [node1.2g.lab]
  12.  
  13. TASK [Ensure Apache Web Server is Running] ***********************************************************************
  14. changed: [node1.2g.lab]
  15. changed: [node2.2g.lab]
  16.  
  17. PLAY RECAP *******************************************************************************************************
  18. node1.2g.lab : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  19. node2.2g.lab : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

如果你想要知道 ansible 劇本實現的詳細信息,使用 -vv 選項,它會展示如何收集這些信息。

  1. $ ansible-playbook apache.yml --check -vv
  2.  
  3. ansible-playbook 2.9.2
  4. config file = /etc/ansible/ansible.cfg
  5. configured module search path = ['/home/daygeek/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  6. ansible python module location = /usr/lib/python3.8/site-packages/ansible
  7. executable location = /usr/bin/ansible-playbook
  8. python version = 3.8.1 (default, Jan 8 2020, 23:09:20) [GCC 9.2.0]
  9. Using /etc/ansible/ansible.cfg as config file
  10.  
  11. PLAYBOOK: apache.yml *****************************************************************************************************
  12. 1 plays in apache.yml
  13.  
  14. PLAY [Install and Configure Apache Webserver] ****************************************************************************
  15.  
  16. TASK [Gathering Facts] ***************************************************************************************************
  17. task path: /etc/ansible/playbooks/apache.yml:2
  18. ok: [node2.2g.lab]
  19. ok: [node1.2g.lab]
  20. META: ran handlers
  21.  
  22. TASK [Install Apache Web Server] *****************************************************************************************
  23. task path: /etc/ansible/playbooks/apache.yml:6
  24. changed: [node2.2g.lab] => {"changed": true, "msg": "Check mode: No changes made, but would have if not in check mod
  25. e", "rc": 0, "results": ["Installed: httpd"]}
  26. changed: [node1.2g.lab] => {"changed": true, "changes": {"installed": ["httpd"], "updated": []}, "msg": "", "obsolet
  27. es": {"urw-fonts": {"dist": "noarch", "repo": "@anaconda", "version": "2.4-16.el7"}}, "rc": 0, "results": []}
  28.  
  29. TASK [Ensure Apache Web Server is Running] *******************************************************************************
  30. task path: /etc/ansible/playbooks/apache.yml:10
  31. changed: [node1.2g.lab] => {"changed": true, "msg": "Service httpd not found on host, assuming it will exist on full run"}
  32. changed: [node2.2g.lab] => {"changed": true, "msg": "Service httpd not found on host, assuming it will exist on full run"}
  33. META: ran handlers
  34. META: ran handlers
  35.  
  36. PLAY RECAP ***************************************************************************************************************
  37. node1.2g.lab : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
  38. node2.2g.lab : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

劇本-2:在 Ubuntu 系統上安裝 Apache Web 服務器

這個示例劇本允許你在指定的目標節點上安裝 Apache Web 服務器。

  1. $ sudo nano /etc/ansible/playbooks/apache-ubuntu.yml
  2.  
  3. ---
  4. - hosts: web
  5. become: yes
  6. name: "Install and Configure Apache Web Server"
  7. tasks:
  8. - name: "Install Apache Web Server"
  9. yum:
  10. name: apache2
  11. state: latest
  12.  
  13. - name: "Start the Apache Web Server"
  14. service:
  15. name: apaceh2
  16. state: started
  17.  
  18. - name: "Enable mod_rewrite module"
  19. apache2_module:
  20. name: rewrite
  21. state: present
  22.  
  23. notify:
  24. - start apache
  25.  
  26. handlers:
  27. - name: "Ensure Apache Web Server is Running"
  28. service:
  29. name: apache2
  30. state: restarted
  31. enabled: yes

劇本-3:在 Red Hat 系統上安裝軟件包列表

這個示例劇本允許你在指定的目標節點上安裝軟件包。

方法-1:

  1. $ sudo nano /etc/ansible/playbooks/packages-redhat.yml
  2.  
  3. ---
  4. - hosts: web
  5. become: yes
  6. name: "Install a List of Packages on Red Hat Based System"
  7. tasks:
  8. - name: "Installing a list of packages"
  9. yum:
  10. name:
  11. - curl
  12. - httpd
  13. - nano
  14. - htop

方法-2:

  1. $ sudo nano /etc/ansible/playbooks/packages-redhat-1.yml
  2.  
  3. ---
  4. - hosts: web
  5. become: yes
  6. name: "Install a List of Packages on Red Hat Based System"
  7. tasks:
  8. - name: "Installing a list of packages"
  9. yum: name={{ item }} state=latest
  10. with_items:
  11. - curl
  12. - httpd
  13. - nano
  14. - htop

方法-3:使用數組變量

  1. $ sudo nano /etc/ansible/playbooks/packages-redhat-2.yml
  2.  
  3. ---
  4. - hosts: web
  5. become: yes
  6. name: "Install a List of Packages on Red Hat Based System"
  7. vars:
  8. packages: [ 'curl', 'git', 'htop' ]
  9. tasks:
  10. - name: Install a list of packages
  11. yum: name={{ item }} state=latest
  12. with_items: "{{ packages }}"

劇本-4:在 Linux 系統上安裝更新

這個示例劇本允許你在基于 Red Hat 或 Debian 的 Linux 系統上安裝更新。

  1. $ sudo nano /etc/ansible/playbooks/security-update.yml
  2.  
  3. ---
  4. - hosts: web
  5. become: yes
  6. name: "Install Security Update"
  7. tasks:
  8. - name: "Installing Security Update on Red Hat Based System"
  9. yum: name=* update_cache=yes security=yes state=latest
  10. when: ansible_facts['distribution'] == "CentOS"
  11.  
  12. - name: "Installing Security Update on Ubuntu Based System"
  13. apt: upgrade=dist update_cache=yes
  14. when: ansible_facts['distribution'] == "Ubuntu"

 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-03-01 13:00:21

Ansible系統運維

2021-02-22 18:50:03

Ansible系統運維

2011-03-08 16:50:35

2019-11-13 15:44:17

Kafka架構數據

2020-11-25 19:05:50

云計算SaaS公有云

2025-02-28 08:42:53

SpringNetflixHystrix

2021-06-29 08:00:00

Ansible開發工具

2024-08-27 09:09:49

Web系統JSP

2021-01-24 16:00:22

Ansible系統運維

2020-11-13 05:49:09

物聯網城域網IOT

2010-12-23 13:45:23

Office 2010批量激活

2015-08-17 14:13:52

Ansible輕量自動化部署工具

2024-01-10 17:24:00

2020-05-11 09:54:33

JavaScript開發技術

2022-10-28 18:36:18

2023-12-19 09:36:35

PostgreSQL數據庫開源

2010-08-03 15:19:08

FlexBuilder

2011-05-18 15:15:44

MySQL

2021-03-26 10:31:19

人工智能AIOps

2011-03-08 09:22:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色花av| 欧美亚州 | 男女羞羞在线观看 | 亚洲成人免费视频在线观看 | 毛片在线免费 | 羞羞的视频在线观看 | 亚洲国产二区 | 成人欧美一区二区三区 | 91久久夜色精品国产网站 | 激情91 | 91原创视频| 欧洲色| 国产成人在线一区二区 | 亚洲精品一区二区三区蜜桃久 | 欧美区在线 | 国产免费一区二区三区网站免费 | 亚洲日日 | 欧美激情久久久 | 日韩在线一区二区 | 午夜精品视频 | 日日夜夜精品视频 | 亚洲欧洲精品成人久久奇米网 | 亚洲视频在线播放 | 精品在线 | 国产美女视频黄a视频免费 国产精品福利视频 | 成人高清视频在线观看 | 久久99视频免费观看 | www.久久.com | 国产欧美久久精品 | 99久久久久国产精品免费 | 久久国产精品偷 | 成人久久18免费网站 | 奇米影视77 | 精品久久久网站 | 欧美激情一区二区三区 | 观看av| 伊人婷婷 | 亚洲a人 | 成人在线视频网站 | 成人网在线 | 91欧美精品成人综合在线观看 |