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