主頁 > 軟體設計 > 厲害了,有人這樣對Ansible Playbook做簡介

厲害了,有人這樣對Ansible Playbook做簡介

2021-12-07 09:58:45 軟體設計

厲害了!有人這樣對Ansible Playbook做簡介!

經過一系列的基礎鍛煉與磨礪,終于來到比較高大上的運用了,

(納尼?現在才開始???前程回顧:https://blog.csdn.net/qq_41765918/category_11512932.html)
image-20211205170139996

1. 什么是playbook

中文名:劇本,它是一個自動化處理腳本, Playbook采用YAML語言撰寫,

2. playbook演示

以下做個簡單的操作演示,撰寫好主機清單后再進行劇本的撰寫,

(所以說嘛,基礎很重要,如果不記得主機清單https://blog.csdn.net/qq_41765918/article/details/121676991和組態檔https://blog.csdn.net/qq_41765918/article/details/121706648是如何運用的,快快去學習,)

image-20211205170503291
[student@servera ~]$ cat hosts 
servera

[student@servera ~]$ cat webserver.yml 
---
- name: play to setup web server
  hosts: servera
  remote_user: root
  become: yes
  become_method: sudo
  tasks:
  - name: latest httpd version install
    yum:
      name: httpd
      state: latest

[student@servera ~]$ ansible-playbook -i hosts webserver.yml 
PLAY [play to setup web server] *********************************************************

TASK [Gathering Facts] ******************************************************************
ok: [servera]

TASK [latest httpd version install]******************************************************
changed: [servera]

PLAY RECAP ******************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0

3. Playbook作業流程

  • playbook 劇本是由一個或多個"play"組成的串列
  • play的主要功能在于將預定義的一組主機,裝扮成事先通過ansible中的task定義好的角色,Task
    實際是呼叫ansible的一個module,將多個play組織在一個playbook中,即可以讓它們聯合起
    來,按事先編排的機制執行預定義的動作,
  • Playbook 檔案是采用YAML語言撰寫的

(就正如圖片小人書,劇本都是由我們根據特定需求撰寫好的“腳本”,此“腳本”運用各種模塊通過作用于特定的主機清單而達到需求,)

image-20211205170916711

4. YAML語法簡介

這里只涉及到playbook相關的語法(更多請參考官網http://www.yaml.org),

語法非常嚴格,請仔細仔細再仔細,

在單一檔案中,可用連續三個連字號(---)區分多個檔案,另外,還有選擇性的連續三個點號( ... )用來表示檔案結尾
 次行開始正常寫Playbook的內容,一般建議寫明該Playbook的功能
? 使用#號注釋代碼
? 縮進必須是統一的,不能空格和tab混用,一般縮進2個空格(可以改造tab為縮進)
? 縮進的級別也必須是一致的,同樣的縮進代表同樣的級別,程式判別配置的級別是通過縮進結合換行來實作的
? YAML檔案內容和Linux系統大小寫判斷方式保持一致,是區別大小寫的,key/value的值均需大小寫敏感
? key/value的值可以寫在同一行,也可換行寫,同一行使用 , 逗號分隔
? value可是個字串,也可是另一個串列
? 一個完整的代碼塊功能需最少元素需包括 name和task
? 一個name只能包括一個task
? 使用 |> 來分隔多行,實際上這只是一行,
        include_newlines: |
            exactly as you see
            will appear these three
            lines of poetry

        ignore_newlines: >
            this is really a
            single line of text
            despite appearances
? Yaml中不允許在雙引號中出現轉義符號,所以都是以單引號來避免轉義符錯誤 
? YAML檔案擴展名通常為yml或yaml

很多剛學習的同學,往往運行報錯就掛在語法上,后續可通過不斷的練習來理解,

(語法基礎真的很重要,別 說了你又不聽,聽了你又不懂,懂了你又不做,做了你又做錯,錯了你又不認,認了你又不改,改了你又不服,)

image-20211205171204735

List:串列

其所有元素均使用"-"打頭

- web
- dns
-空格web        # 書寫格式

Dictionary:字典(鍵值對)

通常由多個key與value構成

多行寫法:
name: hunk
blog: "xxxxx"
name:空格hunk   > 這個冒號后面必須是一個空格

同一行寫法:
需要使用{ }
{name: hunk, blog: "xxxxxx"}  > 逗號后建議使用留一個空格

布林值的表示法:
yes/no  true/false

create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false

5. Playbook核心元素

name

可選配置項,可有助于記錄playbook的運行說明,

hosts

hosts 行的內容是一個或多個組或主機的 patterns,以逗號為分隔符,通常是/etc/ansible/hosts定義的主機串列

remote_user 就是遠程執行任務的賬戶名:

---
- hosts: web,dns
  remote_user: root

tasks

任務集

  tasks:
    - name: install httpd
      yum: 
      name: httpd

    - name: start httpd
      service: name=httpd state=started

6. 改造vi中tab鍵功能

為了能更加輕松的編輯playbook,可設定在vi編輯yaml檔案時,按下tab鍵會進行一個雙空格縮進,

$HOME/.vimrc 添加以下內容

autocmd FileType yaml setlocal ai ts=2 sw=2 et

引數解釋:

set ai    # 自動縮進
set ts=2  # tabstop,表示按一個tab之后,顯示出來的相當于幾個空格,默認的是8個,
set sw=2  # shiftwidth,表示每一級縮進的長度
set et    # expandtab,將tab轉成空格,縮進用空格來表示

(別問我為什么要改寫,因為當你見到別人噼里啪啦地敲完鍵盤寫好playbook時,你可能還在默念按了多少個空格,>.<)
image-20211205171658616

7. playbook書寫風格

以下書寫例子中,就是shorthand格式,比較舊的書寫方法:

- name: copy new yum config to host
  copy: src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/

普遍的yaml格式書寫:

- name: copy new yum config to host
  copy: 
    src: /etc/yum.repos.d/ 
    dest: /etc/yum.repos.d/

基本都是使用新的寫法,便于閱讀和排錯,

image-20211205171838919

8. playbook執行

檢測語法:ansible-playbook --syntax-check webserver.yml

模擬執行:ansible-playbook -C webserver.yml

真實執行:ansible-playbook webserver.yml

執行的詳細程度:
-v   :顯示任務結果,
-vv  :任務結果和任務配置都會顯示
-vvv :包含關于與受管主機連接的資訊
-vvvv:增加了連接插件相關的額外詳細程度選項,包括受管主機上用于執行腳本的用戶,以及所執行的腳本

9. 練習演示----如何撰寫playbook

設定tab鍵縮進

[student@servera ~]$ cat .vimrc 
autocmd FileType yaml setlocal ai ts=2 sw=2 et

查看組態檔和主機清單

[student@servera ~]$ mkdir playbook

[student@servera playbook]$ cat ansible.cfg 
[defaults]
inventory=inventory
remote_user=student

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

[student@servera playbook]$ cat inventory 
[web]
serverc
serverd

撰寫所需要的劇本

[student@servera playbook]$ cat site.yml 
---
- name: Install and start Aapche HTTPD
  hosts: web
  tasks:
    - name: httpd package is present
      yum:
        name: httpd
        state: present

    - name: correct index.html is present
      copy:
        content: "This is a test page.\n"
        dest: /var/www/html/index.html

    - name: httpd is started
      service:
        name: httpd
        state: started
        enabled: true

語法檢查

[student@servera playbook]$ ansible-playbook --syntax-check site.yml 

playbook: site.yml

運行劇本前進行語法檢查是一個良好習慣,

執行劇本

[student@servera playbook]$ ansible-playbook site.yml
PLAY [Install and start Aapche HTTPD] ***************************************************
TASK [Gathering Facts] ******************************************************************
ok: [serverc]
ok: [serverd]

TASK [httpd package is present] *********************************************************
changed: [serverd]
changed: [serverc]

TASK [correct index.html is present] ****************************************************
changed: [serverc]
changed: [serverd]

TASK [httpd is started] *****************************************************************
changed: [serverc]
changed: [serverd]

PLAY RECAP ******************************************************************************
serverc    : ok=4    changed=3    unreachable=0    failed=0   
serverd    : ok=4    changed=3    unreachable=0    failed=0

冪等性

[student@servera playbook]$ ansible-playbook site.yml
…………

此為Ansible重要特性之一,用練習演示更容易進行理解,

結果訪問檢查

[student@servera playbook]$ curl serverc
This is a test page.
[student@servera playbook]$ curl serverd
This is a test page.

10. playbook提權

可以寫在劇本中,與hosts,tasks同級

- hosts: all
  become: true
  become_method: sudo
  become_user: root
  
  tasks:
  - debug:
     msg: "Test"

當然,不在劇本上撰寫,在組態檔上撰寫也可以,如果兩個地方都進行撰寫,在劇本中的優先級會比組態檔上的高,例如:組態檔上啟動提權become: yes,但劇本上配置了become: no,最終生效為劇本上的配置,
image-20211205172304867

11. 善于模塊檔案

ansible-doc -l 查看串列

ansible-doc modulename 查看模塊幫助檔案

(上一篇文章總結處https://blog.csdn.net/qq_41765918/article/details/121722471提及,查看幫助真的很重要~~)

image-20211204212605255

12. 練習演示----執行多個playbook

查看組態檔和主機清單

[student@servera ~]$ mkdir playbook-multi
[student@servera ~]$ cd playbook-multi/
[student@servera playbook-multi]$ cat ansible.cfg 
[defaults]
inventory=inventory
remote_user=student

[privilege_escalation]
become=False
become_method=sudo
become_user=root
become_ask_pass=False

[student@servera playbook-multi]$ cat inventory 
servera

撰寫所需要的劇本

[student@servera playbook-multi]$ cat web.yml 
---
- name: Enable web services
  hosts: servera
  become: yes
  tasks:
    - name: latest version of httpd and firewalld installed
      yum:
        name:
          - httpd
          - firewalld
        state: latest

    - name: test html page is installed
      copy:
        content: "Hello World!\n"
        dest: /var/www/html/index.html

    - 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: Test web server
  hosts: localhost
  become: no
  tasks:
    - name: connect to web server
      uri:
        url: http://servera
        return_content: yes
        status_code: 200

語法檢查

[student@servera playbook-multi]$ ansible-playbook --syntax-check web.yml 

playbook: web.yml

使用-v執行劇本

[student@servera playbook-multi]$ ansible-playbook web.yml -v
PLAY [Enable web services] **************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [servera]

TASK [latest version of httpd and firewalld installed] ******************************************
ok: [servera] => {"changed": false, "msg": "", "rc": 0, "results": ["All packages providing httpd are up to date", "All packages providing firewalld are up to date", ""]}

…………
TASK [connect to web server] ************************************************************
ok: [localhost] => {"accept_ranges": "bytes", "changed": false, "connection": "close", "content": "Hello World!\n", "content_length": "37", "content_type": "text/html; charset=UTF-8", "cookies": {}, "cookies_string": "", "date": "Fri, 04 Sep 2020 12:54:49 GMT", "etag": "\"25-5ae7c5e78c9df\"", "last_modified": "Fri, 04 Sep 2020 12:54:27 GMT", "msg": "OK (37 bytes)", "redirected": false, "server": "Apache/2.4.6 (Red Hat Enterprise Linux)", "status": 200, "url": "http://servera"}

PLAY RECAP **********************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   
servera    : ok=6    changed=0    unreachable=0    failed=0

總結

  • yaml語法非常嚴格,仔細撰寫,
  • 改造tab鍵以提高撰寫劇本的效率,
  • 語法檢查是一個良好習慣,
  • 善用模塊檔案查看引數說明與例子,
  • 通過練習與實驗了解冪等性,
  • 可使用 -v 引數查看詳細輸出進行排錯,
  • 若喜歡金魚哥的文章,順手點個贊,也可點個關注,因為后續會不斷上干貨,
    image-20211205175436945

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/374688.html

標籤:其他

上一篇:軟體體系結構復習

下一篇:計算機網路原理(謝希仁第八版)第五章課后習題答案

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more