Training Course for Ansible Automation Platform
This project is maintained by ericzji
Read this in other languages: English,
日本語.
今までに学んだことを踏まえて以下の課題を実施してみましょう。
今までの演習の延長です。以下の演習にチャレンジしてみましょう。
すべてのWebサーバー(node1
、node2
および node3
)は1つのグループに入れる必要があります
Webサーバーは開発目的または本番稼働で使用するため、 “stage dev” または “stage prod” としてそれに応じてフラグを立てる必要があります
node1
node3
は開発用として利用されており、 node2
は本番環境として稼働していますもちろん、世界的に有名な?アプリケーション “index.html” は開発と本番で内容が異なります
ページに環境を説明するタイトルが必要です
コンテンツ用の場所を作りましょう
Web コンテンツの開発者 wweb
開発及び本番ホストのコンテンツ変更のため、Survey 入力を行うための権限が必要です
すべてのコードは Github にあるものを使います。https://github.com/ansible/workshop-examples で Ansible Workshop Examples の gitリポジトリを確認してください。そこに role_webcontent Role
を呼び出すプレイブック webcontent.yml
があります。
以前の Apache インストールロールと比較すると、大きな違いがあります。index.html
テンプレートには2つのバージョンがあり、そのソースファイルの一部には変数入力が存在し、タスクによりこのテンプレートがデプロイされます。
dev_index.html.j2
<body>
<h1>This is a development webserver, have fun!</h1>
</body>
prod_index.html.j2
<body>
<h1>This is a production webserver, take care!</h1>
</body>
main.yml
[...]
- name: Deploy index.html from template
template:
src: "_index.html.j2"
dest: /var/www/html/index.html
notify: apache-restart
これを達成する方法は1つだけではありませんが、次のことを行う必要があります。
すべてのホストがインベントリグループ Webserver
に含まれていることを確認します
Webserver
インベントリーで、変数 stage
を dev
で定義
Webserver
インベントリー の変数欄で、2行目に stage: dev
を入力します同じ要領で、今度は、node2
に対して変数 stage: prod
を指定しますが、今回は node2
をクリックしてホストインベントリー変数として上書きします。
ヒント
YAML スタートを意味する1行目のハイフンは消さないでください!
新しい ジョブテンプレート を Create Web Content
という名前で作成します
ターゲットは Webserver
インベントリーです
Playbook は、Ansible Workshop Examples の rhel/apache/webcontent.yml
を使います
2 つの変数の値を、 dev_content: default dev content
と prod_content: default prod content
として、追加変数欄に入力します。
認証情報は Workshop Credentials
を使い、権限昇格の上実行します
テンプレートを保存します
今回は、Ansibleのアドホックコマンドを使って結果を確認します。利用するモジュールは command モジュールで、各ノードの curl 実行結果を確認してみます。
$ ansible web -m command -a "curl -s http://localhost:80"
[WARNING]: Consider using the get_url or uri module rather than running 'curl'. If you need to use command because get_url or uri is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
node2 | CHANGED | rc=0 >>
<body>
<h1>This is a production webserver, take care!</h1>
prod wweb
</body>
node1 | CHANGED | rc=0 >>
<body>
<h1>This is a development webserver, have fun!</h1>
dev wweb
</body>
node3 | CHANGED | rc=0 >>
<body>
<h1>This is a development webserver, have fun!</h1>
dev wweb
</body>
Ansible では、 curl
コマンドを command
モジュールで実行するよりも優れたモジュールが提供されているため、警告が出ますが、今回は無視して大丈夫です。
変数 dev_content
と prod_content
の内容を変更できるように、Surveyを追加します
Web Content
チーム内の wweb
ユーザーが、 Create Web Content を実行できるように権限を追加します
wweb
ユーザーで Survey 入力を行います
結果を確認しまし。先ほど command
モジュールで curl
を実行し、警告が表示されたので、今回は専用 uri
モジュールを使用します。引数として、実際の URL と結果の本文を出力するフラグが必要です。
$ ansible web -m uri -a "url=http://localhost return_content=yes"
node2 | SUCCESS => {
"accept_ranges": "bytes",
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"connection": "close",
"content": "<body>\n<h1>This is a production webserver, take care!</h1>\nprod wweb\n</body>\n",
"content_length": "77",
"content_type": "text/html; charset=UTF-8",
"cookies": {},
"cookies_string": "",
"date": "Wed, 10 Jul 2019 22:15:45 GMT",
"elapsed": 0,
"etag": "\"4d-58d5aef2a5666\"",
"last_modified": "Wed, 10 Jul 2019 22:09:42 GMT",
"msg": "OK (77 bytes)",
"redirected": false,
"server": "Apache/2.4.6 (Red Hat Enterprise Linux)",
"status": 200,
"url": "http://localhost"
}
[...]
解決方法はここでは記載しません
ラボで必要な構成手順はすべて完了しています。不明な場合は、それぞれの章を参照してください。
おめでとうございます、ラボを終了しました! 我々はこのラボを楽しく開発しました。皆様の Ansible Tower との初めて出会いが、それ以上に楽しいものであったことを願っています!!!