Posted at
AnsibleDay 14

Ansibleをポータブルに利用する2つの方法

More than 1 year has passed since last update.


はじめに

Ansibleでサーバ構成管理を行うのには、構成対象にsshできるマシンに環境構築する必要があります。

ですが、こんな場合があるかもしれません


  • インターネットに接続できない

  • 勝手に新規ソフトウェア入れられない

こんなときに、インストールなしでAnsibleを利用したいことがあります。

つまり以下のようなことがやりたいことです。

                  |→プロダクト環境   

| ★この環境は中々いじれない。。
┌─────────────┐ | ┌─────────────┐ ┌───────────────┐
|1 | | | 2 | | 3 |
| |──────| |──────| |
| | | | |ssh | |
└─────────────┘ | └─────────────┘ └───────────────┘
ローカルマシン | Ansibleサーバ 構成対象サーバ

→Ansibleサーバーにはディレクトリ転送するだけで、ansible使いたい!

というわけで、

ローカルマシンでゴニョゴニョしたら、あとはディレクトリ転送だけでAnsible実行可能とする方法を2つ紹介します。

※ローカルマシンはインターネット接続可で自由にソフトもインストール可能という前提です。


1. gitからソースをダウンロードする方法

これは、Ansibleのドキュメントにも載っているので知っている方も多いかもしれません。


ローカルマシンでの手順

まずはgit cloneします

git clone https://github.com/ansible/ansible.git --recursive

こんな感じに、ansibleディレクトリができます。

$ ls

ansible

サブモジュールをアップデートします。

※これをやらないと怒られるみたいです。

cd ansible

git submodule update --init lib/ansible/modules/core
git submodule update --init lib/ansible/modules/extras
cd .. #元のディレクトリに戻っておく

これで準備は完了です。

ansibleディレクトリ(とPlaybook)をAnsibleサーバに転送します。

scp -r ansible [Ansibleサーバ]:


Ansibleサーバー側利用方法

cd ansible

source hacking/env-setup

これで、ansibleのコマンドが実行可能となります。


この方法が使える条件

以下の条件でないと動作しないようです。


  • Python2.6 or Python2.7 がインストール済み

  • pip paramiko PyYAML Jinja2 httplib2 six が導入済み

2点めが少しハードル高そうですね。。


2. PyEnv環境ごと転送

PyEnvで作成されたディレクトリをまるごと転送することで、環境構築しちゃおうという多少強引な方法です。


ローカルマシンでの手順

まずはAnsibleを実行するディレクトリを、Ansibleサーバー側と同じパスで作成します。

例: Ansibleサーバーのユーザー名がopuserでAnsible実行ディレクトリansible/home/opuserに置く場合

# useradd opuser

# su - opuser
$ echo $HOME # => /home/opuser
$ mkdir -p /home/opuser/ansible

Ansible用ディレクトリにPyenvを環境を構築します。

cd /home/opuser/ansible

git clone https://github.com/yyuu/pyenv.git pyenv

touch ./pyenv.env
echo 'export PYENV_ROOT="/home/opuser/ansible/pyenv"' >> ./pyenv.env
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ./pyenv.env
echo ' export PATH=${PYENV_ROOT}/bin:$PATH' >> ./pyenv.env
echo ' eval "$(pyenv init -)"' >> ./pyenv.env
echo 'fi' >> ./pyenv.env

source ./pyenv.env

cd $PYENV_ROOT/plugins
git clone https://github.com/yyuu/pyenv-virtualenv.git

PythonをPyenv環境にインストールします。

その後、Ansibleをインストールします。

他にもインストールしたいパッケージがある場合はインストールします。

※バージョンはお好きにどうぞ

cd /home/opuser/ansible

pyenv install 2.7.12
pyenv local 2.7.12
pip install ansible

ansibleディレクトリを転送します。

scp -r /home/opuser/ansible opuser@[Ansibleサーバ]:


Ansibleサーバー側利用方法

Pyenvの環境変数を読み込んでおきます。

cd ~/ansible

source pyenv.env
ansible --version #=> ansibleが利用できるようになっているはずです。

動作条件としては以下です


  • ローカルマシンとAnsibleサーバでCPUアーキが一緒であること

    ※例えばAnsibleサーバがx86_64ならローカルマシンもx86_64にする

  • pyenvのパスがローカルマシンとAnsibleサーバーで同一であること


まとめ

変更の影響を最小限に抑えたいプロダクト環境などでAnsibleを利用したい場合を想定して、

ポータブルなAnsible実行環境をに作成する方法を紹介しました。