ansible七種武器和json


                                                           ansible七種武器和json

• 第一種武器

ansible 命令,用於執行臨時性的工作,也是我們之前主要學習的功能,必須掌握

• 第二種武器

ansible-doc Ansible模塊文檔說明,針對每個模塊都有詳細的用法說明及應用案例介紹,功能和Linux系統man命令類似,必須掌握ansible七種武器

• 第三種武器

ansible-console Ansible 為用戶提供的一款交互式工具,用戶可以在 ansible-console 虛擬出來的終端上像 Shell 一樣使用 Ansible 內置的各種命令,這為習慣於使用 Shell 交互方式的用戶提供了良好的使用體驗。

• 第四種武器

ansible-galaxy github 上下載管理 Roles 的一款工具,python pip 類似。ansible七種武器

• 第五種武器

ansible-playbook 是日常應用中使用頻率最高的命令,其工作機制是:通過讀取預先編寫好的 playbook 文件實現批量管理。要實現的功能與命令 ansible 一樣,可以理解為按一定條件組成的 ansible 任務集,必須掌握

• 第六種武器

ansible-vault 主要用於配置文件加密,如編寫的Playbook 配置文件中包含敏感信息,不希望其他人隨意查看, ansible-vault 可加密/解密這個配置文件ansible七種武器

• 第七種武器

ansible-pull

Ansible 有兩種工作模式 pull/push ,默認使用 push模式工作,pull 模式和通常使用的 push 模式工作機理剛好相反

– 適用場景:有數量巨大的機器需要配置,即使使用高並發線程依舊要花費很多時間;

– 通常在配置大批量機器的場景下會使用,靈活性稍有欠缺,但效率幾乎可以無限提升,對運維人員的技術水平和前瞻性規划有較高要求。

 

 

json簡介

 json 是什么?

json JavaScript 對象表示法,它是一種基於文本,獨立於語言的輕量級數據交換格式。

JSON中的分隔符限於單引號 ' 、小括號 ()、中括號[ ]、大括號 { } 、冒號 : 和逗號 ,

json 特性

JSON 是純文本

JSON 具有"自我描述性"(人類可讀)

JSON 具有層級結構(值中存在值)

JSON 可通過 JavaScript 進行解析json簡介

json 語法規則

– 數據在名稱/值對中

– 數據由逗號分隔

– 大括號保存對象

– 中括號保存數組

json 數據的書寫格式是:名稱/值對。

– 名稱/值對包括字段名稱(在雙引號中),后面寫一個冒號,然后是值,例如:"漂亮姐" : "龐麗靜"

json 語法規則之數組

{ "講師":

["牛犇", "丁丁", "靜靜","李欣"]

}

• 復合復雜類型

{ "講師":

[ {"牛犇":"小逗逼", "負責階段":"1"},

{"丁丁":"老逗逼", "負責階段":"2"},

{"靜靜":"漂亮姐", "負責階段":"3"},

{"李欣":"老司機", "負責階段":"4"}

]

}

 

yaml簡介

yaml 是什么     -- //不可table

– 是一個可讀性高,用來表達數據序列的格式。

YAML:YAML Ain't Markup Language

YAML參考了其他多種語言,包括:C語言、PythonPerl,並從XML、電子郵件的數據格式(RFC 2822)中獲得靈感。Clark Evans2001年首次發表了這種語言[1],另外Ingy döt NetOren Ben-Kiki也是這語言的共同設計者[2]。目前已經有數種編程語言或腳本

語言支持(或者說解析)這種語言。

yaml 基礎語法

YAML的結構通過空格來展示

– 數組使用"- "來表示

– 鍵值對使用": "來表示

YAML使用一個固定的縮進風格表示數據層級結構關系

– 一般每個縮進級別由兩個以上空格組成

# 表示注釋

• 注意:***************************************

– 不要使用tab,縮進是初學者容易出錯的地方之一

– 同一層級縮進必須對齊

YAML的鍵值表示方法

