---
###############################################################################
# Post upgrade - Upgrade default router, default registry and examples
###############################################################################
- name: Upgrade default router and default registry
  hosts: oo_first_master
  vars:
    registry_image: "{{  openshift.master.registry_url | replace( '${component}', 'docker-registry' )  |
                         replace ( '${version}', openshift_image_tag ) }}"
    router_image: "{{ openshift.master.registry_url | replace( '${component}', 'haproxy-router' ) |
                      replace ( '${version}', openshift_image_tag ) }}"
    registry_console_image: "{{ openshift.master.registry_url | replace ( '${component}', 'registry-console') |
                                replace ( '${version}', openshift.common.short_version ) }}"

  pre_tasks:
  - name: Load lib_openshift modules
    include_role:
      name: lib_openshift
  - name: Collect all routers
    oc_obj:
      state: list
      kind: pods
      all_namespaces: True
      selector: 'router'
    register: all_routers

  - set_fact:
      haproxy_routers: "{{ all_routers.results.results[0]['items'] |
                           oo_pods_match_component(openshift_deployment_type, 'haproxy-router') |
                           oo_select_keys_from_list(['metadata']) }}"
    when:
    - all_routers.results.returncode == 0

  - set_fact: haproxy_routers=[]
    when:
    - all_routers.results.returncode != 0

  - name: Update router image to current version
    oc_edit:
      kind: dc
      name: "{{ item['labels']['deploymentconfig'] }}"
      namespace: "{{ item['namespace'] }}"
      content:
        spec.template.spec.containers[0].image: "{{ router_image }}"
    with_items: "{{ haproxy_routers }}"
    when:
    - all_routers.results.returncode == 0

  - name: Check for default registry
    oc_obj:
      state: list
      kind: dc
      name: docker-registry
    register: _default_registry

  - name: Update registry image to current version
    oc_edit:
      kind: dc
      name: docker-registry
      namespace: default
      content:
        spec.template.spec.containers[0].image: "{{ registry_image }}"
    when:
    - _default_registry.results.results[0] != {}

  - name: Check for registry-console
    oc_obj:
      state: list
      kind: dc
      name: registry-console
    register: _registry_console
    when:
    - openshift.common.deployment_type != 'origin'

  - name: Update registry-console image to current version
    oc_edit:
      kind: dc
      name: registry-console
      namespace: default
      content:
        spec.template.spec.containers[0].image: "{{ registry_console_image }}"
    when:
    - openshift.common.deployment_type != 'origin'
    - _registry_console.results.results[0] != {}

  roles:
  - openshift_manageiq
  # Create the new templates shipped in 3.2, existing templates are left
  # unmodified. This prevents the subsequent role definition for
  # openshift_examples from failing when trying to replace templates that do
  # not already exist. We could have potentially done a replace --force to
  # create and update in one step.
  - openshift_examples
  - openshift_hosted_templates
  # Update the existing templates
  - role: openshift_examples
    registry_url: "{{ openshift.master.registry_url }}"
    openshift_examples_import_command: replace
  - role: openshift_hosted_templates
    registry_url: "{{ openshift.master.registry_url }}"
    openshift_hosted_templates_import_command: replace

# Check for warnings to be printed at the end of the upgrade:
- name: Check for warnings
  hosts: oo_masters_to_config
  tasks:
  # Check if any masters are using pluginOrderOverride and warn if so, only for 1.3/3.3 and beyond:
  - name: grep pluginOrderOverride
    command: grep pluginOrderOverride {{ openshift.common.config_base }}/master/master-config.yaml
    register: grep_plugin_order_override
    when: openshift.common.version_gte_3_3_or_1_3 | bool
    changed_when: false
    failed_when: false

  - name: Warn if pluginOrderOverride is in use in master-config.yaml
    debug:
      msg: "WARNING pluginOrderOverride is being deprecated in master-config.yaml, please see https://docs.openshift.com/enterprise/latest/architecture/additional_concepts/admission_controllers.html for more information."
    when:
    - not grep_plugin_order_override | skipped
    - grep_plugin_order_override.rc == 0

- name: Re-enable excluder if it was previously enabled
  hosts: oo_masters_to_config
  tags:
  - always
  gather_facts: no
  roles:
  - role: openshift_excluder
    r_openshift_excluder_action: enable
    r_openshift_excluder_service_type: "{{ openshift.common.service_type }}"
