什么是Ansible?

自動化工具——ansible

 

ansibleArchitecture

ansibleArchitectureAnsible

ansibleProject

1. 什么是ansible

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

所有的這幾個目標本質上來說都是在一個臺或者幾臺服務器上,執行一系列的命令而已。就像我之前有介紹過的Fabric,以及我們基于Fabric開發的自動化應用部署的工具:?Essay?。都是做了這么個事——批量的在遠程服務器上執行命令?。

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

當然,它們之間也是有共同點的——都是基于?paramiko?開發的。這個paramiko是什么呢?它是一個純Python實現的ssh協議庫。因此fabric和ansible還有一個共同點就是不需要在遠程主機上安裝client/agents,因為它們是基于ssh來和遠程主機通訊的。

2. 快速安裝

上面簡單介紹了下這是個什么東西,怎么安裝呢?也很簡單,因為ansible是python開發的,因此可以這么安裝:

yum install ansible
# 或者
yum install ansible

 

3. 配置

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

* ANSIBLE_CONFIG (環境變量)
* ansible.cfg (當前目錄下)
* .ansible.cfg (用戶家目錄下)
* /etc/ansible/ansible.cfg

還有一個重要的配置是hosts的配置,所有的遠程主機需要在hosts中配置,可以分組。當然hosts也可以執行是指定。先來一個簡單的例子,在家目錄下新建一個hosts文件:

# hosts
[local]
127.0.0.1

然后在終端執行:

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

# 結果如下:
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命令——臨時執行命令,ad-hoc是ansible里的一個概念, 在上面命令中就是 -a ,具體稍后再說。命令中的all是值hoss中的所有服務器,當然也可以通過?ansible?-i?~/hosts local?-a?'who'?這樣根據組名指定服務器。

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

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

這樣下次執行,就不需要?-i?參數了。

4. Ad-Hoc

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

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

還有幾個參數需要記錄下:

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

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

關于Ad-Hoc的更多內容參考這里:?intro_adhoc

5. 簡單Playbook

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

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

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

執行完這個命令后,你可以在local所代表的服務器的用戶目錄下發現這么個文件。說道這里,要停一下。這個配置文件是yaml格式的,因此你可能需要去了解下YAML:?wiki YAML?。

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

除了tasks之外,還有一個handlers的命令,handlers是在執行tasks之后服務器發生變化之后可供調用的handler,使用起來如下:

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

上面只是一個演示,再來一個真實的功能——在local服務器上,從git上clone下來我的blog源碼,然后創建虛擬環境,創建數據庫,最后運行:

# deploy-blog-simple.yml
---
- hosts: local  # hosts中指定
remote_user: the5fire  # 如果和當前用戶一樣,則無需指定
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

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

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87557

(12)
HGGHGG
上一篇 2017-09-24 21:20
下一篇 2017-09-25

相關推薦

  • Linux基礎學習總結(一)

    Linux 安裝運行步驟: 進入\\172.16.0.1\python10 ? ? ? ? ?用戶名:python10 ? ? ? ? ?密碼:python10magedu 進入目錄? ?ftp://172.16.0.1/pub/ISOs/ 下載linux系統鏡像文件 ? ? ? ? ? CentOS-6.9-x86_64-bin-DVD1.iso ? ? …

    Linux干貨 2018-03-16
  • cut,sort,head,tail,uniq基本使用

    1.列出當前系統上所有已經登錄的用戶的用戶名,同一個用戶登錄多次,則顯示一次[root@localhost ~]# who|cut -d” ” -f1|uniqgordenroot2.取出最后登錄到當前系統的用戶的相關信息。[root@localhost ~]# last|head -1|cut -d’ ‘ -…

    Linux干貨 2017-09-04
  • tom貓—–(Tomcat詳解)

    目錄 安裝tomcat tomcat目錄結構及配置文件構成以及主配置文件server.xml ,tomcat中的組件 實現反代tomcat的方法 nginx+tomcat cluster http(mod_porxy_http)+tomcat cluster http(mod_porxy_ajp)+tomcat cluster http(mod_jk)+to…

    2017-11-16
  • RPM總結(一)

    軟件包基礎軟件包運行環境硬件、內核、應用程序的關系包管理器程序包管理器Linux不同系統上的包管理器RPM的優點rpm包命名方式一般源代碼的命名rpm包的命名rpm包的分類與拆包包管理工具RPM包管理器:程序包管理器:獲取程序包的途徑:rpm包管理CentOS系統上使用rpm命令管理程序包:安裝升級:降級降級實例more 軟件包基礎 包管理過程中,最常用的操…

    Linux干貨 2016-08-24
  • 集中練習4-bash腳本、計劃任務

    集中練習4-bash腳本、計劃任務

    Linux干貨 2017-10-27
  • N21天天第十一周課程練習

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 SSL協議基礎: SSL協議位于TCP/IP協議與各種應用層協議之間,本身又分為兩層: 1)SSL記錄協議:建立在可靠傳輸層協議(TCP)之上,為上層協議提供數據封裝、壓縮、加密等基本功能。 2)SSL握手協議:在SSL記錄協議之上,用于實際數據傳輸前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。 SS…

    Linux干貨 2016-10-09

評論列表(1條)

  • 非常檸檬
    非常檸檬 2017-11-16 12:32

    通過博主介紹 充分了解了!

欧美性久久久久