ansible用法之a(chǎn)nsible-playbook簡單使用
Sep 02, 2024 pm 02:55 PMansbile-playbook是一系統(tǒng)ansible命令的集合,其利用yaml 語言編寫,運行過程,ansbile-playbook命令根據(jù)自上而下的順序依次執(zhí)行。同時,playbook開創(chuàng)了很多特性,它可以允許你傳輸某個命令的狀態(tài)到後面的指令,如你可以從一臺機器的文件中抓取內(nèi)容並附為變量,然後在另一臺機器中使用,這使得你可以實現(xiàn)一些複雜的部署機制,這是ansible指令無法實現(xiàn)的。
playbook透過ansible-playbook指令使用,它的參數(shù)和ansible指令類似,如參數(shù)-k(–ask-pass) 和-K (–ask-sudo) 來詢問ssh密碼和sudo密碼,-u指定用戶,這些指令也可以透過規(guī)定的單元寫在playbook 上。 ansible-playbook的簡單使用方法: ansible-playbook example-play.yml 。
下面給出一個簡單的ansible-playbook範(fàn)例,了解下其構(gòu)成。
# cat user.yml - name: create user hosts: all user: root gather_facts: false vars: - user: "test" tasks: - name: create user user: name="{{ user }}"
上面的playbook 實現(xiàn)的功能是新增一個使用者:
name參數(shù)對此playbook實作的功能做一個概述,後面執(zhí)行過程中,會印出 name變數(shù)的值 ;
hosts參數(shù)指定了對哪些主機進行參作;
user參數(shù)指定了使用什麼使用者登入遠端主機操作;
gather_facts參數(shù)指定了在以下任務(wù)部分執(zhí)行前,是否先執(zhí)行setup模組獲取主機相關(guān)信息,這在後面的task會使用到setup獲取的信息時用到;
vars參數(shù),指定了變量,這裡指字一個user變量,其值為test ,需要注意的是,變量值一定要用引號引??;
task指定了一個任務(wù),其下面的name參數(shù)同樣是對任務(wù)的描述,在執(zhí)行過程中會列印出來。 user提定了呼叫user模組,name是user模組裡的一個參數(shù),而增加的使用者名字呼叫了上面user變數(shù)的值。具體執(zhí)行結(jié)果如下:
[root@361way playbooks]# ansible-playbook user.yml PLAY [create user] ************************************************************ TASK: [create user ] ********************************************** changed: [10.212.52.252] changed: [10.212.52.14] changed: [10.212.52.16] PLAY RECAP ******************************************************************** 10.212.52.14 : ok=1 changed=1 unreachable=0 failed=0 10.212.52.16 : ok=1 changed=1 unreachable=0 failed=0 10.212.52.252 : ok=1 changed=1 unreachable=0 failed=0
同樣,如果想實現(xiàn)把這個新增的用戶刪除,只需將該playbook檔案的最後一行替換為如下行再執(zhí)行相應(yīng)的playbook即可:
user: name="{{ user }}" state=absent remove=yes
再給一個稍微複雜的範(fàn)例,透過ansible-playbook實現(xiàn)對N臺主機同時修補bash shellcode 漏洞。需要注意的是,可能現(xiàn)網(wǎng)主機分佈著不同的系統(tǒng)版本。這裡假設(shè)現(xiàn)網(wǎng)同時存在centos5和6版本,具體playbook內(nèi)容如下:
# cat update_bash.yml - hosts: all remote_user: root gather_facts: True tasks: - name: update bash in redhat 6 version yum: name=http://mirrors.aliyun.com/centos/6.6/os/x86_64/Packages/bash-4.1.2-29.el6.x86_64.rpm.rpm state=present when: ansible_os_family == "RedHat" and ansible_distribution_version|int >=6 - name: update bash in redhat 5 version yum: name=http://mirrors.hustunique.com/centos/5/updates/x86_64/RPMS/bash-3.2-33.el5.1.x86_64.rpm state=present when: ansible_os_family == "RedHat" and ansible_distribution_version|int <p>上面使用了when語句,同時也開啟了gather_facts setup模組,這裡的ansible_os_family變數(shù)和ansible_distribution_version變數(shù)就是直接使用的setup模組所取得的資訊。 </p> <p>如果有大量主機,就在運行的時候加上-f然後選擇一個合適的並發(fā)主機數(shù)量即可,我這裡使用了這個,很快的就升級完成bash了。 </p> <div style="font-size: 14pt; color: white; background-color: black; border-left: red 10px solid; padding-left: 14px; margin-bottom: 20px; margin-top: 20px;"><strong>三、playbook的構(gòu)成</strong></div> <p>playbook是由一個或多個“play”組成的列表。play的主要功能在于將事先歸并為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講所謂task無非是調(diào)用ansible的一個module。將多個play組織在一個playbook中即可以讓它們聯(lián)同起來按事先編排的機制同唱一臺大戲。其主要有以下四部分構(gòu)成</p> <ol class="linenums"> <li class="L0"><span class="pln">playbooks組成:</span></li> <li class="L1"><span class="pln"> Target section: 定義將要執(zhí)行 playbook 的遠程主機組</span></li> <li class="L2"><span class="pln"> Variable section: 定義 playbook 運行時需要使用的變量</span></li> <li class="L3"><span class="pln"> Task section: 定義將要在遠程主機上執(zhí)行的任務(wù)列表</span></li> <li class="L4"><span class="pln"> Handler section: 定義 task 執(zhí)行完成以后需要調(diào)用的任務(wù)</span></li> </ol> <p>而其對應(yīng)的目錄層為五個,如下:</p> <ol class="linenums"> <li class="L0"><span class="pln">一般所需的目錄層有:(視情況可變化)</span></li> <li class="L1"><span class="pln"> vars 變量層</span></li> <li class="L2"><span class="pln"> tasks 任務(wù)層</span></li> <li class="L3"><span class="pln"> handlers 觸發(fā)條件</span></li> <li class="L4"><span class="pln"> files 文件</span></li> <li class="L5"><span class="pln"> template 模板</span></li> </ol> <p>下面介紹下構(gòu)成playbook 的四層結(jié)構(gòu)。</p> <div style="margin-top: 2em; margin-bottom: 1em;"><span style="color: #1e1e1e; letter-spacing: 2px; border-left: #FF3030 3px solid; border-right: #FF3030 3px solid; padding-left: 8px; padding-right: 8px; font-size: 12pt;"><strong>1、Hosts和Users</strong></span></div> <p>playbook中的每一個play的目的都是為了讓某個或某些主機以某個指定的用戶身份執(zhí)行任務(wù)。</p> <p>hosts 用于指定要執(zhí)行指定任務(wù)的主機其可以是一個或多個由冒號分隔主機組。</p> <p>remote_user 則用于指定遠程主機上的執(zhí)行任務(wù)的用戶。<br> 不過remote_user也可用于各task中。也可以通過指定其通過sudo的方式在遠程主機上執(zhí)行任務(wù)其可用于play全局或某任務(wù)。<br> 此外甚至可以在sudo時使用sudo_user指定sudo時切換的用戶。</p> <p>示例:</p> <pre class="brush:php;toolbar:false">- hosts: webnodes tasks: - name: test ping connection: remote_user: test sudo: yes
play的主體部分是task list。
task list中的各任務(wù)按次序逐個在hosts中指定的所有主機上執(zhí)行即在所有主機上完成第一個任務(wù)后再開始第二個。在運行自下而下某playbook時如果中途發(fā)生錯誤所有已執(zhí)行任務(wù)都將回滾因此在更正playbook后重新執(zhí)行一次即可。
task的目的是使用指定的參數(shù)執(zhí)行模塊而在模塊參數(shù)中可以使用變量。模塊執(zhí)行是冪等的這意味著多次執(zhí)行是安全的因為其結(jié)果均一致。每個task都應(yīng)該有其name用于playbook的執(zhí)行結(jié)果輸出建議其內(nèi)容盡可能清晰地描述任務(wù)執(zhí)行步驟。如果未提供name則action的結(jié)果將用于輸出。
定義task的可以使用“action: module options”或“module: options”的格式推薦使用后者以實現(xiàn)向后兼容。如果action一行的內(nèi)容過多也中使用在行首使用幾個空白字符進行換行。
tasks: - name: make sure apache is running service: name=httpd state=running 在眾多模塊中只有command和shell模塊僅需要給定一個列表而無需使用“key=value”格式例如 tasks: - name: disable selinux command: /sbin/setenforce 0 如果命令或腳本的退出碼不為零可以使用如下方式替代 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand || /bin/true 或者使用ignore_errors來忽略錯誤信息 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand ignore_errors: True
用于當(dāng)關(guān)注的資源發(fā)生變化時采取一定的操作。
“notify”這個action可用于在每個play的最后被觸發(fā)這樣可以避免多次有改變發(fā)生時每次都執(zhí)行指定的操作取而代之僅在所有的變化發(fā)生完成后一次性地執(zhí)行指定操作。
在notify中列出的操作稱為handler也即notify中調(diào)用 handler中定義的操作。
注意:在 notify 中定義內(nèi)容一定要和tasks中定義的 - name 內(nèi)容一樣,這樣才能達到觸發(fā)的效果,否則會不生效。
- name: template configuration file template: src=template.j2 dest=/etc/foo.conf notify: - restart memcached - restart apache handler是task列表這些task與前述的task并沒有本質(zhì)上的不同。 handlers: - name: restart memcached service: name=memcached state=restarted - name: restart apache service: name=apache state=restarted
tags用于讓用戶選擇運行或略過playbook中的部分代碼。ansible具有冪等性因此會自動跳過沒有變化的部分即便如此有些代碼為測試其確實沒有發(fā)生變化的時間依然會非常地長。
此時如果確信其沒有變化就可以通過tags跳過此些代碼片斷。
下面再給出一個安裝httpd web服務(wù)的示例:
# cat /etc/ansible/playbook/install_web.yml - hosts: webservers remote_user: root gather_fasks: False vars: packages: httpd tasks: - name: Install httpd yum: name={{ packages }} state=present - name: Cofiguration httpd copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf tags: httpd_conf notify: - restart httpd - name: Start httpd service: name=httpd state=started enabled=no tags: start - name:Add centos user user: name={{ item }} state=absent tags: adduser with_items: - centos - admin handlers: - name: restart httpd service: name=httpd state=restart
注:上面的代碼沒有考慮ubuntu平臺,僅僅考慮centos/redhat平臺。
以上是ansible用法之a(chǎn)nsible-playbook簡單使用的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在CentOS上集成Postman應(yīng)用可以通過多種方法來實現(xiàn),以下是詳細的步驟和建議:通過下載安裝包安裝Postman下載Postman的Linux版本安裝包:訪問Postman官方網(wǎng)站,選擇適用於Linux的版本進行下載。解壓安裝包:使用以下命令將安裝包解壓到指定目錄,例如/opt:sudotar-xzfpostman-linux-x64-xx.xx.xx.tar.gz-C/opt請注意將“postman-linux-x64-xx.xx.xx.tar.gz”替換為您實際下載的文件名。創(chuàng)建符號

