#はじめに
前回の投稿をRoleを使って書き直し、可能な限り汎用化しました。
playbookファイルは githubに置いています。
※事前準備等は前回のページを参照してください。
インスタンスを起動してWPを導入するサンプル
できるだけ色々なケースに使いまわせるように、role化しています。
ハードコードをできるだけ避け、メインのplaybookもしくは、varsで変数を与えて実行したいという考えで作成しました。
$ git clone https://github.com/dokuyama/ansible_fujitsu_K5.git
またはzip等でダウンロードして、ansibleを実行するマシンで展開してください。
clouds.yml.sample、single-web-WP_vars.yml.sample は環境に合わせてリネーム後編集してください。
編集後、
$ ansible-playbook single-web-WP.yml
で実行します。うまく成功すれば、Wordpressのデフォルトのページが表示できるようになります。
実行している内容
role単位で簡単に説明します。
-
ansible-ssh-key
SSHの鍵を作成します。既に ./id_rsa_ansible, ./id_rsa_ansible.pub が存在すればそのファイルをimportします。
(一度作ったら上書きはしません) -
openstack-create-basic-network
ネットワーク、サブネット、ルータの作成後、SSHのキーペアを登録します。 -
openstack-security-group/get_my_global_ip
ansibleを実行しているマシンのアクセス元になるglobal IPアドレスを取得します。 -
{ role: openstack-security-group/create, security_group_name: ["web", "mng"] }
web,mng という名前でセキュリティグループを作成します。 -
openstack-security-group/add-rule
セキュリティグループにルールを追加します。
追加するルールは single-web-WP_vars.yml に以下のように記載しています。
※ipify_public_ip は前のタスクで取得したglobal IPが入ります。
##
## openstack-security-group/add-rule vars
##
security_group_rules:
- { name: "http", security_group: "web", protocol: "tcp", port_range_min: "80", port_range_max: "80", remote_ip_prefix: "0.0.0.0/0" }
- { name: "https", security_group: "web", protocol: "tcp", port_range_min: "443", port_range_max: "443", remote_ip_prefix: "0.0.0.0/0" }
- { name: "ssh", security_group: "mng", protocol: "tcp", port_range_min: "22", port_range_max: "22", remote_ip_prefix: "{{ ipify_public_ip }}/32" }
-
{ role: openstack-create-instance, server_lists: ["single-web-WP"], security_group: ["default", "web", "mng"], auto_ip: yes, volume_size: "35", volume_image: "CentOS 7.3 64bit (English) 01", server_flavor: "P3-1", group: "webservers" }
引数に沿ってインスタンスを作成します。
このroleを並べる事で複数台作成する事もできます。 -
check-ssh-port
SSHがつながるようになるのを待ちます。
※waitの秒数が長いのは、SSHのportが開いてからauthorized_keysに登録されるまで、少々遅延があるためです。 -
{ role: yum/update-all, reboot: yes }
インストール済みのrpmを全てyum update でアップデートします。
updateする対象のrpmが存在し、reboot がyesの場合、実行後OSの再起動を行います。 -
{ role: yum/install, install_packages_lists: ["httpd", "php", "php-mysql", "mariadb-server", "MySQL-python"] }
引数に従ってyumでパッケージをインストールします。 -
{ role: php/change-timezone, timezone: "'Asia/Tokyo'" }
phpのタイムゾーンを設定します。 -
{ role: service/enable, service_name: ["httpd", "mariadb"] }
サービスの自動起動を有効にします。 -
{ role: service/restart, service_name: ["httpd", "mariadb"] }
サービスの再起動を実行します。 -
wordpress/create-database
Wordpress用のデータベースを作成します。 -
wordpress/install
Wordpressのインストールを行います。
インストール済みの場合、ファイルの存在をチェックし、スキップされます。
wp-cliを使っています。 -
wordpress/update
wp-cliを使ってWordpressのアップデートを行います。 -
name: print message
最後に、導入したWordpressが表示できるURLを表示します。
今後の予定
Ansibleのアップデートが必要のようですが、loadbalancerの追加、Snapshotの取得等、もっとOpenStackの操作ができるようにしたいと思います。
前回発見したAnsibleの問題が修正されているか確認して、未解決の場合はAnsibleを複数切り替えるという記事も見かけたので、そういった方向も試してみたいと思います。