ansible學習手冊--精選文檔_第1頁
ansible學習手冊--精選文檔_第2頁
已閱讀5頁,還剩75頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、從Github獲取Ansible如果你有一個github賬戶,可以跟進Ansible在Github的項目: Github project 我們在這里保持對bugs和feature ideas的跟蹤.需要安裝些什么Ansible默認通過 SSH 協議管理機器.安裝Ansible之后,不需要啟動或運行一個后臺進程,或是添加一個數據庫.只要在一臺電腦(可以是一臺筆記本)上安裝好,就可以通過這臺電腦管理一組遠程的機器.在遠程被管理的機器上,不需要安裝運行任何軟件,因此升級Ansible版本不會有太多問題.選擇哪一個版本?因為Ansible可以很簡單的從源碼運行,且不必在遠程被管理機

2、器上安裝任何軟件,很多Ansible用戶會跟進使用開發版本.Ansible一般每兩個月出一個發行版本.小bugs一般在下一個發行版本中修復,并在穩定分支中做backports.大bugs會在必要時出一個維護版本,雖然這不是很頻繁.若你希望使用Ansible的最新版本,并且你使用的操作系統是 Red Hat Enterprise Linux (TM), CentOS, Fedora, Debian, Ubuntu,我們建議使用系統的軟件包管理器.另有一種選擇是通過”pip”工具安裝,”pip”是一個安裝和管理Python包的工具.若你希望跟進開發版本,想使用和測試最新的功能特性,我們會分享如何從

3、源碼運行Ansible的方法.從源碼運行程序不需要進行軟件安裝.對管理主機的要求目前,只要機器上安裝了 Python 2.6 (windows系統不可以做控制主機),都可以運行Ansible.主機的系統可以是 Red Hat, Debian, CentOS, OS X, BSD的各種版本,等等.對托管節點的要求On the managed nodes, you only need Python 2.4 or later, but if you are running less than Python 2.5 on the remotes, you will also need:托管節點上需要安

4、裝 Python 2.4 及以上的版本.但如果版本低于 Python 2.5 ,則需要額外安裝一個模塊:· python-simplejson沒安裝python-simplejson,也可以使用Ansible的”raw”模塊和script模塊,因此從技術上講,你可以通過Ansible的”raw”模塊安裝python-simplejson,之后就可以使用Ansible的所有功能了.如果托管節點上開啟了SElinux,你需要安裝libselinux-python,這樣才可使用Ansible中與copy/file/template相關的函數.你可以通過Ansible的yum模塊在需要的托管

5、節點上安裝libselinux-python.Python 3 與 Python 2 是稍有不同的語言,而大多數Python程序還不能在 Python 3 中正確運行.而一些Linux發行版(Gentoo, Arch)沒有默認安裝 Python 2.X 解釋器.在這些系統上,你需要安裝一個 Python 2.X 解釋器,并在 inventory (詳見 Inventory文件) 中設置 ansible_python_interpreter 變量指向你的 2.X Python.你可以使用 raw 模塊在托管節點上遠程安裝Python 2.X.Red Hat Enterprise Lin

6、ux, CentOS, Fedora, and Ubuntu 等發行版都默認安裝了 2.X 的解釋器,包括幾乎所有的Unix系統也是如此.安裝管理主機從源碼運行從項目的checkout中可以很容易運行Ansible,Ansible的運行不要求root權限,也不依賴于其他軟件,不要求運行后臺進程,也不需要設置數據庫.因此我們社區的許多用戶一直使用Ansible的開發版本,這樣可以利用最新的功能特性,也方便對項目做貢獻.因為不需要安裝任何東西,跟進Ansible的開發版相對于其他開源項目要容易很多.從源碼安裝的步驟$ git clone git:/ -recursive$ cd ./ansible

