k8s_scale - handle scaling StatefulSets with 'updateStrategy=OnDelete' (#579)

k8s_scale - handle scaling StatefulSets with 'updateStrategy=OnDelete'

SUMMARY

Likely Fixes #503

Handle scaling StatefulSets with 'updateStrategy=OnDelete'
ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

k8s_scale
ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
Reviewed-by: Bikouo Aubin <None>
This commit is contained in:
Mandar Kulkarni
2023-02-06 12:04:41 -08:00
committed by GitHub
parent 0f7963beb9
commit deaf8ee4f3
3 changed files with 75 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
---
bugfixes:
- k8s_scale - fix issue when scaling StatefulSets with updateStrategy=OnDelete (https://github.com/ansible-collections/kubernetes.core/issues/579).

View File

@@ -61,6 +61,13 @@ def daemonset_ready(daemonset: ResourceInstance) -> bool:
def statefulset_ready(statefulset: ResourceInstance) -> bool:
if statefulset.spec.updateStrategy.type == "OnDelete":
return bool(
statefulset.status
and statefulset.status.observedGeneration
== (statefulset.metadata.generation or 0)
and statefulset.status.replicas == statefulset.spec.replicas
)
# These may be None
updated_replicas = statefulset.status.updatedReplicas or 0
ready_replicas = statefulset.status.readyReplicas or 0

View File

@@ -389,6 +389,71 @@
that:
- output.result.status.replicas == 0
- name: Create a StatefulSet with updateStrategy=OnDelete
kubernetes.core.k8s:
wait: yes
wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
definition:
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: "{{ scale_namespace }}"
name: scale-set-ondelete
spec:
replicas: 2
updateStrategy:
type: OnDelete
selector:
matchLabels:
app: foo
template:
metadata:
labels:
app: foo
spec:
terminationGracePeriodSeconds: 10
containers:
- image: busybox
name: busybox
command:
- sleep
- "600"
register: output
- assert:
that:
- output.result.status.replicas == 2
- name: Wait for StatefulSet to scale down to 0
kubernetes.core.k8s_scale:
kind: StatefulSet
api_version: apps/v1
name: scale-set-ondelete
namespace: "{{ scale_namespace }}"
replicas: 0
wait: yes
wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
register: output
- assert:
that:
- output.result.status.replicas == 0
- name: Wait for StatefulSet to scale up to 2
kubernetes.core.k8s_scale:
kind: StatefulSet
api_version: apps/v1
name: scale-set-ondelete
namespace: "{{ scale_namespace }}"
replicas: 2
wait: yes
wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
register: output
- assert:
that:
- output.result.status.replicas == 2
always:
- name: Remove namespace
k8s: