Ansible :一個配置管理和IT自動化工具(1/3)

 ansible,一個由 Python 編寫的強大的配置管理解決方案。儘管市面上已經有不少可供選擇的配置管理解決方案,但他們各有優劣,而 ansible 的特色就在於它的簡潔。讓 ansible 在主流的配置管理系統中不同凡響的一點即是,它並不須要你在想要配置的每一個節點上安裝本身的組件。同時提供的一個優勢在於,若是須要的話,你能夠在不止一個地方控制你的整個基礎架構。最後一點是它的正確性,或許這裏有些爭議,可是我認爲在大多數時候這仍然能夠做爲它的一個優勢。說得足夠多了,讓咱們來着手在 RHEL/CentOS 和基於 Debian/Ubuntu 的系統中安裝和配置 Ansible。html

準備工做

  1. 發行版:RHEL/CentOS/Debian/Ubuntu Linux
  2. Jinja2:Python 的一個對設計師友好的現代模板語言
  3. PyYAML:Python 的一個 YAML 編碼/反編碼函數庫
  4. paramiko:純 Python 編寫的 SSHv2 協議函數庫 (譯者注:原文對函數庫名有拼寫錯誤)
  5. httplib2:一個功能全面的 HTTP 客戶端函數庫
  6. 本文中列出的絕大部分操做已經假設你將在 bash 或者其餘任何現代的 shell 中以 root 用戶執行。

Ansible 如何工做

Ansible 工具並不使用守護進程,它也不須要任何額外的自定義安全架構,所以它的部署能夠說是十分容易。你須要的所有東西即是 SSH 客戶端和服務器了。linux

+-----------------+ +---------------+

|安裝了 Ansible 的| SSH | 文件服務器1 |

|Linux/Unix 工做站|<------------------>| 數據庫服務器2 | 在本地或遠程

+-----------------+ 模塊 | 代理服務器3 | 數據中心的

192.168.1.100 +---------------+ Unix/Linux 服務器

其中:git

  1. 192.168.1.100 - 在你本地的工做站或服務器上安裝 Ansible。
  2. 文件服務器1到代理服務器3 - 使用 192.168.1.100 和 Ansible 來自動管理全部的服務器。
  3. SSH - 在 192.168.1.100 和本地/遠程的服務器之間設置 SSH 密鑰。

Ansible 安裝教程

ansible 的安裝垂手可得,許多發行版的第三方軟件倉庫中都有現成的軟件包,能夠直接安裝。其餘簡單的安裝方法包括使用 pip 安裝它,或者從 github 裏獲取最新的版本。若想使用你的軟件包管理器安裝,在基於 RHEL/CentOS Linux 的系統裏你極可能須要 EPEL 倉庫github

A、在基於 RHEL/CentOS Linux 的系統中安裝 ansible

輸入以下 yum 命令:shell

$ sudo yum install ansible

B、在基於 Debian/Ubuntu Linux 的系統中安裝 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

C、使用 pip 安裝 ansible

pip 命令是一個安裝和管理 Python 軟件包的工具,好比它能管理 Python Package Index 中的那些軟件包。ubuntu

以下方式在 Linux 和類 Unix 系統中通用:centos

$ sudo pip install ansible

D、從源代碼安裝最新版本的 ansible

你能夠經過以下命令從 github 中安裝最新版本:安全

$ cd ~
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ source ./hacking/env-setup

當你從一個 git checkout 中運行 ansible 的時候,請記住你每次用它以前都須要設置你的環境,或者把這個設置過程加入你的 bash rc 文件中:bash

# 加入 BASH RC
$ echo "export ANSIBLE_HOSTS=~/ansible_hosts" >> ~/.bashrc
$ echo "source ~/ansible/hacking/env-setup" >> ~/.bashrc

ansible 的 hosts 文件包括了一系列它能操做的主機。默認狀況下 ansible 經過路徑 /etc/ansible/hosts 查找 hosts 文件,不過這個行爲也是能夠更改的,這樣當你想操做不止一個 ansible 或者針對不一樣的數據中心的不一樣客戶操做的時候也是很方便的。你能夠經過命令行參數 -i 指定 hosts 文件:

$ ansible all -m shell -a "hostname" --ask-pass -i /etc/some/other/dir/ansible_hosts

不過我更傾向於使用一個環境變量,這能夠在你想要經過 source 一個不一樣的文件來切換工做目標的時候起到做用。這裏的環境變量是 $ANSIBLE_HOSTS,能夠這樣設置:

$ export ANSIBLE_HOSTS=~/ansible_hosts

一旦全部須要的組件都已經安裝完畢,並且你也準備好了你的 hosts 文件,你就能夠來試一試它了。爲了快速測試,這裏我把 127.0.0.1 寫到了 ansible 的 hosts 文件裏:

$ echo "127.0.0.1" > ~/ansible_hosts

如今來測試一個簡單的 ping:

$ ansible all -m ping

或者提示 ssh 密碼:

$ ansible all -m ping --ask-pass

我在剛開始的設置中遇到過幾回問題,所以這裏強烈推薦爲 ansible 設置 SSH 公鑰認證。不過在剛剛的測試中咱們使用了 --ask-pass,在一些機器上你會須要安裝 sshpass 或者像這樣指定 -c paramiko:

$ ansible all -m ping --ask-pass -c paramiko

固然你也能夠安裝 sshpass,然而 sshpass 並不老是在標準的倉庫中提供,所以 paramiko 可能更爲簡單。

下一步:

相關文章
相關標籤/搜索