7、$ source ./hacking/env-setup如果沒有安裝pip, 請先安裝對應于你的Python版本的pip:$ sudo easy_install pip以下的Python模塊也需要安裝:$ sudo pip install paramiko PyYAML Jinja2 httplib2注意,當更新ansible版本時,不只要更新git的源碼樹,也要更新git中指向Ansible自身模塊的 “submodules” (不是同一種模塊)$ git pull -rebase$ git submodule update -init -recursive一旦運行env-setup腳本,就

8、意味著Ansible從源碼中運行起來了.默認的inventory文件是 /etc/ansible/hosts.inventory文件也可以另行指定 (詳見 Inventory文件). code-block: bash$ echo “” > /ansible_hosts $ export ANSIBLE_HOSTS=/ansible_hosts你可以在手冊的后續章節閱讀更多關于 inventory 文件的使用,現在讓我們測試一條ping命令:$ ansible all -m ping -ask-pass你也可以使用命令 “sudo make install”通過

9、Yum安裝最新發布版本通過Yum安裝RPMs適用于 EPEL 6, 7, 以及仍在支持中的Fedora發行版.托管節點的操作系統版本可以是更早的版本(如 EL5), 但必須安裝 Python 2.4 或更高版本的Python.Fedora 用戶可直接安裝Ansible, 但RHEL或CentOS用戶,需要 配置 EPEL# install the epel-release RPM if needed on CentOS, RHEL, or Scientific Linux$ sudo yum install ansible你也可以自己創建RPM軟件包.在Ansib

10、le項目的checkout的根目錄下,或是在一個tarball中,使用make rpm 命令創建RPM軟件包. 然后可分發這個軟件包或是使用它來安裝Ansible.在創建之前,先確定你已安裝了 rpm-build, make, and python2-devel .$ git clone git:/$ cd ./ansible$ make rpm$ sudo rpm -Uvh /rpmbuild/ansible-*.noarch.rpm通過Apt (Ubuntu)安裝最新發布版本Ubuntu 編譯版可在PPA中獲得: <配置PP

11、A及安裝ansible,執行如下命令:$ sudo apt-get install software-properties-common$ sudo apt-add-repository ppa:ansible/ansible$ sudo apt-get update$ sudo apt-get install ansible在早期Ubuntu發行版中, “software-properties-common” 名為 “python-software-properties”.也可從源碼checkout中創建 Debian/Ubuntu 軟件包,執行:$ make deb你或許也想從源碼中運行最

12、新發行版本,可看前面的說明.通過 Portage (Gentoo)安裝最新發布版本$ emerge -av app-admin/ansible要安裝最新版本,你或許需要.$ echo 'app-admin/ansible' >> /etc/portage/package.accept_keywords若在Gentoo托管節點中,Python 3 默認作為 Python slot(這也是默認設置),則你必須在你的 group 或 inventory 變量中設置 ansible_python_interpreter = /usr/bin/p

13、ython2通過 pkg (FreeBSD)安裝最新發布版本$ sudo pkg install ansible你或許想從ports中安裝:$ sudo make -C /usr/ports/sysutils/ansible install通過 Homebrew (Mac OSX)安裝最新發布版本在Mac中安裝,確定你已安裝 Homebrew:$ brew update$ brew install ansible通過 Pip 安裝最新發布版本Ansible可通過 “pip” 安裝(安裝和管理Python包的工具),若你還沒有安裝 pip,可執行如下命令安裝:$ sudo easy_instal

14、l pip然后安裝Ansible:$ sudo pip install ansible如果你是在 OS X Mavericks 上安裝,編譯器可能或告警或報錯,可通過如下設置避免這種情況:$ sudo CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install ansible使用 virtualenv 的讀者可通過 virtualenv 安裝 Ansible, 然而我們建議不用這樣做,直接在全局安裝 Ansible.不要使用 easy_install 直接安裝 ansible.發行版的Tarball不想通過git chec

