diff -r 000000000000 -r 5f4fcbc80b37 deploy/deploy.yml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/deploy/deploy.yml Fri Sep 14 17:57:34 2018 +0200 @@ -0,0 +1,442 @@ +--- +- hosts: all + tasks: + - name: Print some debug information + vars: + msg: | + Module Variables ("vars"): + -------------------------------- + {{ vars | to_nice_json }} + + Environment Variables ("environment"): + -------------------------------- + {{ environment | to_nice_json }} + + GROUP NAMES Variables ("group_names"): + -------------------------------- + {{ group_names | to_nice_json }} + + GROUPS Variables ("groups"): + -------------------------------- + {{ groups | to_nice_json }} + + HOST Variables ("hostvars"): + -------------------------------- + {{ hostvars | to_nice_json }} + + debug: + msg: "{{ msg.split('\n') }}" + tags: debug_info +# +# Localhost actions +# +- hosts: localhost + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + dashboard_build_dir: "{{playbook_dir}}/build/tmp/dashboard" + clientjs_dir: "{{playbook_dir}}/build/tmp/dashboard/clientjs" + tasks: + + - name: mkdir build folder + file: + path: "{{playbook_dir}}/build/tmp" + state: directory + + - name: clear dashboard checkout dir if exists + file: + path: "{{dashboard_build_dir}}" + state: absent + + - name: checkout dashboard + hg: + repo: "{{dashboard_repo}}" + version: "{{dashboard_version}}" + force: yes + dest: "{{dashboard_build_dir}}" + + - name: clear isso checkout dir if exists + file: + path: "{{isso_build_dir}}" + state: absent + + - name: set discussions repo url + set_fact: + discussion_repo_url: "{{lookup('file', dashboard_build_dir+'/server/isso/requirements.txt').split('\n')[1]}}" + + - name: check discussions repo url + fail: msg="discussions repo specification in wrong format." + when: discussion_repo_url is not match("^\#-e git\+.+@[\w\-]*\#egg\=isso$") + + - name: get discussion chechout url and version + set_fact: + discussion_repo: "{{discussion_repo_url | regex_replace('^\\#-e git\\+(.+)@[\\w\\-]*\\#egg\\=isso$', '\\1')}}" + discussion_version: "{{discussion_repo_url | regex_replace('^\\#-e git\\+.+@([\\w\\-]*)\\#egg\\=isso$', '\\1')}}" + + - name: checkout isso + git: + repo: "{{discussion_repo}}" + version: "{{discussion_version}}" + force: yes + dest: "{{isso_build_dir}}" + + - name: call npm install + command: npm install chdir="{{isso_build_dir}}" + + - name: call make init + make: + chdir: "{{isso_build_dir}}" + target: init + + - name: call make js + make: + chdir: "{{isso_build_dir}}" + target: js + + - name: make isso package + command: python setup.py sdist chdir="{{isso_build_dir}}" + +# +# all actions +# +- hosts: remote_discussions + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + dashboard_build_dir: "{{playbook_dir}}/build/tmp/dashboard" + clientjs_dir: "{{playbook_dir}}/build/tmp/dashboard/clientjs" + tasks: + + - name: get isso version + local_action: command python setup.py -V chdir="{{isso_build_dir}}" + register: isso_version + + - name: get discussion package version + set_fact: + discussions_pkg_version: "{{isso_version.stdout}}" + +# +# Localhost actions +# +- hosts: localhost + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + dashboard_build_dir: "{{playbook_dir}}/build/tmp/dashboard" + clientjs_dir: "{{playbook_dir}}/build/tmp/dashboard/clientjs" + tasks: + +# build client js + - name: remove build + file: path="{{clientjs_dir}}/packages/{{item}}" state=absent + with_items: + - annotation-dashboard-explorunivers/build + - dashboard-components/lib + + - name: clientjs npm install + command: npm install + args: + chdir: "{{clientjs_dir}}" + + - name: clientjs lerna bootstrap + command: npx lerna bootstrap + args: + chdir: "{{clientjs_dir}}" + + - name: clientjs dashboard-components build + command: npm run build + args: + chdir: "{{clientjs_dir}}/packages/dashboard-components" + + - name: clientjs annotation-dashboard-explorunivers build + command: npm run build + args: + chdir: "{{clientjs_dir}}/packages/annotation-dashboard-explorunivers" + environment: + REACT_APP_API_URL: "{{annotations_api_url}}/annotations" + REACT_APP_VIA_BASE_URL: "{{via_base_url}}" + REACT_APP_DISCUSSION_URL: "{{discussions_url}}/" + +# +# Static server +# +- hosts: remote_static + become: yes + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + dashboard_build_dir: "{{playbook_dir}}/build/tmp/dashboard" + clientjs_dir: "{{playbook_dir}}/build/tmp/dashboard/clientjs" + tasks: + + - name: create dest static directory content + file: + path: "{{remote_static_path}}" + state: directory + owner: "{{static_http_user}}" + group: "{{static_http_group}}" + + - name: remove dest static directory content + command: /bin/rm -fr "{{remote_static_path}}/*" warn=False + when: remote_static_path != "" + + # TODO : set dashboard name in setting + - name: transfert static dist to remote + copy: + src: "{{clientjs_dir}}/{{dashboard_name}}/build/" + dest: "{{remote_static_path}}/" + owner: "{{static_http_user}}" + group: "{{static_http_group}}" + notify: + - restart static nginx + + - name: create refresh nginx config + template: + src: netrights.iri-research.org.j2 + dest: "{{static_nginx_config | default('/etc/nginx/site-available/'+static_server_name, true)}}" + notify: + - restart static nginx + + handlers: + - name: restart static nginx + service: + name: "{{static_http_service}}" + state: restarted + ignore_errors: yes + +# +# Annotations and discussion servers +# +- hosts: remote_annotations_api:remote_discussions + become: yes + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + clientjs_dir: "{{playbook_dir}}/../clientjs" + annotation_api_dir: "{{playbook_dir}}/../server/sbin" + tasks: + + - name: add iri group + group: + name: iri + + - name: add uwsgi user + user: + name: uwsgi + group: iri + home: /var/www + create_home: no + system: yes + + - name: create log dir + file: + path: "{{log_base_path}}" + state: directory + owner: uwsgi + group: iri + mode: 0755 + +# +# Annotations server +# +- hosts: remote_annotations_api + become: yes + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + clientjs_dir: "{{playbook_dir}}/../clientjs" + annotation_api_dir: "{{playbook_dir}}/../server/sbin" + tasks: + + - name: create config dir + file: + path: "{{annotations_api_config_base}}" + state: directory + owner: uwsgi + group: iri + mode: 0755 + + - name: register annotation api virtualenv stats + stat: path="{{annotations_api_venv}}" + register: annotations_api_venv_stats + + - name: copy annotation api requirement file + copy: + src: "{{annotation_api_dir}}/requirements.txt" + dest: "{{annotations_api_config_base}}/annotation_api_requirements.txt" + register: copy_annotation_api_requirements + + - name: remove annotation api venv + file: + path: "{{annotations_api_venv}}" + state: absent + when: copy_annotation_api_requirements.changed + + - name: create annotations api virtualenv + pip: + virtualenv_command: /usr/bin/python3 -m venv + virtualenv: "{{annotations_api_venv}}" + requirements: "{{annotations_api_config_base}}/annotation_api_requirements.txt" + when: copy_annotation_api_requirements.changed or (not annotations_api_venv_stats.stat.exists) + notify: restart annotations api service + + - name: copy annotations api module + copy: + src: "{{annotation_api_dir}}/hypothesis_proxy.py" + dest: "{{annotations_api_venv}}/bin/" + notify: restart annotations api service + + - name: copy annotation api config + template: + src: "annotation_api_configuration.ini.j2" + dest: "{{annotations_api_config_base}}/annotation_api_configuration.ini" + notify: restart annotations api service + + - name: copy annotations api uwsgi config + template: + src: "dashboard-nextleap-annotations.yml.j2" + dest: "{{annotations_api_config_base}}/uwsgi-dashboard-annotations.yml" + notify: restart annotations api service + + - name: copy annotations api supervisor config + template: + src: "dashboard-nextleap-annotations.ini.j2" + dest: "{{annotations_api_supervisor_conf_path}}/{{annotations_api_service}}.ini" + notify: restart annotations api service + + handlers: + - name: reload annotations api service supervisorctl + listen: "restart annotations api service" + supervisorctl: + name: "{{annotations_api_service}}" + state: present + ignore_errors: yes + + - name: restart annotations api service supervisorctl + listen: "restart annotations api service" + supervisorctl: + name: "{{annotations_api_service}}" + state: restarted + ignore_errors: yes + +# +# Discussion servers +# +- hosts: remote_discussions + + become: yes + + vars_files: + - "{{playbook_dir}}/deploy_vars.yml" + + vars: + isso_build_dir: "{{playbook_dir}}/build/tmp/isso" + dashboard_build_dir: "{{playbook_dir}}/build/tmp/dashboard" + clientjs_dir: "{{playbook_dir}}/build/tmp/dashboard/clientjs" + dicussions_pkg_archive: "isso-{{discussions_pkg_version}}.tar.gz" + + tasks: + + - name: create discussion build tmp dir + tempfile: + state: directory + register: discussions_build_tmp_dir + + - name: create config dir + file: + path: "{{discussions_config_base}}" + state: directory + owner: uwsgi + group: iri + mode: 0755 + + - name: register discussion virtualenv stats + stat: path="{{discussions_venv}}" + register: discussions_venv_stats + + - name: copy discussion requirement file + copy: + src: "{{dashboard_build_dir}}/server/isso/requirements.txt" + dest: "{{discussions_config_base}}/discussions_requirements.txt" + register: copy_discussions_requirements + + - name: remove annotation api venv + file: + path: "{{discussions_venv}}" + state: absent + when: copy_discussions_requirements.changed + + - name: copy discussions build + copy: + src: "{{isso_build_dir}}/dist/{{dicussions_pkg_archive}}" + dest: "{{discussions_build_tmp_dir.path}}" + when: copy_discussions_requirements.changed or (not discussions_venv_stats.stat.exists) + + - name: create discussions virtualenv + pip: + virtualenv_command: /usr/bin/python3 -m venv + virtualenv: "{{discussions_venv}}" + requirements: "{{discussions_config_base}}/discussions_requirements.txt" + when: copy_discussions_requirements.changed or (not discussions_venv_stats.stat.exists) + notify: restart discussions service + + - name: install discussions pkg in venv + pip: + virtualenv: "{{discussions_venv}}" + name: "file://{{discussions_build_tmp_dir.path}}/{{dicussions_pkg_archive}}" + when: copy_discussions_requirements.changed or (not discussions_venv_stats.stat.exists) + notify: restart discussions service + + - name: copy discussions uwsgi config + template: + src: "dashboard-nextleap-discussions.yml.j2" + dest: "{{annotations_api_config_base}}/uwsgi-dashboard-discussions.yml" + notify: restart discussions service + + - name: copy discussions isso config + template: + src: "dashboard-nextleap-discussions-isso.cfg.j2" + dest: "{{annotations_api_config_base}}/dashboard-nextleap-discussions-isso.cfg" + notify: restart discussions service + + - name: copy discussions supervisor config + template: + src: "dashboard-nextleap-discussions.ini.j2" + dest: "{{discussions_supervisor_conf_path}}/{{discussions_service}}.ini" + notify: restart discussions service + + - name: create discussions data folder + file: + path: "{{discussions_db_dir}}" + state: directory + owner: uwsgi + group: iri + mode: 0755 + + post_tasks: + - name: clean discussions build temp dir + file: + path: "{{discussions_build_tmp_dir.path}}" + state: absent + + handlers: + + - name: reload discussions service supervisorctl + listen: "restart discussions service" + supervisorctl: + name: "{{discussions_service}}" + state: present + ignore_errors: yes + + - name: restart discussions service supervisorctl + listen: "restart discussions service" + supervisorctl: + name: "{{discussions_service}}" + state: restarted + ignore_errors: yes