【常見目錄說明】目錄/bin存放二進制可執(zhí)行文件(ls,cat,mkdir等),常用命令一般都在這裡。 /etc存放系統(tǒng)管理和配置文件/home存放所有用戶文件的根目錄,是用戶主目錄的基點,比如用戶user的主目錄就是/home/user,可以用~user表示/usr用於存放系統(tǒng)應(yīng)用程序,比較重要的目錄/usr/local?本地系統(tǒng)管理員軟件安裝目錄(安裝系統(tǒng)級的應(yīng)用)。這是最龐大的目錄,要用到的應(yīng)用程序和文件幾乎都在這個目錄。 /usr/x11r6?存放x?window的目錄/usr/bin?眾多

在PyCharm中設(shè)置解釋器的位置可以通過以下步驟實現(xiàn):1.打開PyCharm,點擊“File”菜單,選擇“Settings”或“Preferences”。 2.找到並點擊“Project:[你的項目名]”,然後選擇“PythonInterpreter”。 3.點擊“AddInterpreter”,選擇“SystemInterpreter”,瀏覽到Python安裝目錄,選中Python可執(zhí)行文件,點擊“OK”。設(shè)置解釋器時需注意路徑正確性、版本兼容性和虛擬環(huán)境的使用,以確保項目順利運行。

