首頁  >  文章  >  系統教程  >  ansible使用小結:ansible的安裝

ansible使用小結:ansible的安裝

WBOY
WBOY原創
2024-08-24 07:31:14995瀏覽

ansible使用小結:ansible的安裝

一、簡介

Ansible 是一個組態管理和應用程式部署工具,功能類似目前業界的組態管理工具 Chef,Puppet,Saltstack。 Ansible 是透過 Python 語言開發。 Ansible 平台由 Michael DeHaan 創建,他同時也是知名軟體 Cobbler 與 Func 的作者。 Ansible 的第一個版本發佈於 2012 年 2 月。 Ansible 預設透過 SSH 協定管理機器,所以 Ansible 不需要安裝客戶端程式在伺服器上。您只需要將 Ansible 安裝在一台伺服器,在 Ansible 安裝完畢後,您就可以去管理控制其它伺服器。不需要為它配置資料庫,Ansible 不會以 daemons 方式來啟動或保持運作狀態。 Ansible 可以實現以下目標:

  • 自動化部署應用程式
  • 自動化管理配置
  • 自動化的持續交付
  • 自動化的(AWS)雲端服務管理。

根據 Ansible 官方提供的信息,目前使用 Ansible 的用戶有:evernote、rackspace、NASA、Atlassian、twitter 等。

註:以上簡介來自於ibm developerworks 中國的介紹。

二、Ansible的安裝
1、yum來源安裝

以centos為例,預設在來源裡沒有ansible,不過在fedora epel來源裡有ansible,配置完epel 來源後,可以直接透過yum 進行安裝。這裡以centos6.8為例:

# yum install http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install ansible
2、apt-get安裝

在ubuntu及其衍生版中,可以透過增加ppa來源進行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

3、源碼安裝
原始碼安裝需要python2.6以上版本,其依賴模組paramiko、PyYAML、Jinja2、httplib2、simplejson、pycrypto模組,以上模組可以透過pip或easy_install 進行安裝,不過本部分既然提到的是原始碼安裝,主要針對的無法設定上外網的情況下,可以透過pypi 網站搜尋以上包,下載後透過python setup.py install 進行安裝。

最後透過github或pypi上下載ansible原始碼包,透過python setup.py install 安裝即可。由於安裝過程相對簡單,這裡略過,主要介紹安裝後,可能遇到的問題。

a、安裝PyYAML時,報錯如下:

# python setup.py install
libyaml is not found or a compiler error: forcing --without-libyaml
(if libyaml is installed correctly, you may need to
specify the option --include-dirs or uncomment and
modify the parameter include_dirs in setup.cfg)
running install_lib
running install_egg_info
Removing /usr/lib64/python2.6/site-packages/PyYAML-3.11-py2.6.egg-info
Writing /usr/lib64/python2.6/site-packages/PyYAML-3.11-py2.6.egg-info

在centos6.8系統中,可以透過yum -y install libyaml 套件解決,或從ISO檔案中提供該套件,透過rpm -ivh進行安裝。

b、安裝完ansible是,報錯如下:

[root@361way.com ansible-1.9.1]# ansible -h
Traceback (most recent call last):
File "/usr/local/src/ansible-devel/bin/ansible", line 36, in 
from ansible.runner import Runner
File "/usr/local/src/ansible-devel/lib/ansible/runner/__init__.py", line 62, in 
from Crypto.Random import atfork
File "/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in 
from Crypto.Random import _UserFriendlyRNG
File "/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in 
from Crypto.Random.Fortuna import FortunaAccumulator
File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, in 
import FortunaGenerator
File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaGenerator.py", line 34, in 
from Crypto.Util.number import ceil_shift, exact_log2, exact_div
File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in 
if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

import paramiko包時,報錯如下:

>>> import paramiko
Traceback (most recent call last):
File "", line 1, in 
File "/usr/lib/python2.6/site-packages/paramiko/__init__.py", line 69, in 
from transport import randpool, SecurityOptions, Transport
File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 32, in 
from paramiko import util
File "/usr/lib/python2.6/site-packages/paramiko/util.py", line 32, in 
from paramiko.common import *
File "/usr/lib/python2.6/site-packages/paramiko/common.py", line 98, in 
from rng import StrongLockingRandomPool
File "/usr/lib/python2.6/site-packages/paramiko/rng.py", line 22, in 
from Crypto.Util.randpool import RandomPool as _RandomPool
File "/usr/lib64/python2.6/site-packages/Crypto/Util/randpool.py", line 30, in 
import Crypto.Random
File "/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in 
from Crypto.Random import _UserFriendlyRNG
File "/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in 
from Crypto.Random.Fortuna import FortunaAccumulator
File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, in 
import FortunaGenerator
File "/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaGenerator.py", line 34, in 
from Crypto.Util.number import ceil_shift, exact_log2, exact_div
File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in 
if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

經過網路上查找,確認為pycrypto套件安裝時所依賴的GMP版本不對的問題,具體可以透過以下步驟驗證:

[root@361way.com pycrypto-2.6.1]# python setup.py build
running build
running build_py
running build_ext
running build_configure
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.

解決方法:

開啟 /usr/lib64/python2.6/site-packages/Crypto/Util/number.py 文件,可以 看到 56 行上的註解說明,要求 libgmp 為 v5 以上版本。而係統現有版本為 4.1.4,把以下兩行暫時註解掉,Ansible 執行正常。

if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
_warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack 
vulnerability.", PowmInsecureWarning)

不過,此方法只是暫時加以解決,更好的方式是去將 libgmp 升級到符合要求的版本。

c、執行時報錯

[root@361way.com src]# ansible test -m raw -a 'uptime'
10.212.52.14 | FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program
10.212.52.16 | FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program

安裝sshpass程式。預設來源裡沒有,我這裡選擇直接從sohu來源下載安裝。

三、Ansible的設定與驗證

這裡以pypi上下載的源碼內有一個examles包,可以將使用該範例檔做為預設配置,具體如下:

[root@361way.com ansible-1.9.1]# mkdir -p /etc/ansible
[root@361way.com ansible-1.9.1]# cp -rp examples/* /etc/ansible/
[root@361way.com ansible-1.9.1]# cd /etc/ansible/

使用預設範例設定檔後,編輯/etc/ansible/hosts文件,透過以下方式驗證ansible是否可用:

[root@361way.com ~]# cat /etc/ansible/hosts
[test]
10.212.52.252 ansible_ssh_user=root ansible_ssh_pass=361way.com
10.212.52.14 ansible_ssh_user=root ansible_ssh_pass=abc123
10.212.52.16 ansible_ssh_user=root ansible_ssh_pass=91it.org

以上的設定中,我設定了一個test群組,該群組下方有三台主機,三台都使用root驗證,三台的密碼分別是361way.com、abc123、91it.org 。

註:後面的使用者和密碼項目是非必須的,在設定key認證的情況下,不使用密碼也可以直接操作 。未使用key的,也可以在ansible通過 -k參數在操作前詢問手動輸入密碼。

[root@361way.com ~]# ansible test -a 'uptime'
10.212.52.252 | success | rc=0 >>
18:01pm up 21 days 3:24, 3 users, load average: 0.39, 0.38, 0.35
10.212.52.16 | success | rc=0 >>
18:09pm up 329 days 1:01, 2 users, load average: 0.08, 0.03, 0.05
10.212.52.14 | success | rc=0 >>
18:08pm up 329 days 0:23, 2 users, load average: 0.06, 0.06, 0.05

執行以上指令後,有結果輸出,證明安裝成功。

以上是ansible使用小結:ansible的安裝的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn