--- - block: - set_fact: scale_namespace: scale - name: Ensure namespace exists k8s: definition: apiVersion: v1 kind: Namespace metadata: name: "{{ scale_namespace }}" - name: Add a deployment k8s: definition: apiVersion: apps/v1 kind: Deployment metadata: name: scale-deploy namespace: "{{ scale_namespace }}" spec: replicas: 1 selector: matchLabels: app: "{{ k8s_pod_name }}" template: "{{ k8s_pod_template }}" wait: yes wait_timeout: 60 apply: yes vars: k8s_pod_name: scale-deploy k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:v0.10.0-green k8s_pod_ports: - containerPort: 8080 name: http protocol: TCP - name: Get pods in scale-deploy k8s_info: kind: Pod label_selectors: - app=scale-deploy namespace: "{{ scale_namespace }}" field_selectors: - status.phase=Running - name: Scale the deployment k8s_scale: api_version: apps/v1 kind: Deployment name: scale-deploy namespace: "{{ scale_namespace }}" replicas: 0 wait: yes register: scale_down - name: Get pods in scale-deploy k8s_info: kind: Pod label_selectors: - app=scale-deploy namespace: "{{ scale_namespace }}" field_selectors: - status.phase=Running register: scale_down_deploy_pods until: scale_down_deploy_pods.resources | length == 0 retries: 6 delay: 5 - name: Ensure that scale down took effect assert: that: - scale_down is changed - '"duration" in scale_down' - scale_down.diff - name: Reapply the earlier deployment k8s: definition: api_version: apps/v1 kind: Deployment metadata: name: scale-deploy namespace: "{{ scale_namespace }}" spec: replicas: 1 selector: matchLabels: app: "{{ k8s_pod_name }}" template: "{{ k8s_pod_template }}" wait: yes wait_timeout: 60 apply: yes vars: k8s_pod_name: scale-deploy k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:v0.10.0-green k8s_pod_ports: - containerPort: 8080 name: http protocol: TCP register: reapply_after_scale - name: Get pods in scale-deploy k8s_info: kind: Pod label_selectors: - app=scale-deploy namespace: "{{ scale_namespace }}" field_selectors: - status.phase=Running register: scale_up_deploy_pods - name: Ensure that reapply after scale worked assert: that: - reapply_after_scale is changed - scale_up_deploy_pods.resources | length == 1 - name: Scale the deployment up k8s_scale: api_version: apps/v1 kind: Deployment name: scale-deploy namespace: "{{ scale_namespace }}" replicas: 2 wait: yes wait_timeout: 60 register: scale_up - name: Get pods in scale-deploy k8s_info: kind: Pod label_selectors: - app=scale-deploy field_selectors: - status.phase=Running namespace: "{{ scale_namespace }}" register: scale_up_further_deploy_pods - name: Ensure that scale up worked assert: that: - scale_up is changed - '"duration" in scale_up' - scale_up.diff - scale_up_further_deploy_pods.resources | length == 2 - name: Don't scale the deployment up k8s_scale: api_version: apps/v1 kind: Deployment name: scale-deploy namespace: "{{ scale_namespace }}" replicas: 2 wait: yes register: scale_up_noop - name: Get pods in scale-deploy k8s_info: kind: Pod label_selectors: - app=scale-deploy field_selectors: - status.phase=Running namespace: "{{ scale_namespace }}" register: scale_up_noop_pods - name: Ensure that no-op scale up worked assert: that: - scale_up_noop is not changed - not scale_up_noop.diff - scale_up_noop_pods.resources | length == 2 - '"duration" in scale_up_noop' - name: Scale deployment down without wait k8s_scale: api_version: apps/v1 kind: Deployment name: scale-deploy namespace: "{{ scale_namespace }}" replicas: 1 wait: no register: scale_down_no_wait - name: Ensure that scale down succeeds k8s_info: kind: Pod label_selectors: - app=scale-deploy namespace: "{{ scale_namespace }}" register: scale_down_no_wait_pods retries: 6 delay: 5 until: scale_down_no_wait_pods.resources | length == 1 - name: Ensure that scale down without wait worked assert: that: - scale_down_no_wait is changed - scale_down_no_wait.diff - scale_down_no_wait_pods.resources | length == 1 always: - name: Remove namespace k8s: kind: Namespace name: "{{ scale_namespace }}" state: absent