読者です 読者をやめる 読者になる 読者になる

ma*GAZ*ine

gaziroh の雑記帳

ちょっと真面目に Ansible

ちょっと真面目に Ansible を使ってみることにした。Python で書かれているってところがちょっと不安(自分は Python を使わないので)だけど、対象ホストにエージェントを入れないというのが良いかと思って。

エージェントがいらないということは、エージェント入りのイメージ等が不要、対象の作成と設定(パッケージのインストール等)を分けて考えなくて良いのが利点かなと思っている。

で、調べたことをまとめる。Ansible のいろいろなモノについてきちんと理解するところから。

要素をまとめる

用語集をつくるような感じでまとめてみる。

インベントリ ~ Inventory

対象ホストへの接続情報を定義してあるもの。グループ分けが可能。変数の使用が可能。

モジュール ~ Module

OS のパッケージのインストール、サービスの設定、ユーザ管理とか、ファイル操作なんていったことを実行できるもの。

プレイブック ~ Playbook

モジュールを使って「ユーザをつくる」とかの操作が書かれているスクリプトYAML で書く。

このくらい理解しておけば良いような気がする。

Ansible のセットアップ

まず Python が動く環境が必要。Mac 上では pyenv と pyenv-virtualenv の組み合わせで Python の 2 と 3 の環境をつくっている。ということで Ansible の 1 と 2 の環境をつくった。

Windows では VMware Workstation 上の仮想マシンUbuntu 16.04 に VirtualBoxVagrant、Ansible 2 を入れた環境をつくった。

VagrantVM を動かす

Vagrant で bento/centos-7.2 の box をつくり、それに対して作業してみる。

$ mkdir workdir
$ cd workdir
$ vagrant init bento/centos-7.2
$ vagrant up
$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/hoge/workdir/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

vagrant init したあとで Vagrantfile でネットワークの設定を書いておく。

  # config.vm.network "private_network", ip: "192.168.33.10"

の行のコメントを外しておく。

いよいよ Ansible

まず、Ansible の設定ファイル ansible.cfg仮想マシンをつくったり潰したりするから、ssh の known_hosts の無効化の設定をしておく。

[default]
host_key_checking = False

ということで、次はインベントリファイル ./hosts というファイルを作成。どうも、このファイル名を使っているものが多い。このファイルには接続などの情報が書かれる。

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/hoge/workdir/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

てな感じで、ssh の設定を出力して確認する。

vagrant-machine ansible_host=127.0.0.1 ansible_port=2222 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key

見るからに Vagrant仮想マシンで Ansible でどんな感じで接続するか記述してあるという感じ。長いけど 1 行で書くらしい。

次にプレイブック。site.yml というファイル。

---
- name: プレイブックの実験
  hosts: all
  tasks]

こんな感じのなにもしないものをつくる。name は出力時に表示される。hosts は対象ホスト。all でインベントリにある全てのホストに対してということ。tasks が実際に実行されるタスク。

で、実行する。

$ ansible-playbook -i hosts site.yml 

PLAY [プレイブックの実験] ********************************************************

TASK [setup] *******************************************************************
ok: [vagrant-machine]

PLAY RECAP *********************************************************************
vagrant-machine            : ok=1    changed=0    unreachable=0    failed=0   

なにもしない設定だけど、setup というタスクが走っている。これは対象ホストの情報を取得している。ansible all -i hosts -m setup とすると出て来る表示が集めた情報。 この情報をファクツ(Facts)と言う。

次は、実際にタスクをつくってみる。今日はここまで。