#############################################################################
# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
---
- name: setup sources.list
  remote_user: root
  copy:
    src: sources.list
    dest: /etc/apt/sources.list
    mode: "u=rw,g=r,o=r"

- name: rm pip.conf
  file:
    path: /root/.pip/pip.conf
    state: absent

- name: check docker.list stat
  stat:
    path: /etc/apt/sources.list.d/docker.list
  register: stat_result

# [WARNING]: Consider using get_url or uri module rather than running wget
- name: install docker
  remote_user: root
  shell: wget -qO- https://get.docker.com/ | sh
  when: stat_result.stat.exists == False

- name: remove conflict packages
  remote_user: root
  action: "{{ ansible_pkg_mgr }} name={{ item }} state=absent"
  with_items:
    - python3-pkg-resources

- name: install dependent packages
  remote_user: root
  action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
  with_items:
    - git
    - python3-dev
    - python3-pip
    - python3-venv
    - python3-setuptools

- name: make ubuntu dir
  file:
    path: /home/ubuntu
    state: directory
    mode: 0755

- name: check moon code dir exists
  stat:
    path: /home/ubuntu/moon
  register: stat_result

- name: fetch moon source code
  shell: git clone https://git.opnfv.org/moon /home/ubuntu/moon
  when: stat_result.stat.exists == False

- name: create moon etc conf
  remote_user: root
  file:
    src: /home/ubuntu/moon/moonv4/moon_orchestrator/conf
    dest: /etc/moon
    state: link

- name: configure moon.conf
  lineinfile:
    dest: /etc/moon/moon.conf
    regexp: '{{ item.regexp }}'
    line: '{{ item.line }}'
  with_items:
    - regexp: '^dist_dir=.*'
      line: 'dist_dir=/home/ubuntu/moon/moonv4/moon_orchestrator/dist'
    - regexp: '^password=.*'
      line: 'password={{ ADMIN_PASS }}'

- name: configure moon.conf for moon slave
  lineinfile:
    dest: /etc/moon/moon.conf
    regexp: '{{ item.regexp }}'
    line: '{{ item.line }}'
  with_items:
    - regexp: '^slave_name=.*'
      line: 'slave_name={{ moon_slave_name }}'
    - regexp: '^master_url=.*'
      line: 'master_url=rabbit://moon:p4sswOrd1@{{ moon_master_ip }}/moon'
    - regexp: '^master_login.*'
      line: 'master_login=moon'
    - regexp: '^master_password=.*'
      line: 'master_password=p4sswOrd1'
  when: moon_slave == "Enable"

- name: list container netwroks
  shell: docker network ls --format \{\{.Name\}\}
  register: result

- name: dump template generated file content
  debug:
    msg: "{{ result.stdout }}"

- name: create moon network
  shell: docker network create -d bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 moon
  when: result.stdout.find("moon") == -1

- name: list containers
  shell: docker ps --format \{\{.Names\}\}
  register: result

- name: start rabbitmq
  shell: |
    docker run -dti \
               --net=moon \
               --hostname messenger \
               --name messenger \
               --link messenger:messenger \
               -e RABBITMQ_DEFAULT_USER=moon \
               -e RABBITMQ_DEFAULT_PASS=p4sswOrd1 \
               -e RABBITMQ_NODENAME=rabbit@messenger \
               -e RABBITMQ_DEFAULT_VHOST=moon \
               -p 5671:5671 \
               -p 5672:5672 \
               rabbitmq:3-management
  when: result.stdout.find("messenger") == -1

- name: dump template generated file content
  debug:
    msg: "{{ result.stdout }}"

- name: start mysql
  shell: docker run -dti \
                    --net=moon \
                    --hostname db \
                    --name db \
                    -e MYSQL_ROOT_PASSWORD=p4sswOrd1 \
                    -e MYSQL_DATABASE=moon \
                    -e MYSQL_USER=moon \
                    -e MYSQL_PASSWORD=p4sswOrd1 \
                    -p 3306:3306 \
                    mysql:latest
  when: result.stdout.find("db") == -1

- name: set messenger and db hosts name
  remote_user: root
  lineinfile:
    dest: /etc/hosts
    regexp: 'messenger'
    line: '127.0.0.1 messenger db'

- name: set keystone hosts name
  remote_user: root
  lineinfile:
    dest: /etc/hosts
    regexp: 'keystone'
    line: '{{ internal_vip.ip }} keystone'

- name: update pip
  remote_user: root
  shell: pip3 install pip --upgrade

- name: run moon build_all.sh
  shell: |
    export MOON_HOME=/home/ubuntu/moon/moonv4;
    cd ${MOON_HOME}/bin;
    source build_all.sh;
  args:
    executable: /bin/bash

- name: modify moon start.sh
  lineinfile:
    dest: /home/ubuntu/moon/moonv4/bin/start.sh
    state: absent
    regexp: "{{ item }}"
  with_items:
    - "^sleep 20s"
    - "^.*starting Keystone container.*"
    - "^docker run .*keystone.*"

- name: run moon start.sh
  shell: |
    export MOON_HOME=/home/ubuntu/moon/moonv4;
    cd ${MOON_HOME}/moon_orchestrator;
    if [ ! -d tests/venv ]; then
        pyvenv tests/venv;
        source tests/venv/bin/activate;
        pip3 install -r requirements.txt --upgrade;
        pip3 install dist/moon_db-0.1.0.tar.gz --upgrade;
        pip3 install dist/moon_utilities-0.1.0.tar.gz --upgrade;
        pip3 install .  --upgrade;
        cd ../moon_db/;
        pip3 install -r requirements.txt --upgrade;
    else
        source tests/venv/bin/activate;
    fi
    killall -9  /home/ubuntu/moon/moonv4/moon_orchestrator/tests/venv/bin/python3.5
    sleep 3
    ( ( nohup ../bin/start.sh > /tmp/start.log 2>&1 ) & );
  args:
    executable: /bin/bash

- name: fetch template generated file content
  shell: whoami
  register: template_gen_out

- name: dump template generated file content
  debug:
    msg: "{{ template_gen_out.stdout }}"