- name: Writing supervisor script
  template:
    src: xserver.conf.j2
    dest: "{{ supervisor_available_dir }}/xserver.conf"
    owner: "{{ supervisor_user }}"
    group: "{{ common_web_user }}"
    mode: "0644"

- name: Enable supervisor script
  file:
    src: "{{ supervisor_available_dir }}/xserver.conf"
    dest: "{{ supervisor_cfg_dir }}/xserver.conf"
    owner: "{{ supervisor_user }}"
    group: "{{ common_web_user }}"
    mode: "0644"
    state: link
    force: yes
  when: not disable_edx_services

- name: Add gunicorn configuration file
  template:
    src: xserver_gunicorn.py.j2
    dest: "{{ xserver_app_dir }}/xserver_gunicorn.py"
    owner: "{{ supervisor_user }}"
    group: "{{ common_web_user }}"
    mode: "0644"
  notify:
    - restart xserver

- name: Checkout code
  git:
    dest: "{{ xserver_code_dir }}"
    repo: "{{ xserver_source_repo }}"
    version: "{{xserver_version}}"
    accept_hostkey: yes
  become_user: "{{ xserver_user }}"
  register: xserver_checkout
  notify:
    - restart xserver

- name: Install requirements
  pip:
    requirements: "{{ xserver_requirements_file }}"
    virtualenv: "{{ xserver_venv_dir }}"
    state: present
    extra_args: "-i {{ COMMON_PYPI_MIRROR_URL }}"
  become_user: "{{ xserver_user }}"
  notify:
    - restart xserver

- name: Install sandbox requirements
  pip:
    requirements: "{{ xserver_requirements_file }}"
    virtualenv: "{{ xserver_venv_sandbox_dir }}"
    state: present
    extra_args: "-i {{ COMMON_PYPI_MIRROR_URL }}"
  become_user: "{{ xserver_user }}"
  notify:
    - restart xserver

- name: Create xserver application config
  template:
    src: xserver.env.json.j2
    dest: "{{ xserver_app_dir }}/env.json"
  become_user: "{{ xserver_user }}"
  notify:
    - restart xserver

- name: Install read-only ssh key for the content repo that is required for grading
  copy:
    content: "{{ XSERVER_GIT_IDENTITY }}"
    dest: "{{ xserver_git_identity }}"
    owner: "{{ xserver_user }}"
    group: "{{ xserver_user }}"
    mode: "0600"
  notify:
    - restart xserver

- name: Upload ssh script
  template:
    src: git_ssh.sh.j2
    dest: "/tmp/git_ssh.sh"
    owner: "{{ xserver_user }}"
    mode: "0750"
  notify:
    - restart xserver

- name: Checkout grader code
  git:
    dest: "{{ XSERVER_GRADER_DIR }}"
    repo: "{{ XSERVER_GRADER_SOURCE }}"
    version: "{{ xserver_grader_version }}"
    accept_hostkey: yes
  environment:
    GIT_SSH: "/tmp/git_ssh.sh"
  notify: 
    - restart xserver
  register: xserver_grader_checkout
  become_user: "{{ xserver_user }}"

- name: Remove read-only ssh key for the content repo
  file:
    path: "{{ xserver_git_identity }}"
    state: absent
  notify:
    - restart xserver

  # call supervisorctl update. this reloads
  # the supervisorctl config and restarts
  # the services if any of the configurations
  # have changed.
  #
- name: Update supervisor configuration
  shell:  "{{ supervisor_ctl }} -c {{ supervisor_cfg }} update"
  register: supervisor_update
  changed_when: supervisor_update.stdout is defined and supervisor_update.stdout != ""
  when: not disable_edx_services

- name: Ensure xserver is started
  supervisorctl:
    name: xserver
    supervisorctl_path: "{{ supervisor_ctl }}"
    config: "{{ supervisor_cfg }}"
    state: started
  when: not disable_edx_services

- name: Create a symlink for venv python
  file:
    src: "{{ xserver_venv_bin }}/{{ item }}"
    dest: "{{ COMMON_BIN_DIR }}/{{ item }}.xserver"
    state: link
  with_items:
    - python
    - pip

- name: Enforce app-armor rules
  command: "aa-enforce {{ xserver_venv_sandbox_dir }}"

- include: ec2.yml
  when: COMMON_TAG_EC2_INSTANCE
  tags:
    - deploy