海量包d時代社區(qū)20工具an使用手冊_第1頁
海量包d時代社區(qū)20工具an使用手冊_第2頁
海量包d時代社區(qū)20工具an使用手冊_第3頁
海量包d時代社區(qū)20工具an使用手冊_第4頁
海量包d時代社區(qū)20工具an使用手冊_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Ansible使用手冊目錄目錄Ansible介紹簡介設(shè)計原則工作原理架構(gòu)圖 原理圖 重要組件Ansible Module Plugin Playbook Inventory Role其他Ansible使用安裝環(huán)境要求安裝過程 安裝結(jié)果Ansible命令管理Inventory動態(tài)配置Inventory 配置無登錄 通配模式 Pattern常用模塊command shell scriptraw service ping setup file copyauthorized_key PlaybooksPlaybooks組成要素Playbooks執(zhí)行ansible-playbook命令說明 常用模塊Te

2、mplate set_fact pause wait_for assemble add_host group_by get_url debug failsynchronize mountfilesystem其他模塊變量的使用Role和Galaxy使用方式Role內(nèi)容解析典型場景支持Windows 更新文件安裝JDK配置Tomcat 其他典型操作最佳實踐內(nèi)容組織目錄劃分動態(tài)加載Inventory區(qū)分Stage和Production 使用組和主機變量使用Role管理Playbook 保持簡單版本控制Ansible Pull 術(shù)語 YAML其他Ansible Tower Anible的Pull模式

3、常見問題資料Ansible介紹簡介Ansible是一款簡單的自動化運維工具,重點解決自動化應(yīng)用部署、自動化配置管理、自動化云服務(wù)管理。簡單理解Ansible 是一款批量的在遠程服務(wù)器上執(zhí)行命令的工具,支持Linux各個發(fā)行版和Windows系統(tǒng)。Ansible的兩種使用方式:Ad-hoc 和Playbooks。設(shè)計原則1. 極簡的安裝過程和學(xué)習(xí)曲線2. 快速且可并行的管理機器3. 無Agent和額外的端口開銷,使用現(xiàn)有的SSH協(xié)議4. 采用更人性化的語言描述基礎(chǔ)設(shè)施5. 安全6. 可以使用多種動態(tài)語言進行模塊擴展7. 無需root權(quán)限工作原理Ansible會根據(jù)命令或者playbook生成sh

4、ell或者python腳本,并推送到遠程服務(wù)器上執(zhí)行,然后自動刪除shell,和其他自動化部署工具類似,都是批量的在遠程服務(wù)器上執(zhí)行命令。Ansible支持Push和Pull兩種模式,Push即由Ansible管理端推送腳本到遠程服務(wù)器上執(zhí)行,Pull則為遠程服務(wù)器主動到Ansible管理端拉取腳本執(zhí)行。架構(gòu)圖原理圖重要組件Ansible組件,作為插件和模塊的運行平臺,負責(zé)生成shellModule模塊:包括service、file等模塊和自定義模塊,Ansible主要功能都是通過Module實現(xiàn),用戶可以添加擴展模塊,常見模塊如:ping、Plugin插件:對模塊功能的補充,如連接插件、郵件

5、插件,其中連接插件實現(xiàn)Ansible連接到主機,除了SSH之外,Ansible還支持其他連接方式,如ZeroMQ、Local、LDAP、Kerberos等Playbook劇本:任務(wù)編排文件,定義一套完整的任務(wù)執(zhí)行過程,由Ansible自動解釋執(zhí)行,這也是Ansible的重點功能,將部署過程劇本化Inventory主機:定義主機信息,可以分組,并且可以存在父子組,很方便的對主機進行分類,便于批量處理RoleRole表示一種具體的自動化部署場景,可以將別人的部署腳本,包括playbook 、變量等作為Role進行復(fù)用,如docker的安裝即可作為一個Role。注:個人理解:Module是Ansib

