久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

自動化工具

 文檔集成 2015-07-02

這兩天花了點(diǎn)時(shí)間看了下ansible的文檔,,也稍稍體驗(yàn)了下,,因?yàn)槭侨⑽牡奈臋n,看起來有些慢,,因此想著把常用的東西寫篇文章提煉下,,這樣以后也就方便查閱,同時(shí)也方便那些想快速使用ansible的人,,能夠快速的上手,。于是有了這篇文章,命名為“ansible使用指南”,。有點(diǎn)標(biāo)題黨,,有遺漏的地方歡迎補(bǔ)充^_^

1. 什么是ansible

ansible是個(gè)什么東西呢?官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT工具,。這個(gè)工具的目標(biāo)有這么幾項(xiàng):讓我們自動化部署APP,;自動化管理配置項(xiàng);自動化的持續(xù)交付,;自動化的(AWS)云服務(wù)管理,。

所有的這幾個(gè)目標(biāo)本質(zhì)上來說都是在一個(gè)臺或者幾臺服務(wù)器上,執(zhí)行一系列的命令而已,。就像我之前有介紹過的Fabric,,以及我們基于Fabric開發(fā)的自動化應(yīng)用部署的工具: Essay 。都是做了這么個(gè)事——批量的在遠(yuǎn)程服務(wù)器上執(zhí)行命令 ,。

那么fabric和ansible有什么差別呢,?簡單來說fabric像是一個(gè)工具箱,提供了很多好用的工具,,用來在Remote執(zhí)行命令,,而Ansible則是提供了一套簡單的流程,你要按照它的流程來做,,就能輕松完成任務(wù),。這就像是庫和框架的關(guān)系一樣。

當(dāng)然,,它們之間也是有共同點(diǎn)的——都是基于 paramiko 開發(fā)的,。這個(gè)paramiko是什么呢?它是一個(gè)純Python實(shí)現(xiàn)的ssh協(xié)議庫,。因此fabric和ansible還有一個(gè)共同點(diǎn)就是不需要在遠(yuǎn)程主機(jī)上安裝client/agents,,因?yàn)樗鼈兪腔趕sh來和遠(yuǎn)程主機(jī)通訊的。

2. 快速安裝

上面簡單介紹了下這是個(gè)什么東西,,怎么安裝呢,?也很簡單,因?yàn)閍nsible是python開發(fā)的,因此可以這么安裝:

sudo esay_install ansible
# 或者
sudo pip install ansible

你也可以從github上clone最新版本,,然后安裝,。

另外需要注意的是,控制服務(wù)器(Master)需要安裝Python2.6/7,,windows上無法使用ansible。被管理的服務(wù)器(Managed Node)需要安裝Python2.4以上的版本,,如果低于2.5,,需要安裝python-simplejson。

3. 配置

安裝完成之后,,先來配置下配置項(xiàng)——.ansible.cfg,。ansible執(zhí)行的時(shí)候會按照以下順序查找配置項(xiàng):

* ANSIBLE_CONFIG (環(huán)境變量)
* ansible.cfg (當(dāng)前目錄下)
* .ansible.cfg (用戶家目錄下)
* /etc/ansible/ansible.cfg

還有一個(gè)重要的配置是hosts的配置,所有的遠(yuǎn)程主機(jī)需要在hosts中配置,,可以分組,。當(dāng)然hosts也可以執(zhí)行是指定。先來一個(gè)簡單的例子,,在家目錄下新建一個(gè)hosts文件:

# hosts
[local]
127.0.0.1

然后在終端執(zhí)行:

$ ansible -i ~/hosts all -a 'who'

# 結(jié)果如下:
127.0.0.1 | success | rc=0 >>
Guest    console  Feb  1 16:29
the5fire console  Jan 20 19:50
the5fire ttys018  Feb 22 15:35  (localhost)

這是一條ad-hoc命令——臨時(shí)執(zhí)行命令,,ad-hoc是ansible里的一個(gè)概念, 在上面命令中就是 -a ,具體稍后再說,。命令中的all是值hoss中的所有服務(wù)器,,當(dāng)然也可以通過 ansible -i ~/hosts local -a 'who' 這樣根據(jù)組名指定服務(wù)器。

再說到ansible.cfg的配置,,默認(rèn)ansible執(zhí)行時(shí)會從該配置中加載hosts配置,,因此可以通過修改.ansible.cfg來指定默認(rèn)的hosts文件地址:

# .ansible.cfg
[defaults]
hostfile=/Users/the5fire/hosts

這樣下次執(zhí)行,就不需要 -i 參數(shù)了,。

4. Ad-Hoc

ad hoc——臨時(shí)的,,在ansible中是指需要快速執(zhí)行,并且不需要保存的命令,。說白了就是執(zhí)行簡單的命令——一條命令,。對于復(fù)雜的命令后面會說playbook。

那么這個(gè)Ad-Hoc命令怎么用呢,?上面已經(jīng)簡單的示范了下,。在ansible中還有一個(gè)Module(模塊)的概念,這個(gè)模塊可以理解為一個(gè)庫,,所有的命令都需要通過模塊來執(zhí)行,,比如上面的那個(gè)命令: ansible -i ~/hosts all -a 'who' ,其實(shí)是調(diào)用了默認(rèn)的command模塊: ansible -i ~/hosts all -m command -a 'who' ,除了command模塊還有其他很多模塊,,比如你就想ping下這個(gè)服務(wù)器是不是還存在可以通過ping模塊: ansible -i ~/hosts all -m ping ,。

還有幾個(gè)參數(shù)需要記錄下:

-u username  # 指定ssh連接的用戶名
-f 10        # 指定并發(fā)數(shù)
--sudo [-K]    #  如果需要root權(quán)限執(zhí)行的話,-K參數(shù)是用來輸入root密碼的

你可以通過各種模塊來批量完成某個(gè)包的安裝,,或者其他什么需要的操作,。 更多模塊可以看官網(wǎng)文檔: modules

關(guān)于Ad-Hoc的更多內(nèi)容參考這里: intro_adhoc

5. 簡單Playbook

上面的ad hoc是指執(zhí)行一條臨時(shí)的不需要保存的命令,,那么復(fù)雜的命令怎么執(zhí)行呢?因此也就有了playbook這個(gè)命令: ansible-playbook ,。

playbook(劇本),,顧名思義,就是需要定義一個(gè)腳本或者說配置文件,,然后定義好做什么,。一個(gè)簡單的playbook是這樣的,把當(dāng)前用戶名輸出到whoami.rst文件中:

# playbook.yml
---
- hosts: local  # hosts中指定
  remote_user: the5fire  # 如果和當(dāng)前用戶一樣,,則無需指定
  tasks:
    - name: whoami
      shell: 'whoami > whoami.rst'

執(zhí)行完這個(gè)命令后,,你可以在local所代表的服務(wù)器的用戶目錄下發(fā)現(xiàn)這么個(gè)文件。說道這里,,要停一下,。這個(gè)配置文件是yaml格式的,因此你可能需要去了解下YAML: wiki YAML ,。

簡單解釋下上面的playbook,,hosts后面根據(jù)local是從hosts中讀取的,tasks是是關(guān)鍵詞,,指明了要執(zhí)行哪些任務(wù),;下面的name是任務(wù)的名稱,shell是前面提到的module(模塊),,單引號中是命令,。

除了tasks之外,還有一個(gè)handlers的命令,,handlers是在執(zhí)行tasks之后服務(wù)器發(fā)生變化之后可供調(diào)用的handler,,使用起來如下:

# playbook.yml
---
- hosts: local  # hosts中指定
  remote_user: the5fire  # 如果和當(dāng)前用戶一樣,則無需指定
  tasks:
      - name: whoami
        copy: src=~/hosts dest=~/hosts.dest  #  本地拷貝到遠(yuǎn)端
        notify:  # 如果copy執(zhí)行完之后~/hosts.dest文件發(fā)送了變化,,則執(zhí)行
            - clear copy  # 調(diào)用handler
  handlers:
      - name: clear copy
        shell: 'mv ~/hosts.dest hosts.del'  # 假裝刪除

上面只是一個(gè)演示,,再來一個(gè)真實(shí)的功能——在local服務(wù)器上,從git上clone下來我的blog源碼,,然后創(chuàng)建虛擬環(huán)境,,創(chuàng)建數(shù)據(jù)庫,最后運(yùn)行:

# deploy-blog-simple.yml
---
- hosts: local  # hosts中指定
remote_user: the5fire  # 如果和當(dāng)前用戶一樣,,則無需指定
tasks:
    - name: check out django_blog
    git: dest=~/demos/django_selfblog repo=https://github.com/the5fire/django_selfblog
        update=yes
    - name: make virtualenv
    shell: 'virtualenv ~/demos'
    - name: install requirements
    pip: requirements=~/demos/django_selfblog/requirements.txt
        virtualenv=~/demos
    - name: init database
    shell: . ./bin/activate && cd django_selfblog/selfblog && ./init_database.sh chdir=~/demos
    - name: run manage.py
    shell: . ./bin/activate && cd django_selfblog/selfblog &&  ./run.sh chdir=~/demos

如果你已經(jīng)配置好ssh賬戶免密碼登錄之后,,直接執(zhí)行: ansible-playbook deploy-blog-simple.yml 就可以在你指定的服務(wù)器上部署,并啟動blog了,。

好了,,關(guān)于ansible的使用,到這里應(yīng)該先告一段落了,后面還有一些稍微復(fù)雜點(diǎn)的概念:role和include,。以后有時(shí)間再補(bǔ)充一個(gè)續(xù),。

在寫最后一個(gè)playbook的時(shí)候,為了最后能正常啟動blog程序,,花了小半天時(shí)間把a(bǔ)nsible的代碼看了下,,下一篇來分享下ansbile里面的一些原理性的東西。


----EOF-----
微信分享/掃碼閱讀

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多