Java與其他編程語言的主要區(qū)別在於其“一次編寫,到處運行”的跨平臺特性。 1.Java的語法接近C ,但去掉了容易出錯的指針操作,適合大型企業(yè)應(yīng)用。 2.與Python相比,Java在性能和大規(guī)模數(shù)據(jù)處理上更具優(yōu)勢。 Java的跨平臺優(yōu)勢源於Java虛擬機(JVM),它能在不同平臺上運行相同的字節(jié)碼,簡化開發(fā)和部署,但需注意避免使用平臺特定API以保持跨平臺性。

了解Nginx的配置文件路徑和初始設(shè)置非常重要,因為它是優(yōu)化和管理Web服務(wù)器的第一步。 1)配置文件路徑通常是/etc/nginx/nginx.conf,使用nginx-t命令可以查找並測試語法。 2)初始設(shè)置包括全局設(shè)置(如user、worker_processes)和HTTP設(shè)置(如include、log_format),這些設(shè)置允許根據(jù)需求進行定制和擴展,錯誤配置可能導(dǎo)致性能問題和安全漏洞。

MySQL的安裝和配置可以通過以下步驟完成:1.從官方網(wǎng)站下載適合操作系統(tǒng)的安裝包。 2.運行安裝程序,選擇“開發(fā)者默認”選項並設(shè)置root用戶密碼。 3.安裝後配置環(huán)境變量,確保MySQL的bin目錄在PATH中。 4.創(chuàng)建用戶時遵循最小權(quán)限原則並設(shè)置強密碼。 5.優(yōu)化性能時調(diào)整innodb_buffer_pool_size和max_connections參數(shù)。 6.定期備份數(shù)據(jù)庫並優(yōu)化查詢語句以提高性能。

Informix和MySQL均為廣受青睞的關(guān)係型數(shù)據(jù)庫管理系統(tǒng),它們在Linux環(huán)境下均表現(xiàn)優(yōu)異並得到廣泛應(yīng)用。以下是對兩者在Linux平臺上的對比分析:安裝與配置Informix:在Linux上部署Informix需要下載對應(yīng)的安裝文件,隨後依據(jù)官方文檔指引完成安裝及配置流程。 MySQL:MySQL的安裝過程較為簡便,可通過系統(tǒng)的包管理工具(例如apt或yum)輕鬆實現(xiàn)安裝,並且網(wǎng)絡(luò)上有大量的教程和社區(qū)支持可供參考。性能表現(xiàn)Informix:Informix以卓越的性能和

參加VSCode線下技術(shù)交流活動的經(jīng)驗非常豐富,主要收穫包括插件開發(fā)的分享、實戰(zhàn)演示和與其他開發(fā)者的交流。 1.插件開發(fā)的分享:了解瞭如何利用VSCode的插件API提升開發(fā)效率,如自動格式化和靜態(tài)分析插件。 2.實戰(zhàn)演示:學(xué)習(xí)瞭如何使用VSCode進行遠程開發(fā),認識到其靈活性和擴展性。 3.與開發(fā)者交流:獲取了優(yōu)化VSCode啟動速度的技巧,如減少啟動時加載的插件數(shù)量和管理插件加載順序??傊@次活動讓我受益匪淺,強烈推薦對VSCode感興趣的人參加。
