• 検索結果がありません。

Inventory ファイルの作成 2. Playbook ファイルの作成

OS X or Linux PC からその上で稼働する VM へアクセスする方法

1. Inventory ファイルの作成 2. Playbook ファイルの作成

3. Ansible を実行

4.冪等性の確認 5.ブラウザで確認

6.(参考)プレイブックの解説

ハンズオンステップ

今回は対象のホスト( blog )が1つですので下記のようなファ イルを作成しておきます。

*事前準備でも hosts ファイルを用意してもらいましたがそれを 使ってもかまいませんし、 ansible_hosts にリネームしても構いま せん。今後のハンズオン上では ansible_hosts ファイルとして進 めています。

Inventory ファイルの作成

vagrant@host:~$ cat ansible_hosts 192.168.2.20

まず、ハンズオンファイルをダウンロードします。

ここでは、 playbook.yml というファイルを作ることにします

*なお、 ca_ans_hands001/sample/ 以下には今回のハンズオ ンのサンプルが置いてありますがはじめは見ないで進めてください。

Playbook ファイルの作成

vagrant@host:~$ git clone https://github.com/tksarah/ca_ans_hands001.git vagrant@host:~$ cd ca_ans_hands001

Playbook ファイルの作成

- hosts: all

vars:

dbname: wordpress dbuser: wordpress dbpassword: password

remote_user: vagrant become_user: root become: true

tasks:

- name: Install Packages

yum: name={{ item }} state=latest with_items:

- php

- php-mysql

- mariadb-server - MySQL-python

このプレイブックの解説は本 書の後半に参考添付していま す。

また、サンプルファイルを

ca_ans_hands001/sample/ に置

いてあります。

Playbook ファイルの作成

### 続き

- name: Start and Enable mariadb

service: name=mariadb state=started enabled=yes - name: Create Database for wordpress

mysql_db: name={{ dbname }} state=present - name: Create user for wordpress

mysql_user: name={{ dbuser }} password={{ dbpassword }} priv="wordpress.*:ALL" host=localhost state=present

- name: Get WordPress

get_url: url=http://ja.wordpress.org/latest-ja.tar.gz dest=/tmp/latest-ja.tar.gz owner=root - name: Unarchive a file

unarchive: src=/tmp/latest-ja.tar.gz dest=/var/www/html copy=no creates=/var/www/html/wordpress - name: Copy wp-config.php

template: src=./wp-config.php.j2 dest=/var/www/html/wordpress/wp-config.php mode=0666 - name: Change Owner and Group

file: path=/var/www/html state=directory recurse=yes owner=apache group=apache - name: Start and Enable httpd

service: name=httpd state=started enabled=yes

作り終わったら YAML の構文チェックをしましょう。下記のように なれば正しく書かれています。

*エラーが出たらメッセージ通りの部分を見直してください。ス ペースのズレやモジュールやオプション部分の Typo など。

Playbook ファイルの作成

vagrant@host:~$ ansible-playbook -i ansible_hosts playbook.yml --syntax-check playbook: playbook.yml

ansible-playbook

コマンドに引数をつけて実行します。

完了するまで少々時間(3~4分)がかかります。

ok=10

・・・

10

の処理が正常に行われたことがわかります。正常に実行または既に適用されてい る場合はカウントされます。

changed=9

・・・ 対象ホストが処理により変更された事を示すアウトプットです。初回実行では 当たり前ですがすべて実行され適用されているので結果は

changed=9

となっていることがわかり ます。(ホスト情報の取得を示す

GATHERING FACTS

は変更が加わっているわけではないので この数に含まれていません。)

Ansible を実行

vagrant@host:~/ca_ans_hands001$ mv ~/ansible_hosts .

vagrant@host:~/ca_ans_hands001$ ansible-playbook -i ansible_hosts playbook.yml

PLAY [all] ***********************************************************************

(省略)

PLAY RECAP ***********************************************************************

192.168.2.20 : ok=10 changed=9 unreachable=0 failed=0

ここで、もう一度実行してみます。

注目すべきは

changed=0

です。初回にすべてのタスクが正常に行われてるため、各処理は 実際に適用されずに正常終了とみなされ結果が返されています。

たとえば、ここで一時的に

/var/www/html

のオーナーを別のオーナーに手動で変えて再度

ansible-playbook

を実施してみてください。そうすると、

Change Owner and Group

の処 理のみが実行されて完了することがわかると思います。これでわかるように、対象ホストは同じ

Playbook

で実行すればその

Playbook

に書かれているあるべき状態が保たれるようにコン

フィグレーションが完了します。

冪等性の確認

