簡單使用ansible-playbook

1.使用以下命令給客戶端安裝httpd服務:

[root@server ~]# ansible testhost -m yum -a "name=httpd"
192.168.77.128 | SUCCESS => {"changed": true, "msg": "", "rc": 0, "results": ["Loaded plugins: fastestmirror, langpacks\nLoading mirror speeds from cached hostfile\n * base: mirrors.cn99.com\n * epel: mirrors.tongji.edu.cn\n * extras: mirrors.aliyun.com\n * updates: mirrors.163.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-67.el7.centos.6 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package      Arch          Version                        Repository      Size\n================================================================================\nInstalling:\n httpd        x86_64        2.4.6-67.el7.centos.6          updates        2.7 M\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n  Verifying  : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n\nInstalled:\n  httpd.x86_64 0:2.4.6-67.el7.centos.6                                          \n\nComplete!\n"]
}

2.執行以下命令啟動httpd服務:

[root@server ~]# ansible testhost -m service -a "name=httpd state=started enabled=yes"## 然后會輸出一堆狀態信息,只要第一句為SUCCESS則代表啟動成功

注:這里的name是centos系統里的服務名,可以通過chkconfig --list查看到。

其他控制服務的命令:

# 停止服務
[root@server ~]# ansible testhost -m service -a "name=httpd state=stopped"
# 重新啟動服務
[root@server ~]# ansible testhost -m service -a "name=httpd state=restarted"
# 重載服務
[root@server ~]# ansible testhost -m service -a "name=httpd state=reloaded"

3.在name后面還可以加上state=installed或removed,加上removed的話,表示卸載這個服務,如果不指定state的值默認是installed:

[root@server ~]# ansible testhost -m yum -a "name=httpd state=removed"
192.168.77.128 | SUCCESS => {"changed": true, "msg": "", "rc": 0, "results": ["Loaded plugins: fastestmirror, langpacks\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-67.el7.centos.6 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package      Arch          Version                       Repository       Size\n================================================================================\nRemoving:\n httpd        x86_64        2.4.6-67.el7.centos.6         @updates        9.4 M\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n  Verifying  : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n\nRemoved:\n  httpd.x86_64 0:2.4.6-67.el7.centos.6                                          \n\nComplete!\n"]
}
[root@server ~]# 

然后到客戶端上通過rpm -qa httpd命令查看是否已卸載成功:

[root@client ~]# rpm -qa httpd
[root@client ~]# 

Ansible文檔的使用:

1.列出所有可用的模塊命令:

ansible-doc -l

2.查看指定模塊的文檔,例如我要查看cron模塊的文檔,可使用以下命令:

ansible-doc cron

ansible-doc后面跟模塊名就可以查看該模塊的文檔。


24.22 使用ansible playbook

playbook相當于可以把模塊命令都寫入到配置文件里面,這樣就可以直接執行配置文件了,有點腳本的意思:

[root@server ~]# vim /etc/ansible/test.yml
---
- hosts: testhostremote_user: roottasks:- name: test_playbookshell: touch /tmp/test.txt

文件格式說明:

  • 第一行需要有三個杠,hosts參數指定了對哪些主機進行參作,如果是多臺機器可以用逗號作為分隔,也可以使用主機組,在/etc/ansible/hosts里定義;
  • user參數指定了使用什么用戶登錄遠程主機操作;
  • tasks指定了一個任務,其下面的name參數同樣是對任務的描述,在執行過程中會打印出來,shell是ansible模塊名字

編輯完成之后,使用ansible-playbook命令執行該文件:

[root@server ~]# ansible-playbook /etc/ansible/test.ymlPLAY [testhost] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [test_playbook] ******************************************************************************************************[WARNING]: Consider using file module with state=touch rather than running touchchanged: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=2    changed=1    unreachable=0    failed=0   [root@server ~]# 

然后到客戶端上看看是否有創建test.txt文件:

[root@client ~]# ls -l /tmp/test.txt 
-rw-r--r-- 1 root root 0 1月  30 11:58 /tmp/test.txt
[root@client ~]# 

如上,代表執行成功。


24.23 playbook里的變量

我們通過一個創建用戶的例子,來演示一下playbook里的變量使用方式:

[root@server ~]# vim /etc/ansible/create_user.yml  # 編輯內容如下
---
- name: create_userhosts: testhostuser: rootgather_facts: falsevars:- user: "test"tasks:- name: create useruser: name="{{ user }}"