15、kout 創建Ansible的軟件包?在這里可獲取Tarball Ansible downloads各種版本的Ansible在這里做了版本標注 git repository前言現在你已經閱讀了 Installation 安裝指南并安裝了Ansible.是時候通過一些命令開始深入了解Ansible了.我們最先展示的并非那強大的集配置,部署,自動化于一身的playbook. Playbooks 相關內容將在另一章節中講述.本章節講述如何進行初始化.一旦你有了這些概念,請去閱讀 Introduction To Ad-Hoc Commands 

16、;以獲取更多細節,然后你就能去深入playbook并探索它最有趣的部分.遠程連接概述在我們開始前要先理解Ansible是如何通過SSH與遠程服務器連接是很重要的.Ansible 1.3及之后的版本默認會在本地的 OpenSSH可用時會嘗試用其進行遠程通訊.這會啟用ControlPersist(一個性能特性),Kerberos,和在/.ssh/config中的配置選項如 Jump Host setup.然而,當你使用Linux企業版6作為主控機(紅帽企業版及其衍生版如CentOS),其OpenSSH版本可能過于老舊無法支持ControlPersist. 在這些操作系統中,Ansible將會退回并

17、采用 paramiko (由Python實現的高質量OpenSSH庫). 如果你希望能夠使用像是Kerberized SSH之類的特性,煩請考慮使用Fedora, OS X, 或 Ubuntu 作為你的主控機直到相關平臺上有更新版本的OpenSSH可供使用,或者啟用Ansible的“accelerated mode”.參見 Accelerated Mode.在Ansible 1.2 及之前的版本,默認將會使用 paramiko. 本地OpenSSH必須通過-c ssh 或者 在配置文件中設定.你偶爾會遇到不支持SFTP的設備.雖然這很少見,但你會有概率中獎.你可以通過在配置文件(An

18、sible的配置文件)中切換至 SCP模式來與之鏈接.說起遠程設備,Ansible會默認假定你使用 SSH Key(我們推薦這種)但是密碼也一樣可以.通過在需要的地方添加 ask-pass選項 來啟用密碼驗證.如果使用了sudo 特性,當sudo需要密碼時,也同樣適當的提供了ask-sudo-pass選項.也許這是常識,但也值得分享:任何管理系統受益于被管理的機器在主控機附近運行.如果在云中運行,可以考慮在使用云中的一臺機器來運行Ansible.作為一個進階話題,Ansible不止支持SSH來遠程連接.連接方式是插件化的而且還有許多本地化管理的選項諸如管理 chroot, lxc, 和 jai

19、l containers.一個叫做ansible-pull的模式能夠反轉主控關系并使遠程系統通過定期從中央git目錄檢出 并 拉取 配置指令來實現背景連接通信.你的第一條命令現在你已經安裝了Ansible,是時候從一些基本知識開始了. 編輯(或創建)/etc/ansible/hosts 并在其中加入一個或多個遠程系統.你的public SSH key必須在這些系統的authorized_keys中:0這里有個節點設置文件(inventory file)將會在 Inventory文件

20、60;中得到深入說明. 我們假定你使用SSH Key來授權.為了避免在建立SSH連接時,重復輸入密碼你可以這么 做:$ ssh-agent bash$ ssh-add /.ssh/id_rsa(根據你的建立方式,你也許希望使用Ansible的 -private-key 選項,通過指定pem文件來代替SSH Key來授權) 現在ping 你的所有節點:$ ansible all -m pingAnsible會像SSH那樣試圖用你的當前用戶名來連接你的遠程機器.要覆寫遠程用戶名,只需使用-u參數. 如果你想訪問 sudo模式,這里也有標識(flags)來實現:# as bruc

21、e$ ansible all -m ping -u bruce# as bruce, sudoing to root$ ansible all -m ping -u bruce -sudo# as bruce, sudoing to batman$ ansible all -m ping -u bruce -sudo -sudo-user batman(如果你碰巧想要使用其他sudo的實現方式,你可以通過修改Ansible的配置文件來實現.也可以通過傳遞標識給sudo(如-H)來設置.) 現在對你的所有節點運行一個命令:$ ansible all -a "/bin/echo hell

22、o"恭喜你!你剛剛通過Ansible連接了你的所有節點.很快你就會閱讀更多的關于現實案例 Introduction To Ad-Hoc Commands 并探索可以通過不同的模塊做什么以及研究Ansible的playbook語言Playbooks .Ansible不只是能運行命令,它同樣也擁有強大的配置管理和部署特性.雖然還有更多內容等待你的探索,但你基礎設施已經能完全工作了!公鑰認證Ansible1.2.1及其之后的版本都會默認啟用公鑰認證.如果有個主機重新安裝并在“known_hosts”中有了不同的key,這會提示一個錯誤信息直到被糾正為止.在使用

23、Ansible時,你可能不想遇到這樣的情況:如果有個主機沒有在“known_hosts”中被初始化將會導致在交互使用Ansible或定時執行Ansible時對key信息的確認提示.如果你想禁用此項行為并明白其含義,你能夠通過編輯 /etc/ansible/ansible.cfg or /.ansible.cfg來實現:defaultshost_key_checking = False或者你也可以通過設置環境變量來實現:$ export ANSIBLE_HOST_KEY_CHECKING=False同樣注意在paramiko 模式中 公鑰認證 相當的慢.因此,當使用這項特性時,切換至SSH是推薦

24、做法.Ansible將會對遠程系統模塊參數記錄在遠程的syslog中,除非一個任務或者play被標記了“no_log: True”屬性,稍后解釋. 在主控機上啟用基本的日志功能參見 Ansible的配置文件 文檔 并 在配置文件中設置log_path.企業用戶可能也對 Ansible Tower 感興趣.Inventory文件Topics· Inventory文件o 主機與組o 主機變量o 組的變量o 把一個組作為另一個組的子成員o 分文件定義 Host 和 Group 變量o Inventory 參數的說明Ansible 可同時操作屬于一個組

25、的多臺主機,組和主機之間的關系通過 inventory 文件配置. 默認的文件路徑為 /etc/ansible/hosts除默認文件外,你還可以同時使用多個 inventory 文件(后面會講到),也可以從動態源,或云上拉取 inventory 配置信息.詳見 動態 Inventory.主機與組/etc/ansible/hosts 文件的格式與windows的ini配置文件類似:webserversdbservers方括號中是組名,用于對系統進行分類,便于對不同系統進行個別的管理.一個系統可以屬于不同的組,比如一臺服務器可以同時屬于 webserver組 和 dbserver組.這時

26、屬于兩個組的變量都可以為這臺主機所用,至于變量的優先級關系將于以后的章節中討論.如果有主機的SSH端口不是標準的22端口,可在主機名之后加上端口號,用冒號分隔.SSH 配置文件中列出的端口號不會在 paramiko 連接中使用,會在 openssh 連接中使用.端口號不是默認設置時,可明確的表示為:5309假設你有一些靜態IP地址,希望設置一些別名,但不是在系統的 host 文件中設置,又或者你是通過隧道在連接,那么可以設置如下:jumper ansible_ssh_port=5555 ansible_ssh_host=0在這個例子中,通過 “jumper” 別名,會連接

27、 0:5555.記住,這是通過 inventory 文件的特性功能設置的變量. 一般而言,這不是設置變量(描述你的系統策略的變量)的最好方式.后面會說到這個問題.一組相似的 hostname , 可簡寫如下:webserverswww01:50數字的簡寫模式中,01:50 也可寫為 1:50,意義相同.你還可以定義字母范圍的簡寫模式:databasesdb-a:f對于每一個 host,你還可以選擇連接類型和連接用戶名:targetslocalhost ansible_connection=local ansible_connection=ssh ansible_ssh_u

28、ser=mpdehaan ansible_connection=ssh ansible_ssh_user=mdehaan所有以上討論的對于 inventory 文件的設置是一種速記法,后面我們會討論如何將這些設置保存為 host_vars 目錄中的獨立的文件.主機變量前面已經提到過,分配變量給主機很容易做到,這些變量定義后可在 playbooks 中使用:atlantahost1 http_port=80 maxRequestsPerChild=808host2 http_port=303 maxRequestsPerChild=909組的變量也可以定義屬于整個組的變量:atlantahost

29、1host2atlanta:varsntp_server=proxy=把一個組作為另一個組的子成員可以把一個組作為另一個組的子成員,以及分配變量給整個組使用. 這些變量可以給 /usr/bin/ansible-playbook 使用,但不能給 /usr/bin/ansible 使用:atlantahost1host2raleighhost2host3southeast:childrenatlantaraleighsoutheast:varssome_server=halon_system_timeout=30self_destruct_countdown=60escape_pods=2usa:

30、childrensoutheastnortheastsouthwestnorthwest如果你需要存儲一個列表或hash值,或者更喜歡把 host 和 group 的變量分開配置,請看下一節的說明.分文件定義 Host 和 Group 變量在 inventory 主文件中保存所有的變量并不是最佳的方式.還可以保存在獨立的文件中,這些獨立文件與 inventory 文件保持關聯. 不同于 inventory 文件(INI 格式),這些獨立文件的格式為 YAML.詳見YAML 語法 .假設 inventory 文件的路徑為:/etc/ansible/hosts假設有一個主機名為 foos

31、ball, 主機同時屬于兩個組,一個是 raleigh, 另一個是 webservers. 那么以下配置文件(YAML 格式)中的變量可以為 foosball 主機所用.依次為 raleigh 的組變量,webservers 的組變量,foosball 的主機變量:/etc/ansible/group_vars/raleigh/etc/ansible/group_vars/webservers/etc/ansible/host_vars/foosball舉例來說,假設你有一些主機,屬于不同的數據中心,并依次進行劃分.每一個數據中心使用一些不同的服務器.比如 ntp 服務器, database

32、服務器等等. 那么 raleigh 這個組的組變量定義在文件 /etc/ansible/group_vars/raleigh 之中,可能類似這樣:-ntp_server: database_server: 這些定義變量的文件不是一定要存在,因為這是可選的特性.還有更進一步的運用,你可以為一個主機,或一個組,創建一個目錄,目錄名就是主機名或組名.目錄中的可以創建多個文件, 文件中的變量都會被讀取為主機或組的變量.如下 raleigh 組對應于 /etc/ansible/group_vars/raleigh/ 目錄,其下有兩個文

33、件 db_settings 和 cluster_settings, 其中分別設置不同的變量:/etc/ansible/group_vars/raleigh/db_settings/etc/ansible/group_vars/raleigh/cluster_settingsraleigh 組下的所有主機,都可以使用 raleigh 組的變量.當變量變得太多時,分文件定義變量更方便我們進行管理和組織. 還有一個方式也可參考,詳見 Ansible Vault 關于組變量的部分. 注意,分文件定義變量的方式只適用于 Ansible 1.4 及以上版本.Tip: Ansible 1

34、.2 及以上的版本中,group_vars/ 和 host_vars/ 目錄可放在 inventory 目錄下,或是 playbook 目錄下. 如果兩個目錄下都存在,那么 playbook 目錄下的配置會覆蓋 inventory 目錄的配置.Tip: 把你的 inventory 文件 和 變量 放入 git repo 中,以便跟蹤他們的更新,這是一種非常推薦的方式.Inventory 參數的說明如同前面提到的,通過設置下面的參數,可以控制 ansible 與遠程主機的交互方式,其中一些我們已經講到過:ansible_ssh_host 將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可

