---
# ============LICENSE_START=======================================================
#  Copyright (C) 2019 The Nordix Foundation. All rights reserved.
# ================================================================================
# 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

# TODO: move these tasks to a more suitable place
# TODO: load only the necessary images in each node according to their node
- hosts: k8s-cluster
  gather_facts: false
  tasks:
    - name: Execute preparation for post-deployment in offline mode
      block:
        # Load docker images in cache for offline installation
        # TODO: we should set-up a Docker local repository in kickstart
        - name: Find cached docker images
          find:
            paths: "/tmp/kubespray_cache/images"
            patterns: '^.*\.tar'
            use_regex: true
            file_type: file
          register: docker_images

        # TODO: use the docker_image Ansible module
        - name: Load missing docker images into node's memory
          shell: |
            set -o pipefail
            cat  "{{ item.path }}" | docker load
          changed_when: false
          args:
            executable: /bin/bash
          with_items: "{{ docker_images.files }}"
      when: offline_deployment|bool

# check if any post-deployment task defined for the scenario
- hosts: localhost
  connection: local
  gather_facts: false
  become: false

  tasks:
    - name: Check if any post-deployment task defined for '{{ deploy_scenario }}' scenario
      stat:
        path: "{{ engine_cache }}/repos/swconfig/{{ scenario[deploy_scenario].installers[installer_type].role }}/tasks/post-deployment.yml"
      register: post_deployment_yml

# run the scenario post-deployment tasks before running the common post-deployment tasks
- hosts: all
  gather_facts: true
  become: true

  tasks:
    - name: Execute post-deployment tasks of '{{ deploy_scenario }}' scenario
      include_role:
        name: "{{ engine_cache }}/repos/swconfig/{{ scenario[deploy_scenario].installers[installer_type].role }}"
        tasks_from: post-deployment
      when: hostvars['localhost'].post_deployment_yml.stat.exists

# run common post-deployment tasks
# NOTE: The common post-deployment tasks is currently applicable only to
# simple k8s and openstack scenarios.
# in future, when statement could be moved to tasks in role if the current
# tasks become relevant or new tasks are added.
- hosts: all
  gather_facts: true
  become: true

  roles:
    - role: post-deployment
      when: "'onap-' not in deploy_scenario"

# vim: set ts=2 sw=2 expandtab:
