From 9fd189ae4cb09d7c92e14384096ac0bef5a81564 Mon Sep 17 00:00:00 2001 From: Sivaram Kannan Date: Wed, 6 Nov 2019 21:57:46 +0530 Subject: [PATCH] Make Appversion in operator.yaml templatable. (#1026) What this PR does / why we need it: Make the version and appVersion variables in operator.yaml as a template to statefulset.yaml. This is still a WIP, and creating this PR as I need guidance in completing this. Fixes #871 --- pkg/apis/kudo/v1beta1/operatorversion_types.go | 5 +++-- pkg/controller/instance/instance_controller.go | 1 + pkg/engine/task/render.go | 1 + pkg/engine/types.go | 1 + pkg/kudoctl/packages/package.go | 1 + .../packages/testdata/zk-crd-golden1/operatorversion.golden | 1 + .../packages/testdata/zk-crd-golden2/operatorversion.golden | 1 + .../first-operator-test/first-operator/operator.yaml | 1 + .../first-operator/templates/deployment.yaml | 2 +- 9 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pkg/apis/kudo/v1beta1/operatorversion_types.go b/pkg/apis/kudo/v1beta1/operatorversion_types.go index 11b278fc7..f9fbdec45 100644 --- a/pkg/apis/kudo/v1beta1/operatorversion_types.go +++ b/pkg/apis/kudo/v1beta1/operatorversion_types.go @@ -23,8 +23,9 @@ import ( // OperatorVersionSpec defines the desired state of OperatorVersion. type OperatorVersionSpec struct { // +optional - Operator corev1.ObjectReference `json:"operator,omitempty"` - Version string `json:"version,omitempty"` + Operator corev1.ObjectReference `json:"operator,omitempty"` + Version string `json:"version,omitempty"` + AppVersion string `json:"appVersion,omitempty"` // Yaml captures a templated yaml list of elements that define the application operator instance. Templates map[string]string `json:"templates,omitempty"` diff --git a/pkg/controller/instance/instance_controller.go b/pkg/controller/instance/instance_controller.go index 8900eb500..0277f99fa 100644 --- a/pkg/controller/instance/instance_controller.go +++ b/pkg/controller/instance/instance_controller.go @@ -165,6 +165,7 @@ func (r *Reconciler) Reconcile(request ctrl.Request) (ctrl.Result, error) { metadata := &engine.Metadata{ OperatorVersionName: ov.Name, OperatorVersion: ov.Spec.Version, + AppVersion: ov.Spec.AppVersion, ResourcesOwner: instance, OperatorName: ov.Spec.Operator.Name, InstanceNamespace: instance.Namespace, diff --git a/pkg/engine/task/render.go b/pkg/engine/task/render.go index 1d0bc8fe5..03ffc3118 100644 --- a/pkg/engine/task/render.go +++ b/pkg/engine/task/render.go @@ -17,6 +17,7 @@ func render(resourceNames []string, templates map[string]string, params map[stri configs["PlanName"] = meta.PlanName configs["PhaseName"] = meta.PhaseName configs["StepName"] = meta.StepName + configs["AppVersion"] = meta.AppVersion resources := map[string]string{} engine := renderer.New() diff --git a/pkg/engine/types.go b/pkg/engine/types.go index 2451833c4..c87697a96 100644 --- a/pkg/engine/types.go +++ b/pkg/engine/types.go @@ -14,6 +14,7 @@ type Metadata struct { OperatorName string OperatorVersionName string OperatorVersion string + AppVersion string // the object that will own all the resources created by this execution ResourcesOwner metav1.Object diff --git a/pkg/kudoctl/packages/package.go b/pkg/kudoctl/packages/package.go index 1a985fe08..e76688dc3 100644 --- a/pkg/kudoctl/packages/package.go +++ b/pkg/kudoctl/packages/package.go @@ -213,6 +213,7 @@ func (p *PackageFiles) getCRDs() (*Resources, error) { Name: p.Operator.Name, Kind: "Operator", }, + AppVersion: p.Operator.AppVersion, Version: p.Operator.Version, Templates: p.Templates, Tasks: p.Operator.Tasks, diff --git a/pkg/kudoctl/packages/testdata/zk-crd-golden1/operatorversion.golden b/pkg/kudoctl/packages/testdata/zk-crd-golden1/operatorversion.golden index da4a77cd9..c8b41efec 100644 --- a/pkg/kudoctl/packages/testdata/zk-crd-golden1/operatorversion.golden +++ b/pkg/kudoctl/packages/testdata/zk-crd-golden1/operatorversion.golden @@ -10,6 +10,7 @@ spec: kind: Operator # Add fields here version: "0.1.0" + appVersion: "3.4.10" parameters: - name: cpus description: Amount of cpu to provide to Zookeeper pods diff --git a/pkg/kudoctl/packages/testdata/zk-crd-golden2/operatorversion.golden b/pkg/kudoctl/packages/testdata/zk-crd-golden2/operatorversion.golden index da4a77cd9..c8b41efec 100644 --- a/pkg/kudoctl/packages/testdata/zk-crd-golden2/operatorversion.golden +++ b/pkg/kudoctl/packages/testdata/zk-crd-golden2/operatorversion.golden @@ -10,6 +10,7 @@ spec: kind: Operator # Add fields here version: "0.1.0" + appVersion: "3.4.10" parameters: - name: cpus description: Amount of cpu to provide to Zookeeper pods diff --git a/test/integration/first-operator-test/first-operator/operator.yaml b/test/integration/first-operator-test/first-operator/operator.yaml index f7c6cd592..4c99b8048 100644 --- a/test/integration/first-operator-test/first-operator/operator.yaml +++ b/test/integration/first-operator-test/first-operator/operator.yaml @@ -1,6 +1,7 @@ apiVersion: kudo.dev/v1beta1 name: "first-operator" version: "0.1.0" +appVersion: "1.7.9" kubernetesVersion: 1.13.0 maintainers: - name: Your name diff --git a/test/integration/first-operator-test/first-operator/templates/deployment.yaml b/test/integration/first-operator-test/first-operator/templates/deployment.yaml index 73b0ad025..f5450122d 100644 --- a/test/integration/first-operator-test/first-operator/templates/deployment.yaml +++ b/test/integration/first-operator-test/first-operator/templates/deployment.yaml @@ -14,6 +14,6 @@ spec: spec: containers: - name: nginx - image: nginx:1.7.9 + image: nginx:{{ .AppVersion }} ports: - containerPort: 80 \ No newline at end of file