35、通過此變量設置.ansible_ssh_port ssh端口號.如果不是默認的端口號,通過此變量設置.ansible_ssh_user 默認的 ssh 用戶名ansible_ssh_pass ssh 密碼(這種方式并不安全,我們強烈建議使用 -ask-pass 或 SSH 密鑰)ansible_sudo_pass sudo 密碼(這種方式并不安全,我們強烈建議使用 -ask-sudo-pass)ansible_sudo_exe (new in version 1.8) sudo 命令路徑(適用于1.8及以上版本)ansible_connection 與主機的連接類型.比如:local, ssh

36、 或者 paramiko. Ansible 1.2 以前默認使用 paramiko.1.2 以后默認使用 'smart','smart' 方式會根據是否支持 ControlPersist, 來判斷'ssh' 方式是否可行.ansible_ssh_private_key_file ssh 使用的私鑰文件.適用于有多個密鑰,而你不想使用 SSH 代理的情況.ansible_shell_type 目標系統的shell類型.默認情況下,命令的執行使用 'sh' 語法,可設置為 'csh' 或 'fish'.

37、ansible_python_interpreter 目標主機的 python 路徑.適用于的情況: 系統中有多個 Python, 或者命令路徑不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.我們不使用 "/usr/bin/env" 機制,因為這要求遠程用戶的路徑設置正確,且要求 "python" 可執行程序名不可為 python以外的名字(實際有可能名為python26). 與 ansible_python_interpreter 的工作方式相同,可

38、設定如 ruby 或 perl 的路徑.一個主機文件的例子:some_host ansible_ssh_port=2222 ansible_ssh_user=manageraws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pemfreebsd_host ansible_python_interpreter=/usr/local/bin/pythonruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3動態 InventoryTopics· 動態

39、Inventoryo Cobbler 外部 Inventory 腳本o AWS EC2 外部 inventory 腳本o 其它 inventory 腳本o 使用多個 inventory 源o 動態組作為靜態組的子組使用配置管理系統經常有一種需求,可能要在其他的軟件系統中保存自己的 inventory 配置信息.Ansible 本身通過基于文本的方式來記錄 inventory 配置信息,這在前面已介紹過(詳見 Inventory文件 ).除此之外,Ansible 也支持用其他方式保存配置信息.在其他軟件系統保存配置信息的例子有:1, 從云端拉取 inventory2, LDA

40、P(Lightweight Directory Access Protocol,輕量級目錄訪問協議)3, Cobbler <>_4, 或者是一份昂貴的企業版的 CMDB(配置管理數據庫) 軟件.對于這些需求,Ansible 可通過一個外部 inventory 系統來支持.在 ansible 的 “/plugins” 插件目錄下已經含有一些選項 包括 EC2/Eucalyptus, Rackspace Cloud,and OpenStack,我們稍后會詳細介紹它們.Ansible Ansible Tower 提供了一個數據庫來存儲 inventory 配置信息,

41、這個數據庫可以通過 web 訪問,或通過 REST 訪問. Tower 與所有你使用的 Ansible 動態 inventory 源保持同步,并提供了一個圖形化的 inventory 編輯器. 有了這個數據庫,便可以很容易的關聯過去的事件歷史,可以看到在上一次 playbook 運行時,哪里出現了運行失敗的情況.關于如何編寫你自己的動態 inventory 源,請參見 開發動態的Inventory數據源.Cobbler 外部 Inventory 腳本當管理的物理機器到達了一定數量的時,很多使用 Ansible 的用戶可能同時也會使用到 Cobbler . (注:

42、Cobbler 最初由 Michael DeHaan 編寫,現在項目主導人是 James Cammarata, 他目前在 Ansible 公司工作).Cobbler 主要用于操作系統的 kickoff 安裝,以及管理 DHCP 和 DNS,除此之外,它有一個通用層,可為多種配置管理系統(甚至是同時的)提供數據. 所以 Cobbler 也被一些管理員稱為是輕量級的 CMDB.如何將 Ansible 的 inventory 與 Cobbler 聯系起來呢?方法是: 將腳本 script 拷貝到 /etc/ansible,通過chmod +x 賦予可執行權限.在使用 A

43、nsible 之前,先啟動 cobblerd 進程.現在使用 Ansible 要加上 -i 選項 ( 例如:-i /etc/ansible/cobbler.py).cobbler.py這個腳本使用 Cobbler 的 XMLRPC API 與 Cobbler 通信.執行腳本 /etc/ansible/cobbler.py ,應該能看到一些 JSON 格式的數據輸出(也許還沒有具體的內容).在 cobbler 中,假設有一個如下的場景:cobbler profile add -name=webserver -distro=CentOS6-x86_

44、64cobbler profile edit -name=webserver -mgmt-classes="webserver" -ksmeta="a=2 b=3"cobbler system edit -name=foo -dns-name="" -mgmt-classes="atlanta" -ksmeta="c=4"cobbler system edit -name=bar -dns-name="" -mgmt-classes="atlanta" -

45、ksmeta="c=5" 是一個域名,Ansible 可以通過這個域名尋址找到對應的主機foo,對其進行操作.也可以通過組名 webserver 或者 atlanta 尋址找到這個主機,只要這個主機是屬于這兩個組的.直接使用 foo 是不行的.例如執行命令 “ansible foo” ,無法找到該主機,但使用 “ansible foo*” 卻可以,因為域名 以foo開頭.這個腳本不僅提供主機和組的信息.如果運行了 setup 模塊(只要使用 playbooks,setup 模塊會自動運行),變量 a, b, c 可按照以下模板自動填充:# file: /srv/motd.j

46、2Welcome, I am templated with a value of a= a , b= b , and c= c 模板的使用如下:ansible webserver -m setupansible webserver -m template -a "src=/tmp/motd.j2 dest=/etc/motd"組名 webserver 是 cobbler 中定義的.你仍然可以在 Ansible 的配置文件中定義變量. 但要注意,變量名相同時,外部 inventory 腳本中定義的變量會覆蓋 Ansible 中的變量.執行上面命令后,主機 foo 的/etc/

47、motd文件被寫入如下的內容:Welcome, I am templated with a value of a=2, b=3, and c=4主機 bar ()的 /etc/motd 中寫入如下內容:Welcome, I am templated with a value of a=2, b=3, and c=5你也可以通過下面這個命令測試變量的替換:ansible webserver -m shell -a "echo a "也就是說,你可以在參數或命令操作中使用變量的替換.AWS EC2 外部 inventory 腳本使用 AWC EC2時,維護一份 inventor

48、y 文件有時不是最好的方法.因為主機的數量有可能發生變動,或者主機是由外部的應用管理的,或者使用了 AWS autoscaling.這時,使用 EC2 external inventory 腳本是更好的選擇.腳本的使用方式有兩種,最簡單的是直接使用 Ansible 的命令行選項 -i ,指定腳本的路徑(腳本要有可執行權限):ansible -i ec2.py -u ubuntu us-east-1d -m ping第二種方式,把腳本拷貝為 /etc/ansible/hosts ,并賦予可執行權限.還需把 ec2.ini

49、60;文件拷貝到/etc/ansible/ec2.ini,然后運行 ansible.要成功的調用 API 訪問 AWS,需要配置 Boto (Boto 是 AWS 的 Python 接口).可用的方法有多種,請參見: methods .最簡單的方法是定義兩個環境變量:export AWS_ACCESS_KEY_ID='AK123'export AWS_SECRET_ACCESS_KEY='abc123'如何知道配置是否正確,執行腳本來測試:cd plugins/inventory./ec2.py -list你可以看到以 JSON 格式表示的覆

50、蓋所有 regions 的 inventory 信息.因為每一個 region 需要自己的 API 調用,如果你僅使用了所有 regions 中的一個子集,可以編輯ec2.ini ,使之僅顯示你所感興趣的那些 regions. 在配置文件 ec2.ini 中,包含了其他配置選項,包括緩存控制和目的地址變量.inventory 文件的核心部分,是一些名字到目的地址的映射.默認的 ec2.ini 設置適用于在 EC2 之外運行 Ansible(比如一臺筆記本電腦),但這不是最有效的方式.在 EC2 內部運行 Ansible 時,內部的 DNS 名和

51、 IP 地址比公共 DNS 名更容易理解.你可以在 ec2.ini 文件中修改 destination_variable 變量, 改為一個實例的私有 DNS 名.對于在私有子網的 VPC 上運行 Ansible ,這種設置很重要,使得我們可以使用內部IP地址之外的方式訪問到一個VPC.在 ec2.ini 文件中, vpc_destination_variable 可以命名為任意一個 boto.ec2.instance 變量.EC2 外部 inventory 提供了一種從多個組到實例的映射:全局

52、實例都屬于 ec2 這個組.實例ID例如: i-00112233 i-a1b1c1d1Region屬于一個 AWS region 的所有實例構成的一個組. 例如: us-east-1 us-west-2可用性區域所有屬于 availability zone 的實例構成一個組. 例如: us-east-1a us-east-1b安全組實例可屬于一個或多個安全組.每一個組的前綴都是 security_group_ ,符號(-) 已被轉換為(_). with all characters except

53、 alphanumerics (這句沒明白)例如: security_group_default security_group_webservers security_group_Pete_s_Fancy_Group標簽每一個實例可有多個不同的 key/value 鍵值對,這些鍵值對被稱為標簽.標簽名可以隨意定義,最常見的標簽是 Name.每一個鍵值對是這個實例自己的組. 特殊字符已轉換為下劃線,格式為tag_KEY_VALUE 例如: tag_Name_Web tag_Name_redis-master-001tag_aws_clo

54、udformation_logical-id_WebServerGroup使用 Ansible 與指定的服務器進行交互時,EC2 inventory 腳本被再次調用(調用時加上了命令行選項-host HOST ),這個調用會在索引緩存中進行查找,獲取實例 ID,然后調用 API 訪問 AWS,獲取指定實例的所有信息.這些信息被轉換為 playbooks 中的變量,可以進行訪問.每一個變量的前綴為 ec2_,下面是一些變量的示例:· ec2_architecture· ec2_description· ec2_dns_name·

55、; ec2_id· ec2_image_id· ec2_instance_type· ec2_ip_address· ec2_kernel· ec2_key_name· ec2_launch_time· ec2_monitored· ec2_ownerId· ec2_placement· ec2_platform· ec2_previous_state· ec2_private_dns_name· ec2_private_ip_address· ec2_p

56、ublic_dns_name· ec2_ramdisk· ec2_region· ec2_root_device_name· ec2_root_device_type· ec2_security_group_ids· ec2_security_group_names· ec2_spot_instance_request_id· ec2_state· ec2_state_code· ec2_state_reason· ec2_status· ec2_subnet_id·

57、; ec2_tag_Name· ec2_tenancy· ec2_virtualization_type· ec2_vpc_id其中 ec2_security_group_ids 和 ec2_security_group_names 變量的值為所有安全組的列表,使用逗號分隔.每一個 EC2 標簽是一個格式為 ec2_tag_KEY 的變量.要查看一個實例的完整的可用變量的列表,執行腳本:cd plugins/inventory./ec2.py -host ec2-12-12-12-pute-注意,AWS inventory 腳本會將結果進行緩存,以避免重復的 API 調用,這個緩存的設置可在 ec2.ini 文件中配置.要顯式地清空緩存,你可以加上 -refresh-cache 選項,執行腳本如下:# ./ec2.py -refresh-cache其它 inventory 腳本除了 Cobbler 和 EC2 之外,還有以下的系統可以使用 inventory 腳本:BSD Jail

溫馨提示

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

評論

0/150

提交評論