From f8ecdaddaaea9b70075fb15ab986e2cb034420d7 Mon Sep 17 00:00:00 2001 From: ricoberger Date: Thu, 6 Jan 2022 20:21:34 +0100 Subject: [PATCH] [core] Update CRDs from "v1beta1" to "v1" We updated all our CRDs from version "v1beta1" to "v1". This effects the Custom Resource Definition for Applications, Dashboards, Teams and Users. This was done in preparation of the v1.0.0 release, which marks the first stable version of kobs. Until the release we do not expect any breaking changes in the CRDs, but if they are necessary, we will do them. After the v1.0.0 release changes to the CRDs should always be backwards compatible. --- CHANGELOG.md | 1 + Makefile | 6 +- deploy/demo/bookinfo/details-application.yaml | 2 +- .../bookinfo/productpage-application.yaml | 2 +- deploy/demo/bookinfo/ratings-application.yaml | 2 +- deploy/demo/bookinfo/reviews-application.yaml | 2 +- .../elastic-operator-application.yaml | 2 +- .../elasticsearch-application.yaml | 2 +- .../elastic-system/filebeat-application.yaml | 2 +- .../demo/istio-system/jaeger-application.yaml | 2 +- .../istio-system/prometheus-application.yaml | 2 +- .../demo/kobs/base/dashboards/istio-http.yaml | 2 +- .../demo/kobs/base/dashboards/istio-logs.yaml | 2 +- .../demo/kobs/base/dashboards/pod-logs.yaml | 2 +- .../kobs/base/dashboards/resource-usage.yaml | 2 +- .../demo/kobs/base/dashboards/resources.yaml | 2 +- deploy/demo/kobs/base/dashboards/traces.yaml | 2 +- deploy/demo/kobs/base/kobs-application.yaml | 2 +- .../kobs/base/teams/team-call-of-duty.yaml | 2 +- deploy/demo/kobs/base/teams/team-diablo.yaml | 2 +- .../kobs/base/teams/team-resident-evil.yaml | 2 +- deploy/helm/kobs/Chart.yaml | 2 +- .../helm/kobs/crds/kobs.io_applications.yaml | 2 +- deploy/helm/kobs/crds/kobs.io_dashboards.yaml | 2 +- deploy/helm/kobs/crds/kobs.io_teams.yaml | 2 +- deploy/helm/kobs/crds/kobs.io_users.yaml | 2 +- .../kustomize/crds/kobs.io_applications.yaml | 2 +- deploy/kustomize/crds/kobs.io_dashboards.yaml | 2 +- deploy/kustomize/crds/kobs.io_teams.yaml | 2 +- deploy/kustomize/crds/kobs.io_users.yaml | 2 +- .../images/repository-open-graph-template.png | Bin 0 -> 43659 bytes docs/plugins/applications.md | 4 +- docs/plugins/azure.md | 6 +- docs/plugins/dashboards.md | 2 +- docs/plugins/elasticsearch.md | 2 +- docs/plugins/flux.md | 2 +- docs/plugins/grafana.md | 2 +- docs/plugins/harbor.md | 2 +- docs/plugins/helm.md | 6 +- docs/plugins/istio.md | 2 +- docs/plugins/jaeger.md | 2 +- docs/plugins/klogs.md | 4 +- docs/plugins/markdown.md | 2 +- docs/plugins/opsgenie.md | 4 +- docs/plugins/prometheus.md | 2 +- docs/plugins/resources.md | 2 +- docs/plugins/rss.md | 2 +- docs/plugins/sonarqube.md | 2 +- docs/plugins/sql.md | 2 +- docs/plugins/teams.md | 2 +- docs/plugins/techdocs.md | 2 +- docs/plugins/users.md | 2 +- docs/resources/applications.md | 2 +- docs/resources/dashboards.md | 4 +- docs/resources/teams.md | 4 +- docs/resources/users.md | 2 +- .../apis/application/{v1beta1 => v1}/doc.go | 2 +- .../application/{v1beta1 => v1}/register.go | 4 +- .../apis/application/{v1beta1 => v1}/types.go | 38 +++--- .../{v1beta1 => v1}/zz_generated.deepcopy.go | 8 +- pkg/api/apis/dashboard/{v1beta1 => v1}/doc.go | 2 +- .../dashboard/{v1beta1 => v1}/register.go | 4 +- .../apis/dashboard/{v1beta1 => v1}/types.go | 2 +- .../{v1beta1 => v1}/zz_generated.deepcopy.go | 6 +- pkg/api/apis/team/{v1beta1 => v1}/doc.go | 2 +- pkg/api/apis/team/{v1beta1 => v1}/register.go | 4 +- pkg/api/apis/team/{v1beta1 => v1}/types.go | 24 ++-- .../{v1beta1 => v1}/zz_generated.deepcopy.go | 6 +- pkg/api/apis/user/{v1beta1 => v1}/doc.go | 2 +- pkg/api/apis/user/{v1beta1 => v1}/register.go | 4 +- pkg/api/apis/user/{v1beta1 => v1}/types.go | 2 +- .../{v1beta1 => v1}/zz_generated.deepcopy.go | 2 +- .../clientset/versioned/clientset.go | 18 +-- .../versioned/fake/clientset_generated.go | 10 +- .../clientset/versioned/fake/register.go | 4 +- .../clientset/versioned/scheme/register.go | 4 +- .../{v1beta1 => v1}/application.go | 50 ++++---- .../{v1beta1 => v1}/application_client.go | 32 ++--- .../versioned/typed/application/v1}/doc.go | 2 +- .../application/{v1beta1 => v1}/fake/doc.go | 0 .../{v1beta1 => v1}/fake/fake_application.go | 44 +++---- .../fake/fake_application_client.go | 8 +- .../{v1beta1 => v1}/generated_expansion.go | 2 +- .../externalversions/application/interface.go | 12 +- .../{v1beta1 => v1}/application.go | 26 ++--- .../application/{v1beta1 => v1}/interface.go | 2 +- .../informers/externalversions/generic.go | 8 +- .../{v1beta1 => v1}/application.go | 24 ++-- .../{v1beta1 => v1}/expansion_generated.go | 2 +- .../clientset/versioned/clientset.go | 18 +-- .../versioned/fake/clientset_generated.go | 10 +- .../clientset/versioned/fake/register.go | 4 +- .../clientset/versioned/scheme/register.go | 4 +- .../dashboard/{v1beta1 => v1}/dashboard.go | 50 ++++---- .../{v1beta1 => v1}/dashboard_client.go | 32 ++--- .../versioned/typed/dashboard/v1}/doc.go | 2 +- .../dashboard/{v1beta1 => v1}/fake/doc.go | 0 .../{v1beta1 => v1}/fake/fake_dashboard.go | 44 +++---- .../fake/fake_dashboard_client.go | 8 +- .../{v1beta1 => v1}/generated_expansion.go | 2 +- .../externalversions/dashboard/interface.go | 12 +- .../dashboard/{v1beta1 => v1}/dashboard.go | 26 ++--- .../dashboard/{v1beta1 => v1}/interface.go | 2 +- .../informers/externalversions/generic.go | 8 +- .../dashboard/{v1beta1 => v1}/dashboard.go | 24 ++-- .../{v1beta1 => v1}/expansion_generated.go | 2 +- .../team/clientset/versioned/clientset.go | 18 +-- .../versioned/fake/clientset_generated.go | 10 +- .../team/clientset/versioned/fake/register.go | 4 +- .../clientset/versioned/scheme/register.go | 4 +- .../clientset/versioned/typed/team/v1}/doc.go | 2 +- .../typed/team/{v1beta1 => v1}/fake/doc.go | 0 .../team/{v1beta1 => v1}/fake/fake_team.go | 44 +++---- .../{v1beta1 => v1}/fake/fake_team_client.go | 8 +- .../{v1beta1 => v1}/generated_expansion.go | 2 +- .../typed/team/{v1beta1 => v1}/team.go | 50 ++++---- .../typed/team/{v1beta1 => v1}/team_client.go | 32 ++--- .../informers/externalversions/generic.go | 8 +- .../externalversions/team/interface.go | 12 +- .../team/{v1beta1 => v1}/interface.go | 2 +- .../team/{v1beta1 => v1}/team.go | 26 ++--- .../{v1beta1 => v1}/expansion_generated.go | 2 +- .../team/listers/team/{v1beta1 => v1}/team.go | 24 ++-- .../user/clientset/versioned/clientset.go | 18 +-- .../versioned/fake/clientset_generated.go | 10 +- .../user/clientset/versioned/fake/register.go | 4 +- .../clientset/versioned/scheme/register.go | 4 +- .../typed/user/{v1beta1 => v1}/doc.go | 2 +- .../typed/user/{v1beta1 => v1}/fake/doc.go | 0 .../user/{v1beta1 => v1}/fake/fake_user.go | 44 +++---- .../{v1beta1 => v1}/fake/fake_user_client.go | 8 +- .../{v1beta1 => v1}/generated_expansion.go | 2 +- .../typed/user/{v1beta1 => v1}/user.go | 50 ++++---- .../typed/user/{v1beta1 => v1}/user_client.go | 32 ++--- .../informers/externalversions/generic.go | 8 +- .../externalversions/user/interface.go | 12 +- .../user/{v1beta1 => v1}/interface.go | 2 +- .../user/{v1beta1 => v1}/user.go | 26 ++--- .../{v1beta1 => v1}/expansion_generated.go | 2 +- .../user/listers/user/{v1beta1 => v1}/user.go | 24 ++-- pkg/api/clusters/cluster/cluster.go | 70 +++++------ pkg/api/clusters/cluster/cluster_mock.go | 90 ++++++-------- pkg/api/clusters/cluster/cluster_test.go | 110 +++++++++--------- pkg/api/clusters/cluster/defaults.go | 16 +-- pkg/api/clusters/cluster/defaults_test.go | 52 ++++----- pkg/api/middleware/auth/auth.go | 14 +-- pkg/api/middleware/auth/auth_test.go | 38 +++--- pkg/api/middleware/auth/context/context.go | 16 +-- .../middleware/auth/context/context_test.go | 96 +++++++-------- plugins/applications/applications.go | 4 +- plugins/applications/applications_test.go | 54 ++++----- plugins/applications/pkg/tags/tags.go | 6 +- plugins/applications/pkg/tags/tags_test.go | 6 +- plugins/applications/pkg/teams/teams.go | 10 +- plugins/applications/pkg/teams/teams_test.go | 20 ++-- plugins/applications/pkg/topology/topology.go | 28 ++--- .../pkg/topology/topology_test.go | 64 +++++----- .../azure/pkg/instance/permissions_test.go | 8 +- plugins/dashboards/dashboards.go | 14 +-- plugins/dashboards/dashboards_test.go | 8 +- plugins/dashboards/pkg/variables/variables.go | 18 +-- .../pkg/variables/variables_test.go | 32 ++--- plugins/flux/pkg/sync/sync.go | 6 +- plugins/helm/helm_test.go | 4 +- .../helm/pkg/permissions/permissions_test.go | 8 +- .../opsgenie/pkg/instance/permissions_test.go | 10 +- plugins/teams/teams.go | 4 +- plugins/teams/teams_test.go | 6 +- plugins/users/users.go | 16 +-- plugins/users/users_test.go | 16 +-- 170 files changed, 1031 insertions(+), 1048 deletions(-) create mode 100644 docs/assets/images/repository-open-graph-template.png rename pkg/api/apis/application/{v1beta1 => v1}/doc.go (76%) rename pkg/api/apis/application/{v1beta1 => v1}/register.go (96%) rename pkg/api/apis/application/{v1beta1 => v1}/types.go (51%) rename pkg/api/apis/application/{v1beta1 => v1}/zz_generated.deepcopy.go (96%) rename pkg/api/apis/dashboard/{v1beta1 => v1}/doc.go (76%) rename pkg/api/apis/dashboard/{v1beta1 => v1}/register.go (96%) rename pkg/api/apis/dashboard/{v1beta1 => v1}/types.go (99%) rename pkg/api/apis/dashboard/{v1beta1 => v1}/zz_generated.deepcopy.go (98%) rename pkg/api/apis/team/{v1beta1 => v1}/doc.go (76%) rename pkg/api/apis/team/{v1beta1 => v1}/register.go (96%) rename pkg/api/apis/team/{v1beta1 => v1}/types.go (55%) rename pkg/api/apis/team/{v1beta1 => v1}/zz_generated.deepcopy.go (96%) rename pkg/api/apis/user/{v1beta1 => v1}/doc.go (76%) rename pkg/api/apis/user/{v1beta1 => v1}/register.go (96%) rename pkg/api/apis/user/{v1beta1 => v1}/types.go (99%) rename pkg/api/apis/user/{v1beta1 => v1}/zz_generated.deepcopy.go (99%) rename pkg/api/clients/application/clientset/versioned/typed/application/{v1beta1 => v1}/application.go (71%) rename pkg/api/clients/application/clientset/versioned/typed/application/{v1beta1 => v1}/application_client.go (64%) rename pkg/api/clients/{team/clientset/versioned/typed/team/v1beta1 => application/clientset/versioned/typed/application/v1}/doc.go (97%) rename pkg/api/clients/application/clientset/versioned/typed/application/{v1beta1 => v1}/fake/doc.go (100%) rename pkg/api/clients/application/clientset/versioned/typed/application/{v1beta1 => v1}/fake/fake_application.go (74%) rename pkg/api/clients/application/clientset/versioned/typed/application/{v1beta1 => v1}/fake/fake_application_client.go (76%) rename pkg/api/clients/application/clientset/versioned/typed/application/{v1beta1 => v1}/generated_expansion.go (97%) rename pkg/api/clients/application/informers/externalversions/application/{v1beta1 => v1}/application.go (78%) rename pkg/api/clients/application/informers/externalversions/application/{v1beta1 => v1}/interface.go (98%) rename pkg/api/clients/application/listers/application/{v1beta1 => v1}/application.go (82%) rename pkg/api/clients/application/listers/application/{v1beta1 => v1}/expansion_generated.go (98%) rename pkg/api/clients/dashboard/clientset/versioned/typed/dashboard/{v1beta1 => v1}/dashboard.go (70%) rename pkg/api/clients/dashboard/clientset/versioned/typed/dashboard/{v1beta1 => v1}/dashboard_client.go (65%) rename pkg/api/clients/{application/clientset/versioned/typed/application/v1beta1 => dashboard/clientset/versioned/typed/dashboard/v1}/doc.go (97%) rename pkg/api/clients/dashboard/clientset/versioned/typed/dashboard/{v1beta1 => v1}/fake/doc.go (100%) rename pkg/api/clients/dashboard/clientset/versioned/typed/dashboard/{v1beta1 => v1}/fake/fake_dashboard.go (76%) rename pkg/api/clients/dashboard/clientset/versioned/typed/dashboard/{v1beta1 => v1}/fake/fake_dashboard_client.go (76%) rename pkg/api/clients/dashboard/clientset/versioned/typed/dashboard/{v1beta1 => v1}/generated_expansion.go (97%) rename pkg/api/clients/dashboard/informers/externalversions/dashboard/{v1beta1 => v1}/dashboard.go (78%) rename pkg/api/clients/dashboard/informers/externalversions/dashboard/{v1beta1 => v1}/interface.go (98%) rename pkg/api/clients/dashboard/listers/dashboard/{v1beta1 => v1}/dashboard.go (82%) rename pkg/api/clients/dashboard/listers/dashboard/{v1beta1 => v1}/expansion_generated.go (98%) rename pkg/api/clients/{dashboard/clientset/versioned/typed/dashboard/v1beta1 => team/clientset/versioned/typed/team/v1}/doc.go (97%) rename pkg/api/clients/team/clientset/versioned/typed/team/{v1beta1 => v1}/fake/doc.go (100%) rename pkg/api/clients/team/clientset/versioned/typed/team/{v1beta1 => v1}/fake/fake_team.go (72%) rename pkg/api/clients/team/clientset/versioned/typed/team/{v1beta1 => v1}/fake/fake_team_client.go (78%) rename pkg/api/clients/team/clientset/versioned/typed/team/{v1beta1 => v1}/generated_expansion.go (97%) rename pkg/api/clients/team/clientset/versioned/typed/team/{v1beta1 => v1}/team.go (68%) rename pkg/api/clients/team/clientset/versioned/typed/team/{v1beta1 => v1}/team_client.go (65%) rename pkg/api/clients/team/informers/externalversions/team/{v1beta1 => v1}/interface.go (98%) rename pkg/api/clients/team/informers/externalversions/team/{v1beta1 => v1}/team.go (79%) rename pkg/api/clients/team/listers/team/{v1beta1 => v1}/expansion_generated.go (98%) rename pkg/api/clients/team/listers/team/{v1beta1 => v1}/team.go (81%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/doc.go (97%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/fake/doc.go (100%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/fake/fake_user.go (72%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/fake/fake_user_client.go (78%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/generated_expansion.go (97%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/user.go (68%) rename pkg/api/clients/user/clientset/versioned/typed/user/{v1beta1 => v1}/user_client.go (65%) rename pkg/api/clients/user/informers/externalversions/user/{v1beta1 => v1}/interface.go (98%) rename pkg/api/clients/user/informers/externalversions/user/{v1beta1 => v1}/user.go (79%) rename pkg/api/clients/user/listers/user/{v1beta1 => v1}/expansion_generated.go (98%) rename pkg/api/clients/user/listers/user/{v1beta1 => v1}/user.go (81%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 126669a64..a2b9d7ca6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,7 @@ NOTE: As semantic versioning states all 0.y.z releases can contain breaking chan - [#276](https://github.com/kobsio/kobs/pull/276): [resources] :warning: _Breaking change:_ :warning: Add new `verbs` property for resource permissions, to allow administrators more control about what users can do. - [#279](https://github.com/kobsio/kobs/pull/279): [dashboards] :warning: _Breaking change:_ :warning: Refactor defaults, placeholders and variables handling. - [#281](https://github.com/kobsio/kobs/pull/281): [helm] Remove `helm.sh/helm/v3` package and use a custom implementation to get Helm releases. +- [#284](https://github.com/kobsio/kobs/pull/284): [core] :warning: _Breaking change:_ :warning: Update CRD versions from `v1beta1` to `v1`. ## [v0.7.0](https://github.com/kobsio/kobs/releases/tag/v0.7.0) (2021-11-19) diff --git a/Makefile b/Makefile index c379ff038..7173344ff 100644 --- a/Makefile +++ b/Makefile @@ -22,13 +22,13 @@ generate: generate-crds .PHONY: generate-crds generate-crds: for crd in $(CRDS); do \ - ${GOPATH}/src/k8s.io/code-generator/generate-groups.sh "deepcopy,client,informer,lister" github.com/kobsio/kobs/pkg/api/clients/$$crd github.com/kobsio/kobs/pkg/api/apis $$crd:v1beta1 --output-base ./tmp; \ - rm -rf ./pkg/api/apis/$$crd/v1beta1/zz_generated.deepcopy.go; \ + ${GOPATH}/src/k8s.io/code-generator/generate-groups.sh "deepcopy,client,informer,lister" github.com/kobsio/kobs/pkg/api/clients/$$crd github.com/kobsio/kobs/pkg/api/apis $$crd:v1 --output-base ./tmp; \ + rm -rf ./pkg/api/apis/$$crd/v1/zz_generated.deepcopy.go; \ rm -rf ./pkg/api/clients/$$crd/clientset; \ rm -rf ./pkg/api/clients/$$crd/informers; \ rm -rf ./pkg/api/clients/$$crd/listers; \ mkdir -p ./pkg/api/clients/$$crd; \ - mv ./tmp/github.com/kobsio/kobs/pkg/api/apis/$$crd/v1beta1/zz_generated.deepcopy.go ./pkg/api/apis/$$crd/v1beta1; \ + mv ./tmp/github.com/kobsio/kobs/pkg/api/apis/$$crd/v1/zz_generated.deepcopy.go ./pkg/api/apis/$$crd/v1; \ mv ./tmp/github.com/kobsio/kobs/pkg/api/clients/$$crd/clientset ./pkg/api/clients/$$crd/clientset; \ mv ./tmp/github.com/kobsio/kobs/pkg/api/clients/$$crd/informers ./pkg/api/clients/$$crd/informers; \ mv ./tmp/github.com/kobsio/kobs/pkg/api/clients/$$crd/listers ./pkg/api/clients/$$crd/listers; \ diff --git a/deploy/demo/bookinfo/details-application.yaml b/deploy/demo/bookinfo/details-application.yaml index 12b6a261c..cb29708ce 100644 --- a/deploy/demo/bookinfo/details-application.yaml +++ b/deploy/demo/bookinfo/details-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: details diff --git a/deploy/demo/bookinfo/productpage-application.yaml b/deploy/demo/bookinfo/productpage-application.yaml index 3c490d0d3..f6a91fbd4 100644 --- a/deploy/demo/bookinfo/productpage-application.yaml +++ b/deploy/demo/bookinfo/productpage-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: productpage diff --git a/deploy/demo/bookinfo/ratings-application.yaml b/deploy/demo/bookinfo/ratings-application.yaml index 50c449302..3ce00439d 100644 --- a/deploy/demo/bookinfo/ratings-application.yaml +++ b/deploy/demo/bookinfo/ratings-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: ratings diff --git a/deploy/demo/bookinfo/reviews-application.yaml b/deploy/demo/bookinfo/reviews-application.yaml index 0b59d0240..8cb911e72 100644 --- a/deploy/demo/bookinfo/reviews-application.yaml +++ b/deploy/demo/bookinfo/reviews-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: reviews diff --git a/deploy/demo/elastic-system/elastic-operator-application.yaml b/deploy/demo/elastic-system/elastic-operator-application.yaml index e564add4e..19f2ff465 100644 --- a/deploy/demo/elastic-system/elastic-operator-application.yaml +++ b/deploy/demo/elastic-system/elastic-operator-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: elastic-operator diff --git a/deploy/demo/elastic-system/elasticsearch-application.yaml b/deploy/demo/elastic-system/elasticsearch-application.yaml index 2307f7584..3f8374f63 100644 --- a/deploy/demo/elastic-system/elasticsearch-application.yaml +++ b/deploy/demo/elastic-system/elasticsearch-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: elasticsearch diff --git a/deploy/demo/elastic-system/filebeat-application.yaml b/deploy/demo/elastic-system/filebeat-application.yaml index 479ce8a2d..b92262f90 100644 --- a/deploy/demo/elastic-system/filebeat-application.yaml +++ b/deploy/demo/elastic-system/filebeat-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: filebeat diff --git a/deploy/demo/istio-system/jaeger-application.yaml b/deploy/demo/istio-system/jaeger-application.yaml index 56cb0f9d5..8562fbab3 100644 --- a/deploy/demo/istio-system/jaeger-application.yaml +++ b/deploy/demo/istio-system/jaeger-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: jaeger diff --git a/deploy/demo/istio-system/prometheus-application.yaml b/deploy/demo/istio-system/prometheus-application.yaml index 98eac18b4..f3b98e442 100644 --- a/deploy/demo/istio-system/prometheus-application.yaml +++ b/deploy/demo/istio-system/prometheus-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: prometheus diff --git a/deploy/demo/kobs/base/dashboards/istio-http.yaml b/deploy/demo/kobs/base/dashboards/istio-http.yaml index cada105e9..399dffc7b 100644 --- a/deploy/demo/kobs/base/dashboards/istio-http.yaml +++ b/deploy/demo/kobs/base/dashboards/istio-http.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Dashboard metadata: name: istio-http diff --git a/deploy/demo/kobs/base/dashboards/istio-logs.yaml b/deploy/demo/kobs/base/dashboards/istio-logs.yaml index b4b23357d..415b4baee 100644 --- a/deploy/demo/kobs/base/dashboards/istio-logs.yaml +++ b/deploy/demo/kobs/base/dashboards/istio-logs.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Dashboard metadata: name: istio-logs diff --git a/deploy/demo/kobs/base/dashboards/pod-logs.yaml b/deploy/demo/kobs/base/dashboards/pod-logs.yaml index 16feef3b3..d05e80f81 100644 --- a/deploy/demo/kobs/base/dashboards/pod-logs.yaml +++ b/deploy/demo/kobs/base/dashboards/pod-logs.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Dashboard metadata: name: pod-logs diff --git a/deploy/demo/kobs/base/dashboards/resource-usage.yaml b/deploy/demo/kobs/base/dashboards/resource-usage.yaml index 24338078d..158f80a59 100644 --- a/deploy/demo/kobs/base/dashboards/resource-usage.yaml +++ b/deploy/demo/kobs/base/dashboards/resource-usage.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Dashboard metadata: name: resource-usage diff --git a/deploy/demo/kobs/base/dashboards/resources.yaml b/deploy/demo/kobs/base/dashboards/resources.yaml index cebbe5ccf..99e1ff7ee 100644 --- a/deploy/demo/kobs/base/dashboards/resources.yaml +++ b/deploy/demo/kobs/base/dashboards/resources.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Dashboard metadata: name: resources diff --git a/deploy/demo/kobs/base/dashboards/traces.yaml b/deploy/demo/kobs/base/dashboards/traces.yaml index 418b4703a..d5e5a4a58 100644 --- a/deploy/demo/kobs/base/dashboards/traces.yaml +++ b/deploy/demo/kobs/base/dashboards/traces.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Dashboard metadata: name: traces diff --git a/deploy/demo/kobs/base/kobs-application.yaml b/deploy/demo/kobs/base/kobs-application.yaml index 3c53237f1..4d35f532a 100644 --- a/deploy/demo/kobs/base/kobs-application.yaml +++ b/deploy/demo/kobs/base/kobs-application.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Application metadata: name: kobs diff --git a/deploy/demo/kobs/base/teams/team-call-of-duty.yaml b/deploy/demo/kobs/base/teams/team-call-of-duty.yaml index 1fe7ed16e..136c2a928 100644 --- a/deploy/demo/kobs/base/teams/team-call-of-duty.yaml +++ b/deploy/demo/kobs/base/teams/team-call-of-duty.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Team metadata: name: team-call-of-duty diff --git a/deploy/demo/kobs/base/teams/team-diablo.yaml b/deploy/demo/kobs/base/teams/team-diablo.yaml index 0bccbb0b7..93ec8d131 100644 --- a/deploy/demo/kobs/base/teams/team-diablo.yaml +++ b/deploy/demo/kobs/base/teams/team-diablo.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Team metadata: name: team-diablo diff --git a/deploy/demo/kobs/base/teams/team-resident-evil.yaml b/deploy/demo/kobs/base/teams/team-resident-evil.yaml index 82cb6f9d1..8ea511ab4 100644 --- a/deploy/demo/kobs/base/teams/team-resident-evil.yaml +++ b/deploy/demo/kobs/base/teams/team-resident-evil.yaml @@ -1,5 +1,5 @@ --- -apiVersion: kobs.io/v1beta1 +apiVersion: kobs.io/v1 kind: Team metadata: name: team-resident-evil diff --git a/deploy/helm/kobs/Chart.yaml b/deploy/helm/kobs/Chart.yaml index 69fd2c61e..6c3dd289b 100644 --- a/deploy/helm/kobs/Chart.yaml +++ b/deploy/helm/kobs/Chart.yaml @@ -4,5 +4,5 @@ description: Kubernetes Observability Platform type: application home: https://kobs.io icon: https://kobs.io/assets/images/logo.svg -version: 0.9.3 +version: 0.10.0 appVersion: v0.7.0 diff --git a/deploy/helm/kobs/crds/kobs.io_applications.yaml b/deploy/helm/kobs/crds/kobs.io_applications.yaml index 873ec8ef2..e849e2def 100644 --- a/deploy/helm/kobs/crds/kobs.io_applications.yaml +++ b/deploy/helm/kobs/crds/kobs.io_applications.yaml @@ -16,7 +16,7 @@ spec: singular: application scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: Application is the Application CRD. diff --git a/deploy/helm/kobs/crds/kobs.io_dashboards.yaml b/deploy/helm/kobs/crds/kobs.io_dashboards.yaml index 2c0720b45..31bb93c2a 100644 --- a/deploy/helm/kobs/crds/kobs.io_dashboards.yaml +++ b/deploy/helm/kobs/crds/kobs.io_dashboards.yaml @@ -16,7 +16,7 @@ spec: singular: dashboard scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: Dashboard is the Dashboard CRD. diff --git a/deploy/helm/kobs/crds/kobs.io_teams.yaml b/deploy/helm/kobs/crds/kobs.io_teams.yaml index 29b1bc961..e1b70e09d 100644 --- a/deploy/helm/kobs/crds/kobs.io_teams.yaml +++ b/deploy/helm/kobs/crds/kobs.io_teams.yaml @@ -16,7 +16,7 @@ spec: singular: team scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: Team is the Team CRD. diff --git a/deploy/helm/kobs/crds/kobs.io_users.yaml b/deploy/helm/kobs/crds/kobs.io_users.yaml index 352a09c3d..50036a5aa 100644 --- a/deploy/helm/kobs/crds/kobs.io_users.yaml +++ b/deploy/helm/kobs/crds/kobs.io_users.yaml @@ -16,7 +16,7 @@ spec: singular: user scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: User is the User CRD. diff --git a/deploy/kustomize/crds/kobs.io_applications.yaml b/deploy/kustomize/crds/kobs.io_applications.yaml index 873ec8ef2..e849e2def 100644 --- a/deploy/kustomize/crds/kobs.io_applications.yaml +++ b/deploy/kustomize/crds/kobs.io_applications.yaml @@ -16,7 +16,7 @@ spec: singular: application scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: Application is the Application CRD. diff --git a/deploy/kustomize/crds/kobs.io_dashboards.yaml b/deploy/kustomize/crds/kobs.io_dashboards.yaml index 2c0720b45..31bb93c2a 100644 --- a/deploy/kustomize/crds/kobs.io_dashboards.yaml +++ b/deploy/kustomize/crds/kobs.io_dashboards.yaml @@ -16,7 +16,7 @@ spec: singular: dashboard scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: Dashboard is the Dashboard CRD. diff --git a/deploy/kustomize/crds/kobs.io_teams.yaml b/deploy/kustomize/crds/kobs.io_teams.yaml index 29b1bc961..e1b70e09d 100644 --- a/deploy/kustomize/crds/kobs.io_teams.yaml +++ b/deploy/kustomize/crds/kobs.io_teams.yaml @@ -16,7 +16,7 @@ spec: singular: team scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: Team is the Team CRD. diff --git a/deploy/kustomize/crds/kobs.io_users.yaml b/deploy/kustomize/crds/kobs.io_users.yaml index 352a09c3d..50036a5aa 100644 --- a/deploy/kustomize/crds/kobs.io_users.yaml +++ b/deploy/kustomize/crds/kobs.io_users.yaml @@ -16,7 +16,7 @@ spec: singular: user scope: Namespaced versions: - - name: v1beta1 + - name: v1 schema: openAPIV3Schema: description: User is the User CRD. diff --git a/docs/assets/images/repository-open-graph-template.png b/docs/assets/images/repository-open-graph-template.png new file mode 100644 index 0000000000000000000000000000000000000000..b70a315940a99bcf53cf92f0b75e41d1914c7728 GIT binary patch literal 43659 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 c(C+*d;dzCG0~P&VE(Cs*