最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Ansible 教程

2021-04-06 11:44 作者:信碼由韁  | 我要投稿

【注】本文譯自:https://www.edureka.co/blog/ansible-tutorial/

? ? 在閱讀本文之前,你應(yīng)該已經(jīng)知道,Ansible 構(gòu)成了 DevOps 認(rèn)證的關(guān)鍵部分,它是用于配置管理、部署和編排的工具。

? ? 本教程的主要內(nèi)容包括

  • 學(xué)習(xí)如何編寫 Ansible 劇本

  • 學(xué)習(xí) Ansible 不同模塊間的差別

  • 學(xué)習(xí)編寫 Ansible Adhoc 命令

  • Ansible 動手實(shí)踐

編寫 Ansible 劇本

? ? Ansible 中的劇本以 YAML 格式編寫。它是一種人類可讀的數(shù)據(jù)序列化語言。它通常用于配置文件。它也可以用于存儲數(shù)據(jù)的許多應(yīng)用程序中。

? ??對于Ansible,幾乎每個 YAML 文件都以列表開頭。列表中的每個項目都是鍵/值對的列表,通常稱為“哈希”或“字典”。因此,我們需要知道如何在 YAML 中編寫列表和字典。

? ??列表的所有成員都是以“-”(破折號和空格)開頭的相同縮進(jìn)級別的行。也可能有更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如字典列表或混合字典,其值是列表或兩者的混合。

? ? ?例如,有關(guān)edureka的部門列表:

departments:

- marketing

- sales

- solutions

- content writing

- support

- product

? ? 下面是一個字典的例子:

-USA

-continent: North America

-capital: Washington DC

-population: 319 million

主機(jī)和用戶:

? ??對于劇本中的每一項,您都可以選擇基礎(chǔ)設(shè)施中的哪個計算機(jī)作為目標(biāo),以及由哪個遠(yuǎn)程用戶來完成任務(wù)。要將主機(jī)包含在 Ansible 清單中,我們將使用主機(jī)的 IP 地址。

? ??通常,主機(jī)是由冒號分隔的一個或多個組或主機(jī)模式的列表。遠(yuǎn)程用戶只是用戶帳戶的名稱。

變量:

? ??Ansible 使用預(yù)先定義的變量來使劇本和角色具有更大的靈活性。它們可用于遍歷一組給定的值,訪問各種信息(例如系統(tǒng)的主機(jī)名),并用特定值替換模板中的某些字符串。

? ??Ansible 已經(jīng)為每個系統(tǒng)定義了豐富的變量集。當(dāng) Ansible 在系統(tǒng)上運(yùn)行時,就會收集有關(guān)該系統(tǒng)的所有 facts 和信息并將其設(shè)置為變量。

? ??但是有一個命名變量的規(guī)則。變量名稱應(yīng)為字母,數(shù)字和下劃線。變量應(yīng)始終以字母開頭。例如。wamp_21,port5是有效的變量名,而01_port,_server無效。

任務(wù):

? ??任務(wù)允許您將配置策略分解為更小的文件。任務(wù)包括從其他文件提取。Ansible 的任務(wù)和它的英文意思差不多。

? ? 例如: Install <package_name>, update <software_name> 等等。

處理程序:

? ??處理程序就像 Ansible 劇本中的常規(guī)任務(wù)一樣,但是僅在 Task 包含 notify 指令并且還指示它已更改某些內(nèi)容時才運(yùn)行。例如,如果更改了配置文件,則引用該配置文件的任務(wù)可能會通知服務(wù)重新啟動處理程序。

? ? 下面是一個劇本示例,它將啟動 Apache httpd 服務(wù)器程序:

---

- hosts: webservers

vars:

http_port: 80

max_clients: 200

remote_user: root

tasks:

- name: ensure apache is at the latest version

yum: name=httpd state=latest

- name: write the apache config file

template: src=/srv/httpd.j2 dest=/etc/httpd.conf

notify:

- restart apache

- name: ensure apache is running (and enable it at boot)

service: name=httpd state=started enabled=yes

handlers:

- name: restart apache

service: name=httpd state=restarted

? ??我希望該示例將使您與我上面提到的劇本組件的描述關(guān)聯(lián)根活佛。如果您仍然不清楚,請不要擔(dān)心,這些疑問都會在本文后面的部分得到澄清。

? ??這都是劇本。你也將編寫這樣的劇本。但是 Ansible 也為您提供了各種各樣的模塊,您可以使用它們。

模塊

? ??Ansible 中的模塊是冪等的。從 RESTful 服務(wù)的角度來看,要使操作(或服務(wù)調(diào)用)具有冪等性,客戶端可以重復(fù)進(jìn)行相同的調(diào)用,同時產(chǎn)生相同的結(jié)果。 換句話說,發(fā)出多個相同的請求與發(fā)出單個請求具有相同的效果。

? ??Ansible 中有不同類型的模塊:

  • 核心模塊

  • 附加模塊

核心模塊

? ??這些是 Ansible 核心團(tuán)隊維護(hù)的模塊,并將始終隨 Ansible 一起提供。與“額外”回購中的請求相比,它們還將對所有請求獲得更高的優(yōu)先級。

? ? 這些模塊的源代碼由 Ansible 托管在 GitHub 上的 Ansible-modules-core 中。

附加模塊

? ??這些模塊當(dāng)前隨 Ansible 一起提供,但將來可能會單獨(dú)提供。它們也主要由Ansible社區(qū)維護(hù)。 非核心模塊仍然可以完全使用,但是對于問題和請求請求的響應(yīng)率可能會略低。

? ? 隨著時間的流逝,流行的“附加”模塊可能會升級為核心模塊。

? ??這些模塊的源代碼由 Ansible 在 GitHub 上的 Ansible-modules-extras 中托管。

? ??例如:遠(yuǎn)程管理模塊中的一個附加模塊是 ipmi_power 模塊,它是遠(yuǎn)程計算機(jī)的電源管理器。它需要 python 2.6 或更高版本以及 pyghmi 才能運(yùn)行。

? ??您可以通過編寫一個 adhoc 命令來使用此模塊,就像我在下面編寫的一樣:

ipmi_power : name ="test.domain.com" user="localhost" password="xyz" state="on"

返回值

? ??Ansible 模塊通常返回一個數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)可以注冊到變量中,或者在 Ansible 程序輸出時直接看到。每個模塊可以記錄其自己唯一的返回值。

? ??返回值的一些例子有:

  • changed::每當(dāng)任務(wù)進(jìn)行任何更改時,都將返回一個布爾值。

  • failed:如果任務(wù)失敗,返回一個布爾值。

  • msg:返回一個字符串,給用戶一個能用消息。

Adhoc 命令

? ??Adhoc 命令是執(zhí)行某些操作的簡單一行命令。 使用 Ansible 命令運(yùn)行的模塊是 adhoc 命令。

? ? 如:?

ansible host -m netscaler -a "nsc_host=nsc.example.com user=apiuser password=apipass"

? ??上面的 adhoc 命令使用 netscaler 模塊來禁用服務(wù)器。Ansible 中提供了數(shù)百個模塊,您可以在其中引用和編寫 adhoc 命令。


? ? 好了,所有的理論解釋都講過了,讓我們通過動手實(shí)踐來學(xué)習(xí) Ansible。

動手實(shí)踐

? ??我打算寫一個劇本,在我的節(jié)點(diǎn)/主機(jī)上安裝 Nginx。

? ? 讓我們開始吧 :)

第 1 步:使用 SSH 連接到主機(jī)。為此,您需要生成一個公共 SSH 密鑰。

? ??使用以下命令:

ssh-keygen

? ??如您在上面的快照中看到的,命令?ssh-keygen?生成了一個 SSH 公鑰。

第 2 步:您的下一個任務(wù)是在主機(jī)上復(fù)制 SSH 公鑰。為此,請使用以下命令:

ssh-copy-id -i root@<IP address of your host>

? ? 上面的快照顯示了將 SSH 公鑰復(fù)制到主機(jī)。

第 3 步:列出清單中主機(jī)/節(jié)點(diǎn)的 IP 地址。

? ??使用以下命令:

vi /etc/ansible/hosts

? ??這將打開一個 vi 編輯器,您可以在其中列出主機(jī)的IP地址。這是您現(xiàn)在的清單。

第 4 步:讓我們 ping 一下以確保已建立連接。

? ??上面的快照確認(rèn)您的控制計算機(jī)和主機(jī)之間已建立連接。

第 5 步:現(xiàn)在讓我們編寫一個在主機(jī)上安裝 Nginx 的劇本。您可以在 vi 編輯器中編寫劇本。為此,只需使用以下命令創(chuàng)建您的劇本:

vi <name of your file>.yml

? ??下面的快照顯示了我的劇本,以 YAML 格式編寫的用于安裝 Nginx 的劇本。

? ??劇本的任務(wù)在 YAML 中定義為字典列表,并自上而下執(zhí)行。 如果我們有多個主機(jī),則在繼續(xù)進(jìn)行下一個任務(wù)之前,將針對每個主機(jī)嘗試每個任務(wù)。每個任務(wù)都定義為字典,可以具有多個鍵,例如“ name”或“ sudo”,它們表示任務(wù)的名稱以及它是否需要 sudo 特權(quán)。

? ? 設(shè)置一個變量?server_port 用于偵聽 TCP 端口 8080?傳入的用戶請求。

? ??在這里,第一個任務(wù)是獲取用于安裝 Nginx 的必要軟件包,然后進(jìn)行安裝。在內(nèi)部,Ansible 將檢查目錄是否存在,如果不存在則創(chuàng)建該目錄,否則將不執(zhí)行任何操作。

? ??下一個任務(wù)是配置 Nginx。在 Nginx 中,上下文包含配置細(xì)節(jié)。

? ??在這里,模板是一個可以部署在主機(jī)上的文件。但是,模板文件還包含一些參考變量,這些參考變量是從定義為 Ansible 劇本的一部分的變量或從主機(jī)收集的 facts 中提取的。包含配置詳細(xì)信息的 facts 將從源目錄中提取,并復(fù)制到目標(biāo)目錄中。

? ??這里的處理程序定義了僅在通知任務(wù)或狀態(tài)更改時才執(zhí)行的動作。在這個劇本中,我們定義了以下通知:重啟 Nginx 處理程序,一旦將文件和模板復(fù)制到主機(jī),它將重新啟動 Nginx。

? ??現(xiàn)在,保存文件并退出。

第 6 步:現(xiàn)在,使用以下命令運(yùn)行此劇本:

ansible-playbook <name of your file>.yml

? ??我們可以在上面的屏幕截圖中看到我們的任務(wù)正在執(zhí)行;正在安裝 Nginx。

第 7 步:讓我們檢查一下我的主機(jī)上是否安裝了 Nginx。使用以下命令:

ps waux | grep nginx

? ??您可以在上面的屏幕截圖中看到不同的進(jìn)程 ID 3555 和 103316 正在運(yùn)行,這確保 Nginx 在您的主機(jī)上運(yùn)行。

? ??恭喜!您已經(jīng)使用 Ansible 劇本在主機(jī)上成功部署了 Nginx。


Ansible 教程的評論 (共 條)

分享到微博請遵守國家法律
中江县| 莱西市| 永春县| 安图县| 定日县| 兴国县| 湟源县| 达州市| 湖南省| 华蓥市| 齐齐哈尔市| 陵川县| 陈巴尔虎旗| 焦作市| 曲靖市| 五大连池市| 东城区| 金寨县| 汶上县| 盱眙县| 铜鼓县| 阆中市| 法库县| 兰溪市| 错那县| 庆城县| 大渡口区| 万荣县| 高安市| 潜江市| 响水县| 哈尔滨市| 江永县| 清河县| 天祝| 盘锦市| 堆龙德庆县| 南丹县| 柞水县| 高唐县| 南雄市|