vagrant@host:~/techcircle6/lesson1$ ansible-playbook -i ansible_hosts playbook.yml PLAY [all] ***********************************************************************

(省略)

PLAY RECAP ***********************************************************************

192.168.2.20 : ok=9 changed=0 unreachable=0 failed=0

PC

上でブラウザを立ち上げ以下にアクセスします。

http://192.168.2.20/wordpress/

一般的には

WordPress

のファイル類を

Web

サーバ上に配置した後、上記

URL

にアクセスしてデータベース等の設 定をブラウザ上で行ったあと、サイトの初期設定をすることになりますが、今回はデータベースの設定も

wp-config.php

を置き換える事で済ませてしまっているのでサイトの設定画面が現れます。

必要事項を入力して、以降

WordPress

の操作を確認してください

ブラウザで確認

はじめの「

---

YAML

形式で複数ツリーを格納する際のデリミタです。「

YAML

で書か れてるよ」という宣言のように捉えてもらえばとりあえずはいいです。

- hosts: all

により対象のホストを指定しています。この場合は

all

と指定されてい るので、先ほど作った

ansible_hosts

ファイルに書かれているすべてのホストが対象 に対して以降の処理を実施することになります。

vars:

セクションではいわゆる変数を定義しています。例えば、

dbname:

wordpress

は「

dbname

wordpress

を定義」しており、

tasks:

以降の部分で

{{ dbname }}

とすることでその値を呼び出して使うことができます。

(参考) Playbook ファイルの解説

remote_user: vagrant become_user: root

become: true

ここの意味は「

vagrant

ユーザでターゲットホストにアクセスし(

tasks:

以降の処 理を)

sudo

し、

root

として実行する。」という部分です。

(参考) Playbook ファイルの解説

tasks:

以降、いよいよここから具体的な処理の実行内容の記述に入っていきます。

まず

- name:

という部分でその処理の概略を書きます。その処理が何をするもの

かが一目でわかり、後に実行中やデバッグするようなときにも便利なのでわかりやす いものにしておきます。

通常プログラムコードを書くときは

#

を処理内容使ってコメントを書いたりしますが、

そもそも

- name:

で記述しておけばそれをあえて書く必要もなくなるので見た目が

スッキリします。

yum:

yum

モジュールを使っています。

yum

を使って

php,php-mysql

やらの パッケージをインストールする部分です。パッケージが1つであれば、

name=

のとこ ろで直接パッケージ名をかけばよいですが、今回は複数なので

name={{ item }}

と おき

with_items

でパッケージ名をリストして

yum

を実行するような記述形式に なっています。よく使われる形です。

(参考) Playbook ファイルの解説

service:

service

モジュールを使っています。これもモジュール名の通り&見たま まの処理内容で、「

MariaDB

を起動し、システム起動時も起動するようにする」とい う処理内容です。

service:

service

モジュールを使っています。これもモジュール 名の通り&見たままの処理内容で、「

MariaDB

を起動し、システム起動時も起動 するようにする」という処理内容です。

mysql_db:

mysql_user:

MySQL

関連のモジュールで

MariaDB

にも適用 可能です。ここでは、

wordpress

という名のデータベースを作り、そのデータベースへ のアクセス権限のあるユーザ

wordpress

を定義しています。

{{ dbname }}

{{ dbuser }}

は前記した

vars:

で定義されているので、いずれも

wordpress

に変 換されて処理されます。

(参考) Playbook ファイルの解説

get_url:

get_url

モジュールを使っています。これは

Web

上からなんらかファイルをダウン ロードするときにつかいます。使い方は簡単で、 上記のように

url=<url path>

とするだけ です。

dest=

で指定したところに保存され、ここではそのファイルのオーナーを

root

にし

unarchive:

というモジュールを使って、ダウロードしたファイルを展開しています。

template:

template

モジュールを使っています。ここでの

template

モジュールの使い 方は文章で書くと「あるアプリケーション用の設定ファイルを用意しておき、対象ホストのし かるべき場所に配置する。ただしその際に用意されていた設定ファイルの中に規定のフォー マットで変数定義されている部分がある場合、そこに値を代入してから配置する。」です。

今回は

lesson1

ディレクトリ以下に

WordPress

の初期設定ファイル

wp-config.php

テンプレートファイル

wp-config.php.j2

を用意しています。この

wp-config.php

wp-config.php.j2

の相違点は、通常は値を定義しておくところを

{{ hoge }}

のように置いてい る点です。これは

Jinja2

と呼ばれているテンプレートの形式であり、ここに入る値は

Ansible

template

モジュール実行時に

playbook.yml

の中で

vars:

に定義された値 に置き換わります。

(参考) Playbook ファイルの解説

関連したドキュメント