---
# Copyright 2017-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# roles/juju-setup/main/tasks.yml

- name: Initialize Juju
  command: juju generate-config
    creates={{ ansible_user_dir }}/.juju/environments.yaml

- name: Create Juju config file from template
  template:
    src=environments.yaml.j2
    dest={{ ansible_user_dir }}/.juju/environments.yaml

# Sometimes this fails yet the bootstrap eventually succeeds.
# Handle this case by waiting for juju_facts after this step.
- name: Bootstrap Juju
  command: juju bootstrap
    creates={{ ansible_user_dir }}/.juju/environments/manual.jenv
  ignore_errors: yes

# Code for this is in library/juju_facts.py
- name: Obtain Juju Facts for creating machines
  juju_facts:
  register: result
  until: result is success
  retries: 40
  delay: 15

- name: Copy over juju-config.yml for configuring Juju services
  become: yes
  template:
    src=juju_config.yml.j2
    dest={{ juju_config_path }}

# check that containers are ready to be accessed, juju add-machine may error
- name: Check that machines are available for Juju
  command: ansible containers -m ping -u ubuntu
  tags:
    - skip_ansible_lint # connectivity check
  retries: 3
  delay: 10

- name: Check that Juju is actually ready
  juju_facts:
  until: 'juju_machines["juju." ~ site_suffix ] is defined and juju_machines["juju." ~ site_suffix ]["agent_state"] == "started"'
  retries: 40
  delay: 15

# For setwise operations on desired vs Juju state:
# list of active juju_machines names: juju_machines.keys()
# list of active juju_services names: juju_services.keys()

- name: Add machines to Juju
  when: head_lxd_list | map(attribute='service') | list | reject('undefined') | map('format_string', '%s.'~site_suffix ) | difference( juju_machines.keys() ) | length
  command: "juju add-machine ssh:{{ item }}"
  with_items: "{{ head_lxd_list | map(attribute='service') | list | reject('undefined') | map('format_string', '%s.'~site_suffix ) | difference( juju_machines.keys() ) }}"
  register: result
  until: result is success
  retries: 3
  delay: 10

# run this again, so machines will be in the juju_machines list
- name: Obtain Juju Facts after machine creation
  juju_facts:
  register: result
  until: result is success
  retries: 3
  delay: 15

- name: Deploy services that are hosted in their own LXD container
  when: lxd_service_list | difference( juju_services.keys() ) | length
  command: "juju deploy {{ charm_versions[item] | default(item) }} --to {{ juju_machines[item~'.'~site_suffix]['machine_id'] }} --config={{ juju_config_path }}"
  with_items: "{{ lxd_service_list | difference( juju_services.keys() ) }}"

- name: Deploy services that don't have their own container
  when: standalone_service_list | difference( juju_services.keys() ) | length
  command: "juju deploy {{ charm_versions[item] | default(item) }} --config={{ juju_config_path }}"
  with_items: "{{ standalone_service_list | difference( juju_services.keys() ) }}"

- name: Create relations between services
  command: "juju add-relation '{{ item.0.name }}' '{{ item.1 }}'"
  register: juju_relation
  failed_when: "juju_relation|failed and 'relation already exists' not in juju_relation.stderr"
  with_subelements:
    - "{{ service_relations }}"
    - relations
  tags:
   - skip_ansible_lint # benign to do this more than once, hard to check for