6、le的業(yè)務(wù)功能載體,跟自動化部署相關(guān)的功能都在Module中實現(xiàn),Plugin是Ansible為支持業(yè)務(wù) 功能需要的功能載體,需要連接host才能執(zhí)行腳本,需要發(fā)郵件,這些功能和業(yè)務(wù)本身無關(guān)注:主機清單建議寫程序從CMDB中獲取,以保證主機信息的唯一性其他Ansible Tower:是Ansible的WebUI工具,收費,可以在Web界面中更好地管理Inventory、Playbook等,可以針對不同用戶劃分權(quán)限Ansible Galaxy:是Ansible的模板庫,每一個模板就是一個Role,有各種軟件的部署模板,都是用戶貢獻的,可以很方便的加載到本地進行使用,如安裝Docker Regis

7、try的模板:ansible-galaxy install aalda.docker-registryAnsible使用Ansible簡單理解就是批量的遠程命令執(zhí)行工具,在哪兒執(zhí)行?怎么執(zhí)行?執(zhí)行什么?結(jié)果是什么?是我們需要關(guān)注的四個問題,這四個問題分別對應(yīng)著Inventory的管理,模塊的使用、Playbook的編寫、典型場景。安裝環(huán)境要求1. Python:2.6 or 2.72. OS:Linux的所有發(fā)行版3. 節(jié)點服務(wù)器也需要安裝Python,要求:Python2.4及以后版本, 如果低于Python2.5需要再安裝python-simplejson, 可以使用raw模塊批量安裝py

8、thon-simplejson,不支持Python3.0安裝過程4. 從源碼安裝2.軟件包安裝5. PIP安裝6. Vagrant安裝$ sudo easy_install pip$ sudo easy_install pipCentOS:sudo yum install ansibleUbuntu:$ sudo apt-get install software-properties-common$ sudo apt-add-repository ppa:ansible/ansible$ sudo apt-get update$ sudo apt-get install ansible$ gi

9、t clone git:/ -recursive$ cd ./ansible$ source ./hacking/env-setup5.Docker安裝Ansible需要安裝一些依賴,建議使用Vagrant或者Docker的方式安裝,安裝詳細參考,請安裝結(jié)果Ansible安裝完之后,則會在服務(wù)器上安裝好Ansible件:ansible.cfg:Ansible配置文件,詳細配置參考hosts:主機信息管理文件roles:場景庫令工具(類似Git令工具),在/etc/ansible/下有以下幾個文/etc/ansible是Ansible的數(shù)據(jù)目錄,group_vars、host_vars等文件都可

10、以存放在該目錄Ansible會安裝如下命令:1. ansible:Ansible命令2. ansible-doc:用戶查看Ansible模塊幫助信息3. ansible-galaxy:從galaxyRole到本地4. ansible-playbook:執(zhí)行Playbook5. ansible-pull:從Git上獲取Playbook到本地,并執(zhí)行6. ansible-vault:加密/Playbook相關(guān)的YAML文件Ansible不支持以Windows系統(tǒng)作為管理端,建議使用Vagrant安裝AnsibleAnsible命令通過ansible -h可以查看ansible的所有命令,詳細如下:

11、和Ansible Tower一起安裝:$ vagrant init tower$ vagrant up$ vagrant sshad-hoc命令:在命令行中執(zhí)行的ansible臨時命令,當(dāng)我們想快速執(zhí)行某些指令又不想保存這些指令時可以使用ansible的這些命令,比如想知道webserver群組中那臺服務(wù)器關(guān)機了,可以ansible webserver -m ping,即可查看結(jié)果,適用于臨時任務(wù),無需Playbook。在使用playbook之前最好多嘗試命令進行臨時性工作,以深入理解ansible的核心命令。默認使用root賬戶執(zhí)行命令管理InventoryAnsible的Inventory

12、默認存儲在/etc/ansible/hosts中 示例:vagrantansible-tower ansible$ ansible -h Usage: ansible <host-pattern> optionsOptions:-a MODULE_ARGS,-args=MODULE_ARGS 模塊的參數(shù),如commond模塊的參數(shù) ansible all -a “l(fā)s /home”-ask-become-passask for privilege escalation password-K, -ask-sudo-pass提示輸入sudo密碼-ask-vault-passask fo

13、r vault password-B SECONDS, -background=SECONDS在后臺異步執(zhí)行,適用于耗時任務(wù),在設(shè)定的時間后再顯示結(jié)果(default=N/A)-become-method=BECOME_METHODprivilege escalation method to use (default=sudo),valid choices: sudo | su | pbrun | pfexec | runas -become-user=BECOME_USERrun operations as this user (default=None)-c CONNECTION, -co

14、nnection=CONNECTION 連接類型 (default=smart)-e EXTRA_VARS, -extra-vars=EXTRA_VARS set additional variables as key=value or YAML/JSON-f FORKS, -forks=FORKSfork多少進行并發(fā)處理,(default=5)-i INVENTORY, -inventory-file=INVENTORY 指定hosts文件路徑(default=/etc/ansible/hosts)-l SUBSET, -limit=SUBSET指定一個pattern,對<host_p

15、attern>已經(jīng)匹配的主機進行二次過濾確-m MODULE_NAME, -module-name=MODULE_NAME 要執(zhí)行的模塊的名稱(default=command)-M MODULE_PATH, -module-path=MODULE_PATH 要執(zhí)行的模塊的路徑(default=None)-P POLL_INTERVAL, -poll=POLL_INTERVAL 當(dāng)使用異步執(zhí)行-B時,設(shè)置每隔多久顯示一次結(jié)果,用于間隔查看命令執(zhí)行情況(default=15)-private-key=PRIVATE_KEY_FILE私鑰路徑-R SU_USER, -su-user=SU_US

16、ERrun operations with su as this user (default=root)(deprecated, use become)-U SUDO_USER, -sudo-user=SUDO_USER (default=root)-T TIMEOUT, -timeout=TIMEOUTssh連接超時時間 (default=10)-t TREE, -tree=TREE將日志輸出到該目錄,日志文件名會議主機名命令-u REMOTE_USER, -user=REMOTE_USER ssh連接的用戶名,默認為root-vault-password-file=VAULT_PASSWO

17、RD_FILE vault password file debugging)-k, -ask-pass提示輸入ssh登錄密碼,使用密碼驗證登錄時使用ansible all -u account -k-ask-su-passask for su password (deprecated, use become)-version顯示版本-v, -verboseverbose mode (-vvv for more, -vvvv to enable connection-s, -sudo使用sudo運行命令-S, -surun operations with su (deprecated, use

18、become)-o, -one-line在一行中輸出結(jié)果-list-hosts只打印出有哪些hosts會執(zhí)行Playbook,而不是真正執(zhí)行,適合確認目標主機是否正-h, -helpshow this help message and exit-C, -check只測試命令會改變什么內(nèi)容,而不真正執(zhí)行,適合驗證命令結(jié)果-b, -becomerun operations with become (nopasswd implied)解釋:1. Inventory的兩個重要概念:分組(Group)和主機(Host)2. 中括號 表示分組,可以將多個host劃分到一個組,也可以將一個host劃分到多個

19、組3. webserver:vars表示的分組的參數(shù),示例中表示webserver的所有host的ntp服務(wù)器的地址4. redis下的03:5309表示SSH的默認端口從22修改成了5309,如果所有host都修改了默認ssh端口,可以 在ansible.cfg中修改#remote_port = 225. server-a ansible_ssh_port=22 ansible_ssh_host=9 是采用參數(shù)來定義的host,名稱server-a只針對這一臺機器,server-a即為這臺服務(wù)器的別名6. #號注釋的內(nèi)容說明的是host的父子分組,A

20、和B兩個機房有很多的host,北京機房包含A和B兩個機房,中國機房包含北京和 上海兩個機房,以此實現(xiàn)組的分層管理7. serverlist www01:50 表示從01到50得所有機器的分組,字母也可用作排序,如db-a-f8. 其他參數(shù):ansible_connection代表連接方式,ansible_ssh_user代表賬戶,參數(shù)主要是方便特殊需求的配置,建議 對遠程服務(wù)器建立統(tǒng)一的配置,包括名稱、賬號、端口等9. 分組和主機的配置信息也可以存儲在其他文件中,如組windows的賬號密碼等信息可以存在/etc/ansible/group_vars/windows中,主機server的信息可

21、以存在/etc/ansible/host_vars/server中,信 息都以YAML格式編寫,示例內(nèi)容如下:- #YAML格式要求ntp_server: 00#變量名:變量值動態(tài)配置InventoryInventory可以無需手動配置分組和主機,可以動態(tài)的從其他軟件中獲取,如CMDB、Cobbler、AWS等,Ansible Tower也06webserver 56webserver:vars ntp_server=74 database78redi

22、s 03:5309windows 8server ansible_ssh_port=22 ansible_ssh_host=9 serverlistwww01:50 #A機房#host1 #host2 #B機房#host3 #host4#北京機房:children#A機房#B機房#中國機房:children #北京機房#上海機房targetslocalhostansible_connection=localansible_connection=sshansible_ssh_user=mpdehaan ansible_connecti

23、on=sshansible_ssh_user=mdehaan采用數(shù)據(jù)庫存儲Inventory信息,也可以寫程序從其他數(shù)據(jù)源獲取數(shù)據(jù)配置無密碼登錄為了方便管理,使用SSH密鑰認證,建立管理端與遠程服務(wù)器的無密碼連接,該過程會將管理端的公鑰寫入服務(wù)器端的.ssh 目錄的authorized_keys文件步驟:1. 在管理端生成密碼: sshkey-gen2. 將公鑰推送到遠程服務(wù)器: ssh-copy-id -i /.ssh/id_rsa.pub account5 ,其中account即為服務(wù)器上的賬號,此處會提示輸入account的密碼3. 測試連接: ansible 10.

24、10.23.15 -u account -m ping ,反饋success即配置成功,此處的account即為服務(wù)器的賬戶,因為ansible命令默認使用root賬號執(zhí)行,如果是不是root賬號,則需要使用-u account 特別指明,在ansible.cfg文件中可以修改默認賬號 #remote_user = root注:在測試連接之前,需要將IP加入到/etc/ansible/hosts文件中,否則ansible命令無法識別host,將公鑰批量的上傳到服務(wù)器的命令:注:建議采用版本控制工具管理Inventory hosts文件,便于跟蹤和復(fù)用Inventory的詳細資料,包括詳細參數(shù)列

25、表和說明,Inventory配置等請訪問通配模式PatternPattern即表示要管理的一組遠程服務(wù)器。ansible <pattern_goes_here> -m <module_name> -a <arguments>1. 指定的組名,機器名,IP,如webserver2. 通配符,包括all,*,*3. 關(guān)系模式1. 且 webservers:&staging,Web服務(wù)器,且必須在預(yù)發(fā)布環(huán)境中2. 或 webservers:dbservers,web服務(wù)器和數(shù)據(jù)庫服務(wù)器都包括3. 非 webservers:!production,除生產(chǎn)環(huán)境

26、外的所有web服務(wù)器4. 組合模式:webservers:dbservers:&staging:!phoenix,在 webservers 或者 dbservers 組中,必須還存在于staging 組中,但是不在 phoenix 組中5. 正則表達式模式 Pattern官方資料常用模塊Ansible有很多的模塊,大類有Cloud Modules、Commands Modules、Database Modules、Files Modules、Inventory Modules、Messaging Modules、Monitoring Modules、Network Modules、No

27、tification Modules、Packaging Modules、Source Control Modules、System Modules、Utilities Modules、Web Infrastructure Modules、Windows Modules。摘取常用的模塊進行說明,詳細模塊介紹,請訪問。command作用:在遠程主機上執(zhí)行命令,command是ad-hoc模式下的默認模塊,無需-m command進行指定參數(shù):1. chdir:在執(zhí)行指令之前,先切換到該指定的目錄2. creates:表示一個文件名,當(dāng)該文件存在,則該命令不執(zhí)行ansible-doc -l:顯示所

28、有模塊名稱及作用ansible-doc -s module_name:顯示指定模塊的各項參數(shù)ansible webserver -m authorized_key -a "user=account key="lookup('file','/home/vagrant/.ssh/id_rsa.pub')" state=present exclusive=yes" -u account -k3. removes:表示一個文件名,當(dāng)該文件不存在,則該命令不執(zhí)行4. free_form:要執(zhí)行的linux指令示例:臨時任務(wù): ans

29、ible test -a "/sbin/reboot"Playbook:shell作用:在參數(shù):節(jié)點上執(zhí)行命令,shell使用/bin/sh命令執(zhí)行1. chdir:在執(zhí)行指令之前,先切換到該指定的目錄2. creates:表示一個文件名,當(dāng)該文件存在,則該命令不執(zhí)行3. removes:表示一個文件名,當(dāng)該文件不存在,則該命令不執(zhí)行4. free_form:要執(zhí)行的linux指令示例:script作用:將本地參數(shù):轉(zhuǎn)換到服務(wù)器上執(zhí)行1. creates:表示一個文件名,當(dāng)該文件存在,則該命令不執(zhí)行2. removes:表示一個文件名,當(dāng)該文件不存在,則該命令不執(zhí)行3. f

30、ree_form:要執(zhí)行的linux指令示例:raw作用:在主機上執(zhí)行特殊命令適用場景:# Example from Ansible Playbooks- script: /some/local/script.sh -some-arguments 1234# Run a script that creates a file, but only if the file is not yet created- script: /some/local/create_file.sh -some-arguments 1234 creates=/the/created/file.txt # Run a s

31、cript that removes a file, but only if the file is not yet removed- script: /some/local/remove_file.sh -some-arguments 1234 removes=/the/removed/file.txt- shell: somescript.sh >> somelog.txt args:chdir: somedir/ creates: somelog.txt- command: /usr/bin/make_database.sh arg1 arg2 args:chdir: som

32、edir/creates: /path/to/database- command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database說明:第一種寫法是切換到somedir/目錄,當(dāng)/path/to/database文件存在時才執(zhí)行/usr/bin/make_database.sh文件;第二種 沒有切換目錄1. 用于安裝python-simplejson,因為其他模塊都依賴python-simplejson,只有通過raw模塊安裝2. 用于路由器等無python環(huán)境的設(shè)備service作用:用于管理服務(wù)參數(shù):1. argu

33、ments:給命令行提供一些選項(參數(shù))2. enabled:是否開機啟動 yes|no3. name:必選項,服務(wù)名稱4. runlevel:Linux的運行級別5. sleep:如果執(zhí)行了restarted,在則stop和start之間沉睡幾秒鐘6. state:對當(dāng)前服務(wù)執(zhí)行啟動,停止、重啟、重新加載等操作(started,stopped,restarted,reloaded)示例:ping作用:嘗試連接主機并在后返回"pong",用于檢測主機是否存活setup作用:查看主機的基本信息,在Playbook中使用setup獲取系統(tǒng)信息作為任務(wù)的參數(shù),在查看某臺主機的配置

34、時也很有用。 在執(zhí)行Playbook時默認會先執(zhí)行setup模塊獲取系統(tǒng)信息參數(shù):1. filter:只輸出符合filter要求的fact信息示例:注:官網(wǎng)資料中的fact即表示系統(tǒng)信息file作用:用于配置文件、系統(tǒng)連接、目錄的屬性,刪除文件、系統(tǒng)連接、目錄。參數(shù):# Display facts from all hosts and store them indexed by I(hostname) at C(/tmp/facts). ansible all -m setup -tree /tmp/facts# Display only facts regarding memory foun

35、d by ansible on all hosts and output them. ansible all -m setup -a 'filter=ansible_*_mb'# Display only facts returned by facter. ansible all -m setup -a 'filter=facter_*'# Display only facts about certain interfaces. ansible all -m setup -a 'filter=ansible_eth0-2'ansible webs

36、ervers -m pingansible test -m service -a "name=httpd state=started enabled=yes" ansible test -m service -a "name=foo pattern=/usr/bin/foo state=started" ansible test -m service -a "name=network state=restarted args=eth0".5.6.group:定義文件/目錄的屬組 owner:定義文件/目錄的屬主(所有者)

37、 mode:定義文件/目錄的權(quán)限,如u=rw,g=r,o=r path:必選項,定義文件/目錄的路徑recurse:遞歸設(shè)置文件的屬性,只對目錄有效(state=director)state:定義文件狀態(tài),可選項:file、link、directory、hard、touch、absent1. directory:如果目錄不存在,創(chuàng)建目錄2. touch:如果文件不存在,創(chuàng)建一個新文件3. absent:刪除文件或目錄示例:copy作用: 參數(shù):本地文件到主機,fetch命令正好相反,從主機文件到本地src:本地源文件或者目錄dest:目標文件或者目錄backup:覆蓋之前,是否備份原文件,ye

38、s/no owner:設(shè)定文件/目錄的屬主group:設(shè)定文件/目錄的屬組mode:設(shè)定文件/目錄的權(quán)限.5.6.示例:authorized_key作用:添加或者刪除authorized_key文件中的公鑰,已完成SSH密鑰配對參數(shù):1. exclusive:是否刪除未指明的公鑰,慎用2. key:公鑰地址,可以是URL,也可以是本地路徑,必輸項3. path:authorized_keys的位置4. state:present即添加,absent即刪除5. user:主機上的賬戶,必輸項示例:ansible test -m copy -a "src=/srv/myfi

39、les/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644" ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"ansible test -m copy -a "src=/srv/myfiles/dir dest=/etc/destdir"ansible test -m file -a "src=/etc/fsta

40、b dest=/tmp/fstab state=link" ansible test -m file -a "path=/tmp/fstab state=absent"ansible test -m file -a "path=/tmp/test state=touch"PlaybooksPlaybooks是Ansible的配置、部署、編排語言,它可以描述一系列的任務(wù)。Ansible是一個運行任務(wù)的工具平臺,Playbooks才是的方案,也是對運維要求較高的地方。就像它的名字一樣,我們需要編寫出一份的劇本,這樣才能高效的完成自動化部署。Play

41、books采用YAML的語法結(jié)構(gòu)。Playbook和Ansible的深入理解圖Playbooks組成要素# Example using key data from a local file on the management machine- authorized_key: user=key=" lookup('file', '/home/.ssh/id_rsa.pub') "# Usingurl as key source- authorized_key: user=key=# Using alternate directory locat

42、ions:- authorized_key: user=key=" lookup('file', '/home/.ssh/id_rsa.pub') " path='/etc/ssh/authorized_keys/'manage_dir=no# Using with_file- name: Set up authorized_keys for the deploy user authorized_key: user=deploykey=" item "with_file:- public_keys/doe-

43、jane- public_keys/doe-john# Using key_options:- authorized_key: user=key=" lookup('file', '/home/.ssh/id_rsa.pub') " key_options='no-port-forwarding,host=""'# Set up authorized_keys exclusively with one key- authorized_key: user=root key=public_key

44、s/doe-jane state=present exclusive=yesPlaybook包含多個play包含多個Task=調(diào)用=Module屬于AnsibleTask的具體內(nèi)容是依靠Ansible的Module去實現(xiàn)的1. Target:定義目標主機組,使用的用戶Target參數(shù)詳解:1. hosts:定義的主機組2. user:執(zhí)行該任務(wù)組的用戶3. remote_user:與user相同4. sudo:如果設(shè)置為yes,執(zhí)行該任務(wù)組的用戶在執(zhí)行任務(wù)的時候,獲取root權(quán)限5. sudo_user:如果你設(shè)置user為tom,sudo為yes,sudo_user為jerry,則tom用戶

45、則會獲取jerry用戶的權(quán)限6. connection:通過什么方式連接到主機,默認為ssh7. gather_facts:除非你明確說明不需要在主機上執(zhí)行setup模塊,否則默認會自動執(zhí)行。如果你確實不需要setup模塊所傳遞過來的變量,你可以禁用該選項,gather_facts: no2. Variable:定義需要使用的變量1. vars:直接在Playbook中定義變量名和值2. vars_files:將變量在文件中3. vars_prompt:采用交互的方式動態(tài)輸入變量值具體使用方式請參照【變量的使用】3. Task:定義將要執(zhí)行的任務(wù)列表1) name:任務(wù)名稱2) action/

