2017-02-11
since we are not going to reuse the deployment and config part of the playbook
we are going to put the whanApp specific tasks into the whanApp.yaml
directly
▸ inventory/
▸ roles/
▾ files/
whanApp.service
whanApp.yaml
the ci server conveniently serves up the whanApp.tgz
via http
the whanApp.yaml
playbook looks like this
---
- hosts: nodejsHosts
become: true
roles:
- nodejs
- hosts: WhanApp
become: true
tasks:
- name: stop whanApp
service: name=whanApp state=stopped
ignore_errors: true
- name: clean up any previous deploys
file: dest=/opt/whanApp state=absent
- name: create the app folder
file: dest=/opt/whanApp state=directory
- name: fetch it from the ci server
get_url: url=https://ci-server/whanApp/whanApp-1.0.0.tgz dest=/opt/whanApp-1.0.0.tgz
- name: extract the tar
shell: tar -xzf /opt/whanApp-1.0.0.tgz -C /opt/whanApp
- name: create the systemd service file to control the app state
copy: src=whanApp.service dest=/etc/systemd/system/whanApp.service
register: systemdupdated
- name: daemon reload
shell: systemctl daemon-reload
when: (systemdupdated | changed)
- name: restart whanApp
service: name=whanApp enabled=yes state=restarted
referring to devdocs.io for the details, from the top…
service
is a module that controls systemd, so stop any previously started instanceignore_errors: true
is a way to skip stuff that fails (default behaviour is to stop the playbook)file
is a nice general abstraction for mkdir
, rm -rf
, chmod
, chown
, touch
etc
get_url
is a wget / curl modulecopy
is a copy a file from the files/
folder to the host moduleregister
and when
is a way to tie up the results of the .service
file and the systemctl daemon-reload
tasks
so that you don’t need to reload the daemon if the .service
file didn’t changeservice
again to restart the app and enable it to start when the vm bootsthe whanApp.service
file is a general systemd file
[Service]
ExecStart=/usr/bin/node /opt/whanApp/index.js
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=whanApp
[Install]
WantedBy=multi-user.target
the execution of the playbook stays the same.