說明:

  • name參數對該playbook實現的功能做一個概述,后面執行過程中,會打印 name變量的值 ,可以省略;
  • gather_facts參數指定了在以下任務部分執行前,是否先執行setup模塊獲取主機相關信息,如果需要在后面的tasks里獲取setup收集到的信息,就需要把這個參數設置為True;
  • vars參數,指定了變量,這里聲明了一個user變量,其值為test ,需要注意的是,變量值一定要用引號引住;
  • user提定了調用user模塊,name是user模塊里的一個參數,而增加的用戶名字調用了上面user變量的值。

執行該文件:

[root@server ~]# ansible-playbook /etc/ansible/create_user.ymlPLAY [create_user] ********************************************************************************************************TASK [create user] ********************************************************************************************************
changed: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=1    changed=1    unreachable=0    failed=0   [root@server ~]# 

到客戶端上看看用戶是否已創建:

[root@client ~]# id test
uid=1003(test) gid=1003(test) 組=1003(test)
[root@client ~]# 

24.24 playbook里的循環

playbook除了有變量,還有循環語句,以下通過一個簡單的例子來演示一下循環的使用方式:

[root@server ~]# vim /etc/ansible/while.yml
---
- hosts: testhostuser: roottasks:- name: change mode for filesfile: path=/tmp/{{ item }} state=touch mode=600with_items:- 1.txt- 2.txt- 3.txt

說明:

  • file模塊可以對文件進行相關的操作,例如創建文件或者更改文件權限等,具體可以查看該模塊的文檔
  • with_items為循環的對象,相當于是一個數組或集合,寫在下面的1.txt、2.txt以及3.txt是該集合的元素。而item則表示的是遍歷出來的元素,也就是說item指代的是1.txt、2.txt以及3.txt。
  • state的值設置為touch表示如果該文件不存在就進行創建
  • path表示文件的路徑
  • mode設置權限

執行該文件:

[root@server ~]# ansible-playbook /etc/ansible/while.yml PLAY [testhost] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [change mode for files] **********************************************************************************************
changed: [192.168.77.128] => (item=1.txt)
changed: [192.168.77.128] => (item=2.txt)
changed: [192.168.77.128] => (item=3.txt)PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=2    changed=1    unreachable=0    failed=0   [root@server ~]# 

到客戶端上看看文件是否已創建:

[root@client ~]# ll /tmp/*.txt
-rw------- 1 root root  0 1月  30 15:54 /tmp/1.txt
-rw------- 1 root root  0 1月  30 15:54 /tmp/2.txt
-rw------- 1 root root  0 1月  30 15:54 /tmp/3.txt
[root@client ~]# 

24.25 playbook里的條件判斷

我們都知道在腳本中循環和條件判斷是必不可少的語句,所以在playbook里這兩種語句也是有的,循環我們已經介紹完了,接下來我們通過一個簡單的創建文件的例子演示一下條件判斷語句的使用方式。

我們一般以setup模塊收集到的主機信息,來作為判斷條件。所以在編寫代碼之前,我們需要先獲取相應的信息,例如我要以ip地址來作為判斷條件,那么我就得先從setup里獲取主機ip的相關信息。

執行以下命令可以查看到setup收集到的所有的facter信息,輸出的信息是JSON格式的:

ansible testhost -m setup

編寫文件內容如下:

[root@server ~]# vim /etc/ansible/when.yml
---
- hosts: testhostuser: rootgather_facts: Truetasks:- name: use whenshell: touch /tmp/when.txtwhen: ansible_eno16777736.ipv4.address == "192.168.77.128"

說明:

  • ansible_eno16777736是一個數組存儲著網卡相關信息,ipv4屬于該數組的子元素,但是ipv4也是一個數組,而address則是ipv4數組的子元素。我們需要使用address 來作為判斷條件。
  • 所以要訪問address就需要使用這樣的格式:ansible_eno16777736.ipv4.address,address表示的是鍵,而"192.168.77.128"則是值,when為判斷語句相當于if,所以其判斷條件為:該鍵的值為"192.168.77.128"時就執行shell模塊里定義的語句。

執行該文件:

[root@server ~]# ansible-playbook /etc/ansible/when.yml PLAY [testhost] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [use when] ***********************************************************************************************************[WARNING]: Consider using file module with state=touch rather than running touchchanged: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=2    changed=1    unreachable=0    failed=0   [root@server ~]# 

到客戶端上看看文件是否已創建:

[root@client ~]# ll /tmp/when.txt
-rw-r--r-- 1 root root 0 1月  30 16:33 /tmp/when.txt
[root@client ~]#

24.26 playbook中的handlers

有一種情況就是執行了tasks里面的內容之后,服務器發生了變化,這時我們可能需要執行一些相關的操作。例如我們修改了某個服務的配置文件后,則需要重啟一下服務。而handlers就是完成這樣的事情的,它相當于編程中的回調函數,當tasks里的內容執行成功后,就會執行handlers里定義的內容。也類似于shell腳本中的&&符號,例如 cat 1.txt && rm -f 1.txt ,當cat 1.txt命令執行成功之后就會執行rm -f 1.txt命令,否則不執行。

下面用一個簡單的例子來演示一下handlers的使用方式:

[root@server ~]# vim /etc/ansible/handlers.yml
---
- name: handlers testhosts: testhostuser: roottasks:- name: copy filecopy: src=/etc/passwd dest=/tmp/test_passwd.txtnotify: test handlershandlers:- name: test handlersshell: echo "This is a test string" >> /tmp/test_passwd.txt

說明:

  • 只有copy模塊執行成功后,才會去調用下面的handlers里定義的內容。也就是說如果/etc/passwd和/tmp/test_passwd.txt內容是一樣的話,就不會去執行handlers里面的shell相關命令,因為copy沒有被執行。 這種比較適合配置文件發生更改后,重啟服務的操作。
  • notify用于指定handlers的name參數的值,因為handlers可以定義多個,所以需要使用notify來進行指定調用哪一個。

執行該文件:

[root@server ~]# ansible-playbook /etc/ansible/handlers.yml PLAY [handlers test] ******************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [copy file] **********************************************************************************************************
changed: [192.168.77.128]RUNNING HANDLER [test handlers] *******************************************************************************************
changed: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=3    changed=2    unreachable=0    failed=0   [root@server ~]# 

到客戶端上看看文件末尾的那一行是否是我們echo進去的那一行內容:

[root@client ~]# tail -n1 /tmp/test_passwd.txt 
This is a test string

[root@client ~]#




本文轉自 ZeroOne01 51CTO博客,原文鏈接:http://blog.51cto.com/zero01/2066913,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453638.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

原則

昨天例會上,領導分享了他最近看過的一本書《原則》。試想,工作上,生活中我的原則是什么呢?關于技術學習的原則。一開始的時候,一般都是遇到不會的再去學習,我一直比較喜歡帶著問題,這樣會學習效…

Python內置函數簡記

一、數學運算類 abs(x)求絕對值 1、參數可以是整型,也可以是復數 2、若參數是復數,則返回復數的模complex([real[, imag]])創建一個復數divmod(a, b)分別取商和余數 注意:整型、浮點型都可以float([x])將一個字符串或數轉換為浮點數。如果無參…

開源Java反編譯工具

Java 反編譯器 1. JD-GUI JD-GUI 是一個用 C 開發的 Java 反編譯工具,由 Pavel Kouznetsov開發,支持Windows、Linux和蘋果Mac Os三個平臺。 而且提供了Eclipse平臺下的插件JD-Eclipse。JD-GUI不需要安裝,直接點擊運行,可以反編譯j…

基于MPI的H.264并行編碼代碼移植與優化

2010 03 25基于MPI的H.264并行編碼代碼移植與優化范 文洛陽理工學院計算機信息工程系 洛陽 471023摘 要 H.264獲得出色壓縮效果和質量的代價是壓縮編碼算法復雜度的增加。為了尋求更高的編碼速度,集群并行計算被運用到H.264的視頻編碼計算中。分析H.264可實現并行計…

python自動取款機程序_python ATM取款機----運維開發初學(上篇)

自動取款機基本功能:可以存取轉賬,刷卡信息查詢,銀行卡號歷史信息查詢,消費記錄查詢,修改密碼。思維導圖如下:數據庫設計:mysql> desc balan_list; #保存賬號交易記錄option_type-----------…

java的運行參數

貼個java的運行參數: Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select t…

阿里服務器+Centos7.4+Tomcat+JDK部署

適用對象 本文檔介紹如何使用一臺基本配置的云服務器 ECS 實例部署 Java web 項目。適用于剛開始使用阿里云進行建站的個人用戶。 配置要求 這里列出的軟件版本僅代表寫作本文檔使用的版本。操作時,請您以實際軟件版本為準。 操作系統:CentOS 7.4Tomcat …

php輸出mysqli查詢出來的結果

php連接mysql我有文章已經寫過了,這篇文章主要是介紹從mysql中查詢出結果之后怎么輸出的問題。 一:mysqli_fetch_row(); 查詢結果:array([0]>小王) 查詢: [php] view plaincopy while ($row mysqli_fetch_assoc($result)) …

rhel mysql安裝_RHEL6.4下MySQL安裝方法及簡單配置

1.MySQL安裝方法簡介 1.rpm包yum安裝 2.通用二進制包安裝 3.源碼編譯安裝 注意:實驗所采用的系統平臺為:RHEL6.4 2.rpm ins首頁 → 數據庫技術背景:閱讀新聞RHEL6.4下MySQL安裝方法及簡單配置[日期:2014-04-08]來源:Li…

H.264算法的DSP移植與優化

摘要:在TMS320DM643平臺上實現H.264基檔次編碼器的移植與優化顯得格外實用和必要。基于對DSP平臺的結構特性和H.264的計算復雜度分析,主要從核心算法、數據傳輸和存儲器/Cache使用幾方面對H.264編碼器進行了…

IDA*與A*

我實在懶得寫博客了,直接放上來之前講課做的的PPT得了。 PPT_Source Code.zip 轉載于:https://www.cnblogs.com/zzzc18/p/8323927.html

java 子類 父類 轉換_Java子類與父類之間的類型轉換

1.向上轉換父類的引用變量指向子類變量時,子類對象向父類對象向上轉換。從子類向父類的轉換不需要什么限制,只需直接蔣子類實例賦值給父類變量即可,這也是Java中多態的實現機制。2.向下轉換在父類變量調用子類特有的、不是從父類繼承來的方法…

H.264視頻編解碼的代碼移植和優化

基于DSP系統開發的視頻編解碼系統,國內幾乎都是走的移植,優化的路線,并且移植的代碼,都是開源的。畢竟花費大量的人力,物力去開發一套自己的代碼,并不見得比一些成熟的開源代碼效率更高,健壯性更…

SublimeText2 快捷鍵

SublimeText2 快捷鍵,與對應功能一覽表: 快捷鍵功能ctrlshiftn打開新Sublimectrlshiftw關閉Sublime,關閉所有打開文件ctrlshiftt重新打開最近關閉文件ctrln新建文件ctrls保存ctrlshifts另存為ctrlf4關閉文件ctrlw關閉ctrlk, ctrlb切換側邊欄顯…

java-linux-eclipse配置

轉載于:https://www.cnblogs.com/sheying/p/8327517.html

n皇后問題java_經典n皇后問題java代碼實現

問題描述:在n*n的二維表格,把n個皇后在表格上,要求同一行、同一列或同一斜線上不能有2個以上的皇后。例如八皇后有92種解決方案,五皇后有10種解決方案。public class TestQueen {int n; //皇后的個數int num 0; // 記錄方案數int…

ffmpeg mplayer x264 代碼重點詳解 詳細分析

ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((ab1)>>1) #define avg4(a,b,c,d) ((abcd2)>>2) 顯而易見...,注意a,b宏表達式可能引出的副作用 2 SIMD by software…

nagios監控服務器的搭建

nagios 概述: 開源的免費的網絡監視工具。 監控: windows, Linux,Unix,交換機和路由器。報警。 Nagios是插件式的結構,它本身沒有任何監控功能,所有的監控都是通過插件進行的,因此其是高度模塊化和富于彈性的。Nagios…

BZOJ1031: [JSOI2007]字符加密Cipher

1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7882 Solved: 3425[Submit][Status][Discuss]Description 喜歡鉆研問題的JS同學,最近又迷上了對加密方法的思考。一天,他突然想出了一種他認為是終極的加密辦法&#…

java棧頂元素_棧在Java類庫中的實現

棧是一種后進先出的數據結構。在它之上,主要有三種操作:(1)判斷棧是否為空——empty();(2)在棧頂添加一個元素——push(E);(3)刪除并返回棧頂元素——pop()。在Java類庫中,Stack類實現了棧,它繼承自Vector類…