AnsibleでゲストOSをセットアップする

Pocket

前々回でAnsibleをインストールし、前回でVagrantで作ったゲストOSにSSHで接続できることがわかりました。Ansibleを使う環境は整ったので、Ansible単独でゲストOSをセットアップします。

手順はまず、Vagrantでサーバーを用意します。次に、Ansibleの設定をansible.cfgにして、扱うサーバーの設定を書いたhostsという名前のインベントリファイルを用意して動作確認をします。それが出来たら、Playbookを作成して実行してみます。

なお、Windows上のAnsibleの設定ではこちらのCygwinの情報を参考にしました。

Vagrantfileファイル

用意したサーバーは、次のようなVagrantfileで作りました。

Vagrantfile

VAGRANTFILE_API_VERSION = "2"

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

  config.vm.define 'ubuntu01' do |host|
    host.vm.hostname = 'ubuntu01'
    host.vm.network "private_network", ip: "192.168.33.10"
  end

  config.vm.provision 'shell', inline: <<-SCRIPT
    # aptのソースファイルを書き換え
    sed -i s%archive.ubuntu.com/ubuntu%ftp.jaist.ac.jp/pub/Linux/ubuntu/%g /etc/apt/sources.list
    apt-get update
    apt-get -y install python aptitude
  SCRIPT

end

ゲストOSには、ubuntu/xenial64を選びました。ubuntu01という名前にして、IPアドレスは、192.168.33.10にしました。

ubuntu/xenial64にはPythonがインストールされていません。Ansibleは、PythonのコードをゲストOSに送り込んで実行します。そのため、あらかじめPythonをインストールしていおきます。ダウウンロードの時間を短縮するために、aptのソースファイルを編集してあります。

ansible.cfgファイル

次に、Ansibleの設定をするansible.cfgを作ります。vagrant ssh-configの結果をもとに次のようなファイルを作りました。

ansible.cfg

[defaults]
inventory = hosts
remote_user = ubuntu
host_key_checking = False
private_key_file = C:/msys32/home/kazu/ansible/intro/.vagrant/machines/ubuntu01/virtualbox/private_key

[ssh_connection]
# for Cygwin, MSYS2
control_path = /tmp

インベントリファイル名は、hostsにします。remote_userとprivate_key_fileは、vagrant ssh-configで表示されるユーザー名UserとプライベートキーIdentityFileの場所を設定します。

host_key_checking = Falseは、ゲストOSを作ったり壊したりしたときに公開鍵が変わってしまうのですが、それをチェックしないという意味です。

MSYS2やCygwinでansibleを動かすときのポイントは、control_path = /tmpをansible.cfgに設定することです。これがないとエラーになります。
こんなエラーが出ます。

ubuntu01 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: mm_send_fd: sendmsg(2): Connection reset by peer\r\nmux_client_request_session: send fds failed\r\n",
    "unreachable": true
}

hostsファイル

次に、hostsという名前のインベントリファイルを作ります。

hosts

[webservers]
ubuntu01 ansible_host=192.168.33.10

webserversというグループに、ubuntu01という名前のサーバーを作り、そのIPアドレスは192.168.33.10です。これは、Vagrantと合わせます。

Ansibleで使うhostsファイルのホスト名(この場合はubuntu01)は、Vagrantで使うVagrantfileのhost.vm.nameで指定する名前とは無関係です。もっとも、同じにしておいた方が間違わなくて済むのでいいです。

動作確認

ファイルが出来たら、ansibleに続けて、すべてのマシン(all)にpingを打ってサーバーからの返事を見ます。-m pingというのはpingモジュールを使ってpingを打つという意味です。

ansible all -m ping

こういう返事が返ってくれば成功です。

ubuntu01 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Playbookの実行

あとは、Playbookを作って実行するだけです。

Playbookは、インデントが重要なのでタブが入っているとエラーになります。気をつけましょう。

ここでは、site.ymlという名前のPlaybookを作りました。

hostsに実行するサーバー名を指定して、userにログインするユーザー名を入れます。tasksとして、Apache2をインストールします。nameには、このタスクのコメントをいれ、aptというモジュールを使ってapache2をインストールされた状態にします。このとき、スーパーユーザーで行います。

site.yml

---
- hosts: ubuntu01
  user: ubuntu
  tasks:
    - name: install Apache2
      apt: name=apache2 state=installed
      become: true

ansible-playbookの次にsite.ymlを指定して実行してみます。

ansible-playbook site.yml

これで、Apache2がインストールできたら成功です。

実際に、http://192.168.33.10/ にブラウザでアクセスするとApacheの画面が見れると思います。

Ansibleの使い方は、Ansible構成管理入門を参考にさせてもらいました。ありがとうございます。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

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