---
- name: Deploy Dev Spaces on OCP
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Create namespace
      redhat.openshift.k8s:
        name: eclipse-che
        api_version: v1
        kind: Namespace
        state: present

    - name: Create dev spaces subscription
      redhat.openshift.k8s:
        state: present
        definition:
          apiVersion: operators.coreos.com/v1alpha1
          kind: Subscription
          metadata:
            labels:
              operators.coreos.com/devspaces.openshift-operators: ''
            name: devspaces
            namespace: openshift-operators
          spec:
            channel: stable
            installPlanApproval: Automatic
            name: devspaces
            source: redhat-operators
            sourceNamespace: openshift-marketplace

    - name: Wait for dev spaces operator to install
      kubernetes.core.k8s_info:
        api_version: apiextensions.k8s.io/v1
        kind: CustomResourceDefinition
        name: checlusters.org.eclipse.che
      register: crd_che
      until: crd_che.resources | list | length == 1
      retries: 10
      delay: 30

    - name: Wait until devspaces-operator is up
      kubernetes.core.k8s_info:
        api_version: v1
        kind: Deployment
        name: devspaces-operator
        namespace: openshift-operators
      register: pod_list
      until: pod_list | json_query('resources[*].status.readyReplicas') | unique == [1]
      retries: 10
      delay: 30

    - name: Deploy dev spaces
      redhat.openshift.k8s:
        state: present
        definition:
          apiVersion: org.eclipse.che/v2
          kind: CheCluster
          metadata:
            name: devspaces
            namespace: eclipse-che
          spec:
            components:
              cheServer:
                debug: false
                logLevel: INFO
              dashboard: {}
              database:
                credentialsSecretName: postgres-credentials
                externalDb: false
                postgresDb: dbche
                postgresHostName: postgres
                postgresPort: '5432'
                pvc:
                  claimSize: 1Gi
              devWorkspace: {}
              devfileRegistry: {}
              imagePuller:
                enable: false
                spec: {}
              metrics:
                enable: true
              pluginRegistry:
                openVSXURL: 'https://open-vsx.org'
            containerRegistry: {}
            devEnvironments:
              startTimeoutSeconds: 300
              secondsOfRunBeforeIdling: -1
              maxNumberOfWorkspacesPerUser: -1
              containerBuildConfiguration:
                openShiftSecurityContextConstraint: container-build
              disableContainerBuildCapabilities: true
              defaultEditor: che-incubator/che-code/insiders
              defaultComponents:
                - container:
                    image: >-
                      registry.redhat.io/devspaces/udi-rhel8@sha256:aa39ede33bcbda6aa2723d271c79ab8d8fd388c7dfcbc3d4ece745b7e9c84193
                    sourceMapping: /projects
                  name: universal-developer-image
              defaultNamespace:
                autoProvision: true
                template: <username>-devspaces
              secondsOfInactivityBeforeIdling: 1800
              storage:
                pvcStrategy: per-user
            gitServices: {}
            networking:
              auth:
                gateway:
                  configLabels:
                    app: che
                    component: che-gateway-config
