- name: Install requirements
  pip:
    name: openshift

# Kubernetes resources
- name: Create a namespace
  k8s:
    name: testing
    kind: namespace
  register: output

- name: show output
  debug:
    var: output

- name: Create a service
  k8s:
    state: present
    resource_definition: &svc
      apiVersion: v1
      kind: Service
      metadata:
        name: web
        namespace: testing
        labels:
          app: galaxy
          service: web
      spec:
        selector:
          app: galaxy
          service: web
        ports:
        - protocol: TCP
          targetPort: 8000
          name: port-8000-tcp
          port: 8000
  register: output

- name: show output
  debug:
    var: output

- name: Create the service again
  k8s:
    state: present
    resource_definition: *svc
  register: output

- name: Service creation should be idempotent
  assert:
    that: not output.changed

- name: Create PVC
  k8s:
    state: present
    inline: &pvc
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: elastic-volume
        namespace: testing
      spec:
        resources:
          requests:
            storage: 5Gi
        accessModes:
        - ReadWriteOnce

- name: Show output
  debug:
    var: output

- name: Create the PVC again
  k8s:
    state: present
    inline: *pvc

- name: PVC creation should be idempotent
  assert:
    that: not output.changed

- name: Create deployment
  k8s:
    state: present
    inline: &deployment
      apiVersion: apps/v1beta1
      kind: Deployment
      metadata:
        name: elastic
        labels:
          app: galaxy
          service: elastic
        namespace: testing
      spec:
        template:
          metadata:
            labels:
              app: galaxy
              service: elastic
          spec:
            containers:
              - name: elastic
                volumeMounts:
                - mountPath: /usr/share/elasticsearch/data
                  name: elastic-volume
                command: ['elasticsearch']
                image: 'ansible/galaxy-elasticsearch:2.4.6'
            volumes:
            - name: elastic-volume
              persistentVolumeClaim:
                claimName: elastic-volume
        replicas: 1
        strategy:
          type: RollingUpdate
  register: output

- name: Show output
  debug:
    var: output

- name: Create deployment again
  k8s:
    state: present
    inline: *deployment
  register: output

- name: Deployment creation should be idempotent
  assert:
    that: not output.changed

# OpenShift Resources
- name: Create a project
  k8s:
    name: testing
    kind: project
    api_version: v1
  register: output

- name: show output
  debug:
    var: output

- name: Create deployment config
  k8s:
    state: present
    inline: &dc
      apiVersion: v1
      kind: DeploymentConfig
      metadata:
        name: elastic
        labels:
          app: galaxy
          service: elastic
        namespace: testing
      spec:
        template:
          metadata:
            labels:
              app: galaxy
              service: elastic
          spec:
            containers:
              - name: elastic
                volumeMounts:
                - mountPath: /usr/share/elasticsearch/data
                  name: elastic-volume
                command: ['elasticsearch']
                image: 'ansible/galaxy-elasticsearch:2.4.6'
            volumes:
            - name: elastic-volume
              persistentVolumeClaim:
                claimName: elastic-volume
        replicas: 1
        strategy:
          type: Rolling
  register: output

- name: Show output
  debug:
    var: output

- name: Create deployment config again
  k8s:
    state: present
    inline: *dc
  register: output

- name: DC creation should be idempotent
  assert:
    that: not output.changed