– 采用冒號分隔

: 后面必須有一個空格

YAML鍵值對例子

"龐麗靜": "漂亮姐"

– 或

"龐麗靜":

"漂亮姐"

– 復雜YAML的鍵值對嵌套

"講師":

"龐麗靜": "漂亮姐"

– 或

"講師":

"龐麗靜":

"漂亮姐"

– 數組

["牛犇", "丁丁", "靜靜", "李欣"]

YAML 數組表示方法

– 使用一個短橫杠加一個空格

YAML 數組例子

    - "牛犇"

    - "丁丁"

    - "靜靜"

    - "李欣"

– 哈希數組復合表達式

"講師":

     - "牛犇"

     - "丁丁"

     - "靜靜"

     - "李欣"yaml簡介

– 高級復合表達式

"講師":

-

    "牛犇": "小逗比"

    "階段": 1

-

     "丁丁": "老逗比"

     "階段": 2

-

     "靜靜": "漂亮姐"

     "階段": 3

-

     "李欣": "老司機"

     "階段": 4

 

yaml高級語法

| > 表示對應的值為多行字符, > | 的區別是會把 \n 轉換為空格

! 可以設置類型,!! 可以強制類型轉換

– 為了維持文件的簡潔,並避免數據輸入的錯誤,YAML提供了結點參考(*)和散列合並(<<)參考到其他結點標簽的錨點標記(&)。參考會將樹狀結構加入錨點標記的內容,並可以在所有數據結構中運作,合並只有散列表可以使用,可以將鍵值自錨點標記復制到指定的散列表中

 

jinja2模版簡介

jinja2 是什么

Jinja2是基於python的模板引擎,包含 變量 和 表達式兩部分,這兩者在模板求值的時候會被替換為值。模板中還有標簽,控制模板的邏輯。

• 為什么要學習 jinja2 模版

– 要使用 ansible 就要深入學習 playbook 配置及模板。playbook 的模板使用 python jinja2 模塊來處理的jinja2模版簡介

jinja2 模版基本語法

– 模板的表達式都是包含在分隔符 "{{ }}" 內的;

– 控制語句都是包含在分隔符 "{% %}" 內的;

– 另外,模板也支持注釋,都是包含在分隔符 "{# #}",支持塊注釋。

– 調用變量

{{varname}}

– 計算

{{2+3}}

– 判斷

{{1 in [1,2,3]}}

jinja2 模版控制語句

{% if name == '小逗逼' %}

講故事,吹牛B

{% elif name == '老逗逼' %}

黑絲(82年的)

{% elif name == '漂亮姐' %}

約會

{% else %}

沉迷學習,無法自拔

{% endif %}

jinja2 模版控制語句

{% if name == ... ... %}

... ...

{% elif name == '漂亮姐' %}

{% for method in [約會, 逛街, 吃飯, 看電影, 去賓館] %}

{{do method}}

{% endfor %}

... ...

{% endif %}

jinja2 過濾器

– 變量可以通過 過濾器 修改。過濾器與變量用管道符號( | )分割,並且也 可以用圓括號傳遞可選參數。多個過濾器可以鏈式調用,前一個過濾器的輸出會被作為 后一個過濾器的輸入。

– 例如:

– 把一個列表用逗號連接起來: {{ list|join(', ') }}

– 過濾器這里不一一列舉,需要的可以查詢在線文檔

http://docs.jinkan.org/docs/jinja2/templates.html

#builtin-filters

 

 

playbook是什么

playbook 是什么?

playbook ansible 用於配置,部署,和管理托管主機劇本。通過 playbook 的詳細描述,執行其中的一系列 tasks,可以讓遠端主機達到預期的狀態。

– 也可以這么理解,playbook 字面意思,即劇本,現實中由演員按照劇本表演,Ansible 中由計算機進行表演,由計算機安裝,部署應用,提供對外服務,以及組織計算機處理各種各樣的事情playbook是什么

• 為什么要使用playbook

