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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

8、thon-simplejson,不支持Python3.0安裝過(guò)程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的方式安裝,安裝詳細(xì)參考,請(qǐng)安裝結(jié)果Ansible安裝完之后,則會(huì)在服務(wù)器上安裝好Ansible件:ansible.cfg:Ansible配置文件,詳細(xì)配置參考hosts:主機(jī)信息管理文件roles:場(chǎng)景庫(kù)令工具(類(lèi)似Git令工具),在/etc/ansible/下有以下幾個(gè)文/etc/ansible是Ansible的數(shù)據(jù)目錄,group_vars、host_vars等文件都可

10、以存放在該目錄Ansible會(huì)安裝如下命令: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命令通過(guò)ansible -h可以查看ansible的所有命令,詳細(xì)如下:

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

12、默認(rèn)存儲(chǔ)在/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在后臺(tái)異步執(zhí)行,適用于耗時(shí)任務(wù),在設(shè)定的時(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 連接類(lèi)型 (default=smart)-e EXTRA_VARS, -extra-vars=EXTRA_VARS set additional variables as key=value or YAML/JSON-f FORKS, -forks=FORKSfork多少進(jìn)行并發(fā)處理,(default=5)-i INVENTORY, -inventory-file=INVENTORY 指定hosts文件路徑(default=/etc/ansible/hosts)-l SUBSET, -limit=SUBSET指定一個(gè)pattern,對(duì)<host_p

15、attern>已經(jīng)匹配的主機(jī)進(jìn)行二次過(guò)濾確-m MODULE_NAME, -module-name=MODULE_NAME 要執(zhí)行的模塊的名稱(chēng)(default=command)-M MODULE_PATH, -module-path=MODULE_PATH 要執(zhí)行的模塊的路徑(default=None)-P POLL_INTERVAL, -poll=POLL_INTERVAL 當(dāng)使用異步執(zhí)行-B時(shí),設(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連接超時(shí)時(shí)間 (default=10)-t TREE, -tree=TREE將日志輸出到該目錄,日志文件名會(huì)議主機(jī)名命令-u REMOTE_USER, -user=REMOTE_USER ssh連接的用戶名,默認(rèn)為root-vault-password-file=VAULT_PASSWO

17、RD_FILE vault password file debugging)-k, -ask-pass提示輸入ssh登錄密碼,使用密碼驗(yàn)證登錄時(shí)使用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運(yùn)行命令-S, -surun operations with su (deprecated, use

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

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

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

21、以存在/etc/ansible/host_vars/server中,信 息都以YAML格式編寫(xiě),示例內(nèi)容如下:- #YAML格式要求ntp_server: 00#變量名:變量值動(dòng)態(tài)配置InventoryInventory可以無(wú)需手動(dòng)配置分組和主機(jī),可以動(dòng)態(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機(jī)房#host1 #host2 #B機(jī)房#host3 #host4#北京機(jī)房:children#A機(jī)房#B機(jī)房#中國(guó)機(jī)房:children #北京機(jī)房#上海機(jī)房targetslocalhostansible_connection=localansible_connection=sshansible_ssh_user=mpdehaan ansible_connecti

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

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

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

26、外的所有web服務(wù)器4. 組合模式:webservers:dbservers:&staging:!phoenix,在 webservers 或者 dbservers 組中,必須還存在于staging 組中,但是不在 phoenix 組中5. 正則表達(dá)式模式 Pattern官方資料常用模塊Ansible有很多的模塊,大類(lèi)有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。摘取常用的模塊進(jìn)行說(shuō)明,詳細(xì)模塊介紹,請(qǐng)?jiān)L問(wèn)。command作用:在遠(yuǎn)程主機(jī)上執(zhí)行命令,command是ad-hoc模式下的默認(rèn)模塊,無(wú)需-m command進(jìn)行指定參數(shù):1. chdir:在執(zhí)行指令之前,先切換到該指定的目錄2. creates:表示一個(gè)文件名,當(dāng)該文件存在,則該命令不執(zhí)行ansible-doc -l:顯示所

28、有模塊名稱(chēng)及作用ansible-doc -s module_name:顯示指定模塊的各項(xiàng)參數(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:表示一個(gè)文件名,當(dāng)該文件不存在,則該命令不執(zhí)行4. free_form:要執(zhí)行的linux指令示例:臨時(shí)任務(wù): ans

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

30、ree_form:要執(zhí)行的linux指令示例:raw作用:在主機(jī)上執(zhí)行特殊命令適用場(chǎng)景:# 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說(shuō)明:第一種寫(xiě)法是切換到somedir/目錄,當(dāng)/path/to/database文件存在時(shí)才執(zhí)行/usr/bin/make_database.sh文件;第二種 沒(méi)有切換目錄1. 用于安裝python-simplejson,因?yàn)槠渌K都依賴python-simplejson,只有通過(guò)raw模塊安裝2. 用于路由器等無(wú)python環(huán)境的設(shè)備service作用:用于管理服務(wù)參數(shù):1. argu

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

34、時(shí)也很有用。 在執(zhí)行Playbook時(shí)默認(rèn)會(huì)先執(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:必選項(xiàng),定義文件/目錄的路徑recurse:遞歸設(shè)置文件的屬性,只對(duì)目錄有效(state=director)state:定義文件狀態(tài),可選項(xiàng):file、link、directory、hard、touch、absent1. directory:如果目錄不存在,創(chuàng)建目錄2. touch:如果文件不存在,創(chuàng)建一個(gè)新文件3. absent:刪除文件或目錄示例:copy作用: 參數(shù):本地文件到主機(jī),fetch命令正好相反,從主機(jī)文件到本地src:本地源文件或者目錄dest:目標(biāo)文件或者目錄backup:覆蓋之前,是否備份原文件,ye

38、s/no owner:設(shè)定文件/目錄的屬主group:設(shè)定文件/目錄的屬組mode:設(shè)定文件/目錄的權(quán)限.5.6.示例:authorized_key作用:添加或者刪除authorized_key文件中的公鑰,已完成SSH密鑰配對(duì)參數(shù):1. exclusive:是否刪除未指明的公鑰,慎用2. key:公鑰地址,可以是URL,也可以是本地路徑,必輸項(xiàng)3. path:authorized_keys的位置4. state:present即添加,absent即刪除5. user:主機(jī)上的賬戶,必輸項(xiàng)示例: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的配置、部署、編排語(yǔ)言,它可以描述一系列的任務(wù)。Ansible是一個(gè)運(yùn)行任務(wù)的工具平臺(tái),Playbooks才是的方案,也是對(duì)運(yùn)維要求較高的地方。就像它的名字一樣,我們需要編寫(xiě)出一份的劇本,這樣才能高效的完成自動(dòng)化部署。Play

41、books采用YAML的語(yǔ)法結(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包含多個(gè)play包含多個(gè)Task=調(diào)用=Module屬于AnsibleTask的具體內(nèi)容是依靠Ansible的Module去實(shí)現(xiàn)的1. Target:定義目標(biāo)主機(jī)組,使用的用戶Target參數(shù)詳解:1. hosts:定義的主機(jī)組2. user:執(zhí)行該任務(wù)組的用戶3. remote_user:與user相同4. sudo:如果設(shè)置為yes,執(zhí)行該任務(wù)組的用戶在執(zhí)行任務(wù)的時(shí)候,獲取root權(quán)限5. sudo_user:如果你設(shè)置user為tom,sudo為yes,sudo_user為jerry,則tom用戶

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

46、module:使用模塊進(jìn)行操作3) notify:任務(wù)執(zhí)行完后調(diào)用的任務(wù),名稱(chēng)同Handler中的任務(wù)名稱(chēng)- hosts: 5user: root4. Handler:定義任務(wù)執(zhí)行完成后將調(diào)用的其他任務(wù)1) name:Handler的名稱(chēng)2) action/module:使用模塊進(jìn)行操作注意:在一個(gè) play 里面無(wú)論對(duì)一個(gè) handlers 通知調(diào)用多少次,都只是在所有任務(wù)執(zhí)行完后執(zhí)行一次示例:Playbooks執(zhí)行ansible-playbook命令說(shuō)明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的模塊來(lái)完成,和前面介紹的模塊一樣,重點(diǎn)介紹一些Playbook中常用的模塊。Template作用:將模板文件中的變量,動(dòng)態(tài)的替

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

51、用參數(shù): key_value:必輸項(xiàng),set_fact以key/value的形式進(jìn)行配置示例: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打印出將會(huì)執(zhí)行命令的主機(jī),并不執(zhí)行命令-list-tags顯示出所有的標(biāo)簽-list-tasks打印出將會(huì)執(zhí)行

53、的任務(wù),并不執(zhí)行-step一步一步執(zhí)行任務(wù),每一步都需要人工確認(rèn)-syntax-check檢查Playbook的語(yǔ)法,并不執(zhí)行2、示例pause作用:在執(zhí)行Playbook時(shí)暫定,可以指定暫停時(shí)間或者提示用戶確認(rèn)是否繼續(xù),當(dāng)需要用戶確認(rèn)或者容易出錯(cuò)的地方可以使用暫定模塊,這種方式可以讓用戶在部署的時(shí)候,靈活的參數(shù):節(jié)奏,并整個(gè)交互過(guò)程。1. minutes:暫時(shí)時(shí)間(分)2. prompt:提示用戶的信息3. seconds:暫停時(shí)間(秒)示例:# 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論