十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了怎么使用Ansible安裝軟件,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
十多年的祥云網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整祥云建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“祥云網(wǎng)站設(shè)計(jì)”,“祥云網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
使用 Ansible 劇本自動(dòng)安裝和更新設(shè)備上的軟件。
Ansible 是系統(tǒng)管理員和開發(fā)人員用來保持計(jì)算機(jī)系統(tǒng)處于最佳狀態(tài)的一種流行的自動(dòng)化工具。與可擴(kuò)展框架一樣,Ansible 本身功能有限,它真正的功能體現(xiàn)在許多模塊中。在某種程度上,Ansible 模塊就是 Linux 系統(tǒng)的命令。它們針對(duì)特定問題提供解決方案,而維護(hù)計(jì)算機(jī)時(shí)的一項(xiàng)常見任務(wù)是使所有計(jì)算機(jī)的更新和一致。
我曾經(jīng)使用軟件包的文本列表來保持系統(tǒng)或多或少的同步:我會(huì)列出筆記本電腦上安裝的軟件包,然后將其與臺(tái)式機(jī)或另一臺(tái)服務(wù)器之間進(jìn)行交叉參考,手動(dòng)彌補(bǔ)差異。當(dāng)然,在 Linux 機(jī)器上安裝和維護(hù)應(yīng)用程序是 Ansible 的一項(xiàng)基本功能,這意味著你可以在自己關(guān)心的計(jì)算機(jī)上列出所需的內(nèi)容。
Ansible 模塊的數(shù)量非常龐大,如何找到能完成你任務(wù)的模塊?在 Linux 中,你可以在應(yīng)用程序菜單或 /usr/bin
中查找要運(yùn)行的應(yīng)用程序。使用 Ansible 時(shí),你可以參考 Ansible 模塊索引。
這個(gè)索引按照類別列出。稍加搜索,你就很可能找到所需的模塊。對(duì)于包管理,Packaging 模塊幾乎適用于所有帶包管理器的系統(tǒng)。
首先,選擇本地計(jì)算機(jī)上的包管理器。例如,如果你打算在運(yùn)行 Fedora 的筆記本電腦上編寫 Ansible 指令(在 Ansible 中稱為“劇本”),那么從 dnf
模塊開始。如果你在 Elementary OS 上編寫,使用 apt
模塊,以此類推。這樣你就可以開始進(jìn)行測試和驗(yàn)證,并可以在以后擴(kuò)展到其它計(jì)算機(jī)。
第一步是創(chuàng)建一個(gè)代表你的劇本的目錄。這不是絕對(duì)必要的,但這是一個(gè)好習(xí)慣。Ansible 只需要一個(gè)配置文件就可以運(yùn)行在 YAML 中,但是如果你以后想要擴(kuò)展劇本,你就可以通過改變目錄和文件的方式來控制 Ansible?,F(xiàn)在,只需創(chuàng)建一個(gè)名為 install_packages
或類似的目錄:
$ mkdir ~/install_packages
你可以根據(jù)自己的喜好來命名 Ansible 的劇本,但通常將其命名為 site.yml
:
$ touch ~/install_packages/site.yml
在你最喜歡的文本編輯器中打開 site.yml
,添加以下內(nèi)容:
---- hosts: localhost tasks: - name: install packages become: true become_user: root dnf: state: present name: - tcsh - htop
你必須調(diào)整使用的模塊名稱以匹配你使用的發(fā)行版。在此示例中,我使用 dnf
是因?yàn)槲以?Fedora Linux 上編寫劇本。
就像 Linux 終端中的命令一樣,知道 如何 來調(diào)用 Ansible 模塊就已經(jīng)成功了一半。這個(gè)示例劇本遵循標(biāo)準(zhǔn)劇本格式:
hosts
是一臺(tái)或多臺(tái)計(jì)算機(jī)。在本示例中,目標(biāo)計(jì)算機(jī)是 localhost
,即你當(dāng)前正在使用的計(jì)算機(jī)(而不是你希望 Ansible 連接的遠(yuǎn)程系統(tǒng))。
tasks
是你要在主機(jī)上執(zhí)行的任務(wù)列表。
name
是任務(wù)的人性化名稱。在這種情況下,我使用 install packages
,因?yàn)檫@就是該任務(wù)正在做的事情。
become
允許 Ansible 更改運(yùn)行此任務(wù)的用戶。
become_user
允許 Ansible 成為 root
用戶來運(yùn)行此任務(wù)。這是必須的,因?yàn)橹挥?root 用戶才能使用 dnf
安裝應(yīng)用程序。
dnf
是模塊名稱,你可以在 Ansible 網(wǎng)站上的模塊索引中找到。
dnf
下的節(jié)點(diǎn)是 dnf
模塊專用的。這是模塊文檔的關(guān)鍵所在。就像 Linux 命令的手冊頁一樣,模塊文檔會(huì)告訴你可用的選項(xiàng)和所需的參數(shù)。
Ansible 文檔
安裝軟件包是一個(gè)相對(duì)簡單的任務(wù),僅需要兩個(gè)元素。state
選項(xiàng)指示 Ansible 檢查系統(tǒng)上是否存在 軟件包,而 name
選項(xiàng)列出要查找的軟件包。Ansible 會(huì)針對(duì)機(jī)器的 狀態(tài) 進(jìn)行調(diào)整,因此模塊指令始終意味著更改。假如 Ansible 掃描了系統(tǒng)狀態(tài),發(fā)現(xiàn)劇本里描述的系統(tǒng)(在本例中,tcsh
和 htop
存在)與實(shí)際狀態(tài)存在沖突,那么 Ansible 的任務(wù)是進(jìn)行必要的更改來使系統(tǒng)與劇本匹配。Ansible 可以通過 dnf
(或 apt
或者其它任何包管理器)模塊進(jìn)行更改。
每個(gè)模塊可能都有一組不同的選項(xiàng),所以在編寫劇本時(shí),要經(jīng)常參考模塊文檔。除非你對(duì)模塊非常熟悉,否則這是期望模塊完成工作的唯一合理方法。
劇本是用 YAML 編寫的。因?yàn)?YAML 遵循嚴(yán)格的語法,所以安裝 yamllint
來檢查劇本是很有幫助的。更妙的是,有一個(gè)專門針對(duì) Ansible 的檢查工具稱為 ansible-lint
,它專門為劇本而生。在繼續(xù)之前,安裝它。
在 Fedora 或 CentOs 上:
$ sudo dnf ins tall yamllint python3-ansible-lint
在 Debian、Elementary 或 Ubuntu 上,同樣的:
$ sudo apt install yamllint ansible-lint
使用 ansible-link
來驗(yàn)證你的劇本。如果你無法使用 ansible-lint
,你可以使用 yamllint
。
$ ansible-lint ~/install_packages/site.yml
成功則不返回任何內(nèi)容,但如果文件中有錯(cuò)誤,則必須先修復(fù)它們,然后再繼續(xù)。復(fù)制和粘貼過程中的常見錯(cuò)誤包括在最后一行的末尾省略換行符、使用制表符而不是空格來縮進(jìn)。在文本編輯器中修復(fù)它們,重新運(yùn)行 ansible-llint
,重復(fù)這個(gè)過程,直到 ansible-lint
或 yamllint
沒有返回為止。
現(xiàn)在你有了一個(gè)可驗(yàn)證的有效劇本,你終于可以在本地計(jì)算機(jī)上運(yùn)行它了,因?yàn)槟闩銮芍涝搫”径x的任務(wù)需要 root 權(quán)限,所以在調(diào)用 Ansible 時(shí)必須使用 --ask-become-pass
選項(xiàng),因此系統(tǒng)會(huì)提示你輸入管理員密碼。
開始安裝:
$ ansible-playbook --ask-become-pass ~/install_packages/site.ymlBECOME password:PLAY [localhost] ****************************** TASK [Gathering Facts] ******************************ok: [localhost] TASK [install packages] ******************************ok: [localhost] PLAY RECAP ******************************localhost: ok=0 changed=2 unreachable=0 failed=0 [...]
這些命令被執(zhí)行后,目標(biāo)系統(tǒng)將處于與劇本中描述的相同的狀態(tài)。
通過這么多操作來替換一個(gè)簡單的命令可能會(huì)適得其反,但是 Ansible 的優(yōu)勢是它可以在你的所有系統(tǒng)中實(shí)現(xiàn)自動(dòng)化。你可以使用條件語句使 Ansible 在不同的系統(tǒng)上使用特定的模塊,但是現(xiàn)在,假定所有計(jì)算機(jī)都使用相同的包管理器。
要連接到遠(yuǎn)程系統(tǒng),你必須在 /etc/ansible/hosts
文件中定義遠(yuǎn)程系統(tǒng),該文件與 Ansible 是一起安裝的,所以它已經(jīng)存在了,但它可能是空的,除了一些解釋性注釋之外。使用 sudo
在你喜歡的文本編輯器中打開它。
你可以通過其 IP 地址或主機(jī)名(只要主機(jī)名可以解析)定義主機(jī)。例如,如果你已經(jīng)在 /etc/hosts
中定義了 liavara
并可以成功 ping
通,那么你可以在 /etc/ansible/hosts
中將 liavara
設(shè)置為主機(jī)。或者,如果你正在運(yùn)行一個(gè)域名服務(wù)器或 Avahi 服務(wù)器并且可以 ping
通 liavara
,那么你就可以在 /etc/ansible/hosts
中定義它。否則,你必須使用它的 IP 地址。
你還必須成功地建立與目標(biāo)主機(jī)的安全 shell(SSH)連接。最簡單的方法是使用 ssh-copy-id
命令,但是如果你以前從未與主機(jī)建立 SSH 連接,閱讀我關(guān)于如何創(chuàng)建自動(dòng) SSH 連接的文章。
一旦你在 /etc/ansible/hosts
文件中輸入了主機(jī)名或 IP 地址后,你就可以在劇本中更改 hosts
定義:
---- hosts: all tasks: - name: install packages become: true become_user: root dnf: state: present name: - tcsh - htop
再次運(yùn)行 ansible-playbook
:
$ ansible-playbook --ask-become-pass ~/install_packages/site.yml
這次,劇本會(huì)在你的遠(yuǎn)程系統(tǒng)上運(yùn)行。
如果你添加更多主機(jī),則有許多方法可以過濾哪個(gè)主機(jī)執(zhí)行哪個(gè)任務(wù)。例如,你可以創(chuàng)建主機(jī)組(服務(wù)器的 webserves
,臺(tái)式機(jī)的 workstations
等)。
到目前為止,我們一直假定 Ansible 配置的所有主機(jī)都運(yùn)行相同的操作系統(tǒng)(都是是使用 dnf
命令進(jìn)行程序包管理的操作系統(tǒng))。那么,如果你要管理不同發(fā)行版的主機(jī),例如 Ubuntu(使用 apt
)或 Arch(使用 pacman
),或者其它的操作系統(tǒng)時(shí),該怎么辦?
只要目標(biāo)操作系統(tǒng)具有程序包管理器(MacOs 有 Homebrew,Windows 有 Chocolatey),Ansible 就能派上用場。
這就是 Ansible 優(yōu)勢最明顯的地方。在 shell 腳本中,你必須檢查目標(biāo)主機(jī)上有哪些可用的包管理器,即使使用純 Python,也必須檢查操作系統(tǒng)。Ansible 不僅內(nèi)置了這些功能,而且還具有在劇本中使用命令結(jié)果的機(jī)制。你可以使用 action
關(guān)鍵字來執(zhí)行由 Ansible 事實(shí)收集子系統(tǒng)提供的變量定義的任務(wù),而不是使用 dnf
模塊。
---- hosts: all tasks: - name: install packages become: true become_user: root action: > {{ ansible_pkg_mgr }} name=htop,transmission state=present update_cache=yes
action
關(guān)鍵字會(huì)加載目標(biāo)插件。在本例中,它使用了 ansible_pkg_mgr
變量,該變量由 Ansible 在初始 收集信息 期間填充。你不需要告訴 Ansible 收集有關(guān)其運(yùn)行操作系統(tǒng)的事實(shí),所以很容易忽略這一點(diǎn),但是當(dāng)你運(yùn)行一個(gè)劇本時(shí),你會(huì)在默認(rèn)輸出中看到它:
TASK [Gathering Facts] *****************************************ok: [localhost]
action
插件使用來自這個(gè)探針的信息,使用相關(guān)的包管理器命令填充 ansible_pkg_mgr
,以安裝在 name
參數(shù)之后列出的程序包。使用 8 行代碼,你可以克服在其它腳本選項(xiàng)中很少允許的復(fù)雜跨平臺(tái)難題。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么使用Ansible安裝軟件”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!