---
# 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.

# ansible/genconfig.yml
# Generate CORD configuration files

- name: Load pod and scenario config files
  hosts: localhost
  connection: local
  gather_facts: False

  tasks:

    - name: Set pod_config_path fact
      set_fact:
        pod_config_path:  "{{ cord_podconfig | realpath }}"

    - name: Check for PODCONFIG file
      stat:
        path: "{{ pod_config_path }}"
      register: pod_config_stat

    - name: POD config file specified by 'PODCONFIG' must exist
      assert:
        that: pod_config_stat.stat.isreg

    - name: Load pod config
      include_vars: "{{ pod_config_path }}"

    - name: Set profile_manifest_path fact
      set_fact:
        profile_manifest_path:  "{{ (cord_profile_src_dir ~ '/' ~ cord_profile ~ '.yml') | realpath }}"

    - name: Check for profile manifest
      stat:
        path: "{{ profile_manifest_path }}"
      register: profile_manifest_stat

    - name: Profile manifest file specified by 'cord_profile' must exist
      assert:
        that: profile_manifest_stat.stat.isreg

    - name: Set scenario_config_path fact
      set_fact:
        scenario_config_path:  "{{ (scenarios_dir ~ '/' ~ cord_scenario ~ '/config.yml') | realpath }}"

    - name: Check for scenario config file manifest
      stat:
        path: "{{ scenario_config_path }}"
      register: scenario_config_stat

    - name: Scenario config.yml file specified by 'cord_scenario' must exist
      assert:
        that: scenario_config_stat.stat.isreg

    - name: Load scenario config
      include_vars: "{{ scenario_config_path }}"

    - name: Reload pod config to take precedence
      include_vars: "{{ pod_config_path }}"

    - name: Load pod, scenario, profile_manifest into facts
      set_fact:
        pod_config: "{{ lookup('file', pod_config_path) | from_yaml }}"
        scenario_config: "{{ lookup('file', scenario_config_path) | from_yaml }}"
        profile_manifest: "{{ lookup('file', profile_manifest_path) | from_yaml }}"

    - name: Combine pod and scenario configs and profile manifest into master config
      set_fact:
        master_config: "{{ profile_manifest | combine(scenario_config) | combine(pod_config) }}"

    - name: Prime profile_container_list from with master_config.docker_image_whitelist
      set_fact:
        profile_container_list: "{{ master_config.docker_image_whitelist }}"

    - name: Add items to profile_container_list from profile_manifest.xos_services
      set_fact:
        profile_container_list: "{{ profile_container_list }} + [ 'xosproject/{{ item.name }}-synchronizer' ]"
      with_items: "{{ profile_manifest.xos_services }}"
      when: (not master_config.frontend_only) and (item.synchronizer is not defined or item.synchronizer)

    - name: Add items to profile_container_list from profile_manifest.enabled_gui_extensions
      set_fact:
        profile_container_list: "{{ profile_container_list }} + [ 'xosproject/gui-extension-{{ item.name }}' ]"
      with_items: "{{ profile_manifest.enabled_gui_extensions }}"

    - name: Update docker_image_whitelist to include containers specified by profile
      set_fact:
        master_config: "{{ master_config | combine({'docker_image_whitelist': profile_container_list}, recursive=True) }}"

    - name: Print vars
      debug:
        var: master_config

- name: Generate config files
  hosts: localhost
  connection: local
  gather_facts: False
  roles:
    - genconfig

