playbookを使ってみる
playbookを使ってnginxを導入してみます。まずはweb-nginx.ymlを作成。
1 2 3 4 5 6 7 8 |
$ vi web-nginx.yml - become: true hosts: target name: Configure webserver with nginx tasks: - name : install nginx yum : name=nginx update_cache=yes |
次に実行してみます。ディストリビューションによってはyumが無くてエラーになるので、debian系ならaptなど、playbookのコマンド変更しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ ansible-playbook web-nginx.yml PLAY [Configure webserver with nginx] ****************************************** TASK [setup] ******************************************************************* ok: [10.1.1.100] TASK [install nginx] *********************************************************** changed: [10.1.1.100] PLAY RECAP ********************************************************************* 10.1.1.100 : ok=2 changed=1 unreachable=0 failed=0 |
インストールできたようです。リモートのサーバでnginxがインストールされているかを確認します。
1 2 |
$ service nginx status nginx is stopped |
インストールされてますね。
nginxの設定から起動までを行う
先ほどのコードに設定ファイルの配置やnginxの再起動などを加えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
- become: true hosts: target name: Configure webserver with nginx vars: ansible_managed: test tasks: - name : install nginx yum : name=nginx update_cache=yes - name : copy nginx config file copy: src=files/nginx.conf dest=/etc/nginx/origin - name : enable configuration file : dest=/etc/nginx/origin src=/etc/nginx/nginx.conf state=file - name: nginx public directory file: path=/usr/share/nginx/html state=directory owner=root group=root mode=0755 - name: copy index.html template : src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644 - name: restart nginx service : name=nginx state=restarted |
また、files/nginx.confファイルを作成します。このファイルはnginxの設定ファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on root /usr/share/nginx/html; index index.html index.htm; server_name localhost; location / { try_files $uri $uri/ = 404; } } |
最後にtemplates/index.html.j2ファイルを作成します。このファイルはnginxサービスを通してサイトにアクセスした場合に表示するhtmlです。 {{ ansible_managed }}は変数でplaybookに記述されているansible_managedの変数に置換されます。
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <p>{{ ansible_managed }}</p> </body> </html> |
それでは実行してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ ansible-playbook web-nginx.yml PLAY [Configure webserver with nginx] ****************************************** TASK [setup] ******************************************************************* ok: [10.1.1.100] TASK [install nginx] *********************************************************** ok: [10.1.1.100] TASK [copy nginx config file] ************************************************** ok: [10.1.1.100] TASK [enable configuration] **************************************************** ok: [10.1.1.100] TASK [nginx public directory] ************************************************** changed: [10.1.1.100] TASK [copy index.html] ********************************************************* changed: [10.1.1.100] TASK [restart nginx] *********************************************************** changed: [10.1.1.100] PLAY RECAP ********************************************************************* 10.1.1.100 : ok=7 changed=3 unreachable=0 failed=0 |
正常に終了しました。ターゲットのサイトにwgetでアクセスしてみます。
1 2 3 4 5 6 7 8 9 10 11 |
$ wget -q -O - "$@" 10.1.1.100 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <p>test</p> </body> </html> |
nginxが起動していてレスポンスが返ってくること、設定ファイルとHTMLが適切に配置されてHTMLはテンプレートがきちんと置換されていることがわかりますね。