はじめに
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実行環境をに作成する方法を紹介しました。