From c415f3c1da2c8e698b023d647608c0d20e2bbcb4 Mon Sep 17 00:00:00 2001 From: Fabricio Aguiar Date: Tue, 2 Apr 2024 18:25:34 +0100 Subject: [PATCH] Add JobGeneration For tracking when jobs are recreated Signed-off-by: Fabricio Aguiar --- ...eee.openstack.org_openstackansibleees.yaml | 4 ++++ api/v1beta1/openstack_ansibleee_types.go | 4 ++++ ...eee.openstack.org_openstackansibleees.yaml | 4 ++++ controllers/openstack_ansibleee_controller.go | 4 ++++ docs/assemblies/openstack_ansibleee.adoc | 5 +++++ tests/functional/ansibleee_controller_test.go | 19 +++++++++++++++++++ .../tests/run_failed_playbook/01-assert.yaml | 1 + .../tests/run_simple_playbook/01-assert.yaml | 1 + .../run_simple_playbook_debug/01-assert.yaml | 1 + .../01-assert.yaml | 1 + .../01-assert.yaml | 1 + 11 files changed, 45 insertions(+) diff --git a/api/bases/ansibleee.openstack.org_openstackansibleees.yaml b/api/bases/ansibleee.openstack.org_openstackansibleees.yaml index 024e5415..13c5bb09 100644 --- a/api/bases/ansibleee.openstack.org_openstackansibleees.yaml +++ b/api/bases/ansibleee.openstack.org_openstackansibleees.yaml @@ -1545,6 +1545,10 @@ spec: type: object status: properties: + JobGeneration: + default: 1 + format: int64 + type: integer JobStatus: default: Pending enum: diff --git a/api/v1beta1/openstack_ansibleee_types.go b/api/v1beta1/openstack_ansibleee_types.go index 1d3fab2d..0cb30fa1 100644 --- a/api/v1beta1/openstack_ansibleee_types.go +++ b/api/v1beta1/openstack_ansibleee_types.go @@ -134,6 +134,10 @@ type OpenStackAnsibleEEStatus struct { // +kubebuilder:default:=Pending // JobStatus status of the executed job (Pending/Running/Succeeded/Failed) JobStatus string `json:"JobStatus,omitempty" optional:"true"` + + // +kubebuilder:default:=1 + // JobGeneration track the amount of job generations + JobGeneration int64 `json:"JobGeneration,omitempty"` } //+kubebuilder:object:root=true diff --git a/config/crd/bases/ansibleee.openstack.org_openstackansibleees.yaml b/config/crd/bases/ansibleee.openstack.org_openstackansibleees.yaml index 024e5415..13c5bb09 100644 --- a/config/crd/bases/ansibleee.openstack.org_openstackansibleees.yaml +++ b/config/crd/bases/ansibleee.openstack.org_openstackansibleees.yaml @@ -1545,6 +1545,10 @@ spec: type: object status: properties: + JobGeneration: + default: 1 + format: int64 + type: integer JobStatus: default: Pending enum: diff --git a/controllers/openstack_ansibleee_controller.go b/controllers/openstack_ansibleee_controller.go index e9b59e3d..cb5bc150 100644 --- a/controllers/openstack_ansibleee_controller.go +++ b/controllers/openstack_ansibleee_controller.go @@ -202,6 +202,10 @@ func (r *OpenStackAnsibleEEReconciler) Reconcile(ctx context.Context, req ctrl.R currentJobHash, ) + if len(currentJobHash) > 0 && ansibleeeJob.HasChanged() { + instance.Status.JobGeneration++ + } + ctrlResult, err := ansibleeeJob.DoJob( ctx, helper, diff --git a/docs/assemblies/openstack_ansibleee.adoc b/docs/assemblies/openstack_ansibleee.adoc index 74c55b2f..c13a7a33 100644 --- a/docs/assemblies/openstack_ansibleee.adoc +++ b/docs/assemblies/openstack_ansibleee.adoc @@ -212,6 +212,11 @@ OpenStackAnsibleEEStatus defines the observed state of OpenStackAnsibleEE | JobStatus status of the executed job (Pending/Running/Succeeded/Failed) | string | false + +| JobGeneration +| JobGeneration track the amount of job generations +| int64 +| false |=== <> diff --git a/tests/functional/ansibleee_controller_test.go b/tests/functional/ansibleee_controller_test.go index 937eaea5..5af544e6 100644 --- a/tests/functional/ansibleee_controller_test.go +++ b/tests/functional/ansibleee_controller_test.go @@ -53,6 +53,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -72,6 +73,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Succeeded")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).To(HaveKey("ansibleee")) }) @@ -93,6 +95,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -115,6 +118,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Failed")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) }) @@ -145,6 +149,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Succeeded")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) originalInputHash := ansibleee.Status.Hash["input"] Expect(ansibleee.Status.Hash).To(HaveKey("ansibleee")) @@ -170,6 +175,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) // simulate that the second job succeeds th.SimulateJobSuccess(ansibleeeName) @@ -182,6 +188,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Succeeded")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash["input"]).NotTo(Equal(originalInputHash)) Expect(ansibleee.Status.Hash["ansibleee"]).NotTo(Equal(originalJobHash)) }) @@ -227,6 +234,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -246,6 +254,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Succeeded")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).To(HaveKey("ansibleee")) }) @@ -267,6 +276,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -289,6 +299,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Failed")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) }) @@ -358,6 +369,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -377,6 +389,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Succeeded")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).To(HaveKey("ansibleee")) }) @@ -398,6 +411,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -420,6 +434,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Failed")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) }) @@ -506,6 +521,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -525,6 +541,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Succeeded")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).To(HaveKey("ansibleee")) }) @@ -546,6 +563,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee := GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Running")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) @@ -568,6 +586,7 @@ var _ = Describe("Ansibleee controller", func() { ) ansibleee = GetAnsibleee(ansibleeeName) Expect(ansibleee.Status.JobStatus).To(Equal("Failed")) + Expect(ansibleee.Status.JobGeneration).To(Equal(int64(1))) Expect(ansibleee.Status.Hash).To(HaveKey("input")) Expect(ansibleee.Status.Hash).NotTo(HaveKey("ansibleee")) }) diff --git a/tests/kuttl/tests/run_failed_playbook/01-assert.yaml b/tests/kuttl/tests/run_failed_playbook/01-assert.yaml index 2d2ba129..e6a79d34 100644 --- a/tests/kuttl/tests/run_failed_playbook/01-assert.yaml +++ b/tests/kuttl/tests/run_failed_playbook/01-assert.yaml @@ -23,6 +23,7 @@ spec: preserveJobs: true status: JobStatus: Failed + JobGeneration: 4 conditions: - message: 'AnsibleExecutionJob error occured Internal error occurred: Job Failed. Check job logs' diff --git a/tests/kuttl/tests/run_simple_playbook/01-assert.yaml b/tests/kuttl/tests/run_simple_playbook/01-assert.yaml index 0da5eaf5..7858cae8 100644 --- a/tests/kuttl/tests/run_simple_playbook/01-assert.yaml +++ b/tests/kuttl/tests/run_simple_playbook/01-assert.yaml @@ -21,6 +21,7 @@ spec: msg: "Hello, world this is ansibleee-play.yaml" status: JobStatus: Succeeded + JobGeneration: 1 --- apiVersion: v1 kind: Pod diff --git a/tests/kuttl/tests/run_simple_playbook_debug/01-assert.yaml b/tests/kuttl/tests/run_simple_playbook_debug/01-assert.yaml index c282eab3..26d485f5 100644 --- a/tests/kuttl/tests/run_simple_playbook_debug/01-assert.yaml +++ b/tests/kuttl/tests/run_simple_playbook_debug/01-assert.yaml @@ -21,6 +21,7 @@ spec: msg: "Hello, world this is ansibleee-play-debug.yaml" status: JobStatus: Running + JobGeneration: 1 --- apiVersion: v1 kind: Pod diff --git a/tests/kuttl/tests/run_simple_playbook_debug_cmdline/01-assert.yaml b/tests/kuttl/tests/run_simple_playbook_debug_cmdline/01-assert.yaml index 2805b9e4..f4acac3c 100644 --- a/tests/kuttl/tests/run_simple_playbook_debug_cmdline/01-assert.yaml +++ b/tests/kuttl/tests/run_simple_playbook_debug_cmdline/01-assert.yaml @@ -21,6 +21,7 @@ spec: msg: "Hello, world this is ansibleee-play-debug.yaml" status: JobStatus: Running + JobGeneration: 1 --- apiVersion: v1 kind: Pod diff --git a/tests/kuttl/tests/run_simple_playbook_extra_vars/01-assert.yaml b/tests/kuttl/tests/run_simple_playbook_extra_vars/01-assert.yaml index 25514028..87253073 100644 --- a/tests/kuttl/tests/run_simple_playbook_extra_vars/01-assert.yaml +++ b/tests/kuttl/tests/run_simple_playbook_extra_vars/01-assert.yaml @@ -27,6 +27,7 @@ spec: why: "because" status: JobStatus: Succeeded + JobGeneration: 1 --- apiVersion: v1 kind: Pod