そういえばAnsibleのテストで、毎回vagrantを使っていたんですが、どうせなら検証環境はdockerのコンテナで自動的にコンテナが立ち上がって勝手にパッケージインストールして….みたいなことをしたいと思い、いろいろ調べたところ。。Ansible 2.0からDocker Connection Pluginという、Docker Remote APIを利用したコンテナのプロビジョニングが可能となったので、

一通りやってみました。


■そもそもDocker Connection Pluginってなに

通常sshを使って対象となるホストにAnsibleが接続するんですが、Connection Pluginを使うことで、接続方式を切り替えることができるようになったそうです。以前はlost connectionを使用したり、sshdをインストールして設定する必要がなくなったので、非常に便利になりました。(その以前を使っていないからなんとも言えないw)Ansible実行環境からDockerホストへRemote APIを実行できる環境であれば、
Dockerコンテナでsshdを起動しておく必要がない!


■環境


■ローカルでansibleインストール

Macにansible最新バージョンをgithubからもらってきましょう。

・確認


■Dockerホスト環境設定

・確認


■Ansibleイベントファイル作成

※/etc/ansible or /usr/local/etc/ansible/にhostsをコピーして上げてください。ansibleディレクトリがない場合は作りましょう。他にも新しいコンテナもプロビジョニングしたい場合も追記しましょう。(ansibleのplaybookが見に行かないので)


■Dockerホストに接続できるか確認

その前に・・・DockerホストにPythonが入っていないのでインストールします。

・Pythonのインストール

・これで接続確認

※pythonがインストールできない場合

そもそもtce-load -wi pythonしたときにtinycorelinux.netからダウンロードしているのですが、結構な頻度で落ちている場合があります。他にもやり方があるので、以下にまとめます。

・スクリプトの作成


#!/bin/bash
VERSIONS=${VERSIONS:-"2.7.8.10"}
# make directory
mkdir -p /opt/bin
cd /opt/bin
wget http://downloads.activestate.com/ActivePython/releases/${VERSIONS}/ActivePython-${VERSIONS}-linux-x86_64.tar.gz
tar -xzvf ActivePython-${VERSIONS}-linux-x86_64.tar.gz
mv ActivePython-${VERSIONS}-linux-x86_64 apy && cd apy && ./install.sh -I /opt/bin/python/
ln -s /opt/python/bin/easy_install /bin/easy_install
ln -s /opt/python/bin/pip /bin/pip
ln -s /opt/python/bin/python /bin/python
ln -s /opt/python/bin/virtualenv /bin/virtualenv
ln -s /opt/python/bin/python /usr/bin/python

・実行

これで問題なし。


■Ansible Playbookの作成とDocker Connection Pluginを使ってプロビジョニング

テストとしてテストコンテナが自動で立ち上がり、かつApacheもインストールして起動するかやってみました。

・実行

・ちゃんとコンテナが立ち上がっているか確認

・ブラウザで確認

http://192.168.99.100:8080/

apacheが立ち上がっていればOK


■まとめ

Dockerを使ってansibleのテストが可能になったので満足!Docker本番運用の場合でもDockerfile使わなくてもAnsibleで問題なさそうですね。でも、docker attachができない・・・openssh-serverいれてdockerホストからsshすれば問題ないけど!docker execコマンドでも入れたわ!

参考:http://tdoc.info/blog/2015/12/03/docker_connection_plugin.html
http://dev.classmethod.jp/server-side/os/ansible-docker-connection-plugin/

カテゴリー: AnsibleBlogDocker

adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください