ansible學(xué)習(xí)基礎(chǔ)手冊專業(yè)資料_第1頁
ansible學(xué)習(xí)基礎(chǔ)手冊專業(yè)資料_第2頁
ansible學(xué)習(xí)基礎(chǔ)手冊專業(yè)資料_第3頁
ansible學(xué)習(xí)基礎(chǔ)手冊專業(yè)資料_第4頁
ansible學(xué)習(xí)基礎(chǔ)手冊專業(yè)資料_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

從Github獲取Ansible

如果你有一種github賬戶,可以跟進(jìn)Ansible在Github項(xiàng)目:Githubproject咱們

在這里保持對(duì)bugs和featureideas跟蹤.

需要安裝些什么

Ansible默認(rèn)通過SSH合同管理機(jī)器.

安裝Ansible之后,不需要啟動(dòng)或運(yùn)營一種后臺(tái)進(jìn)程,或是添加一種數(shù)據(jù)庫.只要在

一臺(tái)電腦(可以是一臺(tái)筆記本)上安裝好,就可以通過這臺(tái)電腦管理一組遠(yuǎn)程機(jī)器.

在遠(yuǎn)程被管理機(jī)器上,不需耍安裝運(yùn)營任何軟件,因而升級(jí)Ansible版本不會(huì)有太

多問題.

選取哪一種版本?

由于Ansible可以很簡樸從源碼運(yùn)營,且不必在遠(yuǎn)程被管理機(jī)器上安裝任何軟件,

諸多Ansible顧客會(huì)跟進(jìn)使用開發(fā)版本.

Ansible普通每兩個(gè)月出一種發(fā)行版本.小bugs普通在下一種發(fā)行版本中修復(fù),

并在穩(wěn)定分支中做backports.大bugs會(huì)在必要時(shí)出一種維護(hù)版本,雖然這不是很

頻繁.

若你但愿使用Ansible最新版本,并且你使用操作系統(tǒng)是RedHatEnterprise

Linux(TM),CentOS,Fedora,Debian,Ubuntu,咱們建議使用系統(tǒng)軟件包管

理器.

另有一種選取是通過“pip”工具安裝,"pip”是一種安裝和管理Python包工具.

若你但愿跟進(jìn)開發(fā)版本,想使用和測試最新功能特性,咱們會(huì)分享如何從源碼運(yùn)營

Ansible辦法.從源碼運(yùn)營程序不需要進(jìn)行軟件安裝.

對(duì)管理主機(jī)規(guī)定

當(dāng)前,只要機(jī)器上安裝了Python2.6(windows系統(tǒng)不可以做控制主機(jī)),都可以

運(yùn)營Ansible.

主機(jī)系統(tǒng)可以是RedHat,Debian,CentOS,OSX,BSD各種版本,等等.

對(duì)托管節(jié)點(diǎn)規(guī)定

Onthemanagednodes,youonlyneedPython2.4orlater,butifyouare

runninglessthanPython2.5ontheremotes,youwillalsoneed:

托管節(jié)點(diǎn)上需要安裝Python2.4及以上版本.但如果版本低于Python2.5廁

需要額外安裝一種模塊:

python-simplejson

Note

沒安裝python?simplejson,也可以使用Ansible”raw”模塊和script模塊,因而從技

術(shù)卜.講,你可以通過Ansible"raw”模塊安裝python-simplejson,之后就可以使用

Ansible所有功能了.

Note

如果托管節(jié)點(diǎn)上啟動(dòng)了SEIinux,你需要安裝libselinux-python,這樣才可使用

Ansible中與copy/file/template有關(guān)函數(shù).你可以通過Ansibleyum模塊在需要托

管節(jié)點(diǎn)上安裝libselinLx-python.

Note

Python3與Python2是稍有不同語言,而大多數(shù)Python程序還不能在Python

3中對(duì)的運(yùn)營.而某些Linux發(fā)行版(Gentoo,Arch)沒有默認(rèn)安裝Python2.X解

釋器.在這些系統(tǒng)上,你需要安裝一種Python2.X解釋器,并在inventory(詳

見Inventory文獻(xiàn))中設(shè)立,ansible_python_interpreter,變量指向你2.X

Python.你可以使用‘raw'模塊在托管節(jié)點(diǎn)上遠(yuǎn)程安裝Python2.X.

RedHatEnterpriseLinux,CentOS,Fedora,andUbuntu等發(fā)行版都默認(rèn)安

裝了2.X解釋器,涉及幾乎所有Unix系統(tǒng)也是如此.

安裝管理主機(jī)

從源碼運(yùn)營

從項(xiàng)目checkout中可以很容易運(yùn)營Ansible,Ansible運(yùn)營不規(guī)定root權(quán)限,也不

依賴于其她軟件,不規(guī)定運(yùn)營后臺(tái)進(jìn)程,也不需要設(shè)立數(shù)據(jù)庫.因而咱們社區(qū)許多

顧客始終使用Ansible開發(fā)版本,這樣可以運(yùn)用最新功能特性,也以便對(duì)項(xiàng)目做貢

獻(xiàn).由于不需要安裝任何東西,跟進(jìn)Ansible開發(fā)版相對(duì)于其她開源項(xiàng)目要容易諸

多.

從源碼安裝環(huán)節(jié)

$gitclonegit:///ansible/ansible.git--recursive

$cd./ansible

$source./hacking/env-setup

如果沒有安裝pip,請(qǐng)先安裝相應(yīng)于你Python版本pip:

$sudoeasy_installpip

如下Python模塊也需要安裝:

isudopipinstallparaniikoPyYAML3inja2httplib2

注意,當(dāng)更新ansible版本時(shí),不只要更新git源碼樹,也要更新git中指向Ansible

自身模塊"submodules"(不是同一種模塊)

$gitpull--rebase

$gitsubmoduleupdate--init--recursive

一旦運(yùn)營env-setup腳本,就意味著Ansible從源碼中運(yùn)營起來了.默認(rèn)inventory

文獻(xiàn)是/etc/ansible/hosts.inventory文獻(xiàn)也可以另行指定(詳見/aueafory文應(yīng)0

..code-block::bash

$echo"">*/ansible_hosts$export

ANSIBLE_HOST8=-/ansible_hosts

你可以在手冊后續(xù)章節(jié)閱讀更多關(guān)于inventory文獻(xiàn)使用,當(dāng)前讓咱們測試一條

ping命令:

$ansibleall-mping--ask-pass

你也可以使用命令usudomakeinstall"

通過Yum安裝最新發(fā)布版本

通過Yum安裝RPMs合用于EREL6,7,以及仍在支持中Fedora發(fā)行版.

托管節(jié)點(diǎn)操作系統(tǒng)版本可以是更早版本(如EL5),但必要安裝Python2.4或更

高版本Python.

Fedora顧客可直接安裝Ansible,但RHEL或CentOS顧客,需要配備EPEL

#instaLLtheepeL-reLeaseRPMifneededonCentOS,RHEL,orScientificLinux

$sudoyuminstallansible

你也可以自己創(chuàng)立RPM軟件包.在Ansible項(xiàng)目checkout根目錄下,或是在一種

tarball中,使用makerprr命令創(chuàng)立RPM軟件包.然后可分發(fā)這個(gè)軟件包或是使用

它來安裝Ansible.在創(chuàng)立之前,先擬定你已安裝了rpm-build,make,

andpython2-devel.

$gitclonegit://github.com/ansible/ansible.git

$cd./ansible

$makerpm

$sudorpm-Uvh-/rpmbuild/ansible-?.noarch.rpm

通過Apt(Ubuntu)安裝最新發(fā)布版本

Ubuntu編譯版可在PPA中獲得:'v~ansible/+archive/ansible>'.

配備PPA及安裝ansib電執(zhí)行如下命令:

$sudoapt-getinstallsoftware-properties-common

$sudoapt-add-repositoryppa:ansible/ansible

$sudoapt-getupdate

$sudoapt-getinstallansible

Note

在初期Ubuntu發(fā)行版中,“software-properties-common”名為

Hpython-software-propertiesM.

也可從源碼checkout中創(chuàng)立Debian/Ubuntu軟件包,執(zhí)行:

$makedeb

你或許也想從源碼中運(yùn)營最新發(fā)行版本,可看前面闡明.

通過Portage(Gentoo)安裝最新發(fā)布版本

$emerge-avapp-admin/ansible

要安裝最新版本,你或許需要...

$echo'app-admin/ansible'>>/etc/portage/package.accept_keywords

Note

若在Gentoo托管節(jié)點(diǎn)中,Python3默認(rèn)作為Pythonslot(這也是默認(rèn)設(shè)立),則你

必要在你group或inventory變量中設(shè)

立ansible_python_interpreter=/usr/bin/python2

通過pkg(FreeBSD)安裝最新發(fā)布版本

$sudopkginstallansible

你或許想從ports中安裝:

$sudomake-C/usr/ports/sysutils/ansibleinstall

通過Homebrew(MacOSX)安裝最新發(fā)布」

在Mac中安裝,擬定你已安裝Homebrew:

$brewupdate

$brewinstallansible

通過Pip安裝最新發(fā)布版本

Ansible可通過“pip”安裝(安裝和管理Python包工具),若你還沒有安裝pip,可

執(zhí)行如下命令安裝:

$sudoeasy_installpip

然后安裝Ansible:

$sudopipinstallansible

如果你是在OSXMavericks上安裝,編譯器也許或告警或報(bào)錯(cuò),可通過如下設(shè)

立避免這種狀況:

$sudoCFLAGS="Qunused-argumentsCPPFLAGS=-Qunused-argumentspipinstallansible

使用virtualenv讀者可通過virtualenv安裝Ansible,然而咱們建議不用這樣

做,直接在全局安裝Ansible.不要使用easyjnstall直接安裝ansible.

發(fā)行版Tarball

不想通過gitcheckout創(chuàng)立Ansible軟件包?在這里可獲取TarballAnsible

downloads

各種版本Ansible在這里做了版本標(biāo)注gitrepository

前言

當(dāng)前你已經(jīng)閱讀了Installation安裝指南并安裝了Ansible.是時(shí)候通過某些命令

開始進(jìn)一步理解Ansible了.

咱們最先展示并非那強(qiáng)大集配備,布置,自動(dòng)化于一身playbook.Playbooks有關(guān)

內(nèi)容將在另一章節(jié)中講述.

本章節(jié)講述如何進(jìn)行初始化.一旦你有了這些概念,請(qǐng)去閱讀IntroductionTo

Ad-HocCommands以獲取更多細(xì)節(jié),然后你就能去進(jìn)一步playbook并摸索它最

有趣某些.

遠(yuǎn)程連接概述

在咱們開始前要先理解Ansible是如何通過SSH與遠(yuǎn)程服務(wù)器連接是很重要.

Ansible1.3及之后版本默認(rèn)會(huì)在本地OpenSSH可用時(shí)會(huì)嘗試用其進(jìn)行遠(yuǎn)程通

訊.這會(huì)啟用ControlPersist(——種性能特性),Kerberos,和在~/.ssh/corrfig中配備

選項(xiàng)如JumpHostsetup.然而,當(dāng)你使用Linux公司版6作為主控機(jī)(紅帽公司版

及其衍生版如CentOS),其OpenSSH版本也許過于老舊無法支持ControlPersist.

在這些操作系統(tǒng)中,Ansible將會(huì)退回并采用paramiko(由Python實(shí)現(xiàn)高質(zhì)量

OpenSSH庫).如果你但愿可以使用像是KerberizedSSH之類特性,煩請(qǐng)考慮使

用Fedora,OSX,或Ubuntu作為你主控機(jī)直到有關(guān)平臺(tái)上有更新版本

OpenSSH可供使用,或者啟用Ansible'acceleratedmode”.參見Accelerated

Mode.

在Ansible1.2及之前版本,默認(rèn)將會(huì)使用paramiko.本地OpenSSH必要通過

-cssh或者在配備文獻(xiàn)中設(shè)定.

你偶爾會(huì)遇到不支持SFTP設(shè)備.雖然這很少見,但你會(huì)有概率中獎(jiǎng).你可以通過

在配備文獻(xiàn)(47S沏e就各文朗中切換至SCP模式來與之鏈接.

說起遠(yuǎn)程設(shè)備,Ansible會(huì)默認(rèn)假定你使用SSHKey(咱們推薦這種)但是密碼也

同樣可以.通過在需要地方添加-ask-pass選項(xiàng)來啟用密碼驗(yàn)證.如果使用了

sudo特性,當(dāng)sudo需要密碼時(shí),也同樣恰當(dāng)提供了-ask-sudo-pass選項(xiàng).

也許這是常識(shí),但也值得分享:任何管理系統(tǒng)受益于被管理機(jī)器在主控機(jī)附近運(yùn)營.

如果在云中運(yùn)營,可以考慮在使用云中一臺(tái)機(jī)器來運(yùn)營Ansible.

作為一種進(jìn)階話題,Ansible不止支持SSH來遠(yuǎn)程連接.連接方式是插件化并且尚

有許多本地化管理選項(xiàng)諸如管理chroot,Ixc,和jailcontainers.一種叫做

'ansible-pull'模式可以反轉(zhuǎn)主控關(guān)系并使遠(yuǎn)程系統(tǒng)通過定期從中央git目錄檢出

并拉取配備指令來實(shí)現(xiàn)背景連接通信.

你第一條命令

當(dāng)前你已經(jīng)安裝了Ansib電是時(shí)候從某些基本知識(shí)開始了.編輯(或創(chuàng)

立)/etc/ansible/hosts并在其中加入一種或各種遠(yuǎn)程系統(tǒng).你publicSSHkey必

要在這些系統(tǒng)、、authorized_keys''中:

0

這里有個(gè)節(jié)點(diǎn)設(shè)立文獻(xiàn)(inventoryfile)將會(huì)在Inventory文濾f中得到進(jìn)一步闡明.

咱們假定你使用SSHKey來授權(quán).為了避免在建立SSH連接時(shí),重復(fù)輸入密碼你

可以這樣做:

$ssh-agentbash

$ssh-add-/.ssh/id_rsa

(依照你建立方式,你也許但愿使用Ansible--private-key選項(xiàng),通過指定pem文獻(xiàn)

來代替SSHKey來授權(quán))當(dāng)前ping你所有節(jié)點(diǎn):

$ansibleall-mping

Ansible會(huì)像SSH那樣試圖用你當(dāng)前顧客名來連接你遠(yuǎn)程機(jī)器.要覆寫遠(yuǎn)程顧客

名,只需使用參數(shù).如果你想訪問sudo模式,這里也有標(biāo)記(flags)來實(shí)現(xiàn):

#asbruce

$ansibleall-mping-ubruce

#asbruce,sudoingtoroot

$ansibleall-mping-ubruce--sudo

#asbruce,sudoingtobatman

$ansibleall-mping-ubruce--sudo--sudo-userbatman

(如果你碰巧想要使用其她sudo實(shí)現(xiàn)方式,你可以通過修改Ansible配備文獻(xiàn)來實(shí)

現(xiàn).也可以通過傳遞標(biāo)記給sud。(如-H)來設(shè)立.)當(dāng)前對(duì)你所有節(jié)點(diǎn)運(yùn)營一種命

令:

$ansibleall-a"/bin/echohello"

恭喜你!你剛剛通過Ansible連接了你所有節(jié)點(diǎn).不久你就會(huì)閱讀更多關(guān)于現(xiàn)實(shí)案

例IntroductionToAd-HocCommands并摸索可以通過不同模塊做什么以及研

究Ansibleplaybook語言

Playbooks.Ansible不只是能運(yùn)營命令,它同樣也擁有強(qiáng)大配備管理和布置特性.

雖然尚有更多內(nèi)容等待你摸索,但你基本設(shè)施已經(jīng)能完全工作了!

公鑰認(rèn)證

Ansible1.2.1及其之后版本都會(huì)默認(rèn)啟用公鑰認(rèn)證.

如果有個(gè)主機(jī)重新安裝并在“known_hosts”中有了不同key,這會(huì)提示一種錯(cuò)誤信

息直到被糾正為止.在使用Ansible時(shí),你也許不想遇到這樣狀況:如果有個(gè)主機(jī)沒

有在“known_hosts”中被初始化將會(huì)導(dǎo)致在交互使用Ansible或定期執(zhí)行Ansible

時(shí)對(duì)key信息確認(rèn)提示.

如果你想禁用此項(xiàng)行為并明白其含義,你可以通過編輯/etc/ansible/ansible.cfg

or-/.ansible.cfg來實(shí)現(xiàn):

[defaults]

host_key_checking=False

或者你也可以通過設(shè)立環(huán)境變量來實(shí)現(xiàn):

$exportANSIBLE_HOST_KEY_CHECKING=False

同樣注旨在paramiko模式中公鑰認(rèn)證相稱慢.因而,當(dāng)使用這項(xiàng)特性時(shí),切換

至'SSH'是推薦做法.

Ansible將會(huì)對(duì)遠(yuǎn)程系統(tǒng)模塊參數(shù)記錄在遠(yuǎn)程syslog中,除非一種任務(wù)或者play

被標(biāo)記了“no」og:True”屬性,稍后解釋.在主控機(jī)上啟用基本日記功能參

見Ansible配備文獻(xiàn)文培并在配備文獻(xiàn)中設(shè)立'log_path'.公司顧客也許也

對(duì)AnsibleTower感興趣.

Inventory文獻(xiàn)

Topics

Inventory文獻(xiàn)

O主機(jī)與組

O主機(jī)變量

O組變量

O把一種組作為另一種組子成員

o分文獻(xiàn)定義Host和Group變量

oInventory參數(shù)闡明

Ansible可同步操作屬于一種組多臺(tái)主機(jī),組和主機(jī)之間關(guān)系通過inventory文

獻(xiàn)配備.默認(rèn)文獻(xiàn)途徑為/etc/ansible/hosts

除默認(rèn)文獻(xiàn)外,你還可以同步使用各種inventory文獻(xiàn)(背面會(huì)講到),也可以從動(dòng)

態(tài)源,或云上拉取inventory配備信息.詳見動(dòng)態(tài)Inventory.

主機(jī)與組

/etc/ansible/hosts文獻(xiàn)格式與windowsini配備文獻(xiàn)類似:

[webservers]

[dbservers]

方括號(hào)口中是組名,用于對(duì)系統(tǒng)進(jìn)行分類,便于對(duì)不同系統(tǒng)進(jìn)行個(gè)別管理.

一種系統(tǒng)可以屬于不同組,例如一臺(tái)服務(wù)器可以同步屬于webserver組和

dbserver組.這時(shí)屬于兩個(gè)組變量都可覺得這臺(tái)主機(jī)所用,至于變量優(yōu)先級(jí)關(guān)系將

于后來章節(jié)中討論.

如果有主機(jī)SSH端口不是原則22端口,可在主機(jī)名之后加上端標(biāo)語,用冒號(hào)分

隔.SSH配備文獻(xiàn)中列出端標(biāo)語不會(huì)在paramiko連接中使用,會(huì)在openssh

連接中使用.

端標(biāo)語不是默認(rèn)設(shè)立時(shí),可明確表達(dá)為:

:5309

假設(shè)你有某些靜態(tài)IP地址,但愿設(shè)立某些別名,但不是在系統(tǒng)host文獻(xiàn)中設(shè)立,

又或者你是通過隧道在連接,那么可以設(shè)立如下:

jumperansible_ssh_port=5555ansible_ssh_host=192,168.1.50

在這個(gè)例子中,通過“jumped別名,會(huì)連接0:5555.記住,這是通過

inventory文獻(xiàn)特性功能設(shè)立變量.普通而言,這不是設(shè)立變量(描述你系統(tǒng)方略

變量)最佳方式.背面會(huì)說到這個(gè)問題.

一組相似hostname,可簡寫如下:

[webservers]

www[01:50].

數(shù)字簡寫模式中,01:50也可寫為1:50,意義相似.你還可以定義字母范疇簡寫模

式:

[databases]

db-[a:-F].example.com

對(duì)于每一種host,你還可以選取連接類型和連接顧客名:

localhostansible_connection=local

ansible_connection=sshansible_ssh_user=mpdehaan

ansible_connection=sshansible_ssh_user=mdehaan

所有以上討論對(duì)于inventory文獻(xiàn)設(shè)立是一種速記法,背面咱們會(huì)討論如何將這

些設(shè)立保存為‘host_vars'目錄中獨(dú)立文獻(xiàn).

主機(jī)變量

前面已經(jīng)提到過,分派變量給主機(jī)很容易做到,這些變量定義后可在playbooks

中使用:

[atlanta]

hostlhttp_port=80maxRequestsPerChild=808

host2http_port=303maxRequestsPerChild=909

組變量

也可以定義屬于整個(gè)組變量:

[atlAnta]

hostl

host2

[atlanta:vans]

ntp_server=

proxy=

把一種組作為另一種組子成員

可以把一種組作為另一種組子成員,以及分派變量給整個(gè)組使用.這些變量可以

給/usr/bin/ansible-playbook使用,但不能給/usr/bin/ansible使用:

[atlanta]

hostl

host2

[raleigh]

host2

host3

[southeast:children]

atlanta

ralpigh

[southeast:vars]

some_server=

halon_system_timeout=30

self_destruct_countdown=60

escape_pods=2

[usa:children]

southeast

northeast

southwest

northwest

如果你需要存儲(chǔ)一種列表或hash值,或者更喜歡把host和group變量分開配

備,請(qǐng)看下一節(jié)闡明.

分文獻(xiàn)定義Host和Group變量

在inventory主文獻(xiàn)中保存所有變量并不是最佳方式.還可以保存在獨(dú)立文獻(xiàn)中,

這些獨(dú)立文獻(xiàn)與inventory文獻(xiàn)保持關(guān)聯(lián).不同于inventory文獻(xiàn)(INI格式),

這些獨(dú)立文獻(xiàn)格式為YAML.詳見YAML語法.

假設(shè)inventory文獻(xiàn)途徑為:

/etc/ansible/hosts

假設(shè)有一種主機(jī)名為loosbair,主機(jī)同步屬于兩個(gè)組,一種是‘raleigh',另一種

是‘webservers'.那么如下配備文獻(xiàn)(YAML格式)中變量可覺得‘foosball'主

機(jī)所用.依次為,raleigh'組變量,'webservers'組變量,'foosball'主機(jī)變量:

/etc/ansible/group_vars/raleigh

/etc/ansible/group_vars/webservers

/etc/ansible/host_vars/-foosball

舉例來說,假設(shè)你有某些主機(jī),屬于不同數(shù)據(jù)中心,并依次進(jìn)行劃分.每一種數(shù)據(jù)中

心使用某些不同服務(wù)器.例如ntp服務(wù)器,database服務(wù)器等等.那么,raleigh,

這個(gè)組組變量定義在文獻(xiàn)’/etc/ansible/group_vars/raleigh'之中,也許類似這

樣:

ntp_server:acme.exam

database_server:

這些定義變量文獻(xiàn)不是一定要存在,由于這是可選特性.

尚有更進(jìn)一步運(yùn)用,你可覺得一種主機(jī),或一種組,創(chuàng)立一種目錄,目錄名就是主機(jī)

名或組名.目錄中可以創(chuàng)立各種文獻(xiàn),文獻(xiàn)中變量都會(huì)被讀取為主機(jī)或組變量.如

下Yaleigh1組相應(yīng)于/etc/ansible/group_vars/raleigh/目錄,其下有兩個(gè)文獻(xiàn)

db_settings和cluster_settings,其中分別設(shè)立不同變量:

/etc/ansible/group_vars/raleigh/db_settings

/etc/ansible/group_vars/raleigh/cluster_settings

'raleigh'組下所有主機(jī),都可以使用‘raleigh'組變量.當(dāng)變量變得太多時(shí),分文獻(xiàn)

定義變量更以便咱們進(jìn)行管理和組織.尚有一種方式也可參照,詳見Ansible

Wu〃關(guān)于組變量某些.注意,分文獻(xiàn)定義變量方式只合用于Ansible1.4及以上

版本.

Tip:Ansible1.2及以上版本中,group_vars/和host_vars/目錄可放在

inventory目錄下,或是playbook目錄下.如果兩個(gè)目錄下都存在,那么

playbook目錄下配備會(huì)覆蓋inventory目錄配備.

Tip:把你inventory文獻(xiàn)和變量放入gitrepo中,以便跟蹤她們更新,這是一

種非常推薦方式.

Inventory參數(shù)闡明

猶如前面提到,通過設(shè)立下面參數(shù),可以控制ansible與遠(yuǎn)程主機(jī)交互方式,其中

某些咱們己經(jīng)講到過:

ansiblesshhost

將要連接遠(yuǎn)程主機(jī)名.與你想要設(shè)定主機(jī)別名不同話,可通過此變量設(shè)立.

ansible_ssh_port

ssh端標(biāo)語.如果不是默認(rèn)端標(biāo)語,通過此變量設(shè)立.

ansible_ssh_user

默認(rèn)ssh顧客名

ansible_ssh_pass

ssh密碼(這種方式并不安全,咱們強(qiáng)烈建議使用--ask-pass或SSH密鑰)

ansible_sudo_pass

sudo密碼(這種方式并不安全,咱們強(qiáng)烈建議使用--ask-sudo-pass)

ansible_sudo_exe(newinversion1.8)

sudo命令途徑(合用于1.8及以上版本)

ansible_connection

。主機(jī)連接類型.例如:local,ssh或者paramiko.Ansible1.2此前默認(rèn)使用paramiko.1.2

后來默認(rèn)使用,smart','smart,方式會(huì)依照與否支持ControlPersist,來判斷,ssh'方式與否可行.

ansible_ssh_private_key_file

ssh使用私鑰文獻(xiàn).合用于有各種密鑰,而你不想使用SSH代理狀況.

ansible_shell_type

目的系統(tǒng)shell類型.默認(rèn)狀況下,命令執(zhí)行使用‘sh,語法,可設(shè)立為‘csh,或,fish'.

ansible_python_interpreter

目的主機(jī)python途徑.合用于狀況:系統(tǒng)中有各種Python,或者命令途徑不是

”/usr/bin/python",例如\*BSD,或者/usr/bin/python

不是2.X版本Python.咱們不使用“/usr/bin/env"機(jī)制,由于這規(guī)定遠(yuǎn)程顧客途徑設(shè)立對(duì)的,

且規(guī)定"python"可執(zhí)行程序名不可為python以外名字(實(shí)際可也許名為python26).

與ansible_python_interpreter工作方式,相似,可設(shè)定如ruby或perl途徑

一種主機(jī)文獻(xiàn)例子:

some_hostansible_ssh_port=2222ansible_ssh_user=manager

aws_hostansible_ssh_private_key_file=/home/example/.ssh/aws.pem

freebsd_hostansible_python_interpreter=/usr/local/bin/python

ruby_module_hostansible_ruby_interpreter=/usr/bin/ruby.1.9.3

動(dòng)態(tài)Inventory

Topics

?動(dòng)態(tài)Inventory

oCobbler外部Inventory腳本

oAWSEC2外部inventory腳本

o其他inventory腳本

o使用各種inventory源

o動(dòng)態(tài)組作為靜態(tài)組子組

使用配備管理系統(tǒng)經(jīng)常有一種需求,也許要在其她軟件系統(tǒng)中保存自己

inventory配備信息.

Ansible自身通過基于文本方式來記錄inventory配備信息,這在前面已簡介過

(詳見Inventory文獻(xiàn)).

除此之外,Ansible也支持用其她方式保存配備信息.

在其她軟件系統(tǒng)保存配備信息例子有:

1,從云端拉取inventory

2.LDAP(LightweightDirectoryAccessProtocol,輕景緲目錄訪問合同)

3,'Cobbler<>'_

4,或者走一份顯貴公司版CNDB(配備管理數(shù)據(jù)庫)軟件.

對(duì)于這些需求,Ansible可通過一種外部inventory系統(tǒng)來支持.在ansible

“/plugins”插件目錄下已經(jīng)具有某些選項(xiàng)一涉及EC2/Eucalyptus,Rackspace

Cloud,andOpenStack,咱們稍后會(huì)詳細(xì)簡介它們.

AnsibleTower提供了一種數(shù)據(jù)庫來存儲(chǔ)inventory配備信息,這個(gè)數(shù)

據(jù)庫可以通過web訪問,或通過REST訪問.Tower與所有你使用Ansible

動(dòng)態(tài)inventory源保持同步,并提供了一種圖形化inventory編輯器.有了這個(gè)

數(shù)據(jù)庫,便可以很容易關(guān)聯(lián)過去事件歷史,可以看到在上一次playbook運(yùn)營時(shí),

哪里浮現(xiàn)了運(yùn)營失敗狀況.

關(guān)于如何編寫你自己動(dòng)態(tài)inventory源、蒲參見開發(fā)動(dòng)態(tài)Inventory數(shù)據(jù)源.

Cobbler外部Inventory腳本

當(dāng)管理物理機(jī)器到達(dá)了一定數(shù)量時(shí),諸多使用Ansible顧客也許同步也會(huì)使用

到Cobbler.(注:Cobbler最初由MichaelDeHaan編寫,當(dāng)前項(xiàng)目主導(dǎo)人是

JamesCammarata,她當(dāng)前在Ansible公司工作).

Cobbler重要用于操作系統(tǒng)kickoff安裝,以及管理DHCP和DNS,除此之外,

它有一種通用層,可為各種配備管理系統(tǒng)(甚至是同步)提供數(shù)據(jù).因此Cobbler

也被某些管理員稱為是輕量級(jí)CMDB.

如何將Ansibleinventory與Cobbler聯(lián)系起來呢?辦法是:將腳本script拷

貝到/etc/ansible,通過chmod+x賦予可執(zhí)行權(quán)限.

在使用Ansible之前,先啟動(dòng)cobblerd進(jìn)程.

當(dāng)前使用Ansible要加上-i選項(xiàng)(例

如:-i/etc/ansibie/cobbier.py).cobbler.py這個(gè)腳本使用CobblerXMLRPC

API與Cobbler通信.

執(zhí)行腳本/etc/ansible/cobbler.py,應(yīng)當(dāng)能看到某些JSON格式數(shù)據(jù)輸出(也許

還沒有詳細(xì)內(nèi)容).

在cobbler中,假設(shè)有一種如下場景:

cobblerprofileadd--name=webserver--distro=CentOS6-x86_64

cobblerprofileedit--name=webserver--mgmt-classes="webserver"--ksmeta="a=2b=3"

cobblersystemedit--name=foo--dns-name=""--mgmt-classes="atlanta"

--ksmeta="c=4"

cobblersystemedit--name=bar--dns-name=""--mgmt-classes="atlanta',

--ksmeta="c=5"

''是一種域名,Ansible可以通過這個(gè)域名尋址找到相應(yīng)主機(jī)

foo,對(duì)其進(jìn)行操作.也可以通過組名‘webserver'或者'atlanta'尋址找到這個(gè)主

機(jī),只要這個(gè)主機(jī)是屬于這兩個(gè)組.直接使用too是不行.例如執(zhí)行命令"ansible

f。。”,無法找到該主機(jī),但使用"ansible(foo*,M卻可以,由于域名

700.1以too開頭.

這個(gè)腳本不但提供主機(jī)和組信息.如果運(yùn)營了‘setup'模塊(只要使用

playbooks,'setup,模塊會(huì)自動(dòng)運(yùn)營),變量a,b.c可按照如下模板自動(dòng)填充:

#file:/srv/motd.j2

Welcome.Iamtemplatedwithavalueofa={{a}},b={(b}},andc={{c}}

模板使用如下:

ansiblewebserver-msetup

ansiblewebserver-mteraplate-a"src=/tmp/motd.j2dest=/etc/motd"

Note

組名'webserver'是cobbler中定義.你依然可以在Ansible配備文獻(xiàn)中定義

變量.但要注意,變量名相似時(shí),外部inventory腳本中定義變量會(huì)覆蓋Ansible

中變量.

執(zhí)行上面命令后,主機(jī)foo/etc/motd文獻(xiàn)被寫入如下內(nèi)容:

Welcome.Iamtemplatedwithavalueofa=2,b=3.andc=4

主機(jī)'bar*()/etc/motd中寫入如下內(nèi)容:

Welcome,Iamtemplatedwithavalueofa=2,b=3,andc=5

你也可以通過下面這個(gè)命令測試變量替代:

ansiblewebserver-mshell-a"echo{{a}}“

也就是說,你可以在參數(shù)或命令操作中使用變量替代.

AWSEC2外部inventory腳本

使用AWCEC2時(shí)濰護(hù)一份inventory文獻(xiàn)有時(shí)不是最佳辦法.由于主機(jī)數(shù)量

有也許發(fā)生變動(dòng),或者主機(jī)是由外部應(yīng)用管理,或者使用了AWSautoscaling.這

時(shí),使用EC2externalinventory腳本是更好選取.

腳本使用方式有兩種,最簡樸是直接使用Ansible命令行選項(xiàng),指定腳本途徑

(腳本要有可執(zhí)行權(quán)限):

ansible-iec2.py-uubuntuus-east-ld-mping

第二種方式,把腳本拷貝為/efc/acs沏e//70sts,并賦予可執(zhí)行權(quán)限.還需

把ec2.ini文獻(xiàn)拷貝到/etc/ansib/e/ec2.ini,然后運(yùn)營ansible.

要成功調(diào)用API訪問AWS,需要配備Boto(Boto是AWSPython接口).

可用辦法有各種,請(qǐng)參見:methods.

最簡樸辦法是定義兩個(gè)環(huán)境變量:

exportAWS_ACCESS_KEY_ID='AK123'

exportAWS_SECRET_ACCESS_KEY='abcl23'

如何懂得配備與否對(duì)的,執(zhí)行腳本來測試:

cdplugins/inventory

./ec2.py--list

你可以看到以JSON格式表達(dá)覆蓋所有regionsinventory信息.

由于每一種region需要自己API調(diào)用,如果你僅使用了所有regions中一種

子集,可以編轉(zhuǎn)ec2.ini,使之僅顯示你所感興趣那些regions.在配備文

獻(xiàn)ec2.ini中,包括了其她配備選項(xiàng),涉及緩存控制和目地址變量.

inventory文獻(xiàn)核心某些,是某些名字到目地址映射.默認(rèn)ec2.ini設(shè)立合用于在

EC2之外運(yùn)營Ansible(例如一臺(tái)筆記本電腦),但這不是最有效方式.

在EC2內(nèi)部運(yùn)營Ansible時(shí),內(nèi)部DNS名和IP地址比公共DNS名更容

易理解.你可以在ec2.ini文獻(xiàn)中修改destination_variable變量,改為一1種實(shí)例私

有DNS名.對(duì)于在私有子網(wǎng)VPC上運(yùn)營Ansible,這種設(shè)立很重要,使得咱們

可以使用內(nèi)部IP地址之外方式訪問到一種VPC.在ec2.ini文獻(xiàn)

中,vpjdes力力可以命名為任意一種boto.ec2.instance變量.

EC2外部inventory提供了一種從各種組到實(shí)例映射:

全局實(shí)例都屬于ec2這個(gè)組.

實(shí)例ID

例如:i-00112233i-alblcldl

Region

屬于一種AWSregion所有實(shí)例構(gòu)成一種組.例如:us-east-1us-west-2

可用性區(qū)域

所有屬于availabilityzone實(shí)例構(gòu)成一種組.例如:us-east-iaus-east-ib

安全組

實(shí)例可屬于一種或各種安全組.每一種組前綴都是security_group_,符號(hào)(-)

已被轉(zhuǎn)換為(_).withallcharactersexceptalphanumerics(這句沒明A)

如:security_group_defaultsecurity_group_webserverssecurity_group_Pete_s_F

ancy_Group

標(biāo)簽

每一種實(shí)例可有各種不同key/value鍵值對(duì),這些鍵值對(duì)被稱為標(biāo)簽.標(biāo)簽名可以隨

意定義,最常用標(biāo)簽是‘Name'.每一種鍵值對(duì)是這個(gè)實(shí)例自己組.特殊字符已轉(zhuǎn)換為

下劃線,格式為tag_KEY_VALUE例

如:tag_Name_Webtag_Name_redis-master-001tag_aws_cloudformation_logical-id_W

ebServerGroup

使用Ansible與指定服務(wù)器進(jìn)行交互時(shí),EC2inventory腳本被再次調(diào)用(調(diào)用

時(shí)加上了命令行選項(xiàng)-hostHOST),這個(gè)調(diào)用會(huì)在索引緩存中進(jìn)行查找,獲取實(shí)例

ID,然后調(diào)用API訪問AWS,獲取指定實(shí)例所有信息.這些信息被轉(zhuǎn)換為

playbooks中變量,可以進(jìn)行訪問.每一種變量前綴為ec2_,下面是某些變量示例:

?ec2architecture

?ec2_description

?ec2dns_name

?ec2_id

?ec2jmagejd

?ec2_instance_typ?

?ec2Jp_address

?ec2_kernel

?ec2_key_name

?ec2Jaunch_time

?ec2_monitored

?ec2_ownerld

?ec2_placement

?ec2_platform

?ec2_previous_state

?ec2_private_dns_name

?ec2_private_ip_address

?ec2_public_dns_name

?ec2_ramdisk

?ec2_region

?ec2_rooLdevice_name

?ec2_root_device_type

?ec2_security_grojp_ids

?ec2_security_grojp_names

?ec2_spot_instance_request_id

?ec2_state

?ec2_state_code

?ec2_state_reason

?ec2_status

?ec2_subnet_id

?ec2_tag_Name

?ec2_tenancy

?ec2_virtualization_type

?ec2_vpc_id

其中ec2_security_group_ids和ec2securitygroupnames變量值為所有安全組列表,

使用逗號(hào)分隔.每一種EC2標(biāo)簽是一種格式為eC2_tag_KEY變量.

要查看一種實(shí)例完整可用變量列表,執(zhí)行腳本:

cdplugins/inventory

./ec2.py--host

注意,AWSinventory腳本會(huì)將成果進(jìn)行緩存,以避免重復(fù)API調(diào)用,這個(gè)緩存設(shè)

立可在ec2.ini文獻(xiàn)中配備.要顯式地清空緩存,你可以加上--refresh-cache選項(xiàng),

執(zhí)行腳本如下:

#./ec2.py--refresh-cache

其他inventory腳本

除「Cobbler和EC2之外,尚有如下系統(tǒng)可以使用inventory腳本:

BSDJails

DigitalOcean

GoogleComputeEngine

Linode

OpenShift

OpenStackNova

RedHat'sSpaceWalk

Vagrant(nottobeconfusedwiththeprovisionerinvagrant,whichispreferred;

Zabbix

關(guān)于這些系統(tǒng)還沒有專門章節(jié)講述如何操作,但環(huán)節(jié)與上面所講述AWS同樣,

詳細(xì)可看看Ansiblecheckout“plugins/”目錄.

如果你開發(fā)了一種通用inventory腳本,請(qǐng)?zhí)峤灰环Npullrequest,咱們也許會(huì)把

它放入項(xiàng)目中.

使用各種inventory源

如果-i選項(xiàng)后給出地址是一種目錄(orassoconfiguredin

ansible.cfg),Ansible可以同一時(shí)間使用各種inventory源.這樣在同一種

ansible運(yùn)營操作中,可混合使用動(dòng)態(tài)和靜態(tài)inventory源.

動(dòng)態(tài)組作為靜態(tài)組子組

在靜態(tài)inventory文獻(xiàn)中,如果定義一種由某些組作為子成員組,這些子組也需

要定義(譯者注:即包括詳細(xì)host),否則執(zhí)行時(shí)ansible會(huì)返回一種錯(cuò)誤.如果

定義某些動(dòng)態(tài)組作為一種靜態(tài)組子組,也需在靜態(tài)inventory文獻(xiàn)中定義動(dòng)態(tài)組,

但是動(dòng)態(tài)組定義為一種空組即可:

[tag_Name_staging_foo]

[tag_Name_staging_bar]

[staging:children]

tag_Name_staging_foo

tag_Name_staging_bar

Patterns

Topics

?Patterns

在Ansible中,Patterns是指咱們?nèi)绾螖M定由哪一臺(tái)主機(jī)來管理.意思就是與哪

臺(tái)主機(jī)進(jìn)行交互.但是在:doc:p/aybooks中它指是相應(yīng)主機(jī)應(yīng)用特定配備或執(zhí)

行特定進(jìn)程.

咱們再來復(fù)習(xí)下:doc:/加ro_ad/7oc章節(jié)中簡介命令用法,命令格式如下:

ansible<pattern_goes_here>-m<module_name>-a<arguments>

示例如下:

ansiblewebservers-mservice-a"name=httpdstate=restarted"

一種pattern普通關(guān)聯(lián)到一系列組(主機(jī)集合)-如上示例中,所有主機(jī)均在

"webservers"組中.

不論怎么樣,在使用Ansible前,咱們需事先告訴Ansible哪臺(tái)機(jī)器將被執(zhí)行.能這

樣做前提是需要預(yù)先定義唯一hostnames或者主機(jī)組.

如下patterns等同于目的為倉庫(inventory)中所有機(jī)器:

all

*

也可以寫IP地址或系列主機(jī)名:

:

0

192.168.1.*

如下patterns分別表達(dá)一種或各種groups.多組之間以冒號(hào)分隔表達(dá)或關(guān)系.這意

味著一種主機(jī)可以同步存在各種組:

webservers

webservers:dbservers

你也可以排隊(duì)一種特定組,如下實(shí)例中,所有執(zhí)行命令機(jī)器必要從屬webservers

組但同步不在phoenix組:

webservers:!phoenix

你也可以指定兩個(gè)組交集,如下實(shí)例表達(dá),執(zhí)行命令有機(jī)器需要同步從屬于

webservers和staging組.

webservers:&staging

你也可以組合更復(fù)雜條件:

webservers:dbservers:&staging:!phoenix

上面這個(gè)例子表達(dá)“'webservers'和'dbservers'兩個(gè)組中從屬于‘staging'組

并且不屬于‘phoenix,組機(jī)器才執(zhí)行命令”…喲!嗜!好燒腦說!

你也可以使用變量如果你但愿通過傳參指定group,ansible-playbook通過“-e”

參數(shù)可以實(shí)現(xiàn),但這種用法不慣用:

webservers:!{{excluded}}:&{{required)}

你也可以不必嚴(yán)格定義groups,單個(gè)hostnames,IPs,groups都支持通配符:

*.

?.com

Ansible同步也支持通配和groups混合使用:

one*.com:dbservers

在高檔語法中,你也可以在group中選取相應(yīng)編號(hào)server:

webservers[0]

或者一種group中一某些servers:

webservers[0-25]

大某些人都在patterns應(yīng)用正則表達(dá)式,但你可以.只需要以開頭即可:

^(webldb).*\.example\.com

同步讓咱們提前理解某些技能,除了如上,你也可以通過--limit標(biāo)記來添加排除

條件,/usr/bin/ansiblecr/usr/bin/ansible-playbook都支持:

ansible-playbooksite.yiil--limitdatacenter2

如果你想從文獻(xiàn)讀取hosts,文獻(xiàn)名以@為前綴即可.從Ansible1.2開始支持該功

能:

ansible-playbooksite.yiil--limit@retry_hosts.txt

Playbooks簡介

Playbooks簡介

Playbooks與adhoc相比,是一種完全不同運(yùn)用ansible方式,是非常之強(qiáng)大.

簡樸來說,playbooks是一種簡樸配備管理系統(tǒng)與多機(jī)器布置系統(tǒng)基本.與既有其

她系統(tǒng)有不同之處,且非常適合于復(fù)雜應(yīng)用布置.

Playbooks可用于聲明配備,更強(qiáng)大地方在于,在playbooks中可以編排有序執(zhí)

行過程,甚至于做到在多組機(jī)器間,來回有序執(zhí)行特別指定環(huán)節(jié).并且可以同步或

異步發(fā)起任務(wù).

咱們使用adhoc時(shí),重要是使用/usr/bin/ansible程序執(zhí)行任務(wù).而使用

playbooks時(shí),更多是將之放入源碼控制之中,用之推送你配備或是用于確認(rèn)你遠(yuǎn)

程系統(tǒng)配備與否符合配備規(guī)范.

在如右連接中:ansible-examplesrepository,有某些整套playbooks,它們闡明了

上述這些技巧.咱們建議你在另一種標(biāo)簽頁中打開它看看,配合本章節(jié)一起看.

即便學(xué)完playbooks這個(gè)章節(jié),仍有許多知識(shí)點(diǎn)只是入門級(jí)別,完畢本章學(xué)習(xí)后,

可回到文檔索引繼續(xù)學(xué)習(xí).

Playbook語言示例

Playbooks格式是YAML(詳見:摩根語法),語法做到最小化,旨在避免

playbooks成為一種編程語言或是腳本,但它也并不是一種配備模型或過程模型.

playbook由一種或各種'plays'構(gòu)成.它內(nèi)容是一種以'plays'為元素列表.

在play之中,一組機(jī)器被映射為定義好角色.在ansible中,play內(nèi)容,被稱為

tasks,即任務(wù).在基本層次應(yīng)用中,一種任務(wù)是一種對(duì)ansible模塊調(diào)用,這在前

面章節(jié)學(xué)習(xí)過.

'plays'好似音符,playbook好似由‘plays'構(gòu)成曲譜,通過playbook,可以編排

環(huán)節(jié)進(jìn)行多機(jī)器布置,例如在webservers組所有機(jī)器上運(yùn)營一定環(huán)節(jié),然后在

databaseserver組運(yùn)營某些環(huán)節(jié),最后回到webservers組,再運(yùn)營某些環(huán)節(jié),諸

如此類.

“plays”算是一種體育方面類比,你可以通過各種plays告訴你系統(tǒng)做不同事情,

不但是定義一種特定狀態(tài)或模型.你可以在不同步間運(yùn)營不同plays.

對(duì)初學(xué)者,這里有一種playbook,其中僅包括一種play:

-hosts:webservers

vans:

http_port:80

max_clients:200

remote_user:root

tasks:

-name:ensureapacheisatthelatestversion

yum:pkg=httpdstate=latest

-name:writetheapacheconfigfile

template:src=/srv/httpd.j2dest=/etc/httpd.conf

notify:

-restartapache

-name:ensureapacheisrunning

service:name=httpdstate=started

handlers:

-name:restartapacne

service:name=httpdstate=restarted

在下面,咱們將分別解說playbook語言各種特性.

playbook基本

主機(jī)與顧客

你可覺得playbook中每一種play,個(gè)別地選取操作目的機(jī)器是哪些,以哪個(gè)顧

客身份去完畢要執(zhí)行環(huán)節(jié)(calledtasks).

hosts行內(nèi)容是一種或各種組或主機(jī)patterns,以逗號(hào)為分隔符,詳見Paffems章節(jié).

remote_user就是賬戶名:

-hosts:webservers

remoteuser:root

Note

參數(shù)remotjuser此前寫做user^A.Ansible1.4后來才改為remote_user.重

要為了不跟user模塊混淆(user模塊用于在遠(yuǎn)程系統(tǒng)上創(chuàng)立顧客).

再者,在每一種task中,可以定義自己遠(yuǎn)程顧客:

-hosts:webservers

remote_user:root

tasks:

-name:testconnection

remote_user:yourname

Note

task中?nofe_user參數(shù)在1.4版本后來添加.

也支持從sudo執(zhí)行命令:

hosts:webservers

remote_user:yourname

sudo:yes

同樣,你可以僅在一種task中,使用sudo執(zhí)行命令,而不是在整個(gè)play中使

用sudo:

hosts:webservers

remote_user:yourname

tasks:

-service:name=nginxstate=started

sudo:yes

你也可以登陸后,sud。到不同顧客身份,而不是使用root:

hosts:webservers

remote_user:yourname

sudo:yes

sudo_user:postgres

如果你需要在使用sudo時(shí)指定密碼用在運(yùn)營acs/b/e-p/aybook命令時(shí)加上選

項(xiàng)--ask-sudo-pass(-K).如果使用sudo時(shí),playbook疑似被掛起,也許是在

sudoprompt處被卡住,這時(shí)可執(zhí)行Coc"o/-C殺死卡住任務(wù),再重新運(yùn)營一次.

Important

當(dāng)使用sudjuser切換到非root顧客時(shí),模塊參數(shù)會(huì)暫時(shí)寫入/tmp目錄下一

種隨機(jī)暫時(shí)文獻(xiàn).當(dāng)命令執(zhí)行結(jié)束后,暫時(shí)文獻(xiàn)及時(shí)刪除.這種狀況發(fā)生在普通顧

客切換時(shí),例如從‘bob'切換到‘timmy',切換到root賬戶時(shí),不會(huì)發(fā)生,如從

'bob'切換到Toot',直接以普通顧客或root身份登錄也不會(huì)發(fā)生.如果你不但愿

這些數(shù)據(jù)在短暫時(shí)間內(nèi)可以被讀取(不可寫),請(qǐng)避免在sudjuser中傳遞未加

密密碼.其她狀況下,7tmp'目錄不被使用,這種狀況不會(huì)發(fā)生.Ansible也故意識(shí)

在日記中不記錄密碼參數(shù).

Tasks列表

每一種play包括了一種task列表(任務(wù)列表).一種task在其所相應(yīng)所有主

機(jī)上(通過hostpattern匹配所有主機(jī))執(zhí)行完畢之后,下一種task才會(huì)執(zhí)行.

有一點(diǎn)需要明白是(很重要),在一種play之中,所有hosts會(huì)獲取相似任務(wù)指

令,這是play一種目所在,也就是將一組選出hosts映射到task.(注:此處翻譯

未必精確,暫時(shí)保存原文)

在運(yùn)營playbook時(shí)(從上到下執(zhí)行),如果一種host執(zhí)行task失敗,這個(gè)

host將會(huì)從整個(gè)playbookrotation中移除.如果發(fā)生執(zhí)行失敗狀況,請(qǐng)修正

playbook中錯(cuò)誤,然后重新執(zhí)行即可.

每個(gè)task目的在于執(zhí)行一種moudle,普通是帶有特定參數(shù)來執(zhí)行.在參數(shù)中可

以使用變量(variables).

modules具備"轅等”性,意思是如果你再一次地執(zhí)行moudle(譯者注:例如遇到

遠(yuǎn)端系統(tǒng)被意外改動(dòng),需要恢復(fù)原狀),moudle只會(huì)執(zhí)行必要改動(dòng),只會(huì)變化需要

變化地方.因此重復(fù)多次執(zhí)行playbook也很安全.

對(duì)于commandmodule和she//module,重復(fù)執(zhí)行playbook,事實(shí)上是重復(fù)運(yùn)

營同樣命令.如果執(zhí)行命令類似于‘chmod'或者'setsebool'這種命令,這沒有

任何問題.也可以使用一種叫做‘creates'flag使得這兩個(gè)module變得具備”

暴等”特性(不是必要).

每一種task必要有一種名稱came,這樣在運(yùn)營playbook時(shí),從其輸出任務(wù)執(zhí)

行信息中可以較好辨別出是屬于哪一種task.如果沒有定義came,'action'值

將會(huì)用作輸出信息中標(biāo)記特定task.

如果要聲明一種task,此前有一種格式:“action:moduleoptions"(也許在某

些老playbooks中還能見到).當(dāng)前推薦使用更常用格式:"module:options",

本文檔使用就是這種格式.

下面是一種基本task定義,servic

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論