– 執行一些簡單的任務,使用ad-hoc命令可以方便的解決問題,但是有時一個設施過於復雜,需要大量的操作時候,執行的 ad-hoc 命令是不適合的,這時最好使用playbook,就像執行 shell 命令與寫 shell 腳本一樣,也可以理解為批處理任務

– 使用 playbook 你可以方便的重用編寫的代碼,可以移植到不同的機器上面,像函數一樣,最大化的利用代碼在使用 Ansible 的過程中,你也會發現,你所處理的大部分操作都是編寫 playbookplaybook語法基礎

playbook 語法格式

playbookYAML 語言編寫,遵循 YAML 標准

– 在同一行中,#之后的內容表示注釋

– 同一個列表中的元素應該保持相同的縮進

playbook 由一個或多個 play 組成

play hosts,variables,roles,tasks 等對象的表示方法都是鍵值中間以 ": " 分隔表示

YAML 還有一個小的怪癖. 所有的 YAML 文件開始行都應該是 ---. 這是 YAML 格式的一部分, 表明一個文件的開始

playbook語法基礎

playbook 構成

Target: 定義將要執行 playbook 的遠程主機組

Variable: 定義 playbook 運行時需要使用的變量

Tasks: 定義將要在遠程主機上執行的任務列表

Handler: 定義 task 執行完成以后需要調用的任務playbook語法基礎

Playbook執行結果

• 使用 ansible-playbook 運行playbook文件,得到輸出內容為 JSON 格式。並且由不同顏色組成,便於識別。

一般而言

• 綠色代表執行成功

***代表系統代表系統狀態發生改變

• 紅色代表執行失敗playbook語法基礎

• 第一個playbook

---

- hosts: all

remote_user: root

tasks:

- ping:

# 第一行,表示開始

ansible-playbook myping.yml -f 5

-f 並發進程數量,默認是 5

hosts 行的內容是一個或多個組或主機的 patterns,以逗號為分隔符

remote_user 就是賬戶名

playbook語法基礎續 ... ...

tasks

– 每一個 play 包含了一個 task 列表(任務列表).

– 一個 task 在其所對應的所有主機上(通過 hostpattern 匹配的所有主機)執行完畢之后,下一個 task才會執行.

– 有一點需要明白的是(很重要),在一個 play 之中,所有 hosts 會獲取相同的任務指令,這是 play 的一個目的所在,也就是將一組選出的 hosts 映射到 task,執行相同的操作playbook語法基礎

playbook 執行命令

– 給所有主機添加用戶 plj,設置默認密碼 123456

– 要求第一次登錄修改密碼

---

- hosts: all

  remote_user: root

  tasks:

    - name: create user plj

      user: group=wheel uid=1000 name=plj

    - shell: echo 123456 | passwd --stdin plj

    - shell: chage -d 0 plj

 [root@localhost 07.03]# ansible-playbook uesr2.yml

 

案例2

---

- hosts: web1

  remote_user: root

  vars:

    uname: li4

  tasks:

    - shell: userdel -r zhang3

      ignore_errors: True

    - user:

        name: "{{uname}}"

        password: "{{ '123456' | password_hash('sha512') }}"

        groups: users

[root@localhost ansible]# ansible-playbook uesr1.yml

 

案例3

---

- hosts: web

  remote_user: root

  tasks:

    - name: install the latest version of Apache

      yum:

        name: httpd

        state: installed

    - lineinfile:

        path: /etc/httpd/conf/httpd.conf

        regexp: '^Listen '

        line: 'Listen 8080'

    - lineinfile:

        path: /etc/httpd/conf/httpd.conf

        regexp: '#ServerName '

        line: 'ServerName localhost'

    - shell: echo "hello world" >index.html

      args:

        chdir: /var/www/html

      notify:

        - restart httpd

  handlers:

    - name: restart httpd

      service: name=httpd state=restarted

[root@localhost 07.03]# ansible-playbook httpd.yml              


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM