molecule でansible の role と playbook をテストする

    ansible 専用の testing ツール molecule を紹介します。 molecule の公式ドキュメント以外の情報は少ないので、参考になれば幸いです。 以前 Docker を使って ansible のテストをする方法を紹介しました。 https://suzuki-shunsuke.github.io/test-ansible-on-docker/ この際は Docker Compose と簡単なシェルスクリプトを使って実現しました。 これはこれでブラックボックスな部分がなく、学習コストも低くて悪くないので興味のある方はそちらもご参照ください。 molecule は ansible 専用の testing ツールです。 基本的に playbook というより role 用のツールですが、playbookのテストも工夫すれば出来ます。 情報が少ない 公式ドキュメントも分かりづらい部分がある コマンドがエラー吐いて失敗した際に、ググっても情報が出てこないので辛い という風に辛い部分もありますが、 star数はそれなりにある ansible の公式のプロジェクトである https://github.com/ansible/molecule/ geerlingguy さんも使ってる という風に良い面もあります。 それでは使っていきましょう。 インストール https://molecule.readthedocs.io/en/latest/installation.html $ pip install molecule Docker を使う場合 docker-py も必要です。 $ pip install docker-py role のテスト playbookに比べて role のテストは簡単です。 role のディレクトリ(tasksやfilesなどがあるディレクトリ)に移動してコマンドを実行します。

    akoi - binary installer

    自作のOSS akoi の紹介をします。 なぜこんなものを作ったのか akoi と ansible を使ってサーバにバイナリをインストールする方法 について主に説明します。 まとめ akoi はバイナリファイルのインストーラ 設定ファイルで管理できる 冪等であり、効率よくインストールできる 並列インストール Accept-Ranges による分散ダウンロード ansibleでサーバにバイナリをインストールするのを補助してくれる ansible で真面目にバージョンコントロールして効率よくインストールするのは難しい(ほとんどの ansible role は出来ていない) akoi とは akoi はバイナリファイルのインストーラです。 設定ファイルにインストールするファイルのダウンロードURLとインストール先を記述して管理します。 インストールするバイナリのバージョン管理が可能であり、既にインストールしてあるバージョンへの切り替えはシンボリックを作り直すだけなので一瞬で終わります。無駄にダウンロードをしたりはしません。 複数のバイナリを並列でインストールしたり、Accept-Ranges ヘッダによる分散ダウンロードをサポートしています。 分散ダウンロードについては https://qiita.com/codehex/items/d0a500ac387d39a34401 が参考になります。 Goで書かれています。 https://github.com/suzuki-shunsuke/akoi/releases からバイナリをダウンロードしてインストールできます。 詳細はREADMEを読んでください。 なぜ作ったのか サーバにバイナリをインストールする ansible role を書くのが辛かったからです。 最近は色々なソフトウェアがGoで書かれ、バイナリで配布されています。 そういったバイナリをサーバへインストールするのは ansible で行っているという方も少なくないのではないでしょうか? 有名なソフトウェアをインストールする ansible role は大抵Ansible Galaxy で公開されています。 しかし、ほとんどの role は「真面目に」バージョン管理していません。 ここでいう「真面目に」とは バージョンを指定できる バージョンを変更できる 指定したバージョンが既にインストールされている場合は無駄にダウンロードしたりしない といったことです。

    Dockerを使ってansible playbookをテストする

    ansible playbookを(VMの代わりに)Dockerコンテナに対して実行すると、効率よく動作確認できるというお話です。 ansible playbookの動作確認のためにvagrantでVMを起動したりしていると動作確認に時間がかかるし、容量も喰います。 Dockerコンテナを使って動作確認できればこれらの問題を解決できます。 ただし、Dockerコンテナの場合、一部のansible のtaskが失敗することがあるので ansible playbookによってはDockerコンテナではテストにならない場合もあるかと思います。 サンプル https://github.com/suzuki-shunsuke/example/tree/master/ansible/test-on-docker 簡単なサンプルを用意しました。 ansible playbookに加え、 docker-compose.yml test_docker.sh: 簡単なシェルスクリプト を作成してあります。 $ bash test_docker.sh とすることで動作確認できます。 説明 スクリプトでやっていることは Docker Compose でコンテナを起動 コンテナのIDを取得し、inventory ファイルを作成 Docker Connection Pluginを使ってコンテナにplaybookを実行 です。 Docker Connection Plugin を使うとDockerコンテナに対してansible playbookを実行できます。 https://docs.ansible.com/ansible/2.6/plugins/connection.html https://docs.ansible.com/ansible/2.6/plugins/connection/docker.html また、Docker Hubで公開されている多くのDockerイメージのUSERは root ですが、 ansible playbookの動作確認としては都合が悪かったりします。 そこで自分は非rootユーザーを作成したDocker Imageを使っています。 https://hub.docker.com/r/suzukishunsuke/ansible-test-centos/ 関係ありそうなツール 今回は簡単なスクリプトとdocker-compose.ymlを用意しましたが、 もっとイケてるやり方がありそうなものです。 Vagrant Docker Provider https://www.vagrantup.com/docs/docker/ なんかあまり使えなさそうです。 Linux以外だと結局VMが必要で、既に非推奨な boot2docker をデフォルトでは使うらしくだめそうだなって思いました。 あまり調べてません。 https://www.vagrantup.com/docs/docker/basics.html#host-vm