---
###############################################################################
# Pre upgrade checks for known data problems, if this playbook fails you should
# contact support. If you're not supported contact users@lists.openshift.com
#
# oc_objectvalidator provides these two checks
# 1 - SDN Data issues, never seen in the wild but known possible due to code audits
#     https://github.com/openshift/origin/issues/12697
# 2 - Namespace protections, https://bugzilla.redhat.com/show_bug.cgi?id=1428934
#
###############################################################################
- name: Verify 3.5 specific upgrade checks
  hosts: oo_first_master
  roles:
  - { role: lib_openshift }
  tasks:
  - name: Check for invalid namespaces and SDN errors
    oc_objectvalidator:

  # What's all this PetSet business about?
  #
  # 'PetSets' were ALPHA resources in Kube <= 3.4. In >= 3.5 they are
  # no longer supported. The BETA resource 'StatefulSets' replaces
  # them. We can't migrate clients PetSets to
  # StatefulSets. Additionally, Red Hat has never officially supported
  # these resource types. Sorry users, but if you were using
  # unsupported resources from the Kube documentation then we can't
  # help you at this time.
  #
  # Reference: https://bugzilla.redhat.com/show_bug.cgi?id=1428229
  - name: Check if legacy PetSets exist
    oc_obj:
      state: list
      all_namespaces: true
      kind: petsets
    register: l_do_petsets_exist

  - name: Fail on unsupported resource migration 'PetSets'
    fail:
      msg: >
        PetSet objects were detected in your cluster. These are an
        Alpha feature in upstream Kubernetes 1.4 and are not supported
        by Red Hat. In Kubernetes 1.5, they are replaced by the Beta
        feature StatefulSets. Red Hat currently does not offer support
        for either PetSets or StatefulSets.

        Automatically migrating PetSets to StatefulSets in OpenShift
        Container Platform (OCP) 3.5 is not supported. See the
        Kubernetes "Upgrading from PetSets to StatefulSets"
        documentation for additional information:

        https://kubernetes.io/docs/tasks/manage-stateful-set/upgrade-pet-set-to-stateful-set/

        PetSets MUST be removed before upgrading to OCP 3.5. Red Hat
        strongly recommends reading the above referenced documentation
        in its entirety before taking any destructive actions.

        If you want to simply remove all PetSets without manually
        migrating to StatefulSets, run this command as a user with
        cluster-admin privileges:

        $ oc get petsets --all-namespaces -o yaml | oc delete -f - --cascade=false
    when:
    # Search did not fail, valid resource type found
    - l_do_petsets_exist.results.returncode == 0
    # Items do exist in the search results
    - l_do_petsets_exist.results.results.0['items'] | length > 0
