Kuchitama Tech Note

はてな記法がいつまでたっても覚えられないので、はてなダイアリーからマークダウンが使えるこっちに引っ越してきました。

AnsibleをProxy環境下で利用する

Ansibleをなんで存在してるのかよくわからない仕事の邪魔にしかならないようなProxy環境下で利用する際のメモ書きです。

入門Ansible

入門Ansible

Proxy環境内の実行マシンからAWSなどのProxy環境外のサーバに対して操作を行う場合を想定しています。 対象のOSはCentOS6で、Vagrantを利用して下記のBoxからイメージを立ち上げ、Ansibleのインストール、実行を行いました。

CentoOS6.4 https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box

目次

  • Proxy環境下でのAnsibleのインストール
  • Proxy環境下でのAnsible実行
  • Proxy環境下のCentOS6でAnsibleを実行

Proxy環境下でのAnsibleのインストール

下ごしらえ

まずはAnsibleのインストールを行います。 とりあえず、一通りhttp, https, ftpに対してProxyを通すように設定しておきます。 インストール自体にはこの設定は不要かもしれませんが、どうせProxy環境から出れない以上は必要なので最初にやってしまいます。

echo "export http_proxy=<PROXY_HOST>:<PROXY_PORT>" >> ~/.bash_profile
echo "export https_proxy=<PROXY_HOST>:<PROXY_PORT>" >> ~/.bash_profile
echo "export ftp_proxy=<PROXY_HOST>:<PROXY_PORT>" >> ~/.bash_profile
source ~/.bash_profile

yumコマンドもProxyを通すように設定します。

sudo sh -c 'echo "proxy=https://<PROXY_HOST>:<PROXY_PORT>/" >> /etc/yum.conf'

インストール

ここまで出来たら、Ansibleのインストール作業に入ります。

まずは、rpmの取得から。 rpmコマンドの実行時にプロキシを通すように指定します。

sudo rpm --httpproxy <PROXY_HOST> --httpport <PROXY_PORT> -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpmが取得出来たら、yumコマンドを使ってAnsibleとそのた必要なものをインストール/アップデートします。

sudo yum install -y ansible sshpass
sudo yum update -y openssh

これでAnsibleはインストール出来たはずです。

Proxy環境下でのAnsible実行

Ansibleのインストールが出来てもそのままでは、Ansibleの実行ができません。 なぜなら、AnsbileがSSHでリモートマシンに接続するときにProxyを通らないから。

というわけで、corkscrewでProxyを通してSSHが実行出来るようにします。 まずは、corkscrewのインストール

cd /tmp
curl -o  corkscrew-2.0.tar.gz http://www.agroman.net/corkscrew/corkscrew-2.0.tar.gz
tar -xzf corkscrew-2.0.tar.gz

cd corkscrew-2.0
./configure
make && sudo make install

corkscrewがインストールできたら、ssh_configに設定を追記します。

sudo cp /etc/ssh/ssh_config /etc/ssh/ssh_config.back # 一応バックアップしておく
sudo sh -c 'echo "ProxyCommand /usr/local/bin/corkscrew <PROXY_HOST> <PROXY_PORT> %h %p" >> /etc/ssh/ssh_config'

これで、SSHもProxy経由で実行出来るようになります。

Proxy環境下のCentOS6でAnsibleを実行

どうもCentOS6は癖があるようで、ここまでの手順を完了していてもAnsibleをきちんと実行する事が出来ません。 (参考 https://groups.google.com/d/msg/ansible-project/ExWKdVE7mwQ/ZtycBhQ4mt4J

というわけで、Ansibleの実行時に -c ssh とオプションに指定してやる必要があります。 毎回、-c オプションをつけるのが面倒な場合は、 ansible.cfgファイルにtransport = smart を追記してやれば良さそうです。 -cオプションできちんと動作する事は確認しました。

ansible -m setup -u <USER> -k -c ssh