--- - 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 diff: true - 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 is not defined - 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 - scale_up_noop.diff is not defined - 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 diff: true - 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 # scale multiple resource using label selectors - name: create deployment kubernetes.core.k8s: namespace: "{{ scale_namespace }}" src: files/deployment.yaml - name: list deployment kubernetes.core.k8s_info: kind: Deployment namespace: "{{ scale_namespace }}" label_selectors: - app=nginx register: resource - assert: that: - resource.resources | list | length == 2 - name: scale deployment using resource version kubernetes.core.k8s_scale: replicas: 2 kind: Deployment namespace: "{{ scale_namespace }}" resource_version: 0 label_selectors: - app=nginx register: scale_out - assert: that: - not scale_out.changed - scale_out.results | selectattr('warning', 'defined') | list | length == 2 - name: scale deployment using current replicas (wrong value) kubernetes.core.k8s_scale: replicas: 2 current_replicas: 4 kind: Deployment namespace: "{{ scale_namespace }}" label_selectors: - app=nginx register: scale_out - assert: that: - not scale_out.changed - scale_out.results | selectattr('warning', 'defined') | list | length == 2 - name: scale deployment using current replicas (right value) kubernetes.core.k8s_scale: replicas: 2 current_replicas: 3 kind: Deployment namespace: "{{ scale_namespace }}" label_selectors: - app=nginx wait: yes wait_timeout: 60 register: scale_out - assert: that: - scale_out.changed - scale_out.results | map(attribute='result.status.replicas') | list | unique == [2] always: - name: Remove namespace k8s: kind: Namespace name: "{{ scale_namespace }}" state: absent