この記事について
この記事はAnsibleについてほとんど何も知らない私が公式ドキュメントを読みながらAnsibleをインストールして動かしていく記事です。
使用PCのOSはmacOS Sierra 10.12.6
です。
Ansibleとは何か
いわゆる構成管理ツールというやつで、設定ファイルを書いておくことによって自動的にマシンにソフトウェアをインストールしてくれたり設定してくれたりします。サーバーのセットアップを自動化するソフトと考えれば大体あってるのではないかと思います。
他にも色々特徴はあるのでしょうが、それはおいおい勉強します。。
公式ドキュメントにしたがってAnsibleを使ってみる
さっそくドキュメントどおりにAnsibleを使ってみます。
インストール
環境がmacなのでLatest Releases on Mac OSXを参考にインストールします。pipでインストールしろと書いてありますので、pythonが必要です。pythonがない人はpythonをインストールしてください。pythonのインストールについては他の記事に譲ります。ぐぐったらコチラの記事がトップに出てきました。
(以下はほとんど公式ドキュメント通りのコマンドですので、気になる方は公式の方を見てください)
まずpipをインストールします。
$ sudo easy_install pip
そしてAnsibleをインストール。
$ sudo pip install ansible
バージョン指定したい場合は以下のようにするらしいです。(※参考)
$ sudo pip install ansible==1.9.1
開発中の最新バージョンが使いたいときはこれ。
$ pip install git+https://github.com/ansible/ansible.git@devel
OS X Mavericksの人は以下のようにする必要があるらしい。
$ sudo CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install ansible
Ansibleを起動
Ansibleを動かす前に、Ansibleがどうやってリモートマシンとやりとりしているのか理解するのが重要だと書いてありますので、一応メモ。(※公式ドキュメント)
AnsibleはSSHのControlPersistという機能を使っているらしいです。(ControlPersistについてはこちらの記事がわかりやすかったです)
しかし制御側のマシンのOpenSSHが古いとControlPersistに対応していないことがあるため、その場合Ansibleは'paramiko'というPythonによるOpenSSH実装を使うらしいです。
ほかにもリモート接続について書いてあるので気になる人は該当箇所を読んで下さい。
Ansibleからリモートマシンのコマンド実行
では実際にAnsibleを動かしてみます。
まずはローカルマシンのSSH公開鍵がリモートマシンのauthorized_keys
に書いてある必要があります。
この辺はVagrantとかを使ってAnsibleで操作する対象となる環境を作るのが便利かと思います。今回はVagrantbox.esからCentOS 7.2 x64 (Minimal, Puppet 4.2.3, Guest Additions 4.3.30
を選びました。他にもDiscover Vagrant Boxesなどもありますので探してみると良いと思います。
以下はVagrant環境を前提としますが、Vagrantを使ったことが無いという方はこの記事とか、公式ドキュメントとかをご覧になると良いと思います。
適当な作業ディレクトリに移ってvagrant init
でVagrantfileを作ると
# config.vm.network "private_network", ip: "192.168.33.10"
という行があると思うので、これのコメントアウトを外します。
ここでいきなりansibleを実行しても失敗するので、
$ vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config
この一行を実行して$ ssh vagrant@192.168.33.10
でログインできるようにします。
次に、/etc/ansible/hosts
というファイルをディレクトリごと作り、下記の一行を書きます。
vagrant@192.168.33.10
このファイルはインベントリファイルと呼ばれるもので、構成管理対象のリストを意味するみたいです。
ファイルを編集したら、
$ ansible all -m ping
します。
結果が以下になれば成功です!
vagrant@192.168.33.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
実際のコマンドを実行。
$ ansible all -a "/bin/echo hello"
vagrant@192.168.33.10 | SUCCESS | rc=0 >>
hello
helloと出力されました。
同じことをローカルマシン向けに行うこともできるようです。
$ ansible localhost -a 'echo hello'
localhost | SUCCESS | rc=0 >>
hello
というわけで、ansibleを使ってリモートマシンにコマンドを実行させることができるということがわかりました。
その2に続く。