---
#
# edX Configuration
#
# github:     https://github.com/edx/configuration
# wiki:       https://openedx.atlassian.net/wiki/display/OpenOPS
# code style: https://openedx.atlassian.net/wiki/display/OpenOPS/Ansible+Code+Conventions
# license:    https://github.com/edx/configuration/blob/master/LICENSE.TXT
#
#
#
# Tasks for role programs
# 
# Overview:
# 
#
# Dependencies:
#
# 
# Example play:
#
#

- name: add gunicorn configuration file
  template:
    src: edx/app/programs/programs_gunicorn.py.j2
    dest: "{{ programs_home }}/programs_gunicorn.py"
  sudo_user: "{{ programs_user }}"

- name: install application requirements
  pip:
    requirements: "{{ programs_requirements_base }}/{{ item }}"
    # Ansible will initialize this virtualenv if it's missing.
    virtualenv: "{{ programs_venv_dir }}"
    state: present
  sudo_user: "{{ programs_user }}"
  with_items: "{{ programs_requirements }}"

- name: create nodeenv
  shell: >
    creates={{ programs_nodeenv_dir }}
    {{ programs_venv_dir }}/bin/nodeenv {{ programs_nodeenv_dir }} --prebuilt
  sudo_user: "{{ programs_user }}"

- name: install node dependencies
  npm: executable={{ programs_nodeenv_bin }}/npm path={{ programs_code_dir }} production=yes
  sudo_user: "{{ programs_user }}"
  environment: "{{ programs_environment }}"

- name: install bower dependencies
  shell: >
    chdir={{ programs_code_dir }}
    . {{ programs_nodeenv_bin }}/activate && {{ programs_node_bin }}/bower install --production --config.interactive=false
  sudo_user: "{{ programs_user }}"

- name: migrate
  shell: >
    chdir={{ programs_code_dir }}
    DB_MIGRATION_USER={{ COMMON_MYSQL_MIGRATE_USER }}
    DB_MIGRATION_PASS={{ COMMON_MYSQL_MIGRATE_PASS }}
    {{ programs_venv_dir }}/bin/python ./manage.py migrate --noinput
  sudo_user: "{{ programs_user }}"
  environment: "{{ programs_environment }}"
  when: migrate_db is defined and migrate_db|lower == "yes"

- name: compile sass
  shell: >
    chdir={{ programs_code_dir }}
    . {{ programs_nodeenv_bin }}/activate && {{ programs_node_bin }}/gulp css
  sudo_user: "{{ programs_user }}"
  when: not devstack

- name: run r.js optimizer
  shell: >
    chdir={{ programs_code_dir }}
    . {{ programs_nodeenv_bin }}/activate && {{ programs_node_bin }}/r.js -o build.js
  sudo_user: "{{ programs_user }}"
  when: not devstack

- name: run collectstatic
  shell: >
    chdir={{ programs_code_dir }}
    {{ programs_venv_dir }}/bin/python manage.py {{ item }}
  sudo_user: "{{ programs_user }}"
  environment: "{{ programs_environment }}"
  with_items:
    - "collectstatic --noinput"
    - "compress"
  when: not devstack

# NOTE this isn't used or needed when s3 is used for PROGRAMS_MEDIA_STORAGE_BACKEND
- name: create programs media dir
  file: >
    path="{{ item }}" state=directory mode=0775
    owner="{{ programs_user }}" group="{{ common_web_group }}"
  with_items:
    - "{{ PROGRAMS_MEDIA_ROOT }}"

- name: write out the supervisor wrapper
  template:
    src: "edx/app/programs/programs.sh.j2"
    dest: "{{ programs_home }}/{{ programs_service_name }}.sh"
    mode: 0650
    owner: "{{ supervisor_user }}"
    group: "{{ common_web_user }}"

- name: write supervisord config
  template:
    src: "edx/app/supervisor/conf.d.available/programs.conf.j2"
    dest: "{{ supervisor_available_dir }}/{{ programs_service_name }}.conf"
    owner: "{{ supervisor_user }}"
    group: "{{ common_web_user }}"
    mode: 0644

- name: setup the programs env file
  template:
    src: "./{{ programs_home }}/{{ programs_service_name }}_env.j2"
    dest: "{{ programs_home }}/programs_env"
    owner: "{{ programs_user }}"
    group: "{{ programs_user }}"
    mode: 0644

- name: enable supervisor script
  file:
    src: "{{ supervisor_available_dir }}/{{ programs_service_name }}.conf"
    dest: "{{ supervisor_cfg_dir }}/{{ programs_service_name }}.conf"
    state: link
    force: yes
  when: not disable_edx_services

- name: update supervisor configuration
  shell: "{{ supervisor_ctl }} -c {{ supervisor_cfg }} update"
  when: not disable_edx_services

- name: create symlinks from the venv bin dir
  file:
    src: "{{ programs_venv_dir }}/bin/{{ item }}"
    dest: "{{ COMMON_BIN_DIR }}/{{ item.split('.')[0] }}.programs"
    state: link
  with_items:
  - python
  - pip
  - django-admin.py

- name: create symlinks from the repo dir
  file:
    src: "{{ programs_code_dir }}/{{ item }}"
    dest: "{{ COMMON_BIN_DIR }}/{{ item.split('.')[0] }}.programs"
    state: link
  with_items:
  - manage.py

- name: restart the application
  supervisorctl: 
    state: restarted
    supervisorctl_path: "{{ supervisor_ctl }}"
    config: "{{ supervisor_cfg }}"
    name: "{{ programs_service_name }}"
  when: not disable_edx_services
  sudo_user: "{{ supervisor_service_user }}"