---
# We should print out deprecations prior to any failures so that if a play does fail for other reasons
# the user would also be aware of any deprecated variables they should note to adjust
- include: deprecations.yml

- name: Abort when conflicting deployment type variables are set
  when:
    - deployment_type is defined
    - openshift_deployment_type is defined
    - openshift_deployment_type != deployment_type
  fail:
    msg: |-
      openshift_deployment_type is set to "{{ openshift_deployment_type }}".
      deployment_type is set to "{{ deployment_type }}".
      To avoid unexpected results, this conflict is not allowed.
      deployment_type is deprecated in favor of openshift_deployment_type.
      Please specify only openshift_deployment_type, or make both the same.

- name: Standardize on latest variable names
  set_fact:
    # goal is to deprecate deployment_type in favor of openshift_deployment_type.
    # both will be accepted for now, but code should refer to the new name.
    # TODO: once this is well-documented, add deprecation notice if using old name.
    deployment_type: "{{ openshift_deployment_type | default(deployment_type) | default | string }}"
    openshift_deployment_type: "{{ openshift_deployment_type | default(deployment_type) | default | string }}"
    deployment_subtype: "{{ openshift_deployment_subtype | default(deployment_subtype) | default('basic') | string }}"
    openshift_deployment_subtype: "{{ openshift_deployment_subtype | default(deployment_subtype) | default('basic') | string }}"

- name: Abort when deployment type is invalid
  # this variable is required; complain early and clearly if it is invalid.
  when: openshift_deployment_type not in known_openshift_deployment_types
  fail:
    msg: |-
      Please set openshift_deployment_type to one of:
      {{ known_openshift_deployment_types | join(', ') }}

- name: Normalize openshift_release
  set_fact:
    # Normalize release if provided, e.g. "v3.5" => "3.5"
    # Currently this is not required to be defined for all installs, and the
    # `openshift_version` role can generally figure out the specific version
    # that gets installed (e.g. 3.5.0.1). So consider this the user's expressed
    # intent (if any), not the authoritative version that will be installed.
    openshift_release: "{{ openshift_release | string | regex_replace('^v', '') }}"
  when: openshift_release is defined

- name: Abort when openshift_release is invalid
  when:
    - openshift_release is defined
    - not openshift_release | match('^\d+(\.\d+){1,3}$')
  fail:
    msg: |-
      openshift_release is "{{ openshift_release }}" which is not a valid version string.
      Please set it to a version string like "3.4".

- include: unsupported.yml
  when:
    - not openshift_enable_unsupported_configurations | default(false) | bool

- name: Ensure clusterid is set along with the cloudprovider
  fail:
    msg: >
      Ensure that the openshift_clusterid is set and that all infrastructure has the required tags.

      For dynamic provisioning when using multiple clusters in different zones, tag each node with Key=kubernetes.io/cluster/xxxx,Value=clusterid where xxxx and clusterid are unique per cluster. In versions prior to 3.6, this was Key=KubernetesCluster,Value=clusterid.

      https://github.com/openshift/openshift-docs/blob/master/install_config/persistent_storage/dynamically_provisioning_pvs.adoc#available-dynamically-provisioned-plug-ins
  when:
    - openshift_clusterid is not defined
    - openshift_cloudprovider_kind is defined
    - openshift_cloudprovider_kind == 'aws'

- name: Ensure ansible_service_broker_remove and ansible_service_broker_install are mutually exclusive
  fail:
    msg: >
      Ensure ansible_service_broker_remove and ansible_service_broker_install are mutually exclusive,
      do not set both to true. ansible_service_broker_install defaults to true.
  when:
    - ansible_service_broker_remove | default(false) | bool
    - ansible_service_broker_install | default(true) | bool

- name: Ensure template_service_broker_remove and template_service_broker_install are mutually exclusive
  fail:
    msg: >
      Ensure that template_service_broker_remove and template_service_broker_install are mutually exclusive,
      do not set both to true. template_service_broker_remove defaults to true.
  when:
    - template_service_broker_remove | default(false) | bool
    - template_service_broker_install | default(true) | bool
