---
- hosts: {{ instance_name }}
  gather_facts: False
  connection: ssh
  user: {{ username }}
  sudo: yes
  vars:
    appname: {{ appname }}
    dependencies: {{ dependencies }}
{% if component_configs %}
    component_configs:
{% for component_config in component_configs %}
       - component: {{ component_config.component }}
         config_params: {{  component_config.config_params }}
{% endfor %}
{% endif %}
{% if rest_configs %}
    var_rest_configs:
{% for rest_config in rest_configs %}
       - endpoint: {{ rest_config.endpoint }}
         body: "{{ '{{' }} lookup('file', '{{ files_dir }}/{{ rest_config.fn }}') {{ '}}' }}"
{% endfor %}
{% endif %}
{% if early_rest_configs %}
    var_early_rest_configs:
{% for early_rest_config in early_rest_configs %}
       - endpoint: {{ early_rest_config.endpoint }}
         body: "{{ '{{' }} lookup('file', '{{ files_dir }}/{{ early_rest_config.fn }}') {{ '}}' }}"
{% endfor %}
{% endif %}

  tasks:

  - name: Get Docker IP
    script: /opt/xos/synchronizers/onos/scripts/dockerip.sh {{ ONOS_container }}
    register: onosaddr

  - name: Wait for ONOS to come up
    wait_for:
      host={{ '{{' }} onosaddr.stdout {{ '}}' }}
      port={{ '{{' }} item {{ '}}' }}
      state=present
    with_items:
    - 8101
    - 8181
    - 9876

  - name: Config file directory
    file:
      path=/home/ubuntu/{{ appname }}/
      state=directory

{% if node_key_fn %}
  - name: Copy over key
    copy:
      src={{ files_dir }}/{{ node_key_fn }}
      dest=/home/ubuntu/node_key

  - name: Copy node key into container
    shell: docker cp /home/ubuntu/node_key {{ ONOS_container }}:/root/node_key
{% endif %}

{% if config_fns %}
  - name: Copy over configuration files
    copy:
      src={{ files_dir }}/{{ '{{' }} item {{ '}}' }}
      dest=/home/ubuntu/{{ appname }}/{{ '{{' }} item {{ '}}' }}
    with_items:
        {% for config_fn in config_fns %}
        - {{ config_fn }}
        {% endfor %}

  - name: Make sure config directory exists
    shell: docker exec {{ ONOS_container }} mkdir -p /root/onos/config/
    sudo: yes

  - name: Copy config files into container
    shell: docker cp {{ appname }}/{{ '{{' }} item {{ '}}' }} {{ ONOS_container }}:/root/onos/config/
    sudo: yes
    with_items:
        {% for config_fn in config_fns %}
        - {{ config_fn }}
        {% endfor %}
{% endif %}

  # Don't know how to check for this condition, just wait
  - name: Wait for ONOS to install the apps
    wait_for: timeout=15

{% if early_rest_configs %}
  - name: Add ONOS early configuration values
    uri:
      url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/{{ '{{' }} item.endpoint {{ '}}' }}
      body: "{{ '{{' }} item.body {{ '}}' }}"
      body_format: json
      method: POST
      user: karaf
      password: karaf
    with_items: "var_early_rest_configs"

  # Don't know how to check for this condition, just wait
  - name: Wait for ONOS to restart
    wait_for: timeout=15
{% endif %}

{% if install_dependencies %}
  - name: Install app file directory
    file:
      path=/home/ubuntu/{{ appname }}/apps/
      state=directory

  - name: Copy over app install files to ONOS host
    copy:
      src=/opt/xos/synchronizers/onos/{{ '{{' }} item {{ '}}' }}
      dest=/home/ubuntu/{{ appname }}/apps/{{ '{{' }} item {{ '}}' }}
    with_items:
        {% for install_app in install_dependencies %}
        - {{ install_app }}
        {% endfor %}

  - name: POST onos-app install command
    command: >
        curl -XPOST -HContent-Type:application/octet-stream -u karaf:karaf --data-binary @/home/ubuntu/{{ appname }}/apps/{{ '{{' }} item {{ '}}' }} http://{{ '{{' }} onosaddr.stdout  {{ '}}' }}:8181/onos/v1/applications
    with_items:
        {% for dependency in install_dependencies %}
        - {{ dependency }}
        {% endfor %}
{% endif %}

{% if dependencies %}
  - name: Add dependencies to ONOS
    uri:
      url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/applications/{{ '{{' }} item {{ '}}' }}/active
      method: POST
      user: karaf
      password: karaf
    with_items:
        {% for dependency in dependencies %}
        - {{ dependency }}
        {% endfor %}
{% endif %}

{% if component_configs %}
  - name: Add ONOS component configuration values
    command: >
        curl -XPOST -HContent-Type:application/json -u karaf:karaf -d {{ '{{' }} item.config_params | to_json {{ '}}' }} http://{{ '{{' }} onosaddr.stdout  {{ '}}' }}:8181/onos/v1/configuration/{{
 '{{' }} item.component {{ '}}' }}
    with_items: "component_configs"

#    uri:
#      url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/onos/v1/configuration/{{ '{{' }} item.component {{ '}}' }} #http://localhost:8181/onos/v1/configuration/
#      body: "{{ '{{' }} item.config_params | to_json {{ '}}' }}"
#      body_format: json
#      method: POST
#      user: karaf
#      password: karaf
#    with_items: "component_configs"
{% endif %}

{% if rest_configs %}
# Do this after services have been activated, or it will cause an exception.
# vOLT will re-read its net config; vbng may not.
  - name: Add ONOS configuration values
    uri:
      url: http://{{ '{{' }} onosaddr.stdout {{ '}}' }}:8181/{{ '{{' }} item.endpoint {{ '}}' }} #http://localhost:8181/onos/v1/network/configuration/
      body: "{{ '{{' }} item.body {{ '}}' }}"
      body_format: json
      method: POST
      user: karaf
      password: karaf
    with_items: "var_rest_configs"
{% endif %}
