L 1-Ansible取付

16148 ワード

1、Ansible紹介
       AnsibleはPython言語に基づいて実現される単純軽量レベルの自動化メンテナンス管理ツールです.主に2つの大きなモジュールParamikoとPyYAMLの2つのキーモジュール構築が含まれています.導入アプリケーションの自動化、構成の変更、CIの配布などに使用できます.
       AnsibleとSaltstackが最大で異なる場合、Ansibleはホストにクライアントエージェントを配置する必要はありません.デフォルトではsshチャネルを通じてリモート実行またはダウン配布構成を行います.同じ点は、機能が強く、柔軟なシステム管理、ステータス設定を備えており、両方とも豊富なモジュールとAPIを提供しています.
        ただし、Ansibleはクライアントを必要としないが、クライアントにはpythonの環境が必要であり、デフォルトでは、Ansibleが認識するときにpythonは、他の名前を持つことはできません.そうしないと、サービス側とクライアントの作業にエラーが発生します.後期に強力なモジュールが実行された場合、pythonクライアントがこのモジュールを実行する必要があります.そうしないと、エラーが発生します.以下に説明します.
プレゼンテーション:
ホスト:
サービス:192.168.59.26|python 2.7|ansible 2.4.2.0
クライアント:192.168.59.195|python 2.6|xxxxxxx
クライアントのpythonが正常に存在する場合:
# ansible 192.168.59.195 -m ping
192.168.59.195 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

次に192.168.59.195のpythonをpython_に改名しますbackup:
# whereis python
python: /usr/bin/python2.6 /usr/bin/python /usr/lib/python2.6 /usr/lib64/python2.6 /usr/include/python2.6 /usr/share/man/man1/python.1.gz

# cd /usr/bin/

# mv python python_bakcup

# python
-bash: python: command not found

サービス側が実行した後にエラーを報告する:
# ansible 192.168.59.195 -m ping
192.168.59.195 | FAILED! => {
    "changed": false, 
    "module_stderr": "Shared connection to 192.168.59.195 closed.\r
", "module_stdout": "/bin/sh: /usr/bin/python: \r
", "msg": "MODULE FAILURE", "rc": 0 }

解決方法:
+ターゲットホストのpythonインタプリタを指定できます.
ansible_python_interpreter=/usr/bin/env python2.6
-shell実装方法:
# ansible 192.168.59.195 -m ping -e "ansible_python_interpreter=/usr/bin/python2.6"
192.168.59.195 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

+INIプロファイルの実装方法:
192.168.59.195 ansible_python_interpreter=/usr/bin/python2.6
-効果:
# ansible 192.168.59.195 -m ping 
192.168.59.195 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

+YAML(Playbooks)実装方法:
---
- hosts: 192.168.59.195
  remote_user: root
  vars:
    ansible_python_interpreter: /usr/bin/env python2.6
  tasks:
  - name: Ping hosts
    ping:

-効果を実現する:
# ansible-playbook basice.yml

PLAY [192.168.59.195] ******************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************
ok: [192.168.59.195]

TASK [Ping hosts] **********************************************************************************************************************************************
ok: [192.168.59.195]

PLAY RECAP *****************************************************************************************************************************************************
192.168.59.195             : ok=2    changed=0    unreachable=0    failed=0  

=Summed up=:ここで確認しましたが、ansibleはクライアントがありませんが、クライアントのpython環境に依存していますが、これは影響しません.pythonは現在標準となっているので、linuxシステムはインストールを最小化してもpython環境があります.ここが読めなくても大丈夫です.ここは始まりです.「ansibleはクライアントがいないがクライアントに依存するpython環境」をしっかり覚えておけば、前の読めなくても忘れても大丈夫です.これは後で問題が発生してどこに問題があるかを知っていればいいのです.
2、Ansible取付
=3つの方法=
ここでcentos 6を例に
1)ソースコードを使用してインストールをコンパイルする
Githubにはソースパケットがありますが、gitがあるかどうかを確認する必要があります.yum install git-yが実行されていなければいいです.
# git clone https://github.com/ansible/ansible.git

# cd ansible/

# make rpm
#           
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/ansible/rpm-build/BUILDROOT/ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.x86_64
Wrote: /root/ansible/rpm-build/ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.src.rpm
Wrote: /root/ansible/rpm-build/ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.RH4zrH
+ umask 022
+ cd /root/ansible/rpm-build
+ cd ansible-2.5.0
+ rm -rf /root/ansible/rpm-build/BUILDROOT/ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.x86_64
+ exit 0
#############################################
Ansible RPM is built:
    rpm-build/ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.noarch.rpm
#############################################


# echo $?
0

# rpm -Uvh ./rpm-build/ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.noarch.rpm 

# rpm -qa | grep ansible
ansible-2.5.0-100.git201712201153.b3ff93e.devel.el6.noarch


注意:
コンパイルは最も面倒な方法ですが、コンパイルの自由度が非常に高く、ここでコンパイルすると様々なパッケージがない可能性があります.自分で手動でインストールする必要があるか、pythonモジュールが存在しません.デフォルトのコンパイル時に呼び出されるのはシステム環境変数の/usr/bin/env pythonバージョンです.pythonモジュールをインストールするにも対応するpythonをインストールする必要があります.もし間違いがあったら、必ず新聞を読み間違えた数行、特に最後から10行をマスターしなければならない.基本的には彼が何が欠けているのか、あなたが何を着ているのかのリズムが速い.
2)yum、apt等の倉庫での設置
まずyum取付ハンドルについて、centos 6を例にとります
*まずepelソースをインストールする必要があります.このソースは公式にインストールしても国内にインストールしてもいいです.国内のアリ雲のepelソースなどの速度は非常に客観的です.
あるいは公式の住所に行って最新のansibleバージョンをダウンロードして、住所:http://releases.ansible.com/ansible/rpm/release/(これはあまり述べません)
*ansibleをインストールします.ansible 2.4ではpythonバージョンがpython 2.6以降のpythonバージョンが必要です.
システムのpythonバージョンを確認します.
# python --version
Python 2.6.6
運が良かった、ちょうど2.6
システムにepelソースがあるかどうかを確認します.
epelのrpmパッケージをインストールしている場合は、コマンドを使用して表示できます.
#rpm -qa | grep epel

rpmパッケージがインストールされていない場合はyum makecacheで確認できます(ここでは方法が多いです)
# yum makecache
     :fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
base                                                                  | 3.7 kB     00:00     
epel                                                                  | 4.7 kB     00:00     
extras                                                                | 3.4 kB     00:00     
updates                                                               | 3.4 kB     00:00     
        

インストールansible:
# yum install ansible -y

ubuntuのインストール:
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

ソフトウェア・ウェアハウスのインストールを使用すると、特に依存関係を大幅に省くことができます.
3)pythonを使用したpypiウェアハウスのインストール
        この方法は自信のあるネットワークが必要で、デフォルトのpypi倉庫は海外で、もちろんソフトウェアも最新です.一般的には、aliyun、豆弁、清華、中科院などのオープンソースミラーステーションがあるなど、国内のpypiミラー倉庫に変更することを提案しています.国内のオープンソースミラーステーションまたは指定されたオープンソースミラーステーションを使用する方法も簡単です.
一時的な有効化:
pip install -i https://pypi.douban.com/simple     

永続的な有効化(linuxを主とする):
ユーザーのホームディレクトリ(一般的にroot)で、ディレクトリを作成します.
mkdir ~/.pip/ -p

ファイルを作成
echo "[global]" > ~/.pip/pip.conf
echo "https://pypi.douban.com/simple/ " >> ~/pip/pip.conf

そしてpipインストールを呼び出すとすぐに.
次にpipを使用してansibleをインストールします
# pip install ansible

インストールプロセスは、コンパイル後の2つの方法よりも簡単で、迅速な依存性を自動的に解決します.
pipを使用してインストールすると、エラーが発生する可能性があります.以下のエラーであれば、解決策を提供します.
/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Downloading PyNaCl-1.0.1.tar.gz (2.7MB)
    100% |████████████████████████████████| 2.7MB 230kB/s 
    Complete output from command python setup.py egg_info:
    Couldn't find index page for 'cffi' (maybe misspelled?)
    No local packages or download links found for cffi>=1.1.0
    Traceback (most recent call last):
      File "", line 20, in 
      File "/tmp/pip-build-ABovhP/pynacl/setup.py", line 259, in 
        "Programming Language :: Python :: 3.5",
      File "/usr/lib64/python2.6/distutils/core.py", line 113, in setup
        _setup_distribution = dist = klass(attrs)
      File "/usr/lib/python2.6/site-packages/setuptools/dist.py", line 221, in __init__
        self.fetch_build_eggs(attrs.pop('setup_requires'))
      File "/usr/lib/python2.6/site-packages/setuptools/dist.py", line 245, in fetch_build_eggs
        parse_requirements(requires), installer=self.fetch_build_egg
      File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 538, in resolve
        dist = best[req.key] = env.best_match(req, self, installer)
      File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 780, in best_match
        return self.obtain(req, installer) # try and download/install
      File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 792, in obtain
        return installer(requirement)
      File "/usr/lib/python2.6/site-packages/setuptools/dist.py", line 293, in fetch_build_egg
        return cmd.easy_install(req)
      File "/usr/lib/python2.6/site-packages/setuptools/command/easy_install.py", line 466, in easy_install
        raise DistutilsError(msg)
    distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse('cffi>=1.1.0')

(1)まず、最後の行を見ると、cffi=1.1.0バージョンというソフトウェアが見つかりません.
(2)ない以上、インストールします(ここでは1.7.0をインストールしました):
# pip install cffi==1.1.0

インストール手順が間違っていますか?
  InsecurePlatformWarning
  Downloading cffi-1.1.0.tar.gz (323kB)
    100% |████████████████████████████████| 327kB 324kB/s 
    Complete output from command python setup.py egg_info:
    unable to execute gcc: No such file or directory
    unable to execute gcc: No such file or directory
    
        No working compiler found, or bogus compiler options
        passed to the compiler from Python's distutils module.
        See the error messages above.
        (If they are about -mno-fused-madd and you are on OS/X 10.8,
        see http://stackoverflow.com/questions/22313407/ .)
    compiling '_configtest.c':
    __thread int some_threadlocal_variable_42;
    compiling '_configtest.c':
    int some_regular_variable_42;
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-7EP_ql/cffi

WTF、焦らないで、問題があったら必ずログを見てください.
以上のヒント:unable to execute gcc:No such file or directory
gccディレクトリがありませんが、gccはインストールされていませんか?
この疑問を持ってyum install gcc-yをインストールしてみましょうやはりインストールしていません
(3)gccを取り付けてから実行する
# pip install cffi==1.1.0
You are using pip version 7.1.0, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting cffi==1.1.0
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Using cached cffi-1.1.0.tar.gz
Collecting pycparser (from cffi==1.1.0)
  Downloading pycparser-2.18.tar.gz (245kB)
    100% |████████████████████████████████| 249kB 1.3MB/s 
Installing collected packages: pycparser, cffi
  Running setup.py install for pycparser
  Running setup.py install for cffi
Successfully installed cffi-1.1.0 pycparser-2.18

cffiのインストールに成功しました.では、依存パッケージを解決しました.次にansibleをインストールします.
ここで待ってください.前にpynaclのパッケージもインストールに失敗したわけではありません.では、まずインストールします.
# pip install pynacl==1.0.1
You are using pip version 7.1.0, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pynacl==1.0.1
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Using cached PyNaCl-1.0.1.tar.gz
Collecting six (from pynacl==1.0.1)
  Downloading six-1.11.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): cffi>=1.1.0 in /usr/lib64/python2.6/site-packages (from pynacl==1.0.1)
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/lib/python2.6/site-packages (from cffi>=1.1.0->pynacl==1.0.1)
Installing collected packages: six, pynacl
  Running setup.py install for pynacl
Successfully installed pynacl-1.0.1 six-1.11.0

ansibleのインストールに成功しました.
# pip install ansible
You are using pip version 7.1.0, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting ansible
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Using cached ansible-2.4.2.0.tar.gz
Requirement already satisfied (use --upgrade to upgrade): jinja2 in /usr/lib/python2.6/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): PyYAML in /usr/lib64/python2.6/site-packages (from ansible)
Collecting paramiko (from ansible)
  Using cached paramiko-2.4.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): cryptography in /usr/lib64/python2.6/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.6/site-packages (from ansible)
Requirement already satisfied (use --upgrade to upgrade): MarkupSafe>=0.23 in /usr/lib64/python2.6/site-packages (from jinja2->ansible)
Collecting bcrypt>=3.1.3 (from paramiko->ansible)
  Using cached bcrypt-3.1.4.tar.gz
Collecting pyasn1>=0.1.7 (from paramiko->ansible)
  Using cached pyasn1-0.4.2-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): pynacl>=1.0.1 in /usr/lib64/python2.6/site-packages (from paramiko->ansible)
Requirement already satisfied (use --upgrade to upgrade): idna>=2.1 in /usr/lib/python2.6/site-packages (from cryptography->ansible)
Requirement already satisfied (use --upgrade to upgrade): asn1crypto>=0.21.0 in /usr/lib/python2.6/site-packages (from cryptography->ansible)
Requirement already satisfied (use --upgrade to upgrade): six>=1.4.1 in /usr/lib/python2.6/site-packages (from cryptography->ansible)
Requirement already satisfied (use --upgrade to upgrade): enum34 in /usr/lib/python2.6/site-packages (from cryptography->ansible)
Requirement already satisfied (use --upgrade to upgrade): ipaddress in /usr/lib/python2.6/site-packages (from cryptography->ansible)
Requirement already satisfied (use --upgrade to upgrade): cffi>=1.1 in /usr/lib64/python2.6/site-packages (from bcrypt>=3.1.3->paramiko->ansible)
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/lib/python2.6/site-packages (from cffi>=1.1->bcrypt>=3.1.3->paramiko->ansible)
Installing collected packages: bcrypt, pyasn1, paramiko, ansible
  Running setup.py install for bcrypt
  Running setup.py install for ansible
Successfully installed ansible-2.4.2.0 bcrypt-3.1.4 paramiko-2.4.0 pyasn1-0.4.2

ここで説明すると、pypi倉庫のソフトウェアには多くのバージョンがあり、バージョンの互換性がないため、エラーが発生することが多い.
pipインストールを使用する場合、政府は開発バージョンをインストールする方法も提供しています.
pip install git+https://github.com/ansible/ansible.git@devel

参照先:
http://docs.ansible.com/ansible/latest/