成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用Ansible

這篇文章主要介紹了如何使用Ansible,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設計、成都網(wǎng)站建設、成都網(wǎng)站設計、電子商務、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務。公司擁有豐富的網(wǎng)站建設和互聯(lián)網(wǎng)應用系統(tǒng)開發(fā)管理經驗、成熟的應用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團隊及專業(yè)的網(wǎng)站設計師團隊。

配置

Ansible 的配置文件保存在 /etc/ansible 中,這很有道理,因為 /etc/ 是系統(tǒng)程序應該保存配置文件的地方。我需要使用的兩個文件是 ansible.cfg 和 hosts。

ansible.cfg

在進行了從文檔和線上找到的一些實踐練習之后,我遇到了一些有關棄用某些較舊的 Python 文件的警告信息。因此,我在 ansible.cfg 中將 deprecation_warnings 設置為 false,這樣那些憤怒的紅色警告消息就不會出現(xiàn)了:

deprecation_warnings = False

這些警告很重要,所以我稍后將重新回顧它們,并弄清楚我需要做什么。但是現(xiàn)在,它們不會再擾亂屏幕,也不會讓我混淆實際上需要關注的錯誤。

hosts 文件

與 /etc/hosts 文件不同,hosts 文件也被稱為清單inventory文件,它列出了網(wǎng)絡上的主機。此文件允許將主機分組到相關集合中,例如“servers”、“workstations”和任何你所需的名稱。這個文件包含幫助和大量示例,所以我在這里就不詳細介紹了。但是,有些事情你必須知道。

主機也可以列在組之外,但是組對于識別具有一個或多個共同特征的主機很有幫助。組使用 INI 格式,所以服務器組看起來像這樣:

[servers]server1server2......

這個文件中必須有一個主機名,這樣 Ansible 才能對它進行操作。即使有些子命令允許指定主機名,但除非主機名在 hosts 文件中,否則命令會失敗。一個主機也可以放在多個組中。因此,除了 [servers] 組之外,server1 也可能是 [webservers] 組的成員,還可以是 [ubuntu] 組的成員,這樣以區(qū)別于 Fedora 服務器。

Ansible 很智能。如果 all 參數(shù)用作主機名,Ansible 會掃描 hosts 文件并在它列出的所有主機上執(zhí)行定義的任務。Ansible 只會嘗試在每個主機上工作一次,不管它出現(xiàn)在多少個組中。這也意味著不需要定義 all 組,因為 Ansible 可以確定文件中的所有主機名,并創(chuàng)建自己唯一的主機名列表。

另一件需要注意的事情是單個主機的多個條目。我在 DNS 文件中使用 CNAME 記錄來創(chuàng)建別名,這些別名指向某些主機的 A 記錄,這樣,我可以將一個主機稱為 host1 或 h2 或 myhost。如果你在 hosts 文件中為同一主機指定多個主機名,則 Ansible 將嘗試在所有這些主機名上執(zhí)行其任務,它無法知道它們指向同一主機。好消息是,這并不會影響整體結果;它只是多花了一點時間,因為 Ansible 會在次要主機名上工作,它會確定所有操作均已執(zhí)行。

Ansible 實情

我閱讀過 Ansible 的大多數(shù)材料都談到了 Ansible 實情facts,它是與遠程系統(tǒng)相關的數(shù)據(jù),包括操作系統(tǒng)、IP 地址、文件系統(tǒng)等等。這些信息可以通過其它方式獲得,如 lshw、dmidecode 或 /proc 文件系統(tǒng)等。但是 Ansible 會生成一個包含此信息的 JSON 文件。每次 Ansible 運行時,它都會生成這些實情數(shù)據(jù)。在這個數(shù)據(jù)流中,有大量的信息,都是以鍵值對形式出現(xiàn)的:<"variable-name": "value">。所有這些變量都可以在 Ansible 劇本中使用,理解大量可用信息的最好方法是實際顯示一下:

# ansible -m setup <hostname> | less

明白了嗎?你想知道的有關主機硬件和 Linux 發(fā)行版的所有內容都在這里,它們都可以在劇本中使用。我還沒有達到需要使用這些變量的地步,但是我相信在接下來的幾天中會用到。

模塊

上面的 ansible 命令使用 -m 選項來指定 setup 模塊。Ansible 已經內置了許多模塊,所以你對這些模塊不需要使用 -m。也可以安裝許多下載的模塊,但是內置模塊可以完成我目前項目所需的一切。

劇本

劇本playbook幾乎可以放在任何地方。因為我需要以 root 身份運行,所以我將它放在了 /root/ansible 下。當我運行 Ansible 時,只要這個目錄是當前的工作目錄(PWD),它就可以找到我的劇本。Ansible 還有一個選項,用于在運行時指定不同的劇本和位置。

劇本可以包含注釋,但是我看到的文章或書籍很少提及此。但作為一個相信記錄一切的系統(tǒng)管理員,我發(fā)現(xiàn)使用注釋很有幫助。這并不是說在注釋中做和任務名稱同樣的事情,而是要確定任務組的目的,并確保我以某種方式或順序記錄我做這些事情的原因。當我可能忘記最初的想法時,這可以幫助以后解決調試問題。

劇本只是定義主機所需狀態(tài)的任務集合。在劇本的開頭指定主機名或清單組,并定義 Ansible 將在其上運行劇本的主機。

以下是我的一個劇本示例:

################################################################################# This Ansible playbook updates Midnight commander configuration files.        #################################################################################- name: Update midnight commander configuration files  hosts: all   tasks:  - name: ensure midnight commander is the latest version    dnf:      name: mc      state: present   - name: create ~/.config/mc directory for root    file:      path: /root/.config/mc      state: directory      mode: 0755      owner: root      group: root   - name: create ~/.config/mc directory for dboth    file:      path: /home/dboth/.config/mc      state: directory      mode: 0755      owner: dboth      group: dboth   - name: copy latest personal skin    copy:      src: /root/ansible/UpdateMC/files/MidnightCommander/DavidsGoTar.ini      dest: /usr/share/mc/skins/DavidsGoTar.ini      mode: 0644      owner: root      group: root   - name: copy latest mc ini file    copy:      src: /root/ansible/UpdateMC/files/MidnightCommander/ini      dest: /root/.config/mc/ini      mode: 0644      owner: root      group: root   - name: copy latest mc panels.ini file    copy:      src: /root/ansible/UpdateMC/files/MidnightCommander/panels.ini      dest: /root/.config/mc/panels.ini      mode: 0644      owner: root      group: root<截斷>

劇本從它自己的名字和它將要操作的主機開始,在本文中,所有主機都在我的 hosts 文件中。tasks 部分列出了使主機達到所需狀態(tài)的特定任務。這個劇本從使用 DNF 更新 Midnight Commander 開始(如果它不是最新的版本的話)。下一個任務確保創(chuàng)建所需的目錄(如果它們不存在),其余任務將文件復制到合適的位置,這些 file 和 copy 任務還可以為目錄和文件設置所有權和文件模式。

劇本細節(jié)超出了本文的范圍,但是我對這個問題使用了一點蠻力。還有其它方法可以確定哪些用戶需要更新文件,而不是對每個用戶的每個文件使用一個任務。我的下一個目標是簡化這個劇本,使用一些更先進的技術。

運行劇本很容易,只需要使用 ansible-playbook 命令。.yml 擴展名代表 YAML,我看到過它的幾種不同含義,但我認為它是“另一種標記語言Yet Another Markup Language”,盡管有些人聲稱 YAML 不是這種語言。

這個命令將會運行劇本,它會更新 Midnight Commander 文件:

# ansible-playbook -f 10 UpdateMC.yml

-f 選項指定 Ansible 使用 10 個線程來執(zhí)行操作。這可以大大加快整個任務的完成速度,特別是在多臺主機上工作時。

輸出

劇本運行時會列出每個任務和執(zhí)行結果。ok 代表任務管理的機器狀態(tài)已經完成,因為在任務中定義的狀態(tài)已經為真,所以 Ansible 不需要執(zhí)行任何操作。

changed 表示 Ansible 已經執(zhí)行了指定的任務。在這種情況下,任務中定義的機器狀態(tài)不為真,所以執(zhí)行指定的操作使其為真。在彩色終端上,TASK 行會以彩色顯示。我的終端配色為“amber-on-black”,TASK 行顯示為琥珀色,changed 是棕色,ok 為綠色,錯誤是紅色。

下面的輸出是我最終用于在新主機執(zhí)行安裝后配置的劇本:

PLAY [Post-installation updates, package installation, and configuration] TASK [Gathering Facts]ok: [testvm2] TASK [Ensure we have connectivity]ok: [testvm2] TASK [Install all current updates]changed: [testvm2] TASK [Install a few command line tools]changed: [testvm2] TASK [copy latest personal Midnight Commander skin to /usr/share]changed: [testvm2] TASK [create ~/.config/mc directory for root]changed: [testvm2] TASK [Copy the most current Midnight Commander configuration files to /root/.config/mc]changed: [testvm2] =&gt; (item=/root/ansible/PostInstallMain/files/MidnightCommander/DavidsGoTar.ini)changed: [testvm2] =&gt; (item=/root/ansible/PostInstallMain/files/MidnightCommander/ini)changed: [testvm2] =&gt; (item=/root/ansible/PostInstallMain/files/MidnightCommander/panels.ini) TASK [create ~/.config/mc directory in /etc/skel]changed: [testvm2] <截斷>

cowsay

如果你的計算機上安裝了 cowsay 程序,你會發(fā)現(xiàn) TASK 的名字出現(xiàn)在奶牛的語音泡泡中:

 ____________________________________< TASK [Ensure we have connectivity] > ------------------------------------        \   ^__^         \  (oo)\\_______            (__)\       )\/\                ||----w |                ||     ||

如果你沒有這個有趣的程序,你可以使用發(fā)行版的包管理器安裝 Cowsay 程序。如果你有這個程序但不想要它,可以通過在 /etc/ansible/ansible.cfg 文件中設置 nocows=1 將其禁用。

我喜歡這頭奶牛,它很有趣,但是它會占用我的一部分屏幕。因此,在它開始妨礙我使用時,我就把它禁用了。

目錄

與我的 Midnight Commander 任務一樣,經常需要安裝和維護各種類型的文件。創(chuàng)建用于存儲劇本的目錄樹的“最佳實踐”和系統(tǒng)管理員一樣多,至少與編寫有關 Ansible 書和文章的作者數(shù)量一樣多。

我選擇了一個對我有意義的簡單結構:

/root/ansible
└── UpdateMC
    ├── files
    │   └── MidnightCommander
    │       ├── DavidsGoTar.ini
    │       ├── ini
    │       └── panels.ini
    └── UpdateMC.yml

你可以使用任何結構。但是請注意,其它系統(tǒng)管理員可能需要使用你設置的劇本來工作,所以目錄應該具有一定程度的邏輯。當我使用 RPM 和  Bash  腳本執(zhí)行安裝任務后,我的文件倉庫有點分散,絕對沒有任何邏輯結構。當我為許多管理任務創(chuàng)建劇本時,我將介紹一個更有邏輯的結構來管理我的目錄。

多次運行劇本

根據(jù)需要或期望多次運行劇本是安全的。只有當主機狀態(tài)與任務中指定的狀態(tài)不匹配時,才會執(zhí)行每個任務。這使得很容易從先前的劇本運行中遇到的錯誤中恢復。因為當劇本遇到錯誤時,它將停止運行。

在測試我的第一個劇本時,我犯了很多錯誤并改正了它們。假設我的修正正確,那么劇本每次運行,都會跳過那些狀態(tài)已與指定狀態(tài)匹配的任務,執(zhí)行不匹配狀態(tài)的任務。當我的修復程序起作用時,之前失敗的任務就會成功完成,并且會執(zhí)行此任務之后的任務 &mdash;&mdash; 直到遇到另一個錯誤。

這使得測試變得容易。我可以添加新任務,并且在運行劇本時,只有新任務會被執(zhí)行,因為它們是唯一與測試主機期望狀態(tài)不匹配的任務。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用Ansible”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!

本文名稱:如何使用Ansible
本文鏈接:http://jinyejixie.com/article32/ipigpc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、做網(wǎng)站自適應網(wǎng)站、企業(yè)網(wǎng)站制作網(wǎng)站收錄、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設計
化德县| 牟定县| 泌阳县| 柳河县| 乳源| 大名县| 黄石市| 贺兰县| 洛隆县| 乌鲁木齐县| 洮南市| 贺兰县| 南靖县| 潞西市| 扶余县| 开阳县| 馆陶县| 西吉县| 乌海市| 唐河县| 万宁市| 宁德市| 成都市| 岐山县| 库车县| 阿勒泰市| 宁海县| 孟州市| 南川市| 垫江县| 永善县| 怀集县| 府谷县| 宜君县| 衡阳市| 通许县| 湛江市| 灯塔市| 新营市| 花垣县| 建瓯市|