From 10dfea42033c1aa2b7df5c9b1920d94ba6153f50 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 4 Oct 2018 14:52:36 +0300 Subject: [PATCH] Rename CRD group and kind name to canaries.steerer.app --- README.md | 136 ++++++------ artifacts/rollouts/podinfo.yaml | 8 +- artifacts/rollouts/podinfoc.yaml | 4 +- artifacts/steerer/crd.yaml | 12 +- artifacts/steerer/deployment.yaml | 2 +- charts/steerer/Chart.yaml | 2 +- charts/steerer/templates/crd.yaml | 12 +- charts/steerer/values.yaml | 2 +- cmd/steerer/main.go | 2 +- docs/grafana-5.2.4.tgz | Bin 6835 -> 6835 bytes docs/index.yaml | 18 +- docs/podinfo-steerer-2.0.0.tgz | Bin 2884 -> 2885 bytes docs/steerer-0.0.1.tgz | Bin 3135 -> 3115 bytes pkg/apis/rollout/register.go | 2 +- pkg/apis/rollout/v1beta1/doc.go | 2 +- pkg/apis/rollout/v1beta1/register.go | 4 +- pkg/apis/rollout/v1beta1/types.go | 22 +- .../rollout/v1beta1/zz_generated.deepcopy.go | 194 +++++++++--------- pkg/client/clientset/versioned/clientset.go | 26 +-- .../versioned/fake/clientset_generated.go | 16 +- .../clientset/versioned/fake/register.go | 4 +- .../clientset/versioned/scheme/register.go | 4 +- .../versioned/typed/rollout/v1beta1/canary.go | 174 ++++++++++++++++ .../typed/rollout/v1beta1/fake/fake_canary.go | 140 +++++++++++++ .../rollout/v1beta1/fake/fake_rollout.go | 140 ------------- .../v1beta1/fake/fake_rollout_client.go | 8 +- .../rollout/v1beta1/generated_expansion.go | 2 +- .../typed/rollout/v1beta1/rollout.go | 174 ---------------- .../typed/rollout/v1beta1/rollout_client.go | 30 +-- .../informers/externalversions/factory.go | 4 +- .../informers/externalversions/generic.go | 6 +- .../externalversions/rollout/interface.go | 2 +- .../rollout/v1beta1/{rollout.go => canary.go} | 38 ++-- .../rollout/v1beta1/interface.go | 10 +- pkg/client/listers/rollout/v1beta1/canary.go | 94 +++++++++ .../rollout/v1beta1/expansion_generated.go | 12 +- pkg/client/listers/rollout/v1beta1/rollout.go | 94 --------- pkg/controller/controller.go | 20 +- pkg/controller/deployment.go | 70 +++---- pkg/version/version.go | 2 +- 40 files changed, 744 insertions(+), 748 deletions(-) create mode 100644 pkg/client/clientset/versioned/typed/rollout/v1beta1/canary.go create mode 100644 pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_canary.go delete mode 100644 pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout.go delete mode 100644 pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout.go rename pkg/client/informers/externalversions/rollout/v1beta1/{rollout.go => canary.go} (58%) create mode 100644 pkg/client/listers/rollout/v1beta1/canary.go delete mode 100644 pkg/client/listers/rollout/v1beta1/rollout.go diff --git a/README.md b/README.md index 21cee985..12a5f1d2 100644 --- a/README.md +++ b/README.md @@ -39,14 +39,14 @@ that exposes a port named http or https. These services are used as destinations ![steerer-overview](https://github.com/stefanprodan/steerer/blob/master/docs/diagrams/steerer-overview.png) -Gated rollout stages: +Gated canary promotion stages: -* scan for deployments marked for rollout +* scan for canary deployments * check Istio virtual service routes are mapped to primary and canary ClusterIP services * check primary and canary deployments status * halt rollout if a rolling update is underway * halt rollout if pods are unhealthy -* increase canary traffic weight percentage from 0% to 10% +* increase canary traffic weight percentage from 0% to 5% (step weight) * check canary HTTP request success rate and latency * halt rollout if any metric is under the specified threshold * increment the failed checks counter @@ -54,7 +54,7 @@ Gated rollout stages: * route all traffic to primary * scale to zero the canary deployment and mark it as failed * wait for the canary deployment to be updated (revision bump) and start over -* increase canary traffic weight by 10% (step weight) till it reaches 100% (max weight) +* increase canary traffic weight by 5% (step weight) till it reaches 50% (max weight) * halt rollout while canary request success rate is under the threshold * halt rollout while canary request duration P99 is over the threshold * halt rollout if the primary or canary deployment becomes unhealthy @@ -68,7 +68,7 @@ Gated rollout stages: * mark rollout as finished * wait for the canary deployment to be updated (revision bump) and start over -You can change the canary analysis _max weight_ and the _step weight_ percentage in the rollout custom resource. +You can change the canary analysis _max weight_ and the _step weight_ percentage in the Steerer's custom resource. Assuming the primary deployment is named _podinfo_ and the canary one _podinfo-canary_, Steerer will require a virtual service configured with weight-based routing: @@ -112,11 +112,11 @@ spec: targetPort: 9898 ``` -Based on the two deployments, services and virtual service, a rollout can be defined using Steerer's custom resource: +Based on the two deployments, services and virtual service, a canary promotion can be defined using Steerer's custom resource: ```yaml -apiVersion: apps.weave.works/v1beta1 -kind: Rollout +apiVersion: steerer.app/v1beta1 +kind: Canary metadata: name: podinfo namespace: test @@ -136,10 +136,10 @@ spec: threshold: 10 # max traffic percentage routed to canary # percentage (0-100) - maxWeight: 100 + maxWeight: 50 # canary increment step # percentage (0-100) - stepWeight: 10 + stepWeight: 5 metrics: - name: istio_requests_total # minimum req success rate (non 5xx responses) @@ -150,7 +150,7 @@ spec: # maximum req duration P99 # milliseconds threshold: 500 - interval: 30s + interval: 1m ``` The canary analysis is using the following promql queries: @@ -230,16 +230,16 @@ Create a virtual service (replace the Istio gateway and the internet domain with kubectl apply -f ${REPO}/artifacts/workloads/virtual-service.yaml ``` -Create a rollout custom resource: +Create a canary promotion custom resource: ```bash kubectl apply -f ${REPO}/artifacts/rollouts/podinfo.yaml ``` -Rollout output: +Canary promotion output: ``` -kubectl -n test describe rollout/podinfo +kubectl -n test describe canary/podinfo Status: Canary Revision: 16271121 @@ -248,29 +248,29 @@ Status: Events: Type Reason Age From Message ---- ------ ---- ---- ------- - Normal Synced 3m steerer Starting rollout for podinfo.test - Normal Synced 3m steerer Advance rollout podinfo.test weight 10 - Normal Synced 3m steerer Advance rollout podinfo.test weight 20 - Normal Synced 3m steerer Advance rollout podinfo.test weight 30 - Warning Synced 3m steerer Halt rollout podinfo.test request duration 2.525s > 500ms - Warning Synced 3m steerer Halt rollout podinfo.test request duration 1.567s > 500ms - Warning Synced 3m steerer Halt rollout podinfo.test request duration 823ms > 500ms - Normal Synced 2m steerer Advance rollout podinfo.test weight 40 - Normal Synced 2m steerer Advance rollout podinfo.test weight 50 - Normal Synced 1m steerer Advance rollout podinfo.test weight 60 - Warning Synced 1m steerer Halt rollout podinfo.test success rate 82.33% < 99% - Warning Synced 1m steerer Halt rollout podinfo.test success rate 87.22% < 99% - Warning Synced 1m steerer Halt rollout podinfo.test success rate 94.74% < 99% - Normal Synced 1m steerer Advance rollout podinfo.test weight 70 - Normal Synced 55s steerer Advance rollout podinfo.test weight 80 - Normal Synced 45s steerer Advance rollout podinfo.test weight 90 - Normal Synced 35s steerer Advance rollout podinfo.test weight 100 + Normal Synced 3m steerer Starting canary deployment for podinfo.test + Normal Synced 3m steerer Advance podinfo.test canary weight 5 + Normal Synced 3m steerer Advance podinfo.test canary weight 10 + Normal Synced 3m steerer Advance podinfo.test canary weight 15 + Warning Synced 3m steerer Halt podinfo.test advancement request duration 2.525s > 500ms + Warning Synced 3m steerer Halt podinfo.test advancement request duration 1.567s > 500ms + Warning Synced 3m steerer Halt podinfo.test advancement request duration 823ms > 500ms + Normal Synced 2m steerer Advance podinfo.test canary weight 20 + Normal Synced 2m steerer Advance podinfo.test canary weight 25 + Normal Synced 1m steerer Advance podinfo.test canary weight 30 + Warning Synced 1m steerer Halt podinfo.test advancement success rate 82.33% < 99% + Warning Synced 1m steerer Halt podinfo.test advancement success rate 87.22% < 99% + Warning Synced 1m steerer Halt podinfo.test advancement success rate 94.74% < 99% + Normal Synced 1m steerer Advance podinfo.test canary weight 35 + Normal Synced 55s steerer Advance podinfo.test canary weight 40 + Normal Synced 45s steerer Advance podinfo.test canary weight 45 + Normal Synced 35s steerer Advance podinfo.test canary weight 50 Normal Synced 25s steerer Copying podinfo-canary.test template spec to podinfo.test Warning Synced 15s steerer Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available Normal Synced 5s steerer Promotion completed! Scaling down podinfo-canary.test ``` -During the rollout you can generate HTTP 500 errors and high latency to test if Steerer pauses the rollout. +During the canary analysis you can generate HTTP 500 errors and high latency to test if Steerer pauses the rollout. Create a tester pod and exec into it: @@ -295,7 +295,7 @@ When the number of failed checks reaches the canary analysis threshold, the traf the canary is scaled to zero and the rollout is marked as failed. ``` -kubectl -n test describe rollout/podinfo +kubectl -n test describe canary/podinfo Status: Canary Revision: 16695041 @@ -304,20 +304,20 @@ Status: Events: Type Reason Age From Message ---- ------ ---- ---- ------- - Normal Synced 3m steerer Starting rollout for podinfo.test - Normal Synced 3m steerer Advance rollout podinfo.test weight 10 - Normal Synced 3m steerer Advance rollout podinfo.test weight 20 - Normal Synced 3m steerer Advance rollout podinfo.test weight 30 - Normal Synced 3m steerer Halt rollout podinfo.test success rate 69.17% < 99% - Normal Synced 2m steerer Halt rollout podinfo.test success rate 61.39% < 99% - Normal Synced 2m steerer Halt rollout podinfo.test success rate 55.06% < 99% - Normal Synced 2m steerer Halt rollout podinfo.test success rate 47.00% < 99% - Normal Synced 2m steerer (combined from similar events): Halt rollout podinfo.test success rate 38.08% < 99% + Normal Synced 3m steerer Starting canary deployment for podinfo.test + Normal Synced 3m steerer Advance podinfo.test canary weight 5 + Normal Synced 3m steerer Advance podinfo.test canary weight 10 + Normal Synced 3m steerer Advance podinfo.test canary weight 15 + Normal Synced 3m steerer Halt podinfo.test advancement success rate 69.17% < 99% + Normal Synced 2m steerer Halt podinfo.test advancement success rate 61.39% < 99% + Normal Synced 2m steerer Halt podinfo.test advancement success rate 55.06% < 99% + Normal Synced 2m steerer Halt podinfo.test advancement success rate 47.00% < 99% + Normal Synced 2m steerer (combined from similar events): Halt podinfo.test advancement success rate 38.08% < 99% Warning Synced 1m steerer Rolling back podinfo-canary.test failed checks threshold reached 10 Warning Synced 1m steerer Canary failed! Scaling down podinfo-canary.test ``` -Trigger a new rollout by updating the canary image: +Trigger a new canary deployment by updating the canary image: ```bash kubectl -n test set image deployment/podinfo-canary \ @@ -327,7 +327,7 @@ podinfod=quay.io/stefanprodan/podinfo:1.2.1 Steer detects that the canary revision changed and starts a new rollout: ``` -kubectl -n test describe rollout/podinfo +kubectl -n test describe canary/podinfo Status: Canary Revision: 19871136 @@ -339,16 +339,16 @@ Events: Normal Synced 3m steerer New revision detected podinfo-canary.test old 17211012 new 17246876 Normal Synced 3m steerer Scaling up podinfo.test Warning Synced 3m steerer Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available - Normal Synced 3m steerer Advance rollout podinfo.test weight 10 - Normal Synced 3m steerer Advance rollout podinfo.test weight 20 - Normal Synced 3m steerer Advance rollout podinfo.test weight 30 - Normal Synced 2m steerer Advance rollout podinfo.test weight 40 - Normal Synced 2m steerer Advance rollout podinfo.test weight 50 - Normal Synced 1m steerer Advance rollout podinfo.test weight 60 - Normal Synced 1m steerer Advance rollout podinfo.test weight 70 - Normal Synced 55s steerer Advance rollout podinfo.test weight 80 - Normal Synced 45s steerer Advance rollout podinfo.test weight 90 - Normal Synced 35s steerer Advance rollout podinfo.test weight 100 + Normal Synced 3m steerer Advance podinfo.test canary weight 5 + Normal Synced 3m steerer Advance podinfo.test canary weight 10 + Normal Synced 3m steerer Advance podinfo.test canary weight 15 + Normal Synced 2m steerer Advance podinfo.test canary weight 20 + Normal Synced 2m steerer Advance podinfo.test canary weight 25 + Normal Synced 1m steerer Advance podinfo.test canary weight 30 + Normal Synced 1m steerer Advance podinfo.test canary weight 35 + Normal Synced 55s steerer Advance podinfo.test canary weight 40 + Normal Synced 45s steerer Advance podinfo.test canary weight 45 + Normal Synced 35s steerer Advance podinfo.test canary weight 50 Normal Synced 25s steerer Copying podinfo-canary.test template spec to podinfo.test Warning Synced 15s steerer Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available Normal Synced 5s steerer Promotion completed! Scaling down podinfo-canary.test @@ -375,19 +375,19 @@ The canary errors and latency spikes have been recorded as Kubernetes events and ``` kubectl -n istio-system logs deployment/steerer --tail=100 | jq .msg -Starting rollout for podinfo.test -Advance rollout podinfo.test weight 5 -Advance rollout podinfo.test weight 10 -Advance rollout podinfo.test weight 15 -Advance rollout podinfo.test weight 20 -Advance rollout podinfo.test weight 25 -Advance rollout podinfo.test weight 30 -Advance rollout podinfo.test weight 35 -Halt rollout podinfo.test success rate 98.69% < 99% -Advance rollout podinfo.test weight 40 -Halt rollout podinfo.test request duration 1.515s > 500ms -Advance rollout podinfo.test weight 45 -Advance rollout podinfo.test weight 50 +Starting canary deployment for podinfo.test +Advance podinfo.test canary weight 5 +Advance podinfo.test canary weight 10 +Advance podinfo.test canary weight 15 +Advance podinfo.test canary weight 20 +Advance podinfo.test canary weight 25 +Advance podinfo.test canary weight 30 +Advance podinfo.test canary weight 35 +Halt podinfo.test advancement success rate 98.69% < 99% +Advance podinfo.test canary weight 40 +Halt podinfo.test advancement request duration 1.515s > 500ms +Advance podinfo.test canary weight 45 +Advance podinfo.test canary weight 50 Copying podinfo-canary.test template spec to podinfo-primary.test Scaling down podinfo-canary.test Promotion completed! podinfo-canary.test revision 81289 @@ -409,5 +409,5 @@ When submitting bug reports please include as much details as possible: * which Steerer version * which Steerer CRD version * which Kubernetes/Istio version -* what configuration (rollout, virtual service and workloads definitions) +* what configuration (canary, virtual service and workloads definitions) * what happened (Steerer, Istio Pilot and Proxy logs) diff --git a/artifacts/rollouts/podinfo.yaml b/artifacts/rollouts/podinfo.yaml index e7270a93..b0302a66 100644 --- a/artifacts/rollouts/podinfo.yaml +++ b/artifacts/rollouts/podinfo.yaml @@ -4,8 +4,8 @@ # generate errors: watch curl http://podinfo-canary:9898/status/500 # run load test: kubectl run -n test -it --rm --restart=Never hey --image=stefanprodan/loadtest -- sh # generate load: hey -z 2m -h2 -m POST -d '{test: 1}' -c 10 -q 5 http://podinfo:9898/api/echo -apiVersion: apps.weave.works/v1beta1 -kind: Rollout +apiVersion: steerer.app/v1beta1 +kind: Canary metadata: name: podinfo namespace: test @@ -22,10 +22,10 @@ spec: canaryAnalysis: # max number of failed metric checks # before rolling back the canary - threshold: 10 + threshold: 5 # max traffic percentage routed to canary # percentage (0-100) - maxWeight: 100 + maxWeight: 50 # canary increment step # percentage (0-100) stepWeight: 10 diff --git a/artifacts/rollouts/podinfoc.yaml b/artifacts/rollouts/podinfoc.yaml index 46c62311..e320cdb9 100644 --- a/artifacts/rollouts/podinfoc.yaml +++ b/artifacts/rollouts/podinfoc.yaml @@ -1,5 +1,5 @@ -apiVersion: apps.weave.works/v1beta1 -kind: Rollout +apiVersion: steerer.app/v1beta1 +kind: Canary metadata: name: podinfoc namespace: test diff --git a/artifacts/steerer/crd.yaml b/artifacts/steerer/crd.yaml index 901add8c..b6b5e228 100644 --- a/artifacts/steerer/crd.yaml +++ b/artifacts/steerer/crd.yaml @@ -1,20 +1,18 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: - name: rollouts.apps.weave.works + name: canaries.steerer.app spec: - group: apps.weave.works + group: steerer.app version: v1beta1 versions: - name: v1beta1 served: true storage: true names: - plural: rollouts - singular: rollout - kind: Rollout - shortNames: - - roll + plural: canaries + singular: canary + kind: Canary scope: Namespaced validation: openAPIV3Schema: diff --git a/artifacts/steerer/deployment.yaml b/artifacts/steerer/deployment.yaml index 7062bba6..264a18a4 100644 --- a/artifacts/steerer/deployment.yaml +++ b/artifacts/steerer/deployment.yaml @@ -22,7 +22,7 @@ spec: serviceAccountName: steerer containers: - name: steerer - image: stefanprodan/steerer:0.0.1-rc.18 + image: stefanprodan/steerer:0.0.1-rc.23 imagePullPolicy: Always ports: - name: http diff --git a/charts/steerer/Chart.yaml b/charts/steerer/Chart.yaml index 3fbaeb17..d692ece0 100644 --- a/charts/steerer/Chart.yaml +++ b/charts/steerer/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v1 name: steerer version: 0.0.1 -appVersion: 0.0.1-rc.16 +appVersion: 0.0.1-rc.23 description: Steerer is a Kubernetes operator that automates the promotion of canary deployments using Istio routing for traffic shifting and Prometheus metrics for canary analysis. diff --git a/charts/steerer/templates/crd.yaml b/charts/steerer/templates/crd.yaml index eb30bd3d..42923c9d 100644 --- a/charts/steerer/templates/crd.yaml +++ b/charts/steerer/templates/crd.yaml @@ -2,20 +2,18 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: - name: rollouts.apps.weave.works + name: canaries.steerer.app spec: - group: apps.weave.works + group: steerer.app version: v1beta1 versions: - name: v1beta1 served: true storage: true names: - plural: rollouts - singular: rollout - kind: Rollout - shortNames: - - roll + plural: canaries + singular: canary + kind: Canary scope: Namespaced validation: openAPIV3Schema: diff --git a/charts/steerer/values.yaml b/charts/steerer/values.yaml index 316cf44e..068b25ca 100644 --- a/charts/steerer/values.yaml +++ b/charts/steerer/values.yaml @@ -2,7 +2,7 @@ image: repository: stefanprodan/steerer - tag: 0.0.1-rc.16 + tag: 0.0.1-rc.23 pullPolicy: IfNotPresent controlLoopInterval: "10s" diff --git a/cmd/steerer/main.go b/cmd/steerer/main.go index 09ed4e3e..98d3b948 100644 --- a/cmd/steerer/main.go +++ b/cmd/steerer/main.go @@ -70,7 +70,7 @@ func main() { } rolloutInformerFactory := informers.NewSharedInformerFactory(rolloutClient, time.Second*30) - rolloutInformer := rolloutInformerFactory.Apps().V1beta1().Rollouts() + rolloutInformer := rolloutInformerFactory.Steerer().V1beta1().Canaries() logger.Infof("Starting steerer version %s revision %s", version.VERSION, version.REVISION) diff --git a/docs/grafana-5.2.4.tgz b/docs/grafana-5.2.4.tgz index 10dda0c14b7d520f05c608a6997d470b6e43f540..0e1826b68112e8b509c9d6aa3e5d3e78586150dc 100644 GIT binary patch delta 6716 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 S^WOmg0RR7Vo=P78_5c6|ArjF5 diff --git a/docs/index.yaml b/docs/index.yaml index 0e8eac35..35d08f11 100755 --- a/docs/index.yaml +++ b/docs/index.yaml @@ -3,10 +3,10 @@ entries: grafana: - apiVersion: v1 appVersion: 5.2.0 - created: 2018-10-03T15:13:25.29361+03:00 + created: 2018-10-04T14:48:57.585857+03:00 description: A Helm chart for monitoring progressive deployments powered by Istio and Steerer - digest: 34cfba546cbccadc4907106e0a34dfcd8dad7ddc86517c7b3c29a7f176c91b7b + digest: f8cac4d99069abdffd432b0c7e741aa1cf3c6f88435fd1cc54c00004514d740d home: https://github.com/stefanprodan/steerer name: grafana urls: @@ -15,9 +15,9 @@ entries: podinfo-steerer: - apiVersion: v1 appVersion: 1.2.1 - created: 2018-10-03T15:13:25.294489+03:00 + created: 2018-10-04T14:48:57.586743+03:00 description: Podinfo Helm chart for Steerer progressive delivery - digest: c56d35abf54959141bc6289af9509c5075233f4b9bda90e5d99510b5187b25a2 + digest: 0d9a5037f9765cb74882bcbc1c873527b49af742bdde5ea9ca8c674efcfcb178 engine: gotpl home: https://github.com/stefanprodan/k8s-podinfo maintainers: @@ -31,7 +31,7 @@ entries: version: 2.0.0 - apiVersion: v1 appVersion: 1.2.1 - created: 2018-10-03T15:13:25.294153+03:00 + created: 2018-10-04T14:48:57.586403+03:00 description: Podinfo Helm chart for Steerer progressive delivery digest: f559f387aa45005be085af207b8b4c91776e489fcb6ca7e60f20913ecd21184e engine: gotpl @@ -47,14 +47,14 @@ entries: version: 1.2.1 steerer: - apiVersion: v1 - appVersion: 0.0.1-rc.16 - created: 2018-10-03T15:13:25.294827+03:00 + appVersion: 0.0.1-rc.23 + created: 2018-10-04T14:48:57.587058+03:00 description: Steerer is a Kubernetes operator that automates the promotion of canary deployments using Istio routing for traffic shifting and Prometheus metrics for canary analysis. - digest: 523e304d6820fdbe06934b61761d7519b89a6c948ed8d0ae812a1d0159f534dd + digest: e403eb0e6aff36146d00f0dc56820fd5a464acf6509b5d715e937757bbb29aac name: steerer urls: - https://stefanprodan.github.io/steerer/steerer-0.0.1.tgz version: 0.0.1 -generated: 2018-10-03T15:13:25.293021+03:00 +generated: 2018-10-04T14:48:57.584927+03:00 diff --git a/docs/podinfo-steerer-2.0.0.tgz b/docs/podinfo-steerer-2.0.0.tgz index 85a02b95567e9d0b8e3e90eb36f4357360c131a9..4face780164bb87101c56f1efa0ac19bf5ab2d85 100644 GIT binary patch delta 2854 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 E057GKC;$Ke delta 2853 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 delta 3106 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 diff --git a/pkg/apis/rollout/register.go b/pkg/apis/rollout/register.go index 790eb872..6fd04835 100755 --- a/pkg/apis/rollout/register.go +++ b/pkg/apis/rollout/register.go @@ -17,5 +17,5 @@ limitations under the License. package rollout const ( - GroupName = "apps.weave.works" + GroupName = "steerer.app" ) diff --git a/pkg/apis/rollout/v1beta1/doc.go b/pkg/apis/rollout/v1beta1/doc.go index 2dbc82bb..f7c3bbce 100755 --- a/pkg/apis/rollout/v1beta1/doc.go +++ b/pkg/apis/rollout/v1beta1/doc.go @@ -17,5 +17,5 @@ limitations under the License. // +k8s:deepcopy-gen=package // Package v1beta1 is the v1beta1 version of the API. -// +groupName=apps.weave.works +// +groupName=steerer.app package v1beta1 diff --git a/pkg/apis/rollout/v1beta1/register.go b/pkg/apis/rollout/v1beta1/register.go index 65031862..7ae84073 100755 --- a/pkg/apis/rollout/v1beta1/register.go +++ b/pkg/apis/rollout/v1beta1/register.go @@ -45,8 +45,8 @@ var ( // Adds the list of known types to Scheme. func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, - &Rollout{}, - &RolloutList{}, + &Canary{}, + &CanaryList{}, ) metav1.AddToGroupVersion(scheme, SchemeGroupVersion) return nil diff --git a/pkg/apis/rollout/v1beta1/types.go b/pkg/apis/rollout/v1beta1/types.go index 237d0d39..1ec219dc 100755 --- a/pkg/apis/rollout/v1beta1/types.go +++ b/pkg/apis/rollout/v1beta1/types.go @@ -23,17 +23,17 @@ import ( // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// Rollout is a specification for a Rollout resource -type Rollout struct { +// Canary is a specification for a Canary resource +type Canary struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec RolloutSpec `json:"spec"` - Status RolloutStatus `json:"status"` + Spec CanarySpec `json:"spec"` + Status CanaryStatus `json:"status"` } -// RolloutSpec is the spec for a Rollout resource -type RolloutSpec struct { +// CanarySpec is the spec for a Canary resource +type CanarySpec struct { TargetKind string `json:"targetKind"` Primary Target `json:"primary"` Canary Target `json:"canary"` @@ -63,8 +63,8 @@ type Metric struct { Threshold int `json:"threshold"` } -// RolloutStatus is the status for a Rollout resource -type RolloutStatus struct { +// CanaryStatus is the status for a Canary resource +type CanaryStatus struct { State string `json:"state"` CanaryRevision string `json:"canaryRevision"` FailedChecks int `json:"failedChecks"` @@ -72,10 +72,10 @@ type RolloutStatus struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// RolloutList is a list of Rollout resources -type RolloutList struct { +// CanaryList is a list of Canary resources +type CanaryList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata"` - Items []Rollout `json:"items"` + Items []Canary `json:"items"` } diff --git a/pkg/apis/rollout/v1beta1/zz_generated.deepcopy.go b/pkg/apis/rollout/v1beta1/zz_generated.deepcopy.go index 7f236063..a6905c6a 100644 --- a/pkg/apis/rollout/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/rollout/v1beta1/zz_generated.deepcopy.go @@ -24,6 +24,34 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Canary) DeepCopyInto(out *Canary) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Canary. +func (in *Canary) DeepCopy() *Canary { + if in == nil { + return nil + } + out := new(Canary) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Canary) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CanaryAnalysis) DeepCopyInto(out *CanaryAnalysis) { *out = *in @@ -45,6 +73,75 @@ func (in *CanaryAnalysis) DeepCopy() *CanaryAnalysis { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CanaryList) DeepCopyInto(out *CanaryList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Canary, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CanaryList. +func (in *CanaryList) DeepCopy() *CanaryList { + if in == nil { + return nil + } + out := new(CanaryList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CanaryList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CanarySpec) DeepCopyInto(out *CanarySpec) { + *out = *in + out.Primary = in.Primary + out.Canary = in.Canary + in.CanaryAnalysis.DeepCopyInto(&out.CanaryAnalysis) + out.VirtualService = in.VirtualService + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CanarySpec. +func (in *CanarySpec) DeepCopy() *CanarySpec { + if in == nil { + return nil + } + out := new(CanarySpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CanaryStatus) DeepCopyInto(out *CanaryStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CanaryStatus. +func (in *CanaryStatus) DeepCopy() *CanaryStatus { + if in == nil { + return nil + } + out := new(CanaryStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Metric) DeepCopyInto(out *Metric) { *out = *in @@ -61,103 +158,6 @@ func (in *Metric) DeepCopy() *Metric { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Rollout) DeepCopyInto(out *Rollout) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Rollout. -func (in *Rollout) DeepCopy() *Rollout { - if in == nil { - return nil - } - out := new(Rollout) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Rollout) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RolloutList) DeepCopyInto(out *RolloutList) { - *out = *in - out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Rollout, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutList. -func (in *RolloutList) DeepCopy() *RolloutList { - if in == nil { - return nil - } - out := new(RolloutList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RolloutList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RolloutSpec) DeepCopyInto(out *RolloutSpec) { - *out = *in - out.Primary = in.Primary - out.Canary = in.Canary - in.CanaryAnalysis.DeepCopyInto(&out.CanaryAnalysis) - out.VirtualService = in.VirtualService - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutSpec. -func (in *RolloutSpec) DeepCopy() *RolloutSpec { - if in == nil { - return nil - } - out := new(RolloutSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RolloutStatus) DeepCopyInto(out *RolloutStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RolloutStatus. -func (in *RolloutStatus) DeepCopy() *RolloutStatus { - if in == nil { - return nil - } - out := new(RolloutStatus) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Target) DeepCopyInto(out *Target) { *out = *in diff --git a/pkg/client/clientset/versioned/clientset.go b/pkg/client/clientset/versioned/clientset.go index c31ff4e7..3780fb2d 100644 --- a/pkg/client/clientset/versioned/clientset.go +++ b/pkg/client/clientset/versioned/clientset.go @@ -19,7 +19,7 @@ limitations under the License. package versioned import ( - appsv1beta1 "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/typed/rollout/v1beta1" + steererv1beta1 "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/typed/rollout/v1beta1" discovery "k8s.io/client-go/discovery" rest "k8s.io/client-go/rest" flowcontrol "k8s.io/client-go/util/flowcontrol" @@ -27,27 +27,27 @@ import ( type Interface interface { Discovery() discovery.DiscoveryInterface - AppsV1beta1() appsv1beta1.AppsV1beta1Interface + SteererV1beta1() steererv1beta1.SteererV1beta1Interface // Deprecated: please explicitly pick a version if possible. - Apps() appsv1beta1.AppsV1beta1Interface + Steerer() steererv1beta1.SteererV1beta1Interface } // Clientset contains the clients for groups. Each group has exactly one // version included in a Clientset. type Clientset struct { *discovery.DiscoveryClient - appsV1beta1 *appsv1beta1.AppsV1beta1Client + steererV1beta1 *steererv1beta1.SteererV1beta1Client } -// AppsV1beta1 retrieves the AppsV1beta1Client -func (c *Clientset) AppsV1beta1() appsv1beta1.AppsV1beta1Interface { - return c.appsV1beta1 +// SteererV1beta1 retrieves the SteererV1beta1Client +func (c *Clientset) SteererV1beta1() steererv1beta1.SteererV1beta1Interface { + return c.steererV1beta1 } -// Deprecated: Apps retrieves the default version of AppsClient. +// Deprecated: Steerer retrieves the default version of SteererClient. // Please explicitly pick a version. -func (c *Clientset) Apps() appsv1beta1.AppsV1beta1Interface { - return c.appsV1beta1 +func (c *Clientset) Steerer() steererv1beta1.SteererV1beta1Interface { + return c.steererV1beta1 } // Discovery retrieves the DiscoveryClient @@ -66,7 +66,7 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { } var cs Clientset var err error - cs.appsV1beta1, err = appsv1beta1.NewForConfig(&configShallowCopy) + cs.steererV1beta1, err = steererv1beta1.NewForConfig(&configShallowCopy) if err != nil { return nil, err } @@ -82,7 +82,7 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { // panics if there is an error in the config. func NewForConfigOrDie(c *rest.Config) *Clientset { var cs Clientset - cs.appsV1beta1 = appsv1beta1.NewForConfigOrDie(c) + cs.steererV1beta1 = steererv1beta1.NewForConfigOrDie(c) cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) return &cs @@ -91,7 +91,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { // New creates a new Clientset for the given RESTClient. func New(c rest.Interface) *Clientset { var cs Clientset - cs.appsV1beta1 = appsv1beta1.New(c) + cs.steererV1beta1 = steererv1beta1.New(c) cs.DiscoveryClient = discovery.NewDiscoveryClient(c) return &cs diff --git a/pkg/client/clientset/versioned/fake/clientset_generated.go b/pkg/client/clientset/versioned/fake/clientset_generated.go index cd7b8a7b..93a236eb 100644 --- a/pkg/client/clientset/versioned/fake/clientset_generated.go +++ b/pkg/client/clientset/versioned/fake/clientset_generated.go @@ -20,8 +20,8 @@ package fake import ( clientset "github.com/stefanprodan/steerer/pkg/client/clientset/versioned" - appsv1beta1 "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/typed/rollout/v1beta1" - fakeappsv1beta1 "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake" + steererv1beta1 "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/typed/rollout/v1beta1" + fakesteererv1beta1 "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/discovery" @@ -71,12 +71,12 @@ func (c *Clientset) Discovery() discovery.DiscoveryInterface { var _ clientset.Interface = &Clientset{} -// AppsV1beta1 retrieves the AppsV1beta1Client -func (c *Clientset) AppsV1beta1() appsv1beta1.AppsV1beta1Interface { - return &fakeappsv1beta1.FakeAppsV1beta1{Fake: &c.Fake} +// SteererV1beta1 retrieves the SteererV1beta1Client +func (c *Clientset) SteererV1beta1() steererv1beta1.SteererV1beta1Interface { + return &fakesteererv1beta1.FakeSteererV1beta1{Fake: &c.Fake} } -// Apps retrieves the AppsV1beta1Client -func (c *Clientset) Apps() appsv1beta1.AppsV1beta1Interface { - return &fakeappsv1beta1.FakeAppsV1beta1{Fake: &c.Fake} +// Steerer retrieves the SteererV1beta1Client +func (c *Clientset) Steerer() steererv1beta1.SteererV1beta1Interface { + return &fakesteererv1beta1.FakeSteererV1beta1{Fake: &c.Fake} } diff --git a/pkg/client/clientset/versioned/fake/register.go b/pkg/client/clientset/versioned/fake/register.go index 50956afb..5e2fc288 100644 --- a/pkg/client/clientset/versioned/fake/register.go +++ b/pkg/client/clientset/versioned/fake/register.go @@ -19,7 +19,7 @@ limitations under the License. package fake import ( - appsv1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" + steererv1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" schema "k8s.io/apimachinery/pkg/runtime/schema" @@ -50,5 +50,5 @@ func init() { // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. func AddToScheme(scheme *runtime.Scheme) { - appsv1beta1.AddToScheme(scheme) + steererv1beta1.AddToScheme(scheme) } diff --git a/pkg/client/clientset/versioned/scheme/register.go b/pkg/client/clientset/versioned/scheme/register.go index f326d670..f14c114a 100644 --- a/pkg/client/clientset/versioned/scheme/register.go +++ b/pkg/client/clientset/versioned/scheme/register.go @@ -19,7 +19,7 @@ limitations under the License. package scheme import ( - appsv1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" + steererv1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" schema "k8s.io/apimachinery/pkg/runtime/schema" @@ -50,5 +50,5 @@ func init() { // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. func AddToScheme(scheme *runtime.Scheme) { - appsv1beta1.AddToScheme(scheme) + steererv1beta1.AddToScheme(scheme) } diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/canary.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/canary.go new file mode 100644 index 00000000..fc1de813 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/rollout/v1beta1/canary.go @@ -0,0 +1,174 @@ +/* +Copyright The Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" + scheme "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// CanariesGetter has a method to return a CanaryInterface. +// A group's client should implement this interface. +type CanariesGetter interface { + Canaries(namespace string) CanaryInterface +} + +// CanaryInterface has methods to work with Canary resources. +type CanaryInterface interface { + Create(*v1beta1.Canary) (*v1beta1.Canary, error) + Update(*v1beta1.Canary) (*v1beta1.Canary, error) + UpdateStatus(*v1beta1.Canary) (*v1beta1.Canary, error) + Delete(name string, options *v1.DeleteOptions) error + DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error + Get(name string, options v1.GetOptions) (*v1beta1.Canary, error) + List(opts v1.ListOptions) (*v1beta1.CanaryList, error) + Watch(opts v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Canary, err error) + CanaryExpansion +} + +// canaries implements CanaryInterface +type canaries struct { + client rest.Interface + ns string +} + +// newCanaries returns a Canaries +func newCanaries(c *SteererV1beta1Client, namespace string) *canaries { + return &canaries{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the canary, and returns the corresponding canary object, and an error if there is any. +func (c *canaries) Get(name string, options v1.GetOptions) (result *v1beta1.Canary, err error) { + result = &v1beta1.Canary{} + err = c.client.Get(). + Namespace(c.ns). + Resource("canaries"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Canaries that match those selectors. +func (c *canaries) List(opts v1.ListOptions) (result *v1beta1.CanaryList, err error) { + result = &v1beta1.CanaryList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("canaries"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested canaries. +func (c *canaries) Watch(opts v1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("canaries"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch() +} + +// Create takes the representation of a canary and creates it. Returns the server's representation of the canary, and an error, if there is any. +func (c *canaries) Create(canary *v1beta1.Canary) (result *v1beta1.Canary, err error) { + result = &v1beta1.Canary{} + err = c.client.Post(). + Namespace(c.ns). + Resource("canaries"). + Body(canary). + Do(). + Into(result) + return +} + +// Update takes the representation of a canary and updates it. Returns the server's representation of the canary, and an error, if there is any. +func (c *canaries) Update(canary *v1beta1.Canary) (result *v1beta1.Canary, err error) { + result = &v1beta1.Canary{} + err = c.client.Put(). + Namespace(c.ns). + Resource("canaries"). + Name(canary.Name). + Body(canary). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *canaries) UpdateStatus(canary *v1beta1.Canary) (result *v1beta1.Canary, err error) { + result = &v1beta1.Canary{} + err = c.client.Put(). + Namespace(c.ns). + Resource("canaries"). + Name(canary.Name). + SubResource("status"). + Body(canary). + Do(). + Into(result) + return +} + +// Delete takes name of the canary and deletes it. Returns an error if one occurs. +func (c *canaries) Delete(name string, options *v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("canaries"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *canaries) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("canaries"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched canary. +func (c *canaries) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Canary, err error) { + result = &v1beta1.Canary{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("canaries"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_canary.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_canary.go new file mode 100644 index 00000000..83219953 --- /dev/null +++ b/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_canary.go @@ -0,0 +1,140 @@ +/* +Copyright The Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeCanaries implements CanaryInterface +type FakeCanaries struct { + Fake *FakeSteererV1beta1 + ns string +} + +var canariesResource = schema.GroupVersionResource{Group: "steerer.app", Version: "v1beta1", Resource: "canaries"} + +var canariesKind = schema.GroupVersionKind{Group: "steerer.app", Version: "v1beta1", Kind: "Canary"} + +// Get takes name of the canary, and returns the corresponding canary object, and an error if there is any. +func (c *FakeCanaries) Get(name string, options v1.GetOptions) (result *v1beta1.Canary, err error) { + obj, err := c.Fake. + Invokes(testing.NewGetAction(canariesResource, c.ns, name), &v1beta1.Canary{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.Canary), err +} + +// List takes label and field selectors, and returns the list of Canaries that match those selectors. +func (c *FakeCanaries) List(opts v1.ListOptions) (result *v1beta1.CanaryList, err error) { + obj, err := c.Fake. + Invokes(testing.NewListAction(canariesResource, canariesKind, c.ns, opts), &v1beta1.CanaryList{}) + + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1beta1.CanaryList{ListMeta: obj.(*v1beta1.CanaryList).ListMeta} + for _, item := range obj.(*v1beta1.CanaryList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested canaries. +func (c *FakeCanaries) Watch(opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchAction(canariesResource, c.ns, opts)) + +} + +// Create takes the representation of a canary and creates it. Returns the server's representation of the canary, and an error, if there is any. +func (c *FakeCanaries) Create(canary *v1beta1.Canary) (result *v1beta1.Canary, err error) { + obj, err := c.Fake. + Invokes(testing.NewCreateAction(canariesResource, c.ns, canary), &v1beta1.Canary{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.Canary), err +} + +// Update takes the representation of a canary and updates it. Returns the server's representation of the canary, and an error, if there is any. +func (c *FakeCanaries) Update(canary *v1beta1.Canary) (result *v1beta1.Canary, err error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateAction(canariesResource, c.ns, canary), &v1beta1.Canary{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.Canary), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeCanaries) UpdateStatus(canary *v1beta1.Canary) (*v1beta1.Canary, error) { + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceAction(canariesResource, "status", c.ns, canary), &v1beta1.Canary{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.Canary), err +} + +// Delete takes name of the canary and deletes it. Returns an error if one occurs. +func (c *FakeCanaries) Delete(name string, options *v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteAction(canariesResource, c.ns, name), &v1beta1.Canary{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeCanaries) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + action := testing.NewDeleteCollectionAction(canariesResource, c.ns, listOptions) + + _, err := c.Fake.Invokes(action, &v1beta1.CanaryList{}) + return err +} + +// Patch applies the patch and returns the patched canary. +func (c *FakeCanaries) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Canary, err error) { + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceAction(canariesResource, c.ns, name, data, subresources...), &v1beta1.Canary{}) + + if obj == nil { + return nil, err + } + return obj.(*v1beta1.Canary), err +} diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout.go deleted file mode 100644 index d05b5699..00000000 --- a/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout.go +++ /dev/null @@ -1,140 +0,0 @@ -/* -Copyright The Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - v1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - testing "k8s.io/client-go/testing" -) - -// FakeRollouts implements RolloutInterface -type FakeRollouts struct { - Fake *FakeAppsV1beta1 - ns string -} - -var rolloutsResource = schema.GroupVersionResource{Group: "apps.weave.works", Version: "v1beta1", Resource: "rollouts"} - -var rolloutsKind = schema.GroupVersionKind{Group: "apps.weave.works", Version: "v1beta1", Kind: "Rollout"} - -// Get takes name of the rollout, and returns the corresponding rollout object, and an error if there is any. -func (c *FakeRollouts) Get(name string, options v1.GetOptions) (result *v1beta1.Rollout, err error) { - obj, err := c.Fake. - Invokes(testing.NewGetAction(rolloutsResource, c.ns, name), &v1beta1.Rollout{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.Rollout), err -} - -// List takes label and field selectors, and returns the list of Rollouts that match those selectors. -func (c *FakeRollouts) List(opts v1.ListOptions) (result *v1beta1.RolloutList, err error) { - obj, err := c.Fake. - Invokes(testing.NewListAction(rolloutsResource, rolloutsKind, c.ns, opts), &v1beta1.RolloutList{}) - - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &v1beta1.RolloutList{ListMeta: obj.(*v1beta1.RolloutList).ListMeta} - for _, item := range obj.(*v1beta1.RolloutList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested rollouts. -func (c *FakeRollouts) Watch(opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewWatchAction(rolloutsResource, c.ns, opts)) - -} - -// Create takes the representation of a rollout and creates it. Returns the server's representation of the rollout, and an error, if there is any. -func (c *FakeRollouts) Create(rollout *v1beta1.Rollout) (result *v1beta1.Rollout, err error) { - obj, err := c.Fake. - Invokes(testing.NewCreateAction(rolloutsResource, c.ns, rollout), &v1beta1.Rollout{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.Rollout), err -} - -// Update takes the representation of a rollout and updates it. Returns the server's representation of the rollout, and an error, if there is any. -func (c *FakeRollouts) Update(rollout *v1beta1.Rollout) (result *v1beta1.Rollout, err error) { - obj, err := c.Fake. - Invokes(testing.NewUpdateAction(rolloutsResource, c.ns, rollout), &v1beta1.Rollout{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.Rollout), err -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeRollouts) UpdateStatus(rollout *v1beta1.Rollout) (*v1beta1.Rollout, error) { - obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(rolloutsResource, "status", c.ns, rollout), &v1beta1.Rollout{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.Rollout), err -} - -// Delete takes name of the rollout and deletes it. Returns an error if one occurs. -func (c *FakeRollouts) Delete(name string, options *v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewDeleteAction(rolloutsResource, c.ns, name), &v1beta1.Rollout{}) - - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakeRollouts) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(rolloutsResource, c.ns, listOptions) - - _, err := c.Fake.Invokes(action, &v1beta1.RolloutList{}) - return err -} - -// Patch applies the patch and returns the patched rollout. -func (c *FakeRollouts) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Rollout, err error) { - obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(rolloutsResource, c.ns, name, data, subresources...), &v1beta1.Rollout{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.Rollout), err -} diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout_client.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout_client.go index 1a79f09c..bfbcf8b1 100644 --- a/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout_client.go +++ b/pkg/client/clientset/versioned/typed/rollout/v1beta1/fake/fake_rollout_client.go @@ -24,17 +24,17 @@ import ( testing "k8s.io/client-go/testing" ) -type FakeAppsV1beta1 struct { +type FakeSteererV1beta1 struct { *testing.Fake } -func (c *FakeAppsV1beta1) Rollouts(namespace string) v1beta1.RolloutInterface { - return &FakeRollouts{c, namespace} +func (c *FakeSteererV1beta1) Canaries(namespace string) v1beta1.CanaryInterface { + return &FakeCanaries{c, namespace} } // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *FakeAppsV1beta1) RESTClient() rest.Interface { +func (c *FakeSteererV1beta1) RESTClient() rest.Interface { var ret *rest.RESTClient return ret } diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/generated_expansion.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/generated_expansion.go index 7961a9c6..7bfe5bd2 100644 --- a/pkg/client/clientset/versioned/typed/rollout/v1beta1/generated_expansion.go +++ b/pkg/client/clientset/versioned/typed/rollout/v1beta1/generated_expansion.go @@ -18,4 +18,4 @@ limitations under the License. package v1beta1 -type RolloutExpansion interface{} +type CanaryExpansion interface{} diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout.go deleted file mode 100644 index 519d29e8..00000000 --- a/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout.go +++ /dev/null @@ -1,174 +0,0 @@ -/* -Copyright The Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" - scheme "github.com/stefanprodan/steerer/pkg/client/clientset/versioned/scheme" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" -) - -// RolloutsGetter has a method to return a RolloutInterface. -// A group's client should implement this interface. -type RolloutsGetter interface { - Rollouts(namespace string) RolloutInterface -} - -// RolloutInterface has methods to work with Rollout resources. -type RolloutInterface interface { - Create(*v1beta1.Rollout) (*v1beta1.Rollout, error) - Update(*v1beta1.Rollout) (*v1beta1.Rollout, error) - UpdateStatus(*v1beta1.Rollout) (*v1beta1.Rollout, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*v1beta1.Rollout, error) - List(opts v1.ListOptions) (*v1beta1.RolloutList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Rollout, err error) - RolloutExpansion -} - -// rollouts implements RolloutInterface -type rollouts struct { - client rest.Interface - ns string -} - -// newRollouts returns a Rollouts -func newRollouts(c *AppsV1beta1Client, namespace string) *rollouts { - return &rollouts{ - client: c.RESTClient(), - ns: namespace, - } -} - -// Get takes name of the rollout, and returns the corresponding rollout object, and an error if there is any. -func (c *rollouts) Get(name string, options v1.GetOptions) (result *v1beta1.Rollout, err error) { - result = &v1beta1.Rollout{} - err = c.client.Get(). - Namespace(c.ns). - Resource("rollouts"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of Rollouts that match those selectors. -func (c *rollouts) List(opts v1.ListOptions) (result *v1beta1.RolloutList, err error) { - result = &v1beta1.RolloutList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("rollouts"). - VersionedParams(&opts, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested rollouts. -func (c *rollouts) Watch(opts v1.ListOptions) (watch.Interface, error) { - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("rollouts"). - VersionedParams(&opts, scheme.ParameterCodec). - Watch() -} - -// Create takes the representation of a rollout and creates it. Returns the server's representation of the rollout, and an error, if there is any. -func (c *rollouts) Create(rollout *v1beta1.Rollout) (result *v1beta1.Rollout, err error) { - result = &v1beta1.Rollout{} - err = c.client.Post(). - Namespace(c.ns). - Resource("rollouts"). - Body(rollout). - Do(). - Into(result) - return -} - -// Update takes the representation of a rollout and updates it. Returns the server's representation of the rollout, and an error, if there is any. -func (c *rollouts) Update(rollout *v1beta1.Rollout) (result *v1beta1.Rollout, err error) { - result = &v1beta1.Rollout{} - err = c.client.Put(). - Namespace(c.ns). - Resource("rollouts"). - Name(rollout.Name). - Body(rollout). - Do(). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). - -func (c *rollouts) UpdateStatus(rollout *v1beta1.Rollout) (result *v1beta1.Rollout, err error) { - result = &v1beta1.Rollout{} - err = c.client.Put(). - Namespace(c.ns). - Resource("rollouts"). - Name(rollout.Name). - SubResource("status"). - Body(rollout). - Do(). - Into(result) - return -} - -// Delete takes name of the rollout and deletes it. Returns an error if one occurs. -func (c *rollouts) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("rollouts"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *rollouts) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("rollouts"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched rollout. -func (c *rollouts) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Rollout, err error) { - result = &v1beta1.Rollout{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("rollouts"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff --git a/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout_client.go b/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout_client.go index 7400bee6..c9cd35d2 100644 --- a/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout_client.go +++ b/pkg/client/clientset/versioned/typed/rollout/v1beta1/rollout_client.go @@ -25,22 +25,22 @@ import ( rest "k8s.io/client-go/rest" ) -type AppsV1beta1Interface interface { +type SteererV1beta1Interface interface { RESTClient() rest.Interface - RolloutsGetter + CanariesGetter } -// AppsV1beta1Client is used to interact with features provided by the apps.weave.works group. -type AppsV1beta1Client struct { +// SteererV1beta1Client is used to interact with features provided by the steerer.app group. +type SteererV1beta1Client struct { restClient rest.Interface } -func (c *AppsV1beta1Client) Rollouts(namespace string) RolloutInterface { - return newRollouts(c, namespace) +func (c *SteererV1beta1Client) Canaries(namespace string) CanaryInterface { + return newCanaries(c, namespace) } -// NewForConfig creates a new AppsV1beta1Client for the given config. -func NewForConfig(c *rest.Config) (*AppsV1beta1Client, error) { +// NewForConfig creates a new SteererV1beta1Client for the given config. +func NewForConfig(c *rest.Config) (*SteererV1beta1Client, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err @@ -49,12 +49,12 @@ func NewForConfig(c *rest.Config) (*AppsV1beta1Client, error) { if err != nil { return nil, err } - return &AppsV1beta1Client{client}, nil + return &SteererV1beta1Client{client}, nil } -// NewForConfigOrDie creates a new AppsV1beta1Client for the given config and +// NewForConfigOrDie creates a new SteererV1beta1Client for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *rest.Config) *AppsV1beta1Client { +func NewForConfigOrDie(c *rest.Config) *SteererV1beta1Client { client, err := NewForConfig(c) if err != nil { panic(err) @@ -62,9 +62,9 @@ func NewForConfigOrDie(c *rest.Config) *AppsV1beta1Client { return client } -// New creates a new AppsV1beta1Client for the given RESTClient. -func New(c rest.Interface) *AppsV1beta1Client { - return &AppsV1beta1Client{c} +// New creates a new SteererV1beta1Client for the given RESTClient. +func New(c rest.Interface) *SteererV1beta1Client { + return &SteererV1beta1Client{c} } func setConfigDefaults(config *rest.Config) error { @@ -82,7 +82,7 @@ func setConfigDefaults(config *rest.Config) error { // RESTClient returns a RESTClient that is used to communicate // with API server by this client implementation. -func (c *AppsV1beta1Client) RESTClient() rest.Interface { +func (c *SteererV1beta1Client) RESTClient() rest.Interface { if c == nil { return nil } diff --git a/pkg/client/informers/externalversions/factory.go b/pkg/client/informers/externalversions/factory.go index 8a613760..e3f79088 100644 --- a/pkg/client/informers/externalversions/factory.go +++ b/pkg/client/informers/externalversions/factory.go @@ -172,9 +172,9 @@ type SharedInformerFactory interface { ForResource(resource schema.GroupVersionResource) (GenericInformer, error) WaitForCacheSync(stopCh <-chan struct{}) map[reflect.Type]bool - Apps() rollout.Interface + Steerer() rollout.Interface } -func (f *sharedInformerFactory) Apps() rollout.Interface { +func (f *sharedInformerFactory) Steerer() rollout.Interface { return rollout.New(f, f.namespace, f.tweakListOptions) } diff --git a/pkg/client/informers/externalversions/generic.go b/pkg/client/informers/externalversions/generic.go index 89292d05..e79e3e03 100644 --- a/pkg/client/informers/externalversions/generic.go +++ b/pkg/client/informers/externalversions/generic.go @@ -52,9 +52,9 @@ func (f *genericInformer) Lister() cache.GenericLister { // TODO extend this to unknown resources with a client pool func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { switch resource { - // Group=apps.weave.works, Version=v1beta1 - case v1beta1.SchemeGroupVersion.WithResource("rollouts"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1beta1().Rollouts().Informer()}, nil + // Group=steerer.app, Version=v1beta1 + case v1beta1.SchemeGroupVersion.WithResource("canaries"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Steerer().V1beta1().Canaries().Informer()}, nil } diff --git a/pkg/client/informers/externalversions/rollout/interface.go b/pkg/client/informers/externalversions/rollout/interface.go index 6f88dca8..3ab0f975 100644 --- a/pkg/client/informers/externalversions/rollout/interface.go +++ b/pkg/client/informers/externalversions/rollout/interface.go @@ -16,7 +16,7 @@ limitations under the License. // Code generated by informer-gen. DO NOT EDIT. -package apps +package steerer import ( internalinterfaces "github.com/stefanprodan/steerer/pkg/client/informers/externalversions/internalinterfaces" diff --git a/pkg/client/informers/externalversions/rollout/v1beta1/rollout.go b/pkg/client/informers/externalversions/rollout/v1beta1/canary.go similarity index 58% rename from pkg/client/informers/externalversions/rollout/v1beta1/rollout.go rename to pkg/client/informers/externalversions/rollout/v1beta1/canary.go index 9fd61135..154c9cdb 100644 --- a/pkg/client/informers/externalversions/rollout/v1beta1/rollout.go +++ b/pkg/client/informers/externalversions/rollout/v1beta1/canary.go @@ -31,59 +31,59 @@ import ( cache "k8s.io/client-go/tools/cache" ) -// RolloutInformer provides access to a shared informer and lister for -// Rollouts. -type RolloutInformer interface { +// CanaryInformer provides access to a shared informer and lister for +// Canaries. +type CanaryInformer interface { Informer() cache.SharedIndexInformer - Lister() v1beta1.RolloutLister + Lister() v1beta1.CanaryLister } -type rolloutInformer struct { +type canaryInformer struct { factory internalinterfaces.SharedInformerFactory tweakListOptions internalinterfaces.TweakListOptionsFunc namespace string } -// NewRolloutInformer constructs a new informer for Rollout type. +// NewCanaryInformer constructs a new informer for Canary type. // Always prefer using an informer factory to get a shared informer instead of getting an independent // one. This reduces memory footprint and number of connections to the server. -func NewRolloutInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredRolloutInformer(client, namespace, resyncPeriod, indexers, nil) +func NewCanaryInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredCanaryInformer(client, namespace, resyncPeriod, indexers, nil) } -// NewFilteredRolloutInformer constructs a new informer for Rollout type. +// NewFilteredCanaryInformer constructs a new informer for Canary type. // Always prefer using an informer factory to get a shared informer instead of getting an independent // one. This reduces memory footprint and number of connections to the server. -func NewFilteredRolloutInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { +func NewFilteredCanaryInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { return cache.NewSharedIndexInformer( &cache.ListWatch{ ListFunc: func(options v1.ListOptions) (runtime.Object, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.AppsV1beta1().Rollouts(namespace).List(options) + return client.SteererV1beta1().Canaries(namespace).List(options) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { if tweakListOptions != nil { tweakListOptions(&options) } - return client.AppsV1beta1().Rollouts(namespace).Watch(options) + return client.SteererV1beta1().Canaries(namespace).Watch(options) }, }, - &rolloutv1beta1.Rollout{}, + &rolloutv1beta1.Canary{}, resyncPeriod, indexers, ) } -func (f *rolloutInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredRolloutInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +func (f *canaryInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredCanaryInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) } -func (f *rolloutInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&rolloutv1beta1.Rollout{}, f.defaultInformer) +func (f *canaryInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&rolloutv1beta1.Canary{}, f.defaultInformer) } -func (f *rolloutInformer) Lister() v1beta1.RolloutLister { - return v1beta1.NewRolloutLister(f.Informer().GetIndexer()) +func (f *canaryInformer) Lister() v1beta1.CanaryLister { + return v1beta1.NewCanaryLister(f.Informer().GetIndexer()) } diff --git a/pkg/client/informers/externalversions/rollout/v1beta1/interface.go b/pkg/client/informers/externalversions/rollout/v1beta1/interface.go index e9b0bc41..23771c39 100644 --- a/pkg/client/informers/externalversions/rollout/v1beta1/interface.go +++ b/pkg/client/informers/externalversions/rollout/v1beta1/interface.go @@ -24,8 +24,8 @@ import ( // Interface provides access to all the informers in this group version. type Interface interface { - // Rollouts returns a RolloutInformer. - Rollouts() RolloutInformer + // Canaries returns a CanaryInformer. + Canaries() CanaryInformer } type version struct { @@ -39,7 +39,7 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} } -// Rollouts returns a RolloutInformer. -func (v *version) Rollouts() RolloutInformer { - return &rolloutInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +// Canaries returns a CanaryInformer. +func (v *version) Canaries() CanaryInformer { + return &canaryInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } diff --git a/pkg/client/listers/rollout/v1beta1/canary.go b/pkg/client/listers/rollout/v1beta1/canary.go new file mode 100644 index 00000000..fc6b7dc5 --- /dev/null +++ b/pkg/client/listers/rollout/v1beta1/canary.go @@ -0,0 +1,94 @@ +/* +Copyright The Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// CanaryLister helps list Canaries. +type CanaryLister interface { + // List lists all Canaries in the indexer. + List(selector labels.Selector) (ret []*v1beta1.Canary, err error) + // Canaries returns an object that can list and get Canaries. + Canaries(namespace string) CanaryNamespaceLister + CanaryListerExpansion +} + +// canaryLister implements the CanaryLister interface. +type canaryLister struct { + indexer cache.Indexer +} + +// NewCanaryLister returns a new CanaryLister. +func NewCanaryLister(indexer cache.Indexer) CanaryLister { + return &canaryLister{indexer: indexer} +} + +// List lists all Canaries in the indexer. +func (s *canaryLister) List(selector labels.Selector) (ret []*v1beta1.Canary, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Canary)) + }) + return ret, err +} + +// Canaries returns an object that can list and get Canaries. +func (s *canaryLister) Canaries(namespace string) CanaryNamespaceLister { + return canaryNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// CanaryNamespaceLister helps list and get Canaries. +type CanaryNamespaceLister interface { + // List lists all Canaries in the indexer for a given namespace. + List(selector labels.Selector) (ret []*v1beta1.Canary, err error) + // Get retrieves the Canary from the indexer for a given namespace and name. + Get(name string) (*v1beta1.Canary, error) + CanaryNamespaceListerExpansion +} + +// canaryNamespaceLister implements the CanaryNamespaceLister +// interface. +type canaryNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Canaries in the indexer for a given namespace. +func (s canaryNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Canary, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Canary)) + }) + return ret, err +} + +// Get retrieves the Canary from the indexer for a given namespace and name. +func (s canaryNamespaceLister) Get(name string) (*v1beta1.Canary, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("canary"), name) + } + return obj.(*v1beta1.Canary), nil +} diff --git a/pkg/client/listers/rollout/v1beta1/expansion_generated.go b/pkg/client/listers/rollout/v1beta1/expansion_generated.go index 92089ae5..af6ee8a3 100644 --- a/pkg/client/listers/rollout/v1beta1/expansion_generated.go +++ b/pkg/client/listers/rollout/v1beta1/expansion_generated.go @@ -18,10 +18,10 @@ limitations under the License. package v1beta1 -// RolloutListerExpansion allows custom methods to be added to -// RolloutLister. -type RolloutListerExpansion interface{} +// CanaryListerExpansion allows custom methods to be added to +// CanaryLister. +type CanaryListerExpansion interface{} -// RolloutNamespaceListerExpansion allows custom methods to be added to -// RolloutNamespaceLister. -type RolloutNamespaceListerExpansion interface{} +// CanaryNamespaceListerExpansion allows custom methods to be added to +// CanaryNamespaceLister. +type CanaryNamespaceListerExpansion interface{} diff --git a/pkg/client/listers/rollout/v1beta1/rollout.go b/pkg/client/listers/rollout/v1beta1/rollout.go deleted file mode 100644 index dd4a4004..00000000 --- a/pkg/client/listers/rollout/v1beta1/rollout.go +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright The Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "github.com/stefanprodan/steerer/pkg/apis/rollout/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// RolloutLister helps list Rollouts. -type RolloutLister interface { - // List lists all Rollouts in the indexer. - List(selector labels.Selector) (ret []*v1beta1.Rollout, err error) - // Rollouts returns an object that can list and get Rollouts. - Rollouts(namespace string) RolloutNamespaceLister - RolloutListerExpansion -} - -// rolloutLister implements the RolloutLister interface. -type rolloutLister struct { - indexer cache.Indexer -} - -// NewRolloutLister returns a new RolloutLister. -func NewRolloutLister(indexer cache.Indexer) RolloutLister { - return &rolloutLister{indexer: indexer} -} - -// List lists all Rollouts in the indexer. -func (s *rolloutLister) List(selector labels.Selector) (ret []*v1beta1.Rollout, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.Rollout)) - }) - return ret, err -} - -// Rollouts returns an object that can list and get Rollouts. -func (s *rolloutLister) Rollouts(namespace string) RolloutNamespaceLister { - return rolloutNamespaceLister{indexer: s.indexer, namespace: namespace} -} - -// RolloutNamespaceLister helps list and get Rollouts. -type RolloutNamespaceLister interface { - // List lists all Rollouts in the indexer for a given namespace. - List(selector labels.Selector) (ret []*v1beta1.Rollout, err error) - // Get retrieves the Rollout from the indexer for a given namespace and name. - Get(name string) (*v1beta1.Rollout, error) - RolloutNamespaceListerExpansion -} - -// rolloutNamespaceLister implements the RolloutNamespaceLister -// interface. -type rolloutNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all Rollouts in the indexer for a given namespace. -func (s rolloutNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Rollout, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.Rollout)) - }) - return ret, err -} - -// Get retrieves the Rollout from the indexer for a given namespace and name. -func (s rolloutNamespaceLister) Get(name string) (*v1beta1.Rollout, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("rollout"), name) - } - return obj.(*v1beta1.Rollout), nil -} diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index 3355e2ba..2665a3f1 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -31,7 +31,7 @@ type Controller struct { kubeClient kubernetes.Interface istioClient istioclientset.Interface rolloutClient clientset.Interface - rolloutLister rolloutlisters.RolloutLister + rolloutLister rolloutlisters.CanaryLister rolloutSynced cache.InformerSynced rolloutWindow time.Duration workqueue workqueue.RateLimitingInterface @@ -45,7 +45,7 @@ func NewController( kubeClient kubernetes.Interface, istioClient istioclientset.Interface, rolloutClient clientset.Interface, - rolloutInformer rolloutinformers.RolloutInformer, + rolloutInformer rolloutinformers.CanaryInformer, rolloutWindow time.Duration, metricServer string, logger *zap.SugaredLogger, @@ -174,7 +174,7 @@ func (c *Controller) syncHandler(key string) error { utilruntime.HandleError(fmt.Errorf("invalid resource key: %s", key)) return nil } - rollout, err := c.rolloutLister.Rollouts(namespace).Get(name) + rollout, err := c.rolloutLister.Canaries(namespace).Get(name) if errors.IsNotFound(err) { utilruntime.HandleError(fmt.Errorf("rollout '%s' in work queue no longer exists", key)) return nil @@ -196,27 +196,27 @@ func (c *Controller) enqueueRollout(obj interface{}) { c.workqueue.AddRateLimited(key) } -func (c *Controller) recordEventInfof(r *rolloutv1.Rollout, template string, args ...interface{}) { +func (c *Controller) recordEventInfof(r *rolloutv1.Canary, template string, args ...interface{}) { c.logger.Infof(template, args...) c.recorder.Event(r, corev1.EventTypeNormal, "Synced", fmt.Sprintf(template, args...)) } -func (c *Controller) recordEventErrorf(r *rolloutv1.Rollout, template string, args ...interface{}) { +func (c *Controller) recordEventErrorf(r *rolloutv1.Canary, template string, args ...interface{}) { c.logger.Errorf(template, args...) c.recorder.Event(r, corev1.EventTypeWarning, "Synced", fmt.Sprintf(template, args...)) } -func (c *Controller) recordEventWarningf(r *rolloutv1.Rollout, template string, args ...interface{}) { +func (c *Controller) recordEventWarningf(r *rolloutv1.Canary, template string, args ...interface{}) { c.logger.Infof(template, args...) c.recorder.Event(r, corev1.EventTypeWarning, "Synced", fmt.Sprintf(template, args...)) } -func checkCustomResourceType(obj interface{}, logger *zap.SugaredLogger) (rolloutv1.Rollout, bool) { - var roll *rolloutv1.Rollout +func checkCustomResourceType(obj interface{}, logger *zap.SugaredLogger) (rolloutv1.Canary, bool) { + var roll *rolloutv1.Canary var ok bool - if roll, ok = obj.(*rolloutv1.Rollout); !ok { + if roll, ok = obj.(*rolloutv1.Canary); !ok { logger.Errorf("Event Watch received an invalid object: %#v", obj) - return rolloutv1.Rollout{}, false + return rolloutv1.Canary{}, false } return *roll, true } diff --git a/pkg/controller/deployment.go b/pkg/controller/deployment.go index e40bf4e7..bd87072a 100644 --- a/pkg/controller/deployment.go +++ b/pkg/controller/deployment.go @@ -12,7 +12,7 @@ import ( func (c *Controller) doRollouts() { c.rollouts.Range(func(key interface{}, value interface{}) bool { - r := value.(*rolloutv1.Rollout) + r := value.(*rolloutv1.Canary) if r.Spec.TargetKind == "Deployment" { go c.advanceDeploymentRollout(r.Name, r.Namespace) } @@ -83,7 +83,7 @@ func (c *Controller) advanceDeploymentRollout(name string, namespace string) { // gate stage: check if the canary success rate is above the threshold // skip check if no traffic is routed to canary if canaryRoute.Weight == 0 { - c.recordEventInfof(r, "Starting rollout for %s.%s", r.Name, r.Namespace) + c.recordEventInfof(r, "Starting canary deployment for %s.%s", r.Name, r.Namespace) } else { if ok := c.checkDeploymentMetrics(r); !ok { c.updateRolloutFailedChecks(r, r.Status.FailedChecks+1) @@ -106,7 +106,7 @@ func (c *Controller) advanceDeploymentRollout(name string, namespace string) { return } - c.recordEventInfof(r, "Advance rollout %s.%s weight %v", r.Name, r.Namespace, canaryRoute.Weight) + c.recordEventInfof(r, "Advance %s.%s canary weight %v", r.Name, r.Namespace, canaryRoute.Weight) // promotion stage: override primary.template.spec with the canary spec if canaryRoute.Weight == maxWeight { @@ -116,7 +116,7 @@ func (c *Controller) advanceDeploymentRollout(name string, namespace string) { primary.Spec.Template.Spec = canary.Spec.Template.Spec _, err := c.kubeClient.AppsV1().Deployments(primary.Namespace).Update(primary) if err != nil { - c.recordEventErrorf(r, "Deployment %s.%s promotion failed: %v", primary.GetName(), primary.Namespace, err) + c.recordEventErrorf(r, "Updating template spec %s.%s failed: %v", primary.GetName(), primary.Namespace, err) return } } @@ -135,27 +135,27 @@ func (c *Controller) advanceDeploymentRollout(name string, namespace string) { } } -func (c *Controller) getRollout(name string, namespace string) (*rolloutv1.Rollout, bool) { - r, err := c.rolloutClient.AppsV1beta1().Rollouts(namespace).Get(name, v1.GetOptions{}) +func (c *Controller) getRollout(name string, namespace string) (*rolloutv1.Canary, bool) { + r, err := c.rolloutClient.SteererV1beta1().Canaries(namespace).Get(name, v1.GetOptions{}) if err != nil { - c.logger.Errorf("Rollout %s.%s not found", name, namespace) + c.logger.Errorf("Canary %s.%s not found", name, namespace) return nil, false } return r, true } -func (c *Controller) checkRolloutStatus(r *rolloutv1.Rollout, canary *appsv1.Deployment) bool { +func (c *Controller) checkRolloutStatus(r *rolloutv1.Canary, canary *appsv1.Deployment) bool { var err error if r.Status.State == "" { - r.Status = rolloutv1.RolloutStatus{ + r.Status = rolloutv1.CanaryStatus{ State: "running", CanaryRevision: canary.ResourceVersion, FailedChecks: 0, } - r, err = c.rolloutClient.AppsV1beta1().Rollouts(r.Namespace).Update(r) + r, err = c.rolloutClient.SteererV1beta1().Canaries(r.Namespace).Update(r) if err != nil { - c.logger.Errorf("Rollout %s.%s status update failed: %v", r.Name, r.Namespace, err) + c.logger.Errorf("Canary %s.%s status update failed: %v", r.Name, r.Namespace, err) return false } return true @@ -188,14 +188,14 @@ func (c *Controller) checkRolloutStatus(r *rolloutv1.Rollout, canary *appsv1.Dep c.recordEventErrorf(r, "Scaling up %s.%s failed: %v", canary.GetName(), canary.Namespace, err) return false } - r.Status = rolloutv1.RolloutStatus{ + r.Status = rolloutv1.CanaryStatus{ State: "running", CanaryRevision: canary.ResourceVersion, FailedChecks: 0, } - r, err = c.rolloutClient.AppsV1beta1().Rollouts(r.Namespace).Update(r) + r, err = c.rolloutClient.SteererV1beta1().Canaries(r.Namespace).Update(r) if err != nil { - c.logger.Errorf("Rollout %s.%s status update failed: %v", r.Name, r.Namespace, err) + c.logger.Errorf("Canary %s.%s status update failed: %v", r.Name, r.Namespace, err) return false } c.recordEventInfof(r, "Scaling up %s.%s", canary.GetName(), canary.Namespace) @@ -206,29 +206,29 @@ func (c *Controller) checkRolloutStatus(r *rolloutv1.Rollout, canary *appsv1.Dep return false } -func (c *Controller) updateRolloutStatus(r *rolloutv1.Rollout, status string) bool { +func (c *Controller) updateRolloutStatus(r *rolloutv1.Canary, status string) bool { var err error r.Status.State = status - r, err = c.rolloutClient.AppsV1beta1().Rollouts(r.Namespace).Update(r) + r, err = c.rolloutClient.SteererV1beta1().Canaries(r.Namespace).Update(r) if err != nil { - c.logger.Errorf("Rollout %s.%s status update failed: %v", r.Name, r.Namespace, err) + c.logger.Errorf("Canary %s.%s status update failed: %v", r.Name, r.Namespace, err) return false } return true } -func (c *Controller) updateRolloutFailedChecks(r *rolloutv1.Rollout, val int) bool { +func (c *Controller) updateRolloutFailedChecks(r *rolloutv1.Canary, val int) bool { var err error r.Status.FailedChecks = val - r, err = c.rolloutClient.AppsV1beta1().Rollouts(r.Namespace).Update(r) + r, err = c.rolloutClient.SteererV1beta1().Canaries(r.Namespace).Update(r) if err != nil { - c.logger.Errorf("Rollout %s.%s status update failed: %v", r.Name, r.Namespace, err) + c.logger.Errorf("Canary %s.%s status update failed: %v", r.Name, r.Namespace, err) return false } return true } -func (c *Controller) getDeployment(r *rolloutv1.Rollout, name string, namespace string) (*appsv1.Deployment, bool) { +func (c *Controller) getDeployment(r *rolloutv1.Canary, name string, namespace string) (*appsv1.Deployment, bool) { dep, err := c.kubeClient.AppsV1().Deployments(namespace).Get(name, v1.GetOptions{}) if err != nil { c.recordEventErrorf(r, "Deployment %s.%s not found", name, namespace) @@ -236,7 +236,7 @@ func (c *Controller) getDeployment(r *rolloutv1.Rollout, name string, namespace } if msg, healthy := getDeploymentStatus(dep); !healthy { - c.recordEventWarningf(r, "Halt rollout %s.%s %s", dep.GetName(), dep.Namespace, msg) + c.recordEventWarningf(r, "Halt %s.%s advancement %s", dep.GetName(), dep.Namespace, msg) return nil, false } @@ -247,7 +247,7 @@ func (c *Controller) getDeployment(r *rolloutv1.Rollout, name string, namespace return dep, true } -func (c *Controller) getCanaryDeployment(r *rolloutv1.Rollout, name string, namespace string) (*appsv1.Deployment, bool) { +func (c *Controller) getCanaryDeployment(r *rolloutv1.Canary, name string, namespace string) (*appsv1.Deployment, bool) { dep, err := c.kubeClient.AppsV1().Deployments(namespace).Get(name, v1.GetOptions{}) if err != nil { c.recordEventErrorf(r, "Deployment %s.%s not found", name, namespace) @@ -255,7 +255,7 @@ func (c *Controller) getCanaryDeployment(r *rolloutv1.Rollout, name string, name } if msg, healthy := getDeploymentStatus(dep); !healthy { - c.recordEventWarningf(r, "Halt rollout %s.%s %s", dep.GetName(), dep.Namespace, msg) + c.recordEventWarningf(r, "Halt %s.%s advancement %s", dep.GetName(), dep.Namespace, msg) return nil, false } @@ -272,7 +272,7 @@ func (c *Controller) getDeploymentRevision(name string, namespace string) string return dep.ResourceVersion } -func (c *Controller) checkDeploymentMetrics(r *rolloutv1.Rollout) bool { +func (c *Controller) checkDeploymentMetrics(r *rolloutv1.Canary) bool { for _, metric := range r.Spec.CanaryAnalysis.Metrics { if metric.Name == "istio_requests_total" { val, err := c.getDeploymentCounter(r.Spec.Canary.Name, r.Namespace, metric.Name, metric.Interval) @@ -281,7 +281,7 @@ func (c *Controller) checkDeploymentMetrics(r *rolloutv1.Rollout) bool { return false } if float64(metric.Threshold) > val { - c.recordEventWarningf(r, "Halt rollout %s.%s success rate %.2f%% < %v%%", + c.recordEventWarningf(r, "Halt %s.%s advancement success rate %.2f%% < %v%%", r.Name, r.Namespace, val, metric.Threshold) return false } @@ -295,7 +295,7 @@ func (c *Controller) checkDeploymentMetrics(r *rolloutv1.Rollout) bool { } t := time.Duration(metric.Threshold) * time.Millisecond if val > t { - c.recordEventWarningf(r, "Halt rollout %s.%s request duration %v > %v", + c.recordEventWarningf(r, "Halt %s.%s advancement request duration %v > %v", r.Name, r.Namespace, val, t) return false } @@ -305,7 +305,7 @@ func (c *Controller) checkDeploymentMetrics(r *rolloutv1.Rollout) bool { return true } -func (c *Controller) scaleToZeroCanary(r *rolloutv1.Rollout) { +func (c *Controller) scaleToZeroCanary(r *rolloutv1.Canary) { canary, err := c.kubeClient.AppsV1().Deployments(r.Namespace).Get(r.Spec.Canary.Name, v1.GetOptions{}) if err != nil { c.recordEventErrorf(r, "Deployment %s.%s not found", r.Spec.Canary.Name, r.Namespace) @@ -320,25 +320,25 @@ func (c *Controller) scaleToZeroCanary(r *rolloutv1.Rollout) { } } -func (c *Controller) setCanaryRevision(r *rolloutv1.Rollout, status string) { +func (c *Controller) setCanaryRevision(r *rolloutv1.Canary, status string) { canaryRevision := c.getDeploymentRevision(r.Spec.Canary.Name, r.Namespace) r, ok := c.getRollout(r.Name, r.Namespace) if !ok { return } - r.Status = rolloutv1.RolloutStatus{ + r.Status = rolloutv1.CanaryStatus{ State: status, CanaryRevision: canaryRevision, FailedChecks: r.Status.FailedChecks, } - r, err := c.rolloutClient.AppsV1beta1().Rollouts(r.Namespace).Update(r) + r, err := c.rolloutClient.SteererV1beta1().Canaries(r.Namespace).Update(r) if err != nil { - c.logger.Errorf("Rollout %s.%s status update failed: %v", r.Name, r.Namespace, err) + c.logger.Errorf("Canary %s.%s status update failed: %v", r.Name, r.Namespace, err) } - //c.logger.Infof("Rollout %s.%s status %+v", r.Spec.Canary.Name, r.Namespace, r.Status) + //c.logger.Infof("Canary %s.%s status %+v", r.Spec.Canary.Name, r.Namespace, r.Status) } -func (c *Controller) getVirtualService(r *rolloutv1.Rollout) ( +func (c *Controller) getVirtualService(r *rolloutv1.Canary) ( vs *istiov1alpha3.VirtualService, primary istiov1alpha3.DestinationWeight, canary istiov1alpha3.DestinationWeight, @@ -373,7 +373,7 @@ func (c *Controller) getVirtualService(r *rolloutv1.Rollout) ( } func (c *Controller) updateVirtualServiceRoutes( - r *rolloutv1.Rollout, + r *rolloutv1.Canary, vs *istiov1alpha3.VirtualService, primary istiov1alpha3.DestinationWeight, canary istiov1alpha3.DestinationWeight, diff --git a/pkg/version/version.go b/pkg/version/version.go index 35a444ca..ce82eec9 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -1,4 +1,4 @@ package version -var VERSION = "0.0.1-rc.18" +var VERSION = "0.0.1-rc.23" var REVISION = "unknown"