46、module:使用模塊進行操作3) notify:任務(wù)執(zhí)行完后調(diào)用的任務(wù),名稱同Handler中的任務(wù)名稱- hosts: 5user: root4. Handler:定義任務(wù)執(zhí)行完成后將調(diào)用的其他任務(wù)1) name:Handler的名稱2) action/module:使用模塊進行操作注意:在一個 play 里面無論對一個 handlers 通知調(diào)用多少次,都只是在所有任務(wù)執(zhí)行完后執(zhí)行一次示例:Playbooks執(zhí)行ansible-playbook命令說明ansible-playbook命令和ansible命令主要的參數(shù)都一樣,ansible-playbook特殊的參數(shù)如

47、下:ansible-playbook playbook.yml- name: install and configure apache hosts: webserversvars:http_port: 80max_clients: 200 remote_user: root tasks:- name: ensure apache is at the latest version yum: pkg=httpd state=latest- name: write the apache config filetemplate: src=/srv/httpd.j2 dest=/etc/httpd.co

48、nf notify:- restart apache- name: ensure apache is running (and enable it at boot) service: name=httpd state=started enabled=yeshandlers:- name: restart apacheservice: name=httpd state=restartedhandlers:- name: restart redisserivce: name=redis state=restarted enable=yestasks:- name: install apacheac

49、tion: apt-get name=httpd state=installed- name: configure apachecopy: src=/vagrant/test_ansible.yml dest=/etc/httpd/conf/httpd.conf- name: restart apache service:name:httpd state:restartednotify:- restart redis常用模塊Playbook的任務(wù)都是調(diào)用ansible的模塊來完成,和前面介紹的模塊一樣,重點介紹一些Playbook中常用的模塊。Template作用:將模板文件中的變量,動態(tài)的替

50、換為參數(shù)值,然后將文件復(fù)制到遠程主機上,而copy只復(fù)制文件。Template提供了框架式的配置文件,可以把Anisble需要的值插入到合適的位置。采用Jinja2語法進行定義,可以包含條件、循環(huán)、宏等功能。 參數(shù):1. src:本地源文件或者目錄2. dest:目標文件或者目錄3. backup:覆蓋之前,是否備份原文件,yes/no4. owner:設(shè)定文件/目錄的屬主5. group:設(shè)定文件/目錄的屬組6. mode:設(shè)定文件/目錄的權(quán)限7. validate:在執(zhí)行命令前先驗證命令示例:set_fact作用:在遠程主機上執(zhí)行任務(wù)的過程中,計算需要的參數(shù)值,這些參數(shù)在play之間可以共

51、用參數(shù): key_value:必輸項,set_fact以key/value的形式進行配置示例:1、安裝mysql,配置innodb的緩存池大小為系統(tǒng)內(nèi)存的一半# Example from Ansible Playbooks- template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644# The same example, but using symbolic modes equivalent to 0644- template: src=/mytemplates/foo.j2 des

52、t=/etc/file.conf owner=bin group=wheel mode="u=rw,g=r,o=r"# Copy a new "sudoers" file into place, after passing validation with visudo- template: src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'-list-hosts打印出將會執(zhí)行命令的主機,并不執(zhí)行命令-list-tags顯示出所有的標簽-list-tasks打印出將會執(zhí)行

53、的任務(wù),并不執(zhí)行-step一步一步執(zhí)行任務(wù),每一步都需要人工確認-syntax-check檢查Playbook的語法,并不執(zhí)行2、示例pause作用:在執(zhí)行Playbook時暫定,可以指定暫停時間或者提示用戶確認是否繼續(xù),當(dāng)需要用戶確認或者容易出錯的地方可以使用暫定模塊,這種方式可以讓用戶在部署的時候,靈活的參數(shù):節(jié)奏,并整個交互過程。1. minutes:暫時時間(分)2. prompt:提示用戶的信息3. seconds:暫停時間(秒)示例:# Example setting host facts using key=value pairs- set_fact: one_fact=&quo

54、t;something" other_fact=" local_var * 2 "# Example setting host facts using complex arguments- set_fact:one_fact: somethingother_fact: " local_var * 2 "# As of 1.8, Ansible will convert boolean strings ('true', 'false', 'yes', 'no') # to prope

55、r boolean values when using the key=value syntax, however it is still # recommended that booleans be set using the complex argument style:- set_fact:one_fact: true other_fact: false- hosts: mysqlservers tasks:- name: install MySqlyum: name=mysql-server state=installed- name: Calculate InnoDB buffer pool sizeset_fact: innodb_buffer_pool_size_mb=" ansible_memtotal_mb /2 "- name: Configure MySQLtemplate: src=templates/f.j2 dest=/etc/f owner=root group=root mo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。