# TODO: This is the only way I could get the kubeconfig, I don't know why. Running the lookup outside of debug seems to return an empty string #- debug: msg={{ lookup('env', 'K8S_AUTH_KUBECONFIG') }} # register: kubeconfig # Kubernetes resources - block: - 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 ### Type tests - name: Create a namespace from a string k8s: definition: |+ --- kind: Namespace apiVersion: v1 metadata: name: testing1 - name: Namespace should exist k8s_facts: kind: Namespace api_version: v1 name: testing1 register: k8s_facts_testing1 failed_when: not k8s_facts_testing1.resources or k8s_facts_testing1.resources[0].status.phase != "Active" - name: Create resources from a multidocument yaml string k8s: definition: |+ --- kind: Namespace apiVersion: v1 metadata: name: testing2 --- kind: Namespace apiVersion: v1 metadata: name: testing3 - name: Lookup namespaces k8s_facts: api_version: v1 kind: Namespace name: "{{ item }}" loop: - testing2 - testing3 register: k8s_namespaces - name: Resources should exist assert: that: item.resources[0].status.phase == 'Active' loop: "{{ k8s_namespaces.results }}" - name: Delete resources from a multidocument yaml string k8s: state: absent definition: |+ --- kind: Namespace apiVersion: v1 metadata: name: testing2 --- kind: Namespace apiVersion: v1 metadata: name: testing3 - name: Lookup namespaces k8s_facts: api_version: v1 kind: Namespace name: "{{ item }}" loop: - testing2 - testing3 register: k8s_namespaces - name: Resources should not exist assert: that: - not item.resources or item.resources[0].status.phase == "Terminating" loop: "{{ k8s_namespaces.results }}" - name: Create resources from a list k8s: definition: - kind: Namespace apiVersion: v1 metadata: name: testing4 - kind: Namespace apiVersion: v1 metadata: name: testing5 - name: Lookup namespaces k8s_facts: api_version: v1 kind: Namespace name: "{{ item }}" loop: - testing4 - testing5 register: k8s_namespaces - name: Resources should exist assert: that: item.resources[0].status.phase == 'Active' loop: "{{ k8s_namespaces.results }}" - name: install custom resource definitions k8s: definition: "{{ lookup('file', role_path + '/files/setup-crd.yml') }}" - name: create custom resource definition k8s: definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}" namespace: testing4 register: create_crd - name: recreate custom resource definition k8s: definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}" namespace: testing4 register: recreate_crd ignore_errors: yes - name: assert that recreating crd fails assert: that: - recreate_crd is failed - name: recreate custom resource definition with merge_type k8s: definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}" merge_type: merge namespace: testing4 register: recreate_crd_with_merge - name: recreate custom resource definition with merge_type list k8s: definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}" merge_type: - strategic-merge - merge namespace: testing4 register: recreate_crd_with_merge_list - name: remove crd k8s: definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}" namespace: testing4 state: absent - name: Delete resources from a list k8s: state: absent definition: - kind: Namespace apiVersion: v1 metadata: name: testing4 - kind: Namespace apiVersion: v1 metadata: name: testing5 - k8s_facts: api_version: v1 kind: Namespace name: "{{ item }}" loop: - testing4 - testing5 register: k8s_facts - name: Resources are terminating if still in results assert: that: not item.resources or item.resources[0].status.phase == "Terminating" loop: "{{ k8s_facts.results }}" always: - name: remove crd k8s: definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}" namespace: testing4 state: absent ignore_errors: yes - name: Delete all namespaces k8s: state: absent definition: - kind: Namespace apiVersion: v1 metadata: name: testing1 - kind: Namespace apiVersion: v1 metadata: name: testing2 - kind: Namespace apiVersion: v1 metadata: name: testing3 - kind: Namespace apiVersion: v1 metadata: name: testing4 - kind: Namespace apiVersion: v1 metadata: name: testing5 ignore_errors: yes