ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

ansibleを体験してみる(1)

以前ansibleに指先だけ触れたけど,その記憶すらすべて消えたので,もう一回自分なりに使ってみる.

目標

2つのVMを作成し,ansibleコマンドを使って,それらのIPアドレスを確認してみる.(ソフトのインストールは待ち時間が生じてめんどくさいけど,pingだけだとつまらないので)

環境

  • Ansible: 2.4.2.0
  • Ubuntu Server 16.04 LTS

2つのVM作成

まずはじめにansibleのターゲットとなる二つのVMを作成する.ここでは,vm1, vm2というホスト名を付けることにする.作成はめんどくさいので,vagrant経由でやる.以下,Vagrantfile.

Vagrant.configure(2) do |config|
  
  config.vm.box = "ubuntu/xenial64"

  config.vm.define :vm1 do |vm1|
    vm1.vm.network :private_network, ip: "192.168.33.101"
  end

  config.vm.define :vm2 do |vm1|
    vm1.vm.network :private_network, ip: "192.168.33.102"
  end
  
end

vagrant upが終わったら, vagrant ssh-configを, ~/.ssh/configに追記しておく.(環境汚れが嫌なのでこの記事終わったらすぐに消した)

インベントリファイルを作成する

ansibleでは,構成対象となるホストや、各種変数を設定するインベントリを必要とする. inventoryというファイル名で今回は作成する. どうやらこのファイルに記述する内容は,~/.ssh/configも考慮してくれるみたいなので,前述した方法で~/.ssh/configを書き換えている場合,以下のように設定することができる. また,このファイルはINI形式なので,グルーピングができるため,わかりやすいようにtargetとして2つのVMをくくっておいた.さらに少しハマった点として,Ubuntu Server 16.04 LTS(あるいはこの使ったvagrant boxかな?)には,python2系が入っていなかった.そこでpythonインタプリタ用の変数の設定をしておく必要がある.最後の2行がその設定となっており,これで標準で入っているpython3を使ってくれるようだ.ここでは,targetというグループにしているので,target:varsのグループにしている.

[target]
vm1
vm2
[target:vars]
ansible_python_interpreter=/usr/bin/python3

いざ,実験

ここまで来たら,後は以下のコマンドを打つだけだ. ansibleコマンドでは,-mで様々なモジュールを利用することができる.今回はコマンドを実行したかったので,commandモジュールを利用した(しかしながら,デフォルトのモジュールはcommandになっているらしいので,ここのオプションはいらない).また,引数は-aオプションで渡す.

ansible target -i inventory -m command -a 'hostname -I'

上記をすると以下の画面になると思います.

vm1 | SUCCESS | rc=0 >>
10.0.2.15 192.168.33.101

vm2 | SUCCESS | rc=0 >>
10.0.2.15 192.168.33.102 

それぞれ,Vagrantfileで設定したIPアドレスが含まれていることがわかる.成功っぽい.

感想

たしかにリモートサーバに対してsshさえ通っていれば構成管理ができるのはとても魅力的で,なおかつINI形式のファイルだけでサクッと一括にコマンド実行とかができるのは良いなと思った. 今回は,一行のコマンド実行のためだけにAnsibleという良いソフトウェアをつい利用してしまったが,次は,もっと一般的な構成管理を想定して,Playbookと呼ばれるyamlのファイルを使って遊んでみる.