本篇文章給大家分享的是有關(guān)配置管理和IT自動(dòng)化工具Ansible怎么用,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元三穗做網(wǎng)站,已為上家服務(wù),為三穗各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
今天來(lái)談?wù)刟nsible,一個(gè)由 Python 編寫的強(qiáng)大的配置管理解決方案。盡管市面上已經(jīng)有很多可供選擇的配置管理解決方案,但他們各有優(yōu)劣,而ansible的特點(diǎn)就在于它的簡(jiǎn)潔。讓ansible在主流的配置管理系統(tǒng)中與眾不同的一點(diǎn)便是,它并不需要你在想要配置的每個(gè)節(jié)點(diǎn)上安裝自己的組件。同時(shí)提供的一個(gè)優(yōu)點(diǎn)在于,如果需要的話,你可以在不止一個(gè)地方控制你的整個(gè)基礎(chǔ)架構(gòu)。最后一點(diǎn)是它的正確性,或許這里有些爭(zhēng)議,但是我認(rèn)為在大多數(shù)時(shí)候這仍然可以作為它的一個(gè)優(yōu)點(diǎn)。說(shuō)得足夠多了,讓我們來(lái)著手在 RHEL/CentOS 和基于 Debian/Ubuntu 的系統(tǒng)中安裝和配置Ansible。
準(zhǔn)備工作
發(fā)行版:RHEL/CentOS/Debian/Ubuntu Linux
Jinja2:Python 的一個(gè)對(duì)設(shè)計(jì)師友好的現(xiàn)代模板語(yǔ)言
PyYAML:Python 的一個(gè) YAML 編碼/反編碼函數(shù)庫(kù)
paramiko:純 Python 編寫的 SSHv2 協(xié)議函數(shù)庫(kù) (譯者注:原文對(duì)函數(shù)庫(kù)名有拼寫錯(cuò)誤)
httplib2:一個(gè)功能全面的 HTTP 客戶端函數(shù)庫(kù)
本文中列出的絕大部分操作已經(jīng)假設(shè)你將在 bash 或者其他任何現(xiàn)代的 shell 中以 root 用戶執(zhí)行。
Ansible如何工作?
Ansible 工具并不使用守護(hù)進(jìn)程,它也不需要任何額外的自定義安全架構(gòu),因此它的部署可以說(shuō)是十分容易。你需要的全部東西便是SSH 客戶端和服務(wù)器了。
+-----------------++---------------+
|安裝了Ansible的| SSH |文件服務(wù)器1|
|Linux/Unix工作站|<------------------>|數(shù)據(jù)庫(kù)服務(wù)器2|在本地或遠(yuǎn)程
+-----------------+模塊|代理服務(wù)器3|數(shù)據(jù)中心的
192.168.1.100+---------------+Unix/Linux服務(wù)器
其中:
192.168.1.100 - 在你本地的工作站或服務(wù)器上安裝 Ansible。
文件服務(wù)器1到代理服務(wù)器3 - 使用 192.168.1.100 和 Ansible 來(lái)自動(dòng)管理所有的服務(wù)器。
SSH - 在 192.168.1.100 和本地/遠(yuǎn)程的服務(wù)器之間設(shè)置 SSH 密鑰。
Ansible安裝教程
ansible的安裝輕而易舉,許多發(fā)行版的第三方軟件倉(cāng)庫(kù)中都有現(xiàn)成的軟件包,可以直接安裝。其他簡(jiǎn)單的安裝方法包括使用pip安裝它,或者從 github 里獲取最新的版本。若想使用你的軟件包管理器安裝,在基于RHEL/CentOS Linux的系統(tǒng)里你很可能需要EPEL倉(cāng)庫(kù)。
在基于RHEL/CentOS Linux的系統(tǒng)中安裝ansible
輸入如下 yum 命令:
$ sudo yum install ansible
在基于Debian/Ubuntu Linux的系統(tǒng)中安裝ansible
輸入如下 apt-get 命令:
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
使用pip安裝ansible
pip命令是一個(gè)安裝和管理 Python 軟件包的工具,比如它能管理 Python Package Index 中的那些軟件包。如下方式在 Linux 和類 Unix 系統(tǒng)中通用:
$ sudo pip install ansible
從源代碼安裝最新版本的ansible
可以通過(guò)如下命令從 github 中安裝最新版本:
$ cd ~
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ source ./hacking/env-setup
當(dāng)你從一個(gè)git checkout中運(yùn)行ansible的時(shí)候,請(qǐng)記住你每次用它之前都需要設(shè)置你的環(huán)境,或者你可以把這個(gè)設(shè)置過(guò)程加入你的bash rc文件中:
# 加入 BASH RC
$ echo "export ANSIBLE_HOSTS=~/ansible_hosts">>~/.bashrc
$ echo "source ~/ansible/hacking/env-setup">>~/.bashrc
ansible的hosts文件包括了一系列它能操作的主機(jī)。默認(rèn)情況下 ansible 通過(guò)路徑 /etc/ansible/hosts 查找hosts文件,不過(guò)這個(gè)行為也是可以更改的,這樣當(dāng)你想操作不止一個(gè)ansible或者針對(duì)不同的數(shù)據(jù)中心的不同客戶操作的時(shí)候也是很方便的。你可以通過(guò)命令行參數(shù) -i 指定 hosts 文件:
$ ansible all -m shell -a "hostname" --ask-pass -i /etc/some/other/dir/ansible_hosts
不過(guò)我更傾向于使用一個(gè)環(huán)境變量,這可以在你想要通過(guò) source 一個(gè)不同的文件來(lái)切換工作目標(biāo)的時(shí)候起到作用。這里的環(huán)境變量是 $ANSIBLE_HOSTS,可以這樣設(shè)置:
$ export ANSIBLE_HOSTS=~/ansible_hosts
一旦所有需要的組件都已經(jīng)安裝完畢,而且你也準(zhǔn)備好了你的 hosts 文件,你就可以來(lái)試一試它了。為了快速測(cè)試,這里我把 127.0.0.1 寫到了 ansible 的 hosts 文件里:
$ echo "127.0.0.1">~/ansible_hosts
現(xiàn)在來(lái)測(cè)試一個(gè)簡(jiǎn)單的 ping:
$ ansible all -m ping
或者提示ssh密碼:
$ ansible all -m ping --ask-pass
在剛開(kāi)始的設(shè)置中遇到過(guò)幾次問(wèn)題,因此這里強(qiáng)烈推薦為 ansible 設(shè)置 SSH 公鑰認(rèn)證。不過(guò)在剛剛的測(cè)試中我們使用了 --ask-pass,在一些機(jī)器上你會(huì)需要安裝 sshpass 或者像這樣指定 -c paramiko:
$ ansible all -m ping --ask-pass -c paramiko
當(dāng)然你也可以安裝sshpass,然而sshpass并不總是在標(biāo)準(zhǔn)的倉(cāng)庫(kù)中提供,因此paramiko可能更為簡(jiǎn)單。
設(shè)置SSH公鑰認(rèn)證
于是有了一份配置,以及一些基礎(chǔ)的其他東西。現(xiàn)在讓我們來(lái)做一些實(shí)用的事情。ansible 的強(qiáng)大很大程度上體現(xiàn)在 playbooks 上,后者基本上就是一些寫好的 ansible 腳本(大部分來(lái)說(shuō)),不過(guò)在制作一個(gè) playbook 之前,我們將先從一些一句話腳本開(kāi)始。現(xiàn)在讓我們創(chuàng)建和配置 SSH 公鑰認(rèn)證,以便省去 -c 和 --ask-pass 選項(xiàng):
$ ssh-keygen -t rsa
樣例輸出:
Generatingpublic/private rsa key pair.
Enter file in which to save the key (/home/mike/.ssh/id_rsa):
Enter passphrase (empty forno passphrase):
Enter same passphrase again:
Your identification has been saved in/home/mike/.ssh/id_rsa.
Yourpublic key has been saved in/home/mike/.ssh/id_rsa.pub.
The key fingerprint is:
94:a0:19:02:ba:25:23:7f:ee:6c:fb:e8:38:b4:f2:42 mike@ultrabook.linuxdork.com
The key's randomart image is:
+--[ RSA 2048]----+
|... . . |
|. . + . . |
|= . o o |
|.* . |
|. . . S |
| E.o |
|.. .. |
|o o+.. |
| +o+*o. |
+-----------------+
現(xiàn)在顯然有很多種方式來(lái)把它放到遠(yuǎn)程主機(jī)上應(yīng)該的位置。不過(guò)既然我們正在使用 ansible,就用它來(lái)完成這個(gè)操作吧:
$ ansible all -m copy -a "src=/home/mike/.ssh/id_rsa.pub dest=/tmp/id_rsa.pub" --ask-pass -c paramiko
樣例輸出:
SSH password:
127.0.0.1| success >>{
"changed":true,
"dest":"/tmp/id_rsa.pub",
"gid":100,
"group":"users",
"md5sum":"bafd3fce6b8a33cf1de415af432774b4",
"mode":"0644",
"owner":"mike",
"size":410,
"src":"/home/mike/.ansible/tmp/ansible-tmp-1407008170.46-208759459189201/source",
"state":"file",
"uid":1000
}
下一步,把公鑰文件添加到遠(yuǎn)程服務(wù)器里。輸入:
$ ansible all -m shell -a "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys" --ask-pass -c paramiko
樣例輸出:
SSH password:
127.0.0.1| FAILED | rc=1>>
/bin/sh:/root/.ssh/authorized_keys:Permission denied
矮油,需要用root來(lái)執(zhí)行這個(gè)命令,所以還是加上一個(gè)-u參數(shù)吧:
$ ansible all -m shell -a "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys" --ask-pass -c paramiko -u root
樣例輸出:
SSH password:
127.0.0.1| success | rc=0>>
請(qǐng)注意,剛才這是想要演示通過(guò) ansible 來(lái)傳輸文件的操作。事實(shí)上 ansible 有一個(gè)更加方便的內(nèi)置 SSH 密鑰管理支持:
$ ansible all -m authorized_key -a "user=mike key='{{ lookup('file', '/home/mike/.ssh/id_rsa.pub') }}' path=/home/mike/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko
樣例輸出:
SSH password:
127.0.0.1| success >>{
"changed":true,
"gid":100,
"group":"users",
"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCq+Z8/usprXk0aCAPyP0TGylm2MKbmEsHePUOd7p5DO1QQTHak+9gwdoJJavy0yoUdi+C+autKjvuuS+vGb8+I+8mFNu5CvKiZzIpMjZvrZMhHRdNud7GuEanusTEJfi1pUd3NA2iXhl4a6S9a/4G2mKyf7QQSzI4Z5ddudUXd9yHmo9Yt48/ASOJLHIcYfSsswOm8ux1UnyeHqgpdIVONVFsKKuSNSvZBVl3bXzhkhjxz8RMiBGIubJDBuKwZqNSJkOlPWYN76btxMCDVm07O7vNChpf0cmWEfM3pXKPBq/UBxyG2MgoCGkIRGOtJ8UjC/daadBUuxg92/u01VNEB mike@ultrabook.linuxdork.com",
"key_options":null,
"keyfile":"/home/mike/.ssh/authorized_keys",
"manage_dir":false,
"mode":"0600",
"owner":"mike",
"path":"/home/mike/.ssh/authorized_keys",
"size":410,
"state":"file",
"uid":1000,
"unique":false,
"user":"mike"
}
現(xiàn)在這些密鑰已經(jīng)設(shè)置好了。我們來(lái)試著隨便跑一個(gè)命令,比如 hostname,希望我們不會(huì)被提示要輸入密碼
$ ansible all -m shell -a "hostname" -u root
樣例輸出:
127.0.0.1| success | rc=0>>
成功!!!現(xiàn)在我們可以用 root 來(lái)執(zhí)行命令,并且不會(huì)被輸入密碼的提示干擾了。我們現(xiàn)在可以輕易地配置任何在 ansible hosts 文件中的主機(jī)了。讓我們把 /tmp 中的公鑰文件刪除:
$ ansible all -m file -a "dest=/tmp/id_rsa.pub state=absent" -u root
樣例輸出:
127.0.0.1| success >>{
"changed":true,
"path":"/tmp/id_rsa.pub",
"state":"absent"
}
下面我們來(lái)做一些更復(fù)雜的事情,我要確定一些軟件包已經(jīng)安裝了,并且已經(jīng)是最新的版本:
$ ansible all -m zypper -a "name=apache2 state=latest" -u root
樣例輸出:
127.0.0.1| success >>{
"changed":false,
"name":"apache2",
"state":"latest"
}
很好,我們剛才放在 /tmp 中的公鑰文件已經(jīng)消失了,而且我們已經(jīng)安裝好了最新版的 apache。下面我們來(lái)看看前面命令中的 -m zypper,一個(gè)讓 ansible 非常靈活,并且給了 playbooks 更多能力的功能。如果你不使用 openSUSE 或者 Suse enterprise 你可能還不熟悉 zypper, 它基本上就是 suse 世界中相當(dāng)于 yum 的存在。在上面所有的例子中,我的 hosts 文件中都只有一臺(tái)機(jī)器。除了最后一個(gè)命令外,其他所有命令都應(yīng)該在任何標(biāo)準(zhǔn)的 *nix 系統(tǒng)和標(biāo)準(zhǔn)的 ssh 配置中使用,這造成了一個(gè)問(wèn)題。如果我們想要同時(shí)管理多種不同的機(jī)器呢?這便是 playbooks 和 ansible 的可配置性閃閃發(fā)光的地方了。首先我們來(lái)少許修改一下我們的 hosts 文件:
$ cat ~/ansible_hosts
樣例輸出:
[RHELBased]
10.50.1.33
10.50.1.47
[SUSEBased]
127.0.0.1
首先,我們創(chuàng)建了一些分組的服務(wù)器,并且給了他們一些有意義的標(biāo)簽。然后我們來(lái)創(chuàng)建一個(gè)為不同類型的服務(wù)器執(zhí)行不同操作的 playbook。你可能已經(jīng)發(fā)現(xiàn)這個(gè) yaml 的數(shù)據(jù)結(jié)構(gòu)和我們之前運(yùn)行的命令行語(yǔ)句中的相似性了。簡(jiǎn)單來(lái)說(shuō),-m 是一個(gè)模塊,而 -a 用來(lái)提供模塊參數(shù)。在 YAML 表示中你可以先指定模塊,然后插入一個(gè)冒號(hào) :,最后指定參數(shù)。
---
- hosts:SUSEBased
remote_user: root
tasks:
- zypper: name=apache2 state=latest
- hosts:RHELBased
remote_user: root
tasks:
- yum: name=httpd state=latest
現(xiàn)在有一個(gè)簡(jiǎn)單的playbook 了,可以這樣運(yùn)行它:
$ ansible -playbook testPlaybook.yaml -f 10
樣例輸出:
PLAY [SUSEBased]**************************************************************
GATHERING FACTS ***************************************************************
ok:[127.0.0.1]
TASK:[zypper name=apache2 state=latest]**************************************
ok:[127.0.0.1]
PLAY [RHELBased]**************************************************************
GATHERING FACTS ***************************************************************
ok:[10.50.1.33]
ok:[10.50.1.47]
TASK:[yum name=httpd state=latest]*******************************************
changed:[10.50.1.33]
changed:[10.50.1.47]
PLAY RECAP ********************************************************************
10.50.1.33: ok=2 changed=1 unreachable=0 failed=0
10.50.1.47: ok=2 changed=1 unreachable=0 failed=0
127.0.0.1: ok=2 changed=0 unreachable=0 failed=0
注意,會(huì)看到ansible聯(lián)系到的每一臺(tái)機(jī)器的輸出。-f 參數(shù)讓ansible在多臺(tái)主機(jī)上同時(shí)運(yùn)行指令。除了指定全部主機(jī),或者一個(gè)主機(jī)分組的名字以外,你還可以把導(dǎo)入ssh公鑰的操作從命令行里轉(zhuǎn)移到playbook中,這將在設(shè)置新主機(jī)的時(shí)候提供很大的方便,甚至讓新主機(jī)直接可以運(yùn)行一個(gè)playbook。為了演示,我們把我們之前的公鑰例子放進(jìn)一個(gè)playbook里:
---
- hosts:SUSEBased
remote_user: mike
sudo: yes
tasks:
- authorized_key: user=root key="{{ lookup('file', '/home/mike/.ssh/id_rsa.pub') }}" path=/root/.ssh/authorized_keys manage_dir=no
- hosts:RHELBased
remote_user: mdonlon
sudo: yes
tasks:
- authorized_key: user=root key="{{ lookup('file', '/home/mike/.ssh/id_rsa.pub') }}" path=/root/.ssh/authorized_keys manage_dir=no
除此之外還有很多可以做的事情,比如在啟動(dòng)的時(shí)候把公鑰配置好,或者引入其他的流程來(lái)讓你按需配置一些機(jī)器。不過(guò)只要SSH被配置成接受密碼登陸,這些幾乎可以用所有的流程中。在你準(zhǔn)備開(kāi)始寫太多playbook之前,另一個(gè)值得考慮的事情是,代碼管理可以有效節(jié)省你的時(shí)間。機(jī)器需要不斷變化,然而你并不需要在每次機(jī)器發(fā)生變化時(shí)都重新寫一個(gè)playbook,只需要更新相關(guān)的部分并提交這些修改。與此相關(guān)的另一個(gè)好處是,如同我之前所述,你可以從不同的地方管理你的整個(gè)基礎(chǔ)結(jié)構(gòu)。你只需要將你的playbook倉(cāng)庫(kù)git clone到新的機(jī)器上,就完成了管理所有東西的全部設(shè)置流程。
現(xiàn)實(shí)中的ansible例子
很多用戶經(jīng)常使用pastebin 這樣的服務(wù),以及很多公司基于顯而易見(jiàn)的理由配置了他們內(nèi)部使用的類似東西。最近,我遇到了一個(gè)叫做 showterm 的程序,巧合之下我被一個(gè)客戶要求配置它用于內(nèi)部使用。這里我不打算贅述這個(gè)應(yīng)用程序的細(xì)節(jié),不過(guò)如果你感興趣的話,你可以使用 Google 搜索 showterm。作為一個(gè)合理的現(xiàn)實(shí)中的例子,我將會(huì)試圖配置一個(gè) showterm 服務(wù)器,并且配置使用它所需要的客戶端應(yīng)用程序。在這個(gè)過(guò)程中我們還需要一個(gè)數(shù)據(jù)庫(kù)服務(wù)器。現(xiàn)在我們從配置客戶端開(kāi)始:
---
- hosts: showtermClients
remote_user: root
tasks:
- yum: name=rubygems state=latest
- yum: name=ruby-devel state=latest
- yum: name=gcc state=latest
- gem: name=showterm state=latest user_install=no
這部分很簡(jiǎn)單。下面是主服務(wù)器:
---
- hosts: showtermServers
remote_user: root
tasks:
- name:ensure packages are installed
yum: name={{item}} state=latest
with_items:
- postgresql
- postgresql-server
- postgresql-devel
- python-psycopg2
- git
- ruby21
- ruby21-passenger
- name: showterm server from github
git: repo=https://github.com/ConradIrwin/showterm.io dest=/root/showterm
- name:Initdb
command: service postgresql initdb
creates=/var/lib/pgsql/data/postgresql.conf
- name:StartPostgreSQLand enable at boot
service: name=postgresql
enabled=yes
state=started
- gem: name=pg state=latest user_install=no
handlers:
- name: restart postgresql
service: name=postgresql state=restarted
- hosts: showtermServers
remote_user: root
sudo: yes
sudo_user: postgres
vars:
dbname: showterm
dbuser: showterm
dbpassword: showtermpassword
tasks:
- name: create db
postgresql_db: name={{dbname}}
- name: create user with ALL priv
postgresql_user: db={{dbname}} name={{dbuser}} password={{dbpassword}} priv=ALL
- hosts: showtermServers
remote_user: root
tasks:
- name: database.yml
template: src=database.yml dest=/root/showterm/config/database.yml
- hosts: showtermServers
remote_user: root
tasks:
- name: run bundle install
shell: bundle install
args:
chdir:/root/showterm
- hosts: showtermServers
remote_user: root
tasks:
- name: run rake db tasks
shell:'bundle exec rake db:create db:migrate db:seed'
args:
chdir:/root/showterm
- hosts: showtermServers
remote_user: root
tasks:
- name: apache config
template: src=showterm.conf dest=/etc/httpd/conf.d/showterm.conf
還湊合。請(qǐng)注意,從某種意義上來(lái)說(shuō)這是一個(gè)任意選擇的程序,然而我們現(xiàn)在已經(jīng)可以持續(xù)地在任意數(shù)量的機(jī)器上部署它了,這便是配置管理的好處。此外,在大多數(shù)情況下這里的定義語(yǔ)法幾乎是不言而喻的,wiki 頁(yè)面也就不需要加入太多細(xì)節(jié)了。當(dāng)然在我的觀點(diǎn)里,一個(gè)有太多細(xì)節(jié)的 wiki 頁(yè)面絕不會(huì)是一件壞事。
擴(kuò)展配置
我們并沒(méi)有涉及到這里所有的細(xì)節(jié)。Ansible 有許多選項(xiàng)可以用來(lái)配置你的系統(tǒng)。你可以在你的 hosts 文件中內(nèi)嵌變量,而 ansible 將會(huì)把它們應(yīng)用到遠(yuǎn)程節(jié)點(diǎn)。如:
[RHELBased]
10.50.1.33 http_port=443
10.50.1.47 http_port=80 ansible_ssh_user=mdonlon
[SUSEBased]
127.0.0.1 http_port=443
盡管這對(duì)于快速配置來(lái)說(shuō)已經(jīng)非常方便,你還可以將變量分成存放在 yaml 格式的多個(gè)文件中。在你的 hosts 文件路徑里,你可以創(chuàng)建兩個(gè)子目錄 groupvars 和 hostvars。在這些路徑里放置的任何文件,只要能對(duì)得上一個(gè)主機(jī)分組的名字,或者你的 hosts 文件中的一個(gè)主機(jī)名,它們都會(huì)在運(yùn)行時(shí)被插入進(jìn)來(lái)。所以前面的一個(gè)例子將會(huì)變成這樣:
ultrabook:/etc/ansible # pwd
/etc/ansible
ultrabook:/etc/ansible # tree
.
├── group_vars
│├──RHELBased
│└──SUSEBased
├── hosts
└── host_vars
├──10.50.1.33
└──10.50.1.47
2 directories,5 files
ultrabook:/etc/ansible # cat hosts
[RHELBased]
10.50.1.33
10.50.1.47
[SUSEBased]
127.0.0.1
ultrabook:/etc/ansible # cat group_vars/RHELBased
ultrabook:/etc/ansible # cat group_vars/SUSEBased
---
http_port:443
ultrabook:/etc/ansible # cat host_vars/10.50.1.33
---
http_port:443
ultrabook:/etc/ansible # cat host_vars/10.50.1.47
---
http_port:80
ansible_ssh_user: mdonlon
改善Playbooks
組織 playbooks 也已經(jīng)有很多種現(xiàn)成的方式。在前面的例子中我們用了一個(gè)單獨(dú)的文件,因此這方面被大幅地簡(jiǎn)化了。組織這些文件的一個(gè)常用方式是創(chuàng)建角色。簡(jiǎn)單來(lái)說(shuō),你將一個(gè)主文件加載為你的 playbook,而它將會(huì)從其它文件中導(dǎo)入所有的數(shù)據(jù),這些其他的文件便是角色。舉例來(lái)說(shuō),如果你有了一個(gè) wordpress 網(wǎng)站,你需要一個(gè) web 前端,和一個(gè)數(shù)據(jù)庫(kù)。web 前端將包括一個(gè) web 服務(wù)器,應(yīng)用程序代碼,以及任何需要的模塊。數(shù)據(jù)庫(kù)有時(shí)候運(yùn)行在同一臺(tái)主機(jī)上,有時(shí)候運(yùn)行在遠(yuǎn)程的主機(jī)上,這時(shí)候角色就可以派上用場(chǎng)了。你創(chuàng)建一個(gè)目錄,并對(duì)每個(gè)角色創(chuàng)建對(duì)應(yīng)的小 playbook。在這個(gè)例子中我們需要一個(gè) apache 角色,MySQL 角色,wordpress 角色,mod_php,以及 php 角色。最大的好處是,并不是每個(gè)角色都必須被應(yīng)用到同一臺(tái)機(jī)器上。在這個(gè)例子中,mysql 可以被應(yīng)用到一臺(tái)單獨(dú)的機(jī)器。這同樣為代碼重用提供了可能,比如你的 apache 角色還可以被用在 python 和其他相似的 php 應(yīng)用程序中。展示這些已經(jīng)有些超出了本文的范疇,而且做一件事總是有很多不同的方式,我建議搜索一些 ansible的playbook例子。有很多人在github上貢獻(xiàn)代碼,當(dāng)然還有其他一些網(wǎng)站。
模塊
在ansible中,對(duì)于所有完成的工作,幕后的工作都是由模塊主導(dǎo)的。Ansible 有一個(gè)非常豐富的內(nèi)置模塊倉(cāng)庫(kù),其中包括軟件包安裝,文件傳輸,以及我們?cè)诒疚闹凶龅乃惺虑椤5菍?duì)一部分人來(lái)說(shuō),這些并不能滿足他們的配置需求,ansible 也提供了方法讓你添加自己的模塊。Ansible 的 API 有一個(gè)非常棒的事情是,它并沒(méi)有限制模塊也必須用編寫它的語(yǔ)言 Python 來(lái)編寫,也就是說(shuō),你可以用任何語(yǔ)言來(lái)編寫模塊。Ansible 模塊通過(guò)傳遞 JSON 數(shù)據(jù)來(lái)工作,因此你只需要用想用的語(yǔ)言生成一段 JSON 數(shù)據(jù)。我很確定任何腳本語(yǔ)言都可以做到這一點(diǎn),因此你現(xiàn)在就可以開(kāi)始寫點(diǎn)什么了。在 Ansible 的網(wǎng)站上有很多的文檔,包括模塊的接口是如何工作的,以及 Github 上也有很多模塊的例子。注意一些小眾的語(yǔ)言可能沒(méi)有很好的支持,不過(guò)那只可能是因?yàn)闆](méi)有多少人在用這種語(yǔ)言貢獻(xiàn)代碼。試著寫點(diǎn)什么,然后把你的結(jié)果發(fā)布出來(lái)吧!
總的來(lái)說(shuō),雖然在配置管理方面已經(jīng)有很多解決方案,我希望本文能顯示出ansible簡(jiǎn)單的設(shè)置過(guò)程,在我看來(lái)這是它最重要的一個(gè)要點(diǎn)。請(qǐng)注意,因?yàn)槲以噲D展示做一件事的不同方式,所以并不是前文中所有的例子都是適用于你的個(gè)別環(huán)境或者對(duì)于普遍情況的最佳實(shí)踐。
以上就是配置管理和IT自動(dòng)化工具Ansible怎么用,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁(yè)題目:配置管理和IT自動(dòng)化工具Ansible怎么用
文章分享:http://www.chinadenli.net/article24/iehhce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、外貿(mào)建站、關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)