From 4ea0e8f89d23974445c4636cbbb761b5b2820cc3 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Sun, 20 Nov 2022 17:42:41 -0800 Subject: [PATCH 01/12] incremental --- .../docs/kubeapps-apis.swagger.json | 952 +++++++----------- .../fluxv2/packages/v1alpha1/fluxv2.pb.go | 805 ++++++--------- .../fluxv2/packages/v1alpha1/fluxv2.pb.gw.go | 422 ++++---- .../packages/v1alpha1/fluxv2_grpc.pb.go | 42 - .../v1alpha1/chart_integration_test.go | 6 +- .../fluxv2/packages/v1alpha1/common/utils.go | 31 +- .../packages/v1alpha1/global_vars_test.go | 31 +- .../v1alpha1/release_integration_test.go | 2 - .../plugins/fluxv2/packages/v1alpha1/repo.go | 449 +-------- .../fluxv2/packages/v1alpha1/repo_auth.go | 567 +++++++++++ .../v1alpha1/repo_integration_test.go | 101 +- .../fluxv2/packages/v1alpha1/repo_test.go | 19 +- .../fluxv2/packages/v1alpha1/server.go | 11 +- .../packages/v1alpha1/test_util_test.go | 20 +- .../fluxv2/packages/v1alpha1/fluxv2.proto | 12 - .../fluxv2/packages/v1alpha1/fluxv2.ts | 260 ++--- script/makefiles/cluster-kind.mk | 2 +- 17 files changed, 1584 insertions(+), 2148 deletions(-) create mode 100644 cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go diff --git a/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json b/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json index ad345d22c2c..abe2ba7b90c 100644 --- a/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json +++ b/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json @@ -79,28 +79,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query\n\nText query for the request", + "description": "Text query. Text query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories\n\nCollection of categories for the request", + "description": "Categories. Collection of categories for the request", "in": "query", "required": false, "type": "array", @@ -111,7 +111,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories\n\nCollection of repositories where the packages belong to", + "description": "Repositories. Collection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -122,28 +122,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version\n\nPackage version for the request", + "description": "Package version. Package version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version\n\nPackaged app version for the request", + "description": "App version. Packaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -210,8 +210,7 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "pkgVersion", @@ -281,8 +280,7 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "pkgVersion", @@ -321,28 +319,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -376,7 +374,6 @@ "parameters": [ { "name": "body", - "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -573,41 +570,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "installedPackageRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the package.", - "title": "Installed package context" - }, - "plugin": { - "type": "object", - "example": { - "name": "kapp_controller.packages", - "version": "v1alpha1" - }, - "description": "The plugin used to identify and interact with the installed package.\nThis field can be omitted when the request is in the context of a specific plugin.", - "title": "The plugin used to identify and interact with the installed package.\nThis field can be omitted when the request is in the context of a specific plugin." - } - }, - "title": "A reference uniquely identifying the installed package being updated.\nRequired" - }, - "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" - }, - "values": { - "type": "string", - "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." - }, - "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions" - } - }, - "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", - "title": "UpdateInstalledPackageRequest" + "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" } } ], @@ -703,14 +666,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -743,7 +706,6 @@ "parameters": [ { "name": "body", - "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -787,7 +749,7 @@ }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -853,8 +815,7 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" } ], "tags": [ @@ -915,8 +876,7 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" } ], "tags": [ @@ -977,60 +937,14 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "body", "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "packageRepoRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the repository.", - "title": "The context (cluster/namespace) for the repository." - }, - "plugin": { - "type": "object", - "example": { - "name": "kapp_controller.packages", - "version": "v1alpha1" - }, - "description": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a\nspecific plugin.", - "title": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a\nspecific plugin." - } - }, - "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" - }, - "url": { - "type": "string", - "description": "URL identifying the package repository location." - }, - "description": { - "type": "string", - "description": "A user-provided description." - }, - "interval": { - "type": "string", - "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" - }, - "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" - }, - "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" - }, - "customDetail": { - "$ref": "#/definitions/protobufAny" - } - }, - "description": "Request for UpdatePackageRepository", - "title": "UpdatePackageRepositoryRequest" + "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" } } ], @@ -1091,28 +1005,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query\n\nText query for the request", + "description": "Text query. Text query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories\n\nCollection of categories for the request", + "description": "Categories. Collection of categories for the request", "in": "query", "required": false, "type": "array", @@ -1123,7 +1037,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories\n\nCollection of repositories where the packages belong to", + "description": "Repositories. Collection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -1134,28 +1048,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version\n\nPackage version for the request", + "description": "Package version. Package version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version\n\nPackaged app version for the request", + "description": "App version. Packaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -1209,19 +1123,18 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1281,19 +1194,18 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1336,28 +1248,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -1392,7 +1304,6 @@ "parameters": [ { "name": "body", - "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -1451,14 +1362,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1513,14 +1424,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1578,35 +1489,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "installedPackageRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the package.", - "title": "Installed package context" - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "title": "A reference uniquely identifying the installed package being updated.\nRequired" - }, - "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" - }, - "values": { - "type": "string", - "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." - }, - "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions" - } - }, - "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", - "title": "UpdateInstalledPackageRequest" + "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" } } ], @@ -1661,14 +1544,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1703,14 +1586,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -1744,7 +1627,6 @@ "parameters": [ { "name": "body", - "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -1788,7 +1670,7 @@ }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -1840,19 +1722,18 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1902,19 +1783,18 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1964,54 +1844,14 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "body", "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "packageRepoRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the repository.", - "title": "The context (cluster/namespace) for the repository." - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" - }, - "url": { - "type": "string", - "description": "URL identifying the package repository location." - }, - "description": { - "type": "string", - "description": "A user-provided description." - }, - "interval": { - "type": "string", - "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" - }, - "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" - }, - "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" - }, - "customDetail": { - "$ref": "#/definitions/protobufAny" - } - }, - "description": "Request for UpdatePackageRepository", - "title": "UpdatePackageRepositoryRequest" + "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" } } ], @@ -2045,28 +1885,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query\n\nText query for the request", + "description": "Text query. Text query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories\n\nCollection of categories for the request", + "description": "Categories. Collection of categories for the request", "in": "query", "required": false, "type": "array", @@ -2077,7 +1917,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories\n\nCollection of repositories where the packages belong to", + "description": "Repositories. Collection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -2088,28 +1928,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version\n\nPackage version for the request", + "description": "Package version. Package version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version\n\nPackaged app version for the request", + "description": "App version. Packaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -2163,19 +2003,18 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2235,19 +2074,18 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2290,28 +2128,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -2346,7 +2184,6 @@ "parameters": [ { "name": "body", - "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -2405,14 +2242,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2467,14 +2304,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2532,35 +2369,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "installedPackageRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the package.", - "title": "Installed package context" - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "title": "A reference uniquely identifying the installed package being updated.\nRequired" - }, - "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" - }, - "values": { - "type": "string", - "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." - }, - "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions" - } - }, - "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", - "title": "UpdateInstalledPackageRequest" + "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" } } ], @@ -2615,14 +2424,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2682,30 +2491,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "installedPackageRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the package.", - "title": "Installed package context" - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "description": "A reference uniquely identifying the installed package.", - "title": "Installed package reference" - }, - "releaseRevision": { - "type": "integer", - "format": "int32", - "description": "A number identifying the Helm revision to which to rollback.", - "title": "ReleaseRevision" - } - } + "$ref": "#/definitions/v1alpha1RollbackInstalledPackageRequest" } } ], @@ -2738,14 +2524,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -2779,7 +2565,6 @@ "parameters": [ { "name": "body", - "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -2823,7 +2608,7 @@ }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -2875,19 +2660,18 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2937,19 +2721,18 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2999,54 +2782,14 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "body", "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "packageRepoRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the repository.", - "title": "The context (cluster/namespace) for the repository." - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" - }, - "url": { - "type": "string", - "description": "URL identifying the package repository location." - }, - "description": { - "type": "string", - "description": "A user-provided description." - }, - "interval": { - "type": "string", - "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" - }, - "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" - }, - "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" - }, - "customDetail": { - "$ref": "#/definitions/protobufAny" - } - }, - "description": "Request for UpdatePackageRepository", - "title": "UpdatePackageRepositoryRequest" + "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" } } ], @@ -3080,28 +2823,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query\n\nText query for the request", + "description": "Text query. Text query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories\n\nCollection of categories for the request", + "description": "Categories. Collection of categories for the request", "in": "query", "required": false, "type": "array", @@ -3112,7 +2855,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories\n\nCollection of repositories where the packages belong to", + "description": "Repositories. Collection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -3123,28 +2866,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version\n\nPackage version for the request", + "description": "Package version. Package version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version\n\nPackaged app version for the request", + "description": "App version. Packaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -3198,19 +2941,18 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3270,19 +3012,18 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3325,28 +3066,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", + "description": "Page token. The client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -3381,7 +3122,6 @@ "parameters": [ { "name": "body", - "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -3440,14 +3180,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3502,14 +3242,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3567,35 +3307,7 @@ "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "installedPackageRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the package.", - "title": "Installed package context" - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "title": "A reference uniquely identifying the installed package being updated.\nRequired" - }, - "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" - }, - "values": { - "type": "string", - "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." - }, - "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions" - } - }, - "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", - "title": "UpdateInstalledPackageRequest" + "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" } } ], @@ -3650,14 +3362,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3692,14 +3404,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -3733,7 +3445,6 @@ "parameters": [ { "name": "body", - "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -3777,7 +3488,7 @@ }, { "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -3829,19 +3540,18 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3891,19 +3601,18 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", + "description": "Plugin version. The version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3953,54 +3662,14 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string", - "pattern": ".+" + "type": "string" }, { "name": "body", "in": "body", "required": true, "schema": { - "type": "object", - "properties": { - "packageRepoRef": { - "type": "object", - "properties": { - "context": { - "type": "object", - "description": "The context (cluster/namespace) for the repository.", - "title": "The context (cluster/namespace) for the repository." - }, - "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" - } - }, - "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" - }, - "url": { - "type": "string", - "description": "URL identifying the package repository location." - }, - "description": { - "type": "string", - "description": "A user-provided description." - }, - "interval": { - "type": "string", - "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" - }, - "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" - }, - "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" - }, - "customDetail": { - "$ref": "#/definitions/protobufAny" - } - }, - "description": "Request for UpdatePackageRepository", - "title": "UpdatePackageRepositoryRequest" + "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" } } ], @@ -4072,34 +3741,6 @@ "in": "path", "required": true, "type": "string" - }, - { - "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "group", - "description": "Group API Group of the Resource. \"*\" means all.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "resource", - "description": "Resource is one of the existing resource types. \"*\" means all.\n+optional", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "verb", - "description": "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.\n+optional", - "in": "query", - "required": false, - "type": "string" } ], "tags": [ @@ -4135,13 +3776,6 @@ "in": "path", "required": true, "type": "string" - }, - { - "name": "context.namespace", - "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", - "in": "query", - "required": false, - "type": "string" } ], "tags": [ @@ -4268,31 +3902,6 @@ "in": "path", "required": true, "type": "string" - }, - { - "name": "type", - "description": "Type\n\nThe type of the secret. Valid values are defined by the Type enumeration.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "SECRET_TYPE_OPAQUE_UNSPECIFIED", - "SECRET_TYPE_SERVICE_ACCOUNT_TOKEN", - "SECRET_TYPE_DOCKER_CONFIG", - "SECRET_TYPE_DOCKER_CONFIG_JSON", - "SECRET_TYPE_BASIC_AUTH", - "SECRET_TYPE_SSH_AUTH", - "SECRET_TYPE_TLS", - "SECRET_TYPE_BOOTSTRAP_TOKEN" - ], - "default": "SECRET_TYPE_OPAQUE_UNSPECIFIED" - }, - { - "name": "name", - "description": "Name\n\nThe name of the secret.", - "in": "query", - "required": false, - "type": "string" } ], "tags": [ @@ -4410,7 +4019,7 @@ }, { "name": "watch", - "description": "Watch\n\nWhen true, this will cause the stream to remain open with updated\nresources being sent as events are received from the Kubernetes API\nserver.", + "description": "Watch. When true, this will cause the stream to remain open with updated\nresources being sent as events are received from the Kubernetes API\nserver.", "in": "query", "required": false, "type": "boolean" @@ -4437,23 +4046,19 @@ ], "default": "PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED" }, - "pluginsfluxv2packagesv1alpha1SetUserManagedSecretsResponse": { - "type": "object", - "properties": { - "value": { - "type": "boolean" - } - } - }, "protobufAny": { "type": "object", "properties": { - "@type": { + "typeUrl": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + }, + "value": { + "type": "string", + "format": "byte", + "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { @@ -4478,7 +4083,8 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context" + "$ref": "#/definitions/v1alpha1Context", + "description": "The target context where the package repository is intended to be\ninstalled." }, "name": { "type": "string", @@ -4505,16 +4111,20 @@ "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" }, "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig", + "title": "TLS-specific parameters for connecting to a repository. Optional" }, "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth", + "title": "authentication parameters for connecting to a repository. Optional" }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" + "$ref": "#/definitions/v1alpha1Plugin", + "description": "The plugin used to interact with this package repository.\nThis field should be omitted when the request is in the context of a\nspecific plugin." }, "customDetail": { - "$ref": "#/definitions/protobufAny" + "$ref": "#/definitions/protobufAny", + "title": "Custom data added by the plugin\nA plugin can define custom details for data which is not yet, or\nnever will be specified in the core AddPackageRepositoryRequest\nfields. The use of an `Any` field means that each plugin can define\nthe structure of this message as required, while still satisfying the\ncore interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any\nJust for reference, some of the examples that have been chosen not to\nbe part of the core API but rather plugin-specific details are:\n direct-helm:\n - image pull secrets\n - list of oci repositories\n - filter rules\n - sync job pod template" } }, "description": "Request for AddPackageRepository", @@ -4524,7 +4134,8 @@ "type": "object", "properties": { "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference" + "$ref": "#/definitions/v1alpha1PackageRepositoryReference", + "title": "TODO: add example for API docs\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n example: '{\"package_repo_ref\": {}}'\n};" } }, "description": "Response for AddPackageRepositoryRequest", @@ -4534,7 +4145,9 @@ "type": "object", "properties": { "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference", + "description": "A reference uniquely identifying the package.", + "title": "Available package reference" }, "name": { "type": "string", @@ -4542,7 +4155,9 @@ "title": "Available package name" }, "version": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "The version of the package and application.", + "title": "Available version" }, "repoUrl": { "type": "string", @@ -4609,7 +4224,9 @@ "title": "Available package categories" }, "customDetail": { - "$ref": "#/definitions/protobufAny" + "$ref": "#/definitions/protobufAny", + "description": "A plugin can define custom details for data which is not yet, or never will\nbe specified in the core.packaging.CreateInstalledPackageRequest fields. The use\nof an `Any` field means that each plugin can define the structure of this\nmessage as required, while still satisfying the core interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any", + "title": "Custom data added by the plugin" } }, "description": "An AvailablePackageDetail provides additional details required when\ninspecting an individual package.", @@ -4619,7 +4236,9 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context" + "$ref": "#/definitions/v1alpha1Context", + "description": "The context (cluster/namespace) for the package.", + "title": "Available package context" }, "identifier": { "type": "string", @@ -4627,7 +4246,9 @@ "title": "Available package identifier" }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" + "$ref": "#/definitions/v1alpha1Plugin", + "description": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a specific plugin.", + "title": "Plugin for the available package" } }, "description": "An AvailablePackageReference has the minimum information required to uniquely\nidentify an available package. This is re-used on the summary and details of an\navailable package.", @@ -4637,7 +4258,9 @@ "type": "object", "properties": { "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference", + "description": "A reference uniquely identifying the package.", + "title": "Available package reference" }, "name": { "type": "string", @@ -4645,7 +4268,9 @@ "title": "Available package name" }, "latestVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "The latest version available for this package. Often expected when viewing\na summary of many available packages.", + "title": "Latest available version" }, "iconUrl": { "type": "string", @@ -4717,24 +4342,28 @@ "type": "object", "properties": { "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference", + "description": "A reference uniquely identifying the package available for installation." }, "targetContext": { - "$ref": "#/definitions/v1alpha1Context" + "$ref": "#/definitions/v1alpha1Context", + "description": "The target context where the package is intended to be installed." }, "name": { "type": "string", "title": "A user-provided name for the installed package (eg. project-x-db)" }, "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" + "$ref": "#/definitions/v1alpha1VersionReference", + "description": "For helm this will be the exact version in VersionReference.version\nFor other plugins we can extend the VersionReference as needed." }, "values": { "type": "string", "description": "An optional serialized values string to be included when templating a package\nin the format expected by the plugin. Included when the backend format doesn't\nuse secrets or configmaps for values or supports both. These values are layered\non top of any values refs above, when relevant." }, "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions" + "$ref": "#/definitions/v1alpha1ReconciliationOptions", + "description": "An optional field for specifying data common to systems that reconcile\nthe package on the cluster." } }, "description": "Request for CreateInstalledPackage", @@ -4834,7 +4463,9 @@ "type": "object", "properties": { "availablePackageDetail": { - "$ref": "#/definitions/v1alpha1AvailablePackageDetail" + "$ref": "#/definitions/v1alpha1AvailablePackageDetail", + "description": "The requested AvailablePackageDetail", + "title": "Available package detail" } }, "description": "Response for GetAvailablePackageDetail", @@ -4910,7 +4541,9 @@ "type": "object", "properties": { "installedPackageDetail": { - "$ref": "#/definitions/v1alpha1InstalledPackageDetail" + "$ref": "#/definitions/v1alpha1InstalledPackageDetail", + "description": "The requested InstalledPackageDetail", + "title": "InstalledPackageDetail" } }, "description": "Response for GetInstalledPackageDetail", @@ -4971,7 +4604,8 @@ "type": "object", "properties": { "detail": { - "$ref": "#/definitions/v1alpha1PackageRepositoryDetail" + "$ref": "#/definitions/v1alpha1PackageRepositoryDetail", + "title": "package repository detail" } }, "description": "Response for GetPackageRepositoryDetail", @@ -5006,7 +4640,9 @@ "type": "object", "properties": { "resourceRef": { - "$ref": "#/definitions/v1alpha1ResourceRef" + "$ref": "#/definitions/v1alpha1ResourceRef", + "description": "The resource reference for this single resource.", + "title": "ResourceRef" }, "manifest": { "type": "string", @@ -5049,10 +4685,14 @@ "type": "object", "properties": { "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference" + "$ref": "#/definitions/v1alpha1InstalledPackageReference", + "description": "A reference uniquely identifying the installed package.", + "title": "InstalledPackageReference" }, "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" + "$ref": "#/definitions/v1alpha1VersionReference", + "description": "The package version reference defines a version or constraint limiting\nmatching package versions.", + "title": "PkgVersionReference" }, "name": { "type": "string", @@ -5060,7 +4700,9 @@ "title": "Installed package name" }, "currentVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "The version of the package which is currently installed.", + "title": "CurrentVersion" }, "valuesApplied": { "type": "string", @@ -5068,10 +4710,14 @@ "title": "ValuesApplied" }, "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions" + "$ref": "#/definitions/v1alpha1ReconciliationOptions", + "description": "An optional field specifying data common to systems that reconcile\nthe package installation on the cluster asynchronously. In particular,\nthis specifies the service account used to perform the reconcilliation.", + "title": "ReconciliationOptions" }, "status": { - "$ref": "#/definitions/v1alpha1InstalledPackageStatus" + "$ref": "#/definitions/v1alpha1InstalledPackageStatus", + "description": "The current status of the installed package.", + "title": "Status" }, "postInstallationNotes": { "type": "string", @@ -5079,16 +4725,24 @@ "title": "PostInstallationNotes" }, "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference", + "description": "A reference to the available package for this installation.\nUseful to lookup the package display name, icon and other info.", + "title": "Available package reference" }, "latestMatchingVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "Only non-empty if an available upgrade matches the specified pkg_version_reference.\nFor example, if the pkg_version_reference is \"\u003e10.3.0 \u003c 10.4.0\" and 10.3.1\nis installed, then:\n * if 10.3.2 is available, latest_matching_version should be 10.3.2, but\n * if 10.4 is available while \u003e10.3.1 is not, this should remain empty.", + "title": "LatestMatchingVersion" }, "latestVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "The latest version available for this package, regardless of the pkg_version_reference.", + "title": "LatestVersion" }, "customDetail": { - "$ref": "#/definitions/protobufAny" + "$ref": "#/definitions/protobufAny", + "description": "A plugin can define custom details for data which is not yet, or never will\nbe specified in the core.packaging.CreateInstalledPackageRequest fields. The use\nof an `Any` field means that each plugin can define the structure of this\nmessage as required, while still satisfying the core interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any", + "title": "Custom data added by the plugin" } }, "description": "An InstalledPackageDetail includes details about the installed package that are\ntypically useful when presenting a single installed package.", @@ -5098,14 +4752,17 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context" + "$ref": "#/definitions/v1alpha1Context", + "description": "The context (cluster/namespace) for the package.", + "title": "Installed package context" }, "identifier": { "type": "string", "description": "The fully qualified identifier for the installed package\n(ie. a unique name for the context)." }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" + "$ref": "#/definitions/v1alpha1Plugin", + "description": "The plugin used to identify and interact with the installed package.\nThis field can be omitted when the request is in the context of a specific plugin." } }, "description": "An InstalledPackageReference has the minimum information required to uniquely\nidentify an installed package.", @@ -5120,7 +4777,9 @@ "title": "Ready" }, "reason": { - "$ref": "#/definitions/v1alpha1InstalledPackageStatusStatusReason" + "$ref": "#/definitions/v1alpha1InstalledPackageStatusStatusReason", + "description": "An enum indicating the reason for the current status.", + "title": "Reason" }, "userReason": { "type": "string", @@ -5148,7 +4807,9 @@ "type": "object", "properties": { "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference" + "$ref": "#/definitions/v1alpha1InstalledPackageReference", + "description": "A reference uniquely identifying the package.", + "title": "InstalledPackageReference" }, "name": { "type": "string", @@ -5156,10 +4817,14 @@ "title": "Name" }, "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference" + "$ref": "#/definitions/v1alpha1VersionReference", + "description": "The package version reference defines a version or constraint limiting\nmatching package versions.", + "title": "PkgVersionReference" }, "currentVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "The current version of the package being reconciled, which may be\nin one of these states:\n - has been successfully installed/upgraded or\n - is currently being installed/upgraded or\n - has failed to install/upgrade", + "title": "CurrentVersion" }, "iconUrl": { "type": "string", @@ -5177,13 +4842,19 @@ "title": "ShortDescription" }, "latestMatchingVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "Only non-empty if an available upgrade matches the specified pkg_version_reference.\nFor example, if the pkg_version_reference is \"\u003e10.3.0 \u003c 10.4.0\" and 10.3.1\nis installed, then:\n * if 10.3.2 is available, latest_matching_version should be 10.3.2, but\n * if 10.4 is available while \u003e10.3.1 is not, this should remain empty.", + "title": "LatestMatchingVersion" }, "latestVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion", + "description": "The latest version available for this package, regardless of the pkg_version_reference.", + "title": "LatestVersion" }, "status": { - "$ref": "#/definitions/v1alpha1InstalledPackageStatus" + "$ref": "#/definitions/v1alpha1InstalledPackageStatus", + "description": "The current status of the installed package.", + "title": "Status" } }, "description": "An InstalledPackageSummary provides a summary of an installed package\nuseful when aggregating many installed packages.", @@ -5265,26 +4936,32 @@ "$ref": "#/definitions/PackageRepositoryAuthPackageRepositoryAuthType" }, "usernamePassword": { - "$ref": "#/definitions/v1alpha1UsernamePassword" + "$ref": "#/definitions/v1alpha1UsernamePassword", + "title": "username and plain text password" }, "tlsCertKey": { - "$ref": "#/definitions/v1alpha1TlsCertKey" + "$ref": "#/definitions/v1alpha1TlsCertKey", + "title": "certificate and key for TLS-based authentication" }, "dockerCreds": { - "$ref": "#/definitions/v1alpha1DockerCredentials" + "$ref": "#/definitions/v1alpha1DockerCredentials", + "title": "docker credentials" }, "header": { "type": "string", "title": "for Bearer Auth token value\nfor Custom Auth, complete value of \"Authorization\" header" }, "secretRef": { - "$ref": "#/definitions/v1alpha1SecretKeyReference" + "$ref": "#/definitions/v1alpha1SecretKeyReference", + "title": "a reference to an existing secret" }, "sshCreds": { - "$ref": "#/definitions/v1alpha1SshCredentials" + "$ref": "#/definitions/v1alpha1SshCredentials", + "title": "SSH credentials" }, "opaqueCreds": { - "$ref": "#/definitions/v1alpha1OpaqueCredentials" + "$ref": "#/definitions/v1alpha1OpaqueCredentials", + "title": "opaque credentials" }, "passCredentials": { "type": "boolean", @@ -5298,7 +4975,8 @@ "type": "object", "properties": { "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference" + "$ref": "#/definitions/v1alpha1PackageRepositoryReference", + "description": "A reference uniquely identifying the package repository." }, "name": { "type": "string", @@ -5325,16 +5003,20 @@ "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"" }, "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig", + "title": "TLS-specific parameters for connecting to a repository.\nIf the cert authority was configured for this repository, then in the context\nof GetPackageRepositoryDetail() operation, the PackageRepositoryTlsConfig will ALWAYS\ncontain an existing SecretKeyReference, rather that cert_authority field" }, "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth", + "title": "authentication parameters for connecting to a repository.\nIf Basic Auth or TLS or Docker Creds Auth was configured for this repository,\nthen in the context of GetPackageRepositoryDetail() operation, the\nPackageRepositoryAuth will ALWAYS contain an existing SecretKeyReference,\nrather that string values that may have been used when package repository was created\nfield" }, "customDetail": { - "$ref": "#/definitions/protobufAny" + "$ref": "#/definitions/protobufAny", + "title": "Custom data added by the plugin" }, "status": { - "$ref": "#/definitions/v1alpha1PackageRepositoryStatus" + "$ref": "#/definitions/v1alpha1PackageRepositoryStatus", + "description": "current status of the repository which can include reconciliation\nstatus, where relevant." } }, "title": "PackageRepositoryDetail" @@ -5343,14 +5025,16 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context" + "$ref": "#/definitions/v1alpha1Context", + "description": "The context (cluster/namespace) for the repository." }, "identifier": { "type": "string", "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context)." }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin" + "$ref": "#/definitions/v1alpha1Plugin", + "description": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a\nspecific plugin." } }, "description": "A PackageRepositoryReference has the minimum information required to\nuniquely identify a package repository.", @@ -5365,7 +5049,9 @@ "title": "Ready" }, "reason": { - "$ref": "#/definitions/v1alpha1PackageRepositoryStatusStatusReason" + "$ref": "#/definitions/v1alpha1PackageRepositoryStatusStatusReason", + "description": "An enum indicating the reason for the current status.", + "title": "Reason" }, "userReason": { "type": "string", @@ -5392,7 +5078,8 @@ "type": "object", "properties": { "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference" + "$ref": "#/definitions/v1alpha1PackageRepositoryReference", + "description": "A reference uniquely identifying the package repository." }, "name": { "type": "string", @@ -5415,7 +5102,8 @@ "description": "URL identifying the package repository location." }, "status": { - "$ref": "#/definitions/v1alpha1PackageRepositoryStatus" + "$ref": "#/definitions/v1alpha1PackageRepositoryStatus", + "description": "current status of the repository which can include reconciliation\nstatus, where relevant." }, "requiresAuth": { "type": "boolean", @@ -5436,7 +5124,8 @@ "title": "certificate authority. Optional" }, "secretRef": { - "$ref": "#/definitions/v1alpha1SecretKeyReference" + "$ref": "#/definitions/v1alpha1SecretKeyReference", + "title": "a reference to an existing secret that contains custom CA" } }, "title": "PackageRepositoryTlsConfig" @@ -5525,11 +5214,28 @@ "description": "A reference to a Kubernetes resource related to a specific installed package.\nThe context (cluster) for each resource is that of the related\ninstalled package.", "title": "Resource reference" }, + "v1alpha1RollbackInstalledPackageRequest": { + "type": "object", + "properties": { + "installedPackageRef": { + "$ref": "#/definitions/v1alpha1InstalledPackageReference", + "description": "A reference uniquely identifying the installed package.", + "title": "Installed package reference" + }, + "releaseRevision": { + "type": "integer", + "format": "int32", + "description": "A number identifying the Helm revision to which to rollback.", + "title": "ReleaseRevision" + } + } + }, "v1alpha1RollbackInstalledPackageResponse": { "type": "object", "properties": { "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference" + "$ref": "#/definitions/v1alpha1InstalledPackageReference", + "title": "TODO: add example for API docs\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n example: '{\"installed_package_ref\": {}}'\n};" } }, "description": "Response for RollbackInstalledPackage", @@ -5593,6 +5299,29 @@ }, "title": "TlsCertKey" }, + "v1alpha1UpdateInstalledPackageRequest": { + "type": "object", + "properties": { + "installedPackageRef": { + "$ref": "#/definitions/v1alpha1InstalledPackageReference", + "title": "A reference uniquely identifying the installed package being updated.\nRequired" + }, + "pkgVersionReference": { + "$ref": "#/definitions/v1alpha1VersionReference", + "title": "For helm this will be the exact version in VersionReference.version\nFor fluxv2 this could be any semver constraint expression\nFor other plugins we can extend the VersionReference as needed. Optional" + }, + "values": { + "type": "string", + "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." + }, + "reconciliationOptions": { + "$ref": "#/definitions/v1alpha1ReconciliationOptions", + "description": "An optional field for specifying data common to systems that reconcile\nthe package on the cluster." + } + }, + "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", + "title": "UpdateInstalledPackageRequest" + }, "v1alpha1UpdateInstalledPackageResponse": { "type": "object", "properties": { @@ -5603,6 +5332,41 @@ "description": "Response for UpdateInstalledPackage", "title": "UpdateInstalledPackageResponse" }, + "v1alpha1UpdatePackageRepositoryRequest": { + "type": "object", + "properties": { + "packageRepoRef": { + "$ref": "#/definitions/v1alpha1PackageRepositoryReference", + "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" + }, + "url": { + "type": "string", + "description": "URL identifying the package repository location." + }, + "description": { + "type": "string", + "description": "A user-provided description." + }, + "interval": { + "type": "string", + "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" + }, + "tlsConfig": { + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig", + "title": "TLS-specific parameters for connecting to a repository. Optional" + }, + "auth": { + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth", + "title": "authentication parameters for connecting to a repository. Optional" + }, + "customDetail": { + "$ref": "#/definitions/protobufAny", + "title": "Custom data added by the plugin\nA plugin can define custom details for data which is not yet, or\nnever will be specified in the core AddPackageRepositoryRequest\nfields. The use of an `Any` field means that each plugin can define\nthe structure of this message as required, while still satisfying the\ncore interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any\nJust for reference, some of the examples that have been chosen not to\nbe part of the core API but rather plugin-specific details are:\n direct-helm:\n - image pull secrets\n - list of oci repositories\n - filter rules\n - sync job pod template" + } + }, + "description": "Request for UpdatePackageRepository", + "title": "UpdatePackageRepositoryRequest" + }, "v1alpha1UpdatePackageRepositoryResponse": { "type": "object", "properties": { diff --git a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go index b8b041da2d1..bfa7d7860e7 100644 --- a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go +++ b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.27.1 // protoc (unknown) // source: kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto @@ -28,100 +28,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type SetUserManagedSecretsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *SetUserManagedSecretsRequest) Reset() { - *x = SetUserManagedSecretsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetUserManagedSecretsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetUserManagedSecretsRequest) ProtoMessage() {} - -func (x *SetUserManagedSecretsRequest) ProtoReflect() protoreflect.Message { - mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetUserManagedSecretsRequest.ProtoReflect.Descriptor instead. -func (*SetUserManagedSecretsRequest) Descriptor() ([]byte, []int) { - return file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDescGZIP(), []int{0} -} - -func (x *SetUserManagedSecretsRequest) GetValue() bool { - if x != nil { - return x.Value - } - return false -} - -type SetUserManagedSecretsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *SetUserManagedSecretsResponse) Reset() { - *x = SetUserManagedSecretsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SetUserManagedSecretsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SetUserManagedSecretsResponse) ProtoMessage() {} - -func (x *SetUserManagedSecretsResponse) ProtoReflect() protoreflect.Message { - mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SetUserManagedSecretsResponse.ProtoReflect.Descriptor instead. -func (*SetUserManagedSecretsResponse) Descriptor() ([]byte, []int) { - return file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDescGZIP(), []int{1} -} - -func (x *SetUserManagedSecretsResponse) GetValue() bool { - if x != nil { - return x.Value - } - return false -} - // Flux PackageRepositoryCustomDetail // // Custom details for a Flux Package repository @@ -132,11 +38,10 @@ type FluxPackageRepositoryCustomDetail struct { // optional field that allows specifying an OIDC provider used for authentication purposes // Supported options are: - // - generic - // - aws - // - azure - // - gcp - // + // - generic + // - aws + // - azure + // - gcp // The provider field is supported only for Helm OCI repositories. The repository type must // be set to "oci" // ref https://fluxcd.io/flux/components/source/helmrepositories/#provider @@ -146,7 +51,7 @@ type FluxPackageRepositoryCustomDetail struct { func (x *FluxPackageRepositoryCustomDetail) Reset() { *x = FluxPackageRepositoryCustomDetail{} if protoimpl.UnsafeEnabled { - mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[2] + mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -159,7 +64,7 @@ func (x *FluxPackageRepositoryCustomDetail) String() string { func (*FluxPackageRepositoryCustomDetail) ProtoMessage() {} func (x *FluxPackageRepositoryCustomDetail) ProtoReflect() protoreflect.Message { - mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[2] + mi := &file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -172,7 +77,7 @@ func (x *FluxPackageRepositoryCustomDetail) ProtoReflect() protoreflect.Message // Deprecated: Use FluxPackageRepositoryCustomDetail.ProtoReflect.Descriptor instead. func (*FluxPackageRepositoryCustomDetail) Descriptor() ([]byte, []int) { - return file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDescGZIP(), []int{2} + return file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDescGZIP(), []int{0} } func (x *FluxPackageRepositoryCustomDetail) GetProvider() string { @@ -208,144 +113,137 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x34, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x35, 0x0a, - 0x1d, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3f, 0x0a, 0x21, 0x46, 0x6c, 0x75, 0x78, 0x50, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x32, 0xf0, 0x16, 0x0a, 0x15, 0x46, 0x6c, 0x75, 0x78, 0x56, 0x32, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0xf0, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x48, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3f, 0x0a, 0x21, 0x46, 0x6c, 0x75, 0x78, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x32, 0xf0, 0x16, 0x0a, 0x15, 0x46, 0x6c, 0x75, + 0x78, 0x56, 0x32, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0xf0, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x6b, 0x75, 0x62, + 0x69, 0x65, 0x73, 0x12, 0x48, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, + 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, + 0x12, 0x33, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, + 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0xe7, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x12, 0x45, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, + 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xb3, 0x01, 0x12, 0xb0, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x73, 0x12, 0xe7, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x12, 0x45, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, - 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xba, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xb3, 0x01, 0x12, 0xb0, 0x01, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x63, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xf6, 0x02, 0x0a, - 0x1b, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x47, 0x2e, 0x6b, - 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xc3, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xbc, 0x01, 0x12, 0xb9, 0x01, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x63, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf0, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x48, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, - 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, + 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, + 0xf6, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x47, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, + 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xc3, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xbc, 0x01, 0x12, 0xb9, 0x01, 0x2f, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, + 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf0, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x49, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x48, 0x2e, 0x6b, 0x75, 0x62, 0x65, + 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, + 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0xe4, 0x02, 0x0a, 0x19, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x45, 0x2e, 0x6b, 0x75, 0x62, 0x65, + 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x46, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, + 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0xb0, 0x01, 0x12, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0xe4, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x45, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, - 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, + 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, + 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xb0, 0x01, 0x12, - 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, - 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, - 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x12, - 0xe1, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x62, - 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, - 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x01, 0x2a, 0x22, 0x33, + 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x33, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x12, 0xde, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x42, - 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xb3, - 0x01, 0x3a, 0x01, 0x2a, 0x1a, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, + 0x67, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xde, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, + 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0xb3, 0x01, 0x1a, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, @@ -356,137 +254,116 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x7d, 0x12, 0xdb, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, - 0x42, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0xb0, 0x01, 0x2a, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, - 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, - 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x7d, 0x12, 0x83, 0x03, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x4b, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, + 0x69, 0x65, 0x72, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xdb, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, + 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb7, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0xb0, 0x01, 0x2a, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, + 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x7d, 0x12, 0x83, 0x03, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x4b, 0x2e, 0x6b, 0x75, 0x62, 0x65, + 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xc4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xbd, 0x01, 0x12, 0xba, 0x01, 0x2f, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x72, 0x65, 0x66, 0x73, 0x32, 0xaf, 0x0f, 0x0a, 0x19, 0x46, 0x6c, 0x75, - 0x78, 0x56, 0x32, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xd6, 0x01, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x40, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x41, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xbd, 0x01, 0x12, 0xba, + 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, + 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, + 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, + 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x2f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x72, 0x65, 0x66, 0x73, 0x32, 0xf8, 0x0d, 0x0a, 0x19, + 0x46, 0x6c, 0x75, 0x78, 0x56, 0x32, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xd6, 0x01, 0x0a, 0x14, 0x41, 0x64, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x40, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, + 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, + 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, 0x2e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, - 0xd6, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x46, - 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, - 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xa6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9f, 0x01, 0x12, 0x9c, 0x01, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x70, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, - 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xee, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, - 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x49, 0x2e, 0x6b, 0x75, 0x62, - 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4a, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0xd0, 0x02, 0x0a, 0x17, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x6b, 0x75, 0x62, - 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0xa9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xa2, 0x01, 0x3a, 0x01, 0x2a, 0x1a, 0x9c, 0x01, - 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, - 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, - 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xcd, 0x02, 0x0a, - 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x12, 0xd6, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x46, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, 0x6b, 0x75, 0x62, 0x65, + 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0xa6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9f, 0x01, 0x12, 0x9c, 0x01, 0x2f, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x2f, + 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, + 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, + 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xee, 0x01, 0x0a, 0x1d, + 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x49, 0x2e, + 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4a, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, + 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x6f, 0x72, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0xd0, 0x02, 0x0a, + 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9f, 0x01, 0x2a, 0x9c, 0x01, + 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xa2, 0x01, 0x1a, 0x9c, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, @@ -496,42 +373,52 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xb4, 0x01, 0x0a, - 0x15, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x4b, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, - 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2e, 0x66, 0x6c, - 0x75, 0x78, 0x76, 0x32, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2e, 0x66, 0x6c, 0x75, 0x78, 0x76, - 0x32, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x64, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x94, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4b, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, - 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, - 0x72, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4c, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x12, 0x4e, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2d, - 0x74, 0x61, 0x6e, 0x7a, 0x75, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, - 0x6d, 0x64, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x2d, 0x61, 0x70, 0x69, 0x73, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, - 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x12, + 0xcd, 0x02, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x43, 0x2e, 0x6b, 0x75, + 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x44, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9f, 0x01, + 0x2a, 0x9c, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, + 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, + 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, + 0x94, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x4b, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x4c, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x12, 0x4e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, + 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x2d, 0x74, 0x61, 0x6e, 0x7a, + 0x75, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x6b, + 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -546,77 +433,73 @@ func file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDescGZIP return file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDescData } -var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_goTypes = []interface{}{ - (*SetUserManagedSecretsRequest)(nil), // 0: kubeappsapis.plugins.fluxv2.packages.v1alpha1.SetUserManagedSecretsRequest - (*SetUserManagedSecretsResponse)(nil), // 1: kubeappsapis.plugins.fluxv2.packages.v1alpha1.SetUserManagedSecretsResponse - (*FluxPackageRepositoryCustomDetail)(nil), // 2: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxPackageRepositoryCustomDetail - (*v1alpha1.GetAvailablePackageSummariesRequest)(nil), // 3: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesRequest - (*v1alpha1.GetAvailablePackageDetailRequest)(nil), // 4: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailRequest - (*v1alpha1.GetAvailablePackageVersionsRequest)(nil), // 5: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsRequest - (*v1alpha1.GetInstalledPackageSummariesRequest)(nil), // 6: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesRequest - (*v1alpha1.GetInstalledPackageDetailRequest)(nil), // 7: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailRequest - (*v1alpha1.CreateInstalledPackageRequest)(nil), // 8: kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageRequest - (*v1alpha1.UpdateInstalledPackageRequest)(nil), // 9: kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageRequest - (*v1alpha1.DeleteInstalledPackageRequest)(nil), // 10: kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageRequest - (*v1alpha1.GetInstalledPackageResourceRefsRequest)(nil), // 11: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsRequest - (*v1alpha1.AddPackageRepositoryRequest)(nil), // 12: kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryRequest - (*v1alpha1.GetPackageRepositoryDetailRequest)(nil), // 13: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailRequest - (*v1alpha1.GetPackageRepositorySummariesRequest)(nil), // 14: kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesRequest - (*v1alpha1.UpdatePackageRepositoryRequest)(nil), // 15: kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryRequest - (*v1alpha1.DeletePackageRepositoryRequest)(nil), // 16: kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryRequest - (*v1alpha1.GetPackageRepositoryPermissionsRequest)(nil), // 17: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsRequest - (*v1alpha1.GetAvailablePackageSummariesResponse)(nil), // 18: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesResponse - (*v1alpha1.GetAvailablePackageDetailResponse)(nil), // 19: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailResponse - (*v1alpha1.GetAvailablePackageVersionsResponse)(nil), // 20: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsResponse - (*v1alpha1.GetInstalledPackageSummariesResponse)(nil), // 21: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesResponse - (*v1alpha1.GetInstalledPackageDetailResponse)(nil), // 22: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailResponse - (*v1alpha1.CreateInstalledPackageResponse)(nil), // 23: kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageResponse - (*v1alpha1.UpdateInstalledPackageResponse)(nil), // 24: kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageResponse - (*v1alpha1.DeleteInstalledPackageResponse)(nil), // 25: kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageResponse - (*v1alpha1.GetInstalledPackageResourceRefsResponse)(nil), // 26: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsResponse - (*v1alpha1.AddPackageRepositoryResponse)(nil), // 27: kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryResponse - (*v1alpha1.GetPackageRepositoryDetailResponse)(nil), // 28: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailResponse - (*v1alpha1.GetPackageRepositorySummariesResponse)(nil), // 29: kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesResponse - (*v1alpha1.UpdatePackageRepositoryResponse)(nil), // 30: kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryResponse - (*v1alpha1.DeletePackageRepositoryResponse)(nil), // 31: kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryResponse - (*v1alpha1.GetPackageRepositoryPermissionsResponse)(nil), // 32: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsResponse + (*FluxPackageRepositoryCustomDetail)(nil), // 0: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxPackageRepositoryCustomDetail + (*v1alpha1.GetAvailablePackageSummariesRequest)(nil), // 1: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesRequest + (*v1alpha1.GetAvailablePackageDetailRequest)(nil), // 2: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailRequest + (*v1alpha1.GetAvailablePackageVersionsRequest)(nil), // 3: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsRequest + (*v1alpha1.GetInstalledPackageSummariesRequest)(nil), // 4: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesRequest + (*v1alpha1.GetInstalledPackageDetailRequest)(nil), // 5: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailRequest + (*v1alpha1.CreateInstalledPackageRequest)(nil), // 6: kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageRequest + (*v1alpha1.UpdateInstalledPackageRequest)(nil), // 7: kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageRequest + (*v1alpha1.DeleteInstalledPackageRequest)(nil), // 8: kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageRequest + (*v1alpha1.GetInstalledPackageResourceRefsRequest)(nil), // 9: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsRequest + (*v1alpha1.AddPackageRepositoryRequest)(nil), // 10: kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryRequest + (*v1alpha1.GetPackageRepositoryDetailRequest)(nil), // 11: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailRequest + (*v1alpha1.GetPackageRepositorySummariesRequest)(nil), // 12: kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesRequest + (*v1alpha1.UpdatePackageRepositoryRequest)(nil), // 13: kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryRequest + (*v1alpha1.DeletePackageRepositoryRequest)(nil), // 14: kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryRequest + (*v1alpha1.GetPackageRepositoryPermissionsRequest)(nil), // 15: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsRequest + (*v1alpha1.GetAvailablePackageSummariesResponse)(nil), // 16: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesResponse + (*v1alpha1.GetAvailablePackageDetailResponse)(nil), // 17: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailResponse + (*v1alpha1.GetAvailablePackageVersionsResponse)(nil), // 18: kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsResponse + (*v1alpha1.GetInstalledPackageSummariesResponse)(nil), // 19: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesResponse + (*v1alpha1.GetInstalledPackageDetailResponse)(nil), // 20: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailResponse + (*v1alpha1.CreateInstalledPackageResponse)(nil), // 21: kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageResponse + (*v1alpha1.UpdateInstalledPackageResponse)(nil), // 22: kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageResponse + (*v1alpha1.DeleteInstalledPackageResponse)(nil), // 23: kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageResponse + (*v1alpha1.GetInstalledPackageResourceRefsResponse)(nil), // 24: kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsResponse + (*v1alpha1.AddPackageRepositoryResponse)(nil), // 25: kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryResponse + (*v1alpha1.GetPackageRepositoryDetailResponse)(nil), // 26: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailResponse + (*v1alpha1.GetPackageRepositorySummariesResponse)(nil), // 27: kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesResponse + (*v1alpha1.UpdatePackageRepositoryResponse)(nil), // 28: kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryResponse + (*v1alpha1.DeletePackageRepositoryResponse)(nil), // 29: kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryResponse + (*v1alpha1.GetPackageRepositoryPermissionsResponse)(nil), // 30: kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsResponse } var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_depIdxs = []int32{ - 3, // 0: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageSummaries:input_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesRequest - 4, // 1: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageDetail:input_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailRequest - 5, // 2: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageVersions:input_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsRequest - 6, // 3: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageSummaries:input_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesRequest - 7, // 4: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageDetail:input_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailRequest - 8, // 5: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.CreateInstalledPackage:input_type -> kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageRequest - 9, // 6: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.UpdateInstalledPackage:input_type -> kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageRequest - 10, // 7: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.DeleteInstalledPackage:input_type -> kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageRequest - 11, // 8: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageResourceRefs:input_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsRequest - 12, // 9: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.AddPackageRepository:input_type -> kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryRequest - 13, // 10: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryDetail:input_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailRequest - 14, // 11: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositorySummaries:input_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesRequest - 15, // 12: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.UpdatePackageRepository:input_type -> kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryRequest - 16, // 13: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.DeletePackageRepository:input_type -> kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryRequest - 0, // 14: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.SetUserManagedSecrets:input_type -> kubeappsapis.plugins.fluxv2.packages.v1alpha1.SetUserManagedSecretsRequest - 17, // 15: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryPermissions:input_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsRequest - 18, // 16: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageSummaries:output_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesResponse - 19, // 17: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageDetail:output_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailResponse - 20, // 18: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageVersions:output_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsResponse - 21, // 19: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageSummaries:output_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesResponse - 22, // 20: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageDetail:output_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailResponse - 23, // 21: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.CreateInstalledPackage:output_type -> kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageResponse - 24, // 22: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.UpdateInstalledPackage:output_type -> kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageResponse - 25, // 23: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.DeleteInstalledPackage:output_type -> kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageResponse - 26, // 24: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageResourceRefs:output_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsResponse - 27, // 25: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.AddPackageRepository:output_type -> kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryResponse - 28, // 26: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryDetail:output_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailResponse - 29, // 27: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositorySummaries:output_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesResponse - 30, // 28: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.UpdatePackageRepository:output_type -> kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryResponse - 31, // 29: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.DeletePackageRepository:output_type -> kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryResponse - 1, // 30: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.SetUserManagedSecrets:output_type -> kubeappsapis.plugins.fluxv2.packages.v1alpha1.SetUserManagedSecretsResponse - 32, // 31: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryPermissions:output_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsResponse - 16, // [16:32] is the sub-list for method output_type - 0, // [0:16] is the sub-list for method input_type + 1, // 0: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageSummaries:input_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesRequest + 2, // 1: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageDetail:input_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailRequest + 3, // 2: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageVersions:input_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsRequest + 4, // 3: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageSummaries:input_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesRequest + 5, // 4: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageDetail:input_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailRequest + 6, // 5: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.CreateInstalledPackage:input_type -> kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageRequest + 7, // 6: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.UpdateInstalledPackage:input_type -> kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageRequest + 8, // 7: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.DeleteInstalledPackage:input_type -> kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageRequest + 9, // 8: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageResourceRefs:input_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsRequest + 10, // 9: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.AddPackageRepository:input_type -> kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryRequest + 11, // 10: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryDetail:input_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailRequest + 12, // 11: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositorySummaries:input_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesRequest + 13, // 12: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.UpdatePackageRepository:input_type -> kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryRequest + 14, // 13: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.DeletePackageRepository:input_type -> kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryRequest + 15, // 14: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryPermissions:input_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsRequest + 16, // 15: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageSummaries:output_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageSummariesResponse + 17, // 16: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageDetail:output_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageDetailResponse + 18, // 17: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetAvailablePackageVersions:output_type -> kubeappsapis.core.packages.v1alpha1.GetAvailablePackageVersionsResponse + 19, // 18: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageSummaries:output_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageSummariesResponse + 20, // 19: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageDetail:output_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageDetailResponse + 21, // 20: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.CreateInstalledPackage:output_type -> kubeappsapis.core.packages.v1alpha1.CreateInstalledPackageResponse + 22, // 21: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.UpdateInstalledPackage:output_type -> kubeappsapis.core.packages.v1alpha1.UpdateInstalledPackageResponse + 23, // 22: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.DeleteInstalledPackage:output_type -> kubeappsapis.core.packages.v1alpha1.DeleteInstalledPackageResponse + 24, // 23: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService.GetInstalledPackageResourceRefs:output_type -> kubeappsapis.core.packages.v1alpha1.GetInstalledPackageResourceRefsResponse + 25, // 24: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.AddPackageRepository:output_type -> kubeappsapis.core.packages.v1alpha1.AddPackageRepositoryResponse + 26, // 25: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryDetail:output_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryDetailResponse + 27, // 26: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositorySummaries:output_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositorySummariesResponse + 28, // 27: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.UpdatePackageRepository:output_type -> kubeappsapis.core.packages.v1alpha1.UpdatePackageRepositoryResponse + 29, // 28: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.DeletePackageRepository:output_type -> kubeappsapis.core.packages.v1alpha1.DeletePackageRepositoryResponse + 30, // 29: kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService.GetPackageRepositoryPermissions:output_type -> kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsResponse + 15, // [15:30] is the sub-list for method output_type + 0, // [0:15] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -629,30 +512,6 @@ func file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_init() { } if !protoimpl.UnsafeEnabled { file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetUserManagedSecretsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetUserManagedSecretsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FluxPackageRepositoryCustomDetail); i { case 0: return &v.state @@ -671,7 +530,7 @@ func file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc, NumEnums: 0, - NumMessages: 3, + NumMessages: 1, NumExtensions: 0, NumServices: 2, }, diff --git a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go index 86b317a5055..e94542e8de1 100644 --- a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go +++ b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go @@ -15,7 +15,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" + v1alpha1_0 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" @@ -37,7 +37,7 @@ var ( ) func request_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetAvailablePackageSummariesRequest + var protoReq v1alpha1_0.GetAvailablePackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -53,7 +53,7 @@ func request_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx context.Co } func local_request_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetAvailablePackageSummariesRequest + var protoReq v1alpha1_0.GetAvailablePackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -73,7 +73,7 @@ var ( ) func request_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetAvailablePackageDetailRequest + var protoReq v1alpha1_0.GetAvailablePackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -126,7 +126,7 @@ func request_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx context.Conte } func local_request_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetAvailablePackageDetailRequest + var protoReq v1alpha1_0.GetAvailablePackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -183,7 +183,7 @@ var ( ) func request_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetAvailablePackageVersionsRequest + var protoReq v1alpha1_0.GetAvailablePackageVersionsRequest var metadata runtime.ServerMetadata var ( @@ -236,7 +236,7 @@ func request_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx context.Con } func local_request_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetAvailablePackageVersionsRequest + var protoReq v1alpha1_0.GetAvailablePackageVersionsRequest var metadata runtime.ServerMetadata var ( @@ -293,7 +293,7 @@ var ( ) func request_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetInstalledPackageSummariesRequest + var protoReq v1alpha1_0.GetInstalledPackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -309,7 +309,7 @@ func request_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx context.Co } func local_request_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetInstalledPackageSummariesRequest + var protoReq v1alpha1_0.GetInstalledPackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -329,7 +329,7 @@ var ( ) func request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetInstalledPackageDetailRequest + var protoReq v1alpha1_0.GetInstalledPackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -382,7 +382,7 @@ func request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context.Conte } func local_request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetInstalledPackageDetailRequest + var protoReq v1alpha1_0.GetInstalledPackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -435,7 +435,7 @@ func local_request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context } func request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.CreateInstalledPackageRequest + var protoReq v1alpha1_0.CreateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -452,7 +452,7 @@ func request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Context, } func local_request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.CreateInstalledPackageRequest + var protoReq v1alpha1_0.CreateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -469,7 +469,7 @@ func local_request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Co } func request_FluxV2PackagesService_UpdateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.UpdateInstalledPackageRequest + var protoReq v1alpha1_0.UpdateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -523,7 +523,7 @@ func request_FluxV2PackagesService_UpdateInstalledPackage_0(ctx context.Context, } func local_request_FluxV2PackagesService_UpdateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.UpdateInstalledPackageRequest + var protoReq v1alpha1_0.UpdateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -581,7 +581,7 @@ var ( ) func request_FluxV2PackagesService_DeleteInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.DeleteInstalledPackageRequest + var protoReq v1alpha1_0.DeleteInstalledPackageRequest var metadata runtime.ServerMetadata var ( @@ -634,7 +634,7 @@ func request_FluxV2PackagesService_DeleteInstalledPackage_0(ctx context.Context, } func local_request_FluxV2PackagesService_DeleteInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.DeleteInstalledPackageRequest + var protoReq v1alpha1_0.DeleteInstalledPackageRequest var metadata runtime.ServerMetadata var ( @@ -691,7 +691,7 @@ var ( ) func request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetInstalledPackageResourceRefsRequest + var protoReq v1alpha1_0.GetInstalledPackageResourceRefsRequest var metadata runtime.ServerMetadata var ( @@ -744,7 +744,7 @@ func request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx context } func local_request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetInstalledPackageResourceRefsRequest + var protoReq v1alpha1_0.GetInstalledPackageResourceRefsRequest var metadata runtime.ServerMetadata var ( @@ -797,7 +797,7 @@ func local_request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx c } func request_FluxV2RepositoriesService_AddPackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.AddPackageRepositoryRequest + var protoReq v1alpha1_0.AddPackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -814,7 +814,7 @@ func request_FluxV2RepositoriesService_AddPackageRepository_0(ctx context.Contex } func local_request_FluxV2RepositoriesService_AddPackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.AddPackageRepositoryRequest + var protoReq v1alpha1_0.AddPackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -835,7 +835,7 @@ var ( ) func request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetPackageRepositoryDetailRequest + var protoReq v1alpha1_0.GetPackageRepositoryDetailRequest var metadata runtime.ServerMetadata var ( @@ -888,7 +888,7 @@ func request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx context. } func local_request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetPackageRepositoryDetailRequest + var protoReq v1alpha1_0.GetPackageRepositoryDetailRequest var metadata runtime.ServerMetadata var ( @@ -945,7 +945,7 @@ var ( ) func request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetPackageRepositorySummariesRequest + var protoReq v1alpha1_0.GetPackageRepositorySummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -961,7 +961,7 @@ func request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx conte } func local_request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetPackageRepositorySummariesRequest + var protoReq v1alpha1_0.GetPackageRepositorySummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -977,7 +977,7 @@ func local_request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx } func request_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.UpdatePackageRepositoryRequest + var protoReq v1alpha1_0.UpdatePackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1031,7 +1031,7 @@ func request_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx context.Con } func local_request_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.UpdatePackageRepositoryRequest + var protoReq v1alpha1_0.UpdatePackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1089,7 +1089,7 @@ var ( ) func request_FluxV2RepositoriesService_DeletePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.DeletePackageRepositoryRequest + var protoReq v1alpha1_0.DeletePackageRepositoryRequest var metadata runtime.ServerMetadata var ( @@ -1142,7 +1142,7 @@ func request_FluxV2RepositoriesService_DeletePackageRepository_0(ctx context.Con } func local_request_FluxV2RepositoriesService_DeletePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.DeletePackageRepositoryRequest + var protoReq v1alpha1_0.DeletePackageRepositoryRequest var metadata runtime.ServerMetadata var ( @@ -1199,7 +1199,7 @@ var ( ) func request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetPackageRepositoryPermissionsRequest + var protoReq v1alpha1_0.GetPackageRepositoryPermissionsRequest var metadata runtime.ServerMetadata var ( @@ -1232,7 +1232,7 @@ func request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx con } func local_request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1.GetPackageRepositoryPermissionsRequest + var protoReq v1alpha1_0.GetPackageRepositoryPermissionsRequest var metadata runtime.ServerMetadata var ( @@ -1276,22 +1276,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_GetAvailablePackageSummaries_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_GetAvailablePackageSummaries_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetAvailablePackageSummaries_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1301,22 +1299,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_GetAvailablePackageDetail_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_GetAvailablePackageDetail_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetAvailablePackageDetail_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1326,22 +1322,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageVersions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}/versions")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageVersions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}/versions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_GetAvailablePackageVersions_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_GetAvailablePackageVersions_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetAvailablePackageVersions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1351,22 +1345,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_GetInstalledPackageSummaries_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_GetInstalledPackageSummaries_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetInstalledPackageSummaries_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1376,22 +1368,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_GetInstalledPackageDetail_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_GetInstalledPackageDetail_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetInstalledPackageDetail_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1401,22 +1391,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/CreateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/CreateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_CreateInstalledPackage_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_CreateInstalledPackage_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_CreateInstalledPackage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_CreateInstalledPackage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1426,22 +1414,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/UpdateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/UpdateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_UpdateInstalledPackage_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_UpdateInstalledPackage_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_UpdateInstalledPackage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_UpdateInstalledPackage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1451,22 +1437,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/DeleteInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/DeleteInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_DeleteInstalledPackage_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_DeleteInstalledPackage_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_DeleteInstalledPackage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_DeleteInstalledPackage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1476,22 +1460,20 @@ func RegisterFluxV2PackagesServiceHandlerServer(ctx context.Context, mux *runtim var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageResourceRefs", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}/resourcerefs")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageResourceRefs", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}/resourcerefs")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1510,22 +1492,20 @@ func RegisterFluxV2RepositoriesServiceHandlerServer(ctx context.Context, mux *ru var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/AddPackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/AddPackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2RepositoriesService_AddPackageRepository_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2RepositoriesService_AddPackageRepository_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_AddPackageRepository_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_AddPackageRepository_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1535,22 +1515,20 @@ func RegisterFluxV2RepositoriesServiceHandlerServer(ctx context.Context, mux *ru var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1560,22 +1538,20 @@ func RegisterFluxV2RepositoriesServiceHandlerServer(ctx context.Context, mux *ru var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositorySummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositorySummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1585,22 +1561,20 @@ func RegisterFluxV2RepositoriesServiceHandlerServer(ctx context.Context, mux *ru var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/UpdatePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/UpdatePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2RepositoriesService_UpdatePackageRepository_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2RepositoriesService_UpdatePackageRepository_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_UpdatePackageRepository_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1610,22 +1584,20 @@ func RegisterFluxV2RepositoriesServiceHandlerServer(ctx context.Context, mux *ru var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/DeletePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/DeletePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2RepositoriesService_DeletePackageRepository_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2RepositoriesService_DeletePackageRepository_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_DeletePackageRepository_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_DeletePackageRepository_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1635,22 +1607,20 @@ func RegisterFluxV2RepositoriesServiceHandlerServer(ctx context.Context, mux *ru var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryPermissions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{context.cluster}/permissions")) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryPermissions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{context.cluster}/permissions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(annotatedContext, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1699,21 +1669,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_GetAvailablePackageSummaries_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_GetAvailablePackageSummaries_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetAvailablePackageSummaries_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1721,21 +1689,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_GetAvailablePackageDetail_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_GetAvailablePackageDetail_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetAvailablePackageDetail_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1743,21 +1709,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageVersions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}/versions")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetAvailablePackageVersions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/availablepackages/c/{available_package_ref.context.cluster}/ns/{available_package_ref.context.namespace}/{available_package_ref.identifier=**}/versions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_GetAvailablePackageVersions_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_GetAvailablePackageVersions_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetAvailablePackageVersions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1765,21 +1729,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageSummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_GetInstalledPackageSummaries_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_GetInstalledPackageSummaries_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetInstalledPackageSummaries_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1787,21 +1749,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_GetInstalledPackageDetail_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_GetInstalledPackageDetail_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetInstalledPackageDetail_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1809,21 +1769,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/CreateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/CreateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_CreateInstalledPackage_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_CreateInstalledPackage_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_CreateInstalledPackage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_CreateInstalledPackage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1831,21 +1789,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/UpdateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/UpdateInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_UpdateInstalledPackage_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_UpdateInstalledPackage_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_UpdateInstalledPackage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_UpdateInstalledPackage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1853,21 +1809,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/DeleteInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/DeleteInstalledPackage", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_DeleteInstalledPackage_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_DeleteInstalledPackage_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_DeleteInstalledPackage_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_DeleteInstalledPackage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1875,21 +1829,19 @@ func RegisterFluxV2PackagesServiceHandlerClient(ctx context.Context, mux *runtim ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageResourceRefs", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}/resourcerefs")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2PackagesService/GetInstalledPackageResourceRefs", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/installedpackages/c/{installed_package_ref.context.cluster}/ns/{installed_package_ref.context.namespace}/{installed_package_ref.identifier}/resourcerefs")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -1978,21 +1930,19 @@ func RegisterFluxV2RepositoriesServiceHandlerClient(ctx context.Context, mux *ru ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/AddPackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/AddPackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2RepositoriesService_AddPackageRepository_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2RepositoriesService_AddPackageRepository_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_AddPackageRepository_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_AddPackageRepository_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2000,21 +1950,19 @@ func RegisterFluxV2RepositoriesServiceHandlerClient(ctx context.Context, mux *ru ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryDetail", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2022,21 +1970,19 @@ func RegisterFluxV2RepositoriesServiceHandlerClient(ctx context.Context, mux *ru ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositorySummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositorySummaries", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2044,21 +1990,19 @@ func RegisterFluxV2RepositoriesServiceHandlerClient(ctx context.Context, mux *ru ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/UpdatePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/UpdatePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2RepositoriesService_UpdatePackageRepository_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2RepositoriesService_UpdatePackageRepository_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_UpdatePackageRepository_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2066,21 +2010,19 @@ func RegisterFluxV2RepositoriesServiceHandlerClient(ctx context.Context, mux *ru ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/DeletePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/DeletePackageRepository", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{package_repo_ref.context.cluster}/ns/{package_repo_ref.context.namespace}/{package_repo_ref.identifier=**}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2RepositoriesService_DeletePackageRepository_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2RepositoriesService_DeletePackageRepository_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_DeletePackageRepository_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_DeletePackageRepository_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -2088,21 +2030,19 @@ func RegisterFluxV2RepositoriesServiceHandlerClient(ctx context.Context, mux *ru ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryPermissions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{context.cluster}/permissions")) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryPermissions", runtime.WithHTTPPathPattern("/plugins/fluxv2/packages/v1alpha1/repositories/c/{context.cluster}/permissions")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + resp, md, err := request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) diff --git a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go index e9df377d1f0..1578f50da99 100644 --- a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go +++ b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go @@ -1,8 +1,4 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc (unknown) -// source: kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto package v1alpha1 @@ -422,8 +418,6 @@ type FluxV2RepositoriesServiceClient interface { GetPackageRepositorySummaries(ctx context.Context, in *v1alpha1.GetPackageRepositorySummariesRequest, opts ...grpc.CallOption) (*v1alpha1.GetPackageRepositorySummariesResponse, error) UpdatePackageRepository(ctx context.Context, in *v1alpha1.UpdatePackageRepositoryRequest, opts ...grpc.CallOption) (*v1alpha1.UpdatePackageRepositoryResponse, error) DeletePackageRepository(ctx context.Context, in *v1alpha1.DeletePackageRepositoryRequest, opts ...grpc.CallOption) (*v1alpha1.DeletePackageRepositoryResponse, error) - // this endpoint only exists for the purpose of integration tests - SetUserManagedSecrets(ctx context.Context, in *SetUserManagedSecretsRequest, opts ...grpc.CallOption) (*SetUserManagedSecretsResponse, error) GetPackageRepositoryPermissions(ctx context.Context, in *v1alpha1.GetPackageRepositoryPermissionsRequest, opts ...grpc.CallOption) (*v1alpha1.GetPackageRepositoryPermissionsResponse, error) } @@ -480,15 +474,6 @@ func (c *fluxV2RepositoriesServiceClient) DeletePackageRepository(ctx context.Co return out, nil } -func (c *fluxV2RepositoriesServiceClient) SetUserManagedSecrets(ctx context.Context, in *SetUserManagedSecretsRequest, opts ...grpc.CallOption) (*SetUserManagedSecretsResponse, error) { - out := new(SetUserManagedSecretsResponse) - err := c.cc.Invoke(ctx, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/SetUserManagedSecrets", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *fluxV2RepositoriesServiceClient) GetPackageRepositoryPermissions(ctx context.Context, in *v1alpha1.GetPackageRepositoryPermissionsRequest, opts ...grpc.CallOption) (*v1alpha1.GetPackageRepositoryPermissionsResponse, error) { out := new(v1alpha1.GetPackageRepositoryPermissionsResponse) err := c.cc.Invoke(ctx, "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/GetPackageRepositoryPermissions", in, out, opts...) @@ -509,8 +494,6 @@ type FluxV2RepositoriesServiceServer interface { GetPackageRepositorySummaries(context.Context, *v1alpha1.GetPackageRepositorySummariesRequest) (*v1alpha1.GetPackageRepositorySummariesResponse, error) UpdatePackageRepository(context.Context, *v1alpha1.UpdatePackageRepositoryRequest) (*v1alpha1.UpdatePackageRepositoryResponse, error) DeletePackageRepository(context.Context, *v1alpha1.DeletePackageRepositoryRequest) (*v1alpha1.DeletePackageRepositoryResponse, error) - // this endpoint only exists for the purpose of integration tests - SetUserManagedSecrets(context.Context, *SetUserManagedSecretsRequest) (*SetUserManagedSecretsResponse, error) GetPackageRepositoryPermissions(context.Context, *v1alpha1.GetPackageRepositoryPermissionsRequest) (*v1alpha1.GetPackageRepositoryPermissionsResponse, error) } @@ -533,9 +516,6 @@ func (UnimplementedFluxV2RepositoriesServiceServer) UpdatePackageRepository(cont func (UnimplementedFluxV2RepositoriesServiceServer) DeletePackageRepository(context.Context, *v1alpha1.DeletePackageRepositoryRequest) (*v1alpha1.DeletePackageRepositoryResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DeletePackageRepository not implemented") } -func (UnimplementedFluxV2RepositoriesServiceServer) SetUserManagedSecrets(context.Context, *SetUserManagedSecretsRequest) (*SetUserManagedSecretsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SetUserManagedSecrets not implemented") -} func (UnimplementedFluxV2RepositoriesServiceServer) GetPackageRepositoryPermissions(context.Context, *v1alpha1.GetPackageRepositoryPermissionsRequest) (*v1alpha1.GetPackageRepositoryPermissionsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPackageRepositoryPermissions not implemented") } @@ -641,24 +621,6 @@ func _FluxV2RepositoriesService_DeletePackageRepository_Handler(srv interface{}, return interceptor(ctx, in, info, handler) } -func _FluxV2RepositoriesService_SetUserManagedSecrets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SetUserManagedSecretsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(FluxV2RepositoriesServiceServer).SetUserManagedSecrets(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/kubeappsapis.plugins.fluxv2.packages.v1alpha1.FluxV2RepositoriesService/SetUserManagedSecrets", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FluxV2RepositoriesServiceServer).SetUserManagedSecrets(ctx, req.(*SetUserManagedSecretsRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _FluxV2RepositoriesService_GetPackageRepositoryPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(v1alpha1.GetPackageRepositoryPermissionsRequest) if err := dec(in); err != nil { @@ -704,10 +666,6 @@ var FluxV2RepositoriesService_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeletePackageRepository", Handler: _FluxV2RepositoriesService_DeletePackageRepository_Handler, }, - { - MethodName: "SetUserManagedSecrets", - Handler: _FluxV2RepositoriesService_SetUserManagedSecrets_Handler, - }, { MethodName: "GetPackageRepositoryPermissions", Handler: _FluxV2RepositoriesService_GetPackageRepositoryPermissions_Handler, diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go index 721758ed859..aea6b714300 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go @@ -785,7 +785,7 @@ func testKindClusterAvailablePackageEndpointsForOCIHelper( } } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) + // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) if err := kubeAddHelmRepositoryAndCleanup( t, repoName, "oci", tc.registryUrl, secretName, 0); err != nil { @@ -945,7 +945,7 @@ func testKindClusterAvailablePackageEndpointsForOCIHelper( } func TestKindClusterAvailablePackageEndpointsOCIRepo2Charts(t *testing.T) { - fluxPluginClient, fluxPluginReposClient, err := checkEnv(t) + fluxPluginClient, _, err := checkEnv(t) if err != nil { t.Fatal(err) } @@ -986,7 +986,7 @@ func TestKindClusterAvailablePackageEndpointsOCIRepo2Charts(t *testing.T) { } } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) + // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) if err := kubeAddHelmRepositoryAndCleanup( t, repoName, "oci", tc.registryUrl, secretName, 0); err != nil { diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go index a70084d5e9a..fe10bc8782e 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go @@ -34,7 +34,6 @@ import ( "google.golang.org/grpc/status" "helm.sh/helm/v3/pkg/getter" apiv1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -95,7 +94,7 @@ func NewDefaultPluginConfig() *FluxPluginConfig { VersionsInSummary: pkgutils.GetDefaultVersionsInSummary(), TimeoutSeconds: int32(-1), DefaultUpgradePolicy: pkgutils.UpgradePolicyNone, - UserManagedSecrets: false, + NoCrossNamespaceRefs: false, } } @@ -132,28 +131,6 @@ func NamespacedName(obj ctrlclient.Object) (*types.NamespacedName, error) { } } -// "Local" in the sense of no namespace is specified -func NewLocalOpaqueSecret(ownerRepo types.NamespacedName) *apiv1.Secret { - return &apiv1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: ownerRepo.Name + "-", - }, - Type: apiv1.SecretTypeOpaque, - Data: map[string][]byte{}, - } -} - -// "Local" in the sense of no namespace is specified -func NewLocalDockerConfigJsonSecret(ownerRepo types.NamespacedName) *apiv1.Secret { - return &apiv1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: ownerRepo.Name + "-", - }, - Type: apiv1.SecretTypeDockerConfigJson, - Data: map[string][]byte{}, - } -} - // ref: https://blog.trailofbits.com/2020/06/09/how-to-check-if-a-mutex-is-locked-in-go/ // I understand this is not really "kosher" in general for production usage, // but in one specific case (cache populateWith() func) it's okay as a confidence test @@ -449,10 +426,6 @@ type FluxPluginConfig struct { VersionsInSummary pkgutils.VersionsInSummary TimeoutSeconds int32 DefaultUpgradePolicy pkgutils.UpgradePolicy - // whether or not secrets are fully managed by user or kubeapps - // see comments in design spec under AddPackageRepository. - // false (i.e. kubeapps manages secrets) by default - UserManagedSecrets bool // ref https://github.com/vmware-tanzu/kubeapps/issues/5541 NoCrossNamespaceRefs bool } @@ -477,7 +450,6 @@ func ParsePluginConfig(pluginConfigPath string) (*FluxPluginConfig, error) { Packages struct { V1alpha1 struct { DefaultUpgradePolicy string `json:"defaultUpgradePolicy"` - UserManagedSecrets bool `json:"userManagedSecrets"` NoCrossNamespaceRefs bool `json:"noCrossNamespaceRefs"` } `json:"v1alpha1"` } `json:"packages"` @@ -504,7 +476,6 @@ func ParsePluginConfig(pluginConfigPath string) (*FluxPluginConfig, error) { VersionsInSummary: config.Core.Packages.V1alpha1.VersionsInSummary, TimeoutSeconds: config.Core.Packages.V1alpha1.TimeoutSeconds, DefaultUpgradePolicy: defaultUpgradePolicy, - UserManagedSecrets: config.Flux.Packages.V1alpha1.UserManagedSecrets, NoCrossNamespaceRefs: config.Flux.Packages.V1alpha1.NoCrossNamespaceRefs, }, nil } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go index 7276112fcea..39f3e540646 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go @@ -1324,10 +1324,11 @@ var ( add_repo_req_22 = func(user, password string) *corev1.AddPackageRepositoryRequest { return &corev1.AddPackageRepositoryRequest{ - Name: "my-podinfo-6", - Context: &corev1.Context{Namespace: "default"}, - Type: "oci", - Url: github_stefanprodan_podinfo_oci_registry_url, + Name: "my-podinfo-6", + Context: &corev1.Context{Namespace: "default"}, + Type: "oci", + NamespaceScoped: true, + Url: github_stefanprodan_podinfo_oci_registry_url, Auth: &corev1.PackageRepositoryAuth{ Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, PackageRepoAuthOneOf: &corev1.PackageRepositoryAuth_UsernamePassword{ @@ -1341,10 +1342,11 @@ var ( } add_repo_req_23 = &corev1.AddPackageRepositoryRequest{ - Name: "my-podinfo-7", - Context: &corev1.Context{Namespace: "default"}, - Type: "oci", - Url: github_stefanprodan_podinfo_oci_registry_url, + Name: "my-podinfo-7", + Context: &corev1.Context{Namespace: "default"}, + Type: "oci", + NamespaceScoped: true, + Url: github_stefanprodan_podinfo_oci_registry_url, Auth: &corev1.PackageRepositoryAuth{ Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, PackageRepoAuthOneOf: &corev1.PackageRepositoryAuth_SecretRef{ @@ -1357,10 +1359,11 @@ var ( add_repo_req_24 = func(server, user, password string) *corev1.AddPackageRepositoryRequest { return &corev1.AddPackageRepositoryRequest{ - Name: "my-podinfo-8", - Context: &corev1.Context{Namespace: "default"}, - Type: "oci", - Url: github_stefanprodan_podinfo_oci_registry_url, + Name: "my-podinfo-8", + Context: &corev1.Context{Namespace: "default"}, + Type: "oci", + NamespaceScoped: true, + Url: github_stefanprodan_podinfo_oci_registry_url, Auth: &corev1.PackageRepositoryAuth{ Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON, PackageRepoAuthOneOf: &corev1.PackageRepositoryAuth_DockerCreds{ @@ -3727,7 +3730,7 @@ var ( podinfo_repo_status_1 = &corev1.PackageRepositoryStatus{ Ready: true, Reason: corev1.PackageRepositoryStatus_STATUS_REASON_SUCCESS, - UserReason: "Succeeded: stored artifact for revision '9d3ac1eb708dfaebae14d7c88fd46afce8b1e0f7aace790d91758575dc8ce518'", + UserReason: "Succeeded: stored artifact for revision 'd3c15ef95abac09b0fb786d48628a62a0d503e7a4fab63fbcde8965f8cc72da0'", } podinfo_repo_status_2 = &corev1.PackageRepositoryStatus{ @@ -3739,7 +3742,7 @@ var ( podinfo_repo_status_3 = &corev1.PackageRepositoryStatus{ Ready: true, Reason: corev1.PackageRepositoryStatus_STATUS_REASON_SUCCESS, - UserReason: "Succeeded: stored artifact for revision '2867920fb8f56575f4bc95ed878ee2a0c8ae79cdd2bca210a72aa3ff04defa1b'", + UserReason: "Succeeded: stored artifact for revision '552fc7ab40d40adcd7adebad6d5b8185a5924bc2e2badee8468e20e6962d3c3e'", } podinfo_repo_status_4 = &corev1.PackageRepositoryStatus{ diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go index 50ebcc60a61..bd94b44c0e1 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go @@ -1538,8 +1538,6 @@ func createAndWaitForHelmRelease( } } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) - err := kubeAddHelmRepositoryAndCleanup(t, name, tc.repoType, tc.repoUrl, secretName, tc.repoInterval) if err != nil { t.Fatalf("%+v", err) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go index 264a4f55d6d..3a5d53c0de3 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go @@ -6,7 +6,6 @@ package main import ( "bytes" "context" - "encoding/base64" "encoding/gob" "fmt" "regexp" @@ -31,7 +30,6 @@ import ( apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" log "k8s.io/klog/v2" @@ -42,7 +40,6 @@ const ( // see docs at https://fluxcd.io/docs/components/source/ and // https://fluxcd.io/docs/components/helm/api/ fluxHelmRepositories = "helmrepositories" - redactedString = "REDACTED" ) var ( @@ -254,13 +251,11 @@ func (s *Server) newRepo(ctx context.Context, request *corev1.AddPackageReposito name := types.NamespacedName{Name: request.Name, Namespace: request.Context.Namespace} auth := request.GetAuth() - var secret *apiv1.Secret - var err error - if s.pluginConfig.UserManagedSecrets { - if secret, err = s.validateUserManagedRepoSecret(ctx, name, typ, tlsConfig, auth); err != nil { - return nil, err - } - } else { + // Get or validate secret resource for auth, not yet stored in K8s + secret, isSecretKubeappsManaged, err := s.handleAuthSecretForCreate(ctx, name, typ, tlsConfig, auth) + if err != nil { + return nil, err + } else if isSecretKubeappsManaged { // a bit of catch 22: I need to create a secret first, so that I can create a repo that references it // but then I need to set the owner reference on this secret to the repo. In has to be done // in that order because to set an owner ref you need object (i.e. repo) UID, which you only get @@ -292,7 +287,7 @@ func (s *Server) newRepo(ctx context.Context, request *corev1.AddPackageReposito } else if err = client.Create(ctx, fluxRepo); err != nil { return nil, statuserror.FromK8sError("create", "HelmRepository", name.String(), err) } else { - if !s.pluginConfig.UserManagedSecrets { + if isSecretKubeappsManaged { if err = s.setOwnerReferencesForRepoSecret(ctx, secret, fluxRepo); err != nil { return nil, err } @@ -316,37 +311,10 @@ func (s *Server) repoDetail(ctx context.Context, repoRef *corev1.PackageReposito return nil, err } - var tlsConfig *corev1.PackageRepositoryTlsConfig - var auth *corev1.PackageRepositoryAuth - if repo.Spec.SecretRef != nil { - secretName := repo.Spec.SecretRef.Name - if s == nil || s.clientGetter == nil { - return nil, status.Errorf(codes.Internal, "unexpected state in clientGetterHolder instance") - } - typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster) - if err != nil { - return nil, err - } - secret, err := typedClient.CoreV1().Secrets(repo.Namespace).Get(ctx, secretName, metav1.GetOptions{}) - if err != nil { - return nil, statuserror.FromK8sError("get", "secret", secretName, err) - } - - if s.pluginConfig.UserManagedSecrets { - if tlsConfig, auth, err = getRepoTlsConfigAndAuthWithUserManagedSecrets(secret); err != nil { - return nil, err - } - } else { - if tlsConfig, auth, err = getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret); err != nil { - return nil, err - } - } - } else { - auth = &corev1.PackageRepositoryAuth{ - Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED, - } + tlsConfig, auth, err := s.getRepoTlsConfigAndAuth(ctx, *repo) + if err != nil { + return nil, err } - auth.PassCredentials = repo.Spec.PassCredentials typ := repo.Spec.Type if typ == "" { typ = "helm" @@ -447,205 +415,6 @@ func (s *Server) repoSummaries(ctx context.Context, ns string) ([]*corev1.Packag return summaries, nil } -func (s *Server) validateUserManagedRepoSecret( - ctx context.Context, - repoName types.NamespacedName, - repoType string, - tlsConfig *corev1.PackageRepositoryTlsConfig, - auth *corev1.PackageRepositoryAuth) (*apiv1.Secret, error) { - var secretRefTls, secretRefAuth string - if tlsConfig != nil { - if tlsConfig.GetCertAuthority() != "" { - return nil, status.Errorf(codes.InvalidArgument, "Secret Ref must be used with user managed secrets") - } else if tlsConfig.GetSecretRef().GetName() != "" { - secretRefTls = tlsConfig.GetSecretRef().GetName() - } - } - - if auth != nil { - if auth.GetDockerCreds() != nil || - auth.GetHeader() != "" || - auth.GetTlsCertKey() != nil || - auth.GetUsernamePassword() != nil { - return nil, status.Errorf(codes.InvalidArgument, "Secret Ref must be used with user managed secrets") - } else if auth.GetSecretRef().GetName() != "" { - secretRefAuth = auth.GetSecretRef().GetName() - } - } - - var secretRef string - if secretRefTls != "" && secretRefAuth != "" && secretRefTls != secretRefAuth { - // flux repo spec only allows one secret per HelmRepository CRD - return nil, status.Errorf( - codes.InvalidArgument, "TLS config secret and Auth secret must be the same") - } else if secretRefTls != "" { - secretRef = secretRefTls - } else if secretRefAuth != "" { - secretRef = secretRefAuth - } - - var secret *apiv1.Secret - if secretRef != "" { - // check that the specified secret exists - if typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster); err != nil { - return nil, err - } else if secret, err = typedClient.CoreV1().Secrets(repoName.Namespace).Get(ctx, secretRef, metav1.GetOptions{}); err != nil { - return nil, statuserror.FromK8sError("get", "secret", secretRef, err) - } else { - // also check that the data in the opaque secret corresponds - // to specified auth type, e.g. if AuthType is - // PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, - // check that the secret has "username" and "password" fields, etc. - // it appears flux does not care about the k8s secret type (opaque vs tls vs basic-auth, etc.) - // https://github.com/fluxcd/source-controller/blob/bc5a47e821562b1c4f9731acd929b8d9bd23b3a8/controllers/helmrepository_controller.go#L357 - if secretRefTls != "" && secret.Data["caFile"] == nil { - return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing field 'caFile'", secretRef) - } - if secretRefAuth != "" { - switch auth.Type { - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH: - if secret.Data["username"] == nil || secret.Data["password"] == nil { - return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'username' and/or 'password'", secretRef) - } - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: - if secret.Data["keyFile"] == nil || secret.Data["certFile"] == nil { - return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'keyFile' and/or 'certFile'", secretRef) - } - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: - if repoType == sourcev1.HelmRepositoryTypeOCI { - if secret.Data[apiv1.DockerConfigJsonKey] == nil { - return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing field '%s'", secretRef, apiv1.DockerConfigJsonKey) - } - } else { - return nil, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported", auth.Type) - } - default: - return nil, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported", auth.Type) - } - } - } - - // ref https://github.com/vmware-tanzu/kubeapps/pull/4353#discussion_r816332595 - // check whether flux supports typed secrets in addition to opaque secrets - // https://kubernetes.io/docs/concepts/configuration/secret/#secret-types - // update: flux currently does not care about secret type, just what is in the data map. - } - return secret, nil -} - -func (s *Server) createKubeappsManagedRepoSecret( - ctx context.Context, - repoName types.NamespacedName, - typ string, - tlsConfig *corev1.PackageRepositoryTlsConfig, - auth *corev1.PackageRepositoryAuth) (*apiv1.Secret, error) { - - secret, _, err := newSecretFromTlsConfigAndAuth(repoName, typ, tlsConfig, auth) - if err != nil { - return nil, err - } - - if secret != nil { - // create a secret first, if applicable - if typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster); err != nil { - return nil, err - } else if secret, err = typedClient.CoreV1().Secrets(repoName.Namespace).Create(ctx, secret, metav1.CreateOptions{}); err != nil { - return nil, statuserror.FromK8sError("create", "secret", secret.GetName(), err) - } - } - return secret, nil -} - -// using owner references on the secret so that it can be -// (1) cleaned up automatically and/or -// (2) enable some control (ie. if I add a secret manually -// -// via kubectl before running kubeapps, it won't get deleted just -// -// because Kubeapps is deleting it)? -// see https://github.com/vmware-tanzu/kubeapps/pull/4630#discussion_r861446394 for details -func (s *Server) setOwnerReferencesForRepoSecret( - ctx context.Context, - secret *apiv1.Secret, - repo *sourcev1.HelmRepository) error { - - if repo.Spec.SecretRef != nil && secret != nil { - if typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster); err != nil { - return err - } else { - secretsInterface := typedClient.CoreV1().Secrets(repo.Namespace) - secret.OwnerReferences = []metav1.OwnerReference{ - *metav1.NewControllerRef( - repo, - schema.GroupVersionKind{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, - Kind: sourcev1.HelmRepositoryKind, - }), - } - if _, err := secretsInterface.Update(ctx, secret, metav1.UpdateOptions{}); err != nil { - return statuserror.FromK8sError("update", "secrets", secret.Name, err) - } - } - } - return nil -} - -// returns 3 things: -// secret - either an existing or newly created secret, or nil if there should -// be no secret associated with a repository -// updateRepo - boolean indicating whether or not a HelmRepository CRD needs to be updated -// err - when bad things happen - -func (s *Server) updateKubeappsManagedRepoSecret( - ctx context.Context, - repoName types.NamespacedName, - typ string, - tlsConfig *corev1.PackageRepositoryTlsConfig, - auth *corev1.PackageRepositoryAuth, - existingSecretRef *fluxmeta.LocalObjectReference) (secret *apiv1.Secret, updateRepo bool, err error) { - - secret, isSameSecret, err := newSecretFromTlsConfigAndAuth(repoName, typ, tlsConfig, auth) - if err != nil { - return nil, false, err - } else if isSameSecret { - return nil, false, nil - } - - typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster) - if err != nil { - return nil, false, err - } - secretInterface := typedClient.CoreV1().Secrets(repoName.Namespace) - if secret != nil { - if existingSecretRef == nil { - // create a secret first - newSecret, err := secretInterface.Create(ctx, secret, metav1.CreateOptions{}) - if err != nil { - return nil, false, statuserror.FromK8sError("create", "secret", secret.GetGenerateName(), err) - } - return newSecret, true, nil - } else { - // TODO (gfichtenholt) we should optimize this to somehow tell if the existing secret - // is the same (data-wise) as the new one and if so skip all this - if err = secretInterface.Delete(ctx, existingSecretRef.Name, metav1.DeleteOptions{}); err != nil { - return nil, false, statuserror.FromK8sError("delete", "secret", existingSecretRef.Name, err) - } - // create a new one - newSecret, err := secretInterface.Create(ctx, secret, metav1.CreateOptions{}) - if err != nil { - return nil, false, statuserror.FromK8sError("create", "secret", secret.GetGenerateName(), err) - } - return newSecret, true, nil - } - } else if existingSecretRef != nil { - if err = secretInterface.Delete(ctx, existingSecretRef.Name, metav1.DeleteOptions{}); err != nil { - log.Errorf("Error deleting existing secret: [%s] due to %v", err) - } - } - return secret, true, nil -} - func (s *Server) updateRepo(ctx context.Context, repoRef *corev1.PackageRepositoryReference, url string, interval string, tlsConfig *corev1.PackageRepositoryTlsConfig, auth *corev1.PackageRepositoryAuth) (*corev1.PackageRepositoryReference, error) { key := types.NamespacedName{Namespace: repoRef.GetContext().GetNamespace(), Name: repoRef.GetIdentifier()} repo, err := s.getRepoInCluster(ctx, key) @@ -667,7 +436,7 @@ func (s *Server) updateRepo(ctx context.Context, repoRef *corev1.PackageReposito repo.Spec.URL = url // flux does not grok repository description yet - // the only field in customdetail is "provider" and I don't see the need to + // the only field in customDetail is "provider" and I don't see the need to // have the user update that. Its not like one repository is going to move from // GCP to AWS. @@ -687,20 +456,14 @@ func (s *Server) updateRepo(ctx context.Context, repoRef *corev1.PackageReposito return nil, status.Errorf(codes.InvalidArgument, "TLS flag insecureSkipVerify is not supported") } - var secret *apiv1.Secret - var updateRepoSecret bool - if s.pluginConfig.UserManagedSecrets { - if secret, err = s.validateUserManagedRepoSecret(ctx, key, repo.Spec.Type, tlsConfig, auth); err != nil { - return nil, err - } - } else { - if secret, updateRepoSecret, err = s.updateKubeappsManagedRepoSecret( - ctx, key, repo.Spec.Type, tlsConfig, auth, repo.Spec.SecretRef); err != nil { - return nil, err - } + // validate and get updated (or newly created) secret + secret, isKubeappsManagedSecret, updateRepoSecret, err := s.handleAuthSecretForUpdate( + ctx, key, repo.Spec.Type, tlsConfig, auth, repo.Spec.SecretRef) + if err != nil { + return nil, err } - if s.pluginConfig.UserManagedSecrets || updateRepoSecret { + if updateRepoSecret { if secret != nil { repo.Spec.SecretRef = &fluxmeta.LocalObjectReference{Name: secret.Name} } else { @@ -720,7 +483,7 @@ func (s *Server) updateRepo(ctx context.Context, repoRef *corev1.PackageReposito return nil, err } else if err = client.Update(ctx, repo); err != nil { return nil, statuserror.FromK8sError("update", "HelmRepository", key.String(), err) - } else if updateRepoSecret && secret != nil { + } else if isKubeappsManagedSecret && updateRepoSecret && secret != nil { // new secret => will need to set the owner if err = s.setOwnerReferencesForRepoSecret(ctx, secret, repo); err != nil { return nil, err @@ -773,7 +536,7 @@ type repoEventSink struct { // all struct fields are capitalized so they're exported by gob encoding type repoCacheEntryValue struct { Checksum string // SHA256 - Type string // "http" or "oci". If not set, repo is assumed to be regular old HTTP + Type string // "default" or "oci". If not set, repo is assumed to be regular old HTTP Charts []models.Chart OCIRepoLister string // only applicable for OCIRepos, "" otherwise } @@ -1169,179 +932,3 @@ func newFluxHelmRepo( } return fluxRepo, nil } - -// this func is only used with kubeapps-managed secrets -func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, - typ string, - tlsConfig *corev1.PackageRepositoryTlsConfig, - auth *corev1.PackageRepositoryAuth) (secret *apiv1.Secret, isSameSecret bool, err error) { - if tlsConfig != nil { - if tlsConfig.GetSecretRef() != nil { - return nil, false, status.Errorf(codes.InvalidArgument, "SecretRef may not be used with kubeapps managed secrets") - } - caCert := tlsConfig.GetCertAuthority() - if caCert == redactedString { - isSameSecret = true - } else if caCert != "" { - secret = common.NewLocalOpaqueSecret(repoName) - secret.Data["caFile"] = []byte(caCert) - } - } - if auth != nil { - if auth.GetSecretRef() != nil { - return nil, false, status.Errorf(codes.InvalidArgument, "SecretRef may not be used with kubeapps managed secrets") - } - if secret == nil { - if auth.Type == corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON { - secret = common.NewLocalDockerConfigJsonSecret(repoName) - } else { - secret = common.NewLocalOpaqueSecret(repoName) - } - } - switch auth.Type { - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH: - if unp := auth.GetUsernamePassword(); unp != nil { - if unp.Username == redactedString && unp.Password == redactedString { - isSameSecret = true - } else { - secret.Data["username"] = []byte(unp.Username) - secret.Data["password"] = []byte(unp.Password) - } - } else { - return nil, false, status.Errorf(codes.Internal, "Username/Password configuration is missing") - } - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: - if ck := auth.GetTlsCertKey(); ck != nil { - if ck.Cert == redactedString && ck.Key == redactedString { - isSameSecret = true - } else { - secret.Data["certFile"] = []byte(ck.Cert) - secret.Data["keyFile"] = []byte(ck.Key) - } - } else { - return nil, false, status.Errorf(codes.Internal, "TLS Cert/Key configuration is missing") - } - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: - if typ == sourcev1.HelmRepositoryTypeOCI { - if dc := auth.GetDockerCreds(); dc != nil { - if dc.Username == redactedString && dc.Password == redactedString && dc.Server == redactedString { - isSameSecret = true - } else { - secret.Data = map[string][]byte{ - apiv1.DockerConfigJsonKey: []byte(`{"auths":{"` + - dc.Server + `":{"` + - `auth":"` + base64.StdEncoding.EncodeToString([]byte(dc.Username+":"+dc.Password)) + `"}}}`), - } - } - } else { - return nil, false, status.Errorf(codes.Internal, "Docker credentials configuration is missing") - } - } else { - return nil, false, status.Errorf(codes.Internal, "Unsupported package repository authentication type: %q", auth.Type) - } - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BEARER, - corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_AUTHORIZATION_HEADER: - return nil, false, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported", auth.Type) - case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED: - return nil, true, nil - default: - return nil, false, status.Errorf(codes.Internal, "Unsupported package repository authentication type: %q", auth.Type) - } - } - return secret, isSameSecret, nil -} - -func getRepoTlsConfigAndAuthWithUserManagedSecrets(secret *apiv1.Secret) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { - var tlsConfig *corev1.PackageRepositoryTlsConfig - auth := &corev1.PackageRepositoryAuth{ - Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED, - } - - if _, ok := secret.Data["caFile"]; ok { - tlsConfig = &corev1.PackageRepositoryTlsConfig{ - // flux plug in doesn't support this option - InsecureSkipVerify: false, - PackageRepoTlsConfigOneOf: &corev1.PackageRepositoryTlsConfig_SecretRef{ - SecretRef: &corev1.SecretKeyReference{ - Name: secret.Name, - Key: "caFile", - }, - }, - } - } - if _, ok := secret.Data["certFile"]; ok { - if _, ok = secret.Data["keyFile"]; ok { - auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS - auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_SecretRef{ - SecretRef: &corev1.SecretKeyReference{Name: secret.Name}, - } - } - } else if _, ok := secret.Data["username"]; ok { - if _, ok = secret.Data["password"]; ok { - auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH - auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_SecretRef{ - SecretRef: &corev1.SecretKeyReference{Name: secret.Name}, - } - } - } else { - log.Warning("Unrecognized type of secret [%s]", secret.Name) - } - return tlsConfig, auth, nil -} - -// TODO (gfichtenolt) Per slack discussion -// In fact, keeping the existing API might mean we could return exactly what it already does today -// (i.e. all secrets) if called with an extra explicit option (includeSecrets=true in the request -// message, not sure, similar to kubectl config view --raw) and by default the secrets are REDACTED -// as you mention? This would mean clients will by default see only REDACTED secrets, -// but can request the full sensitive data when necessary? -func getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret *apiv1.Secret) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { - var tlsConfig *corev1.PackageRepositoryTlsConfig - auth := &corev1.PackageRepositoryAuth{ - Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED, - } - - if _, ok := secret.Data["caFile"]; ok { - tlsConfig = &corev1.PackageRepositoryTlsConfig{ - // flux plug in doesn't support InsecureSkipVerify option - InsecureSkipVerify: false, - PackageRepoTlsConfigOneOf: &corev1.PackageRepositoryTlsConfig_CertAuthority{ - CertAuthority: redactedString, - }, - } - } - - if _, ok := secret.Data["certFile"]; ok { - if _, ok := secret.Data["keyFile"]; ok { - auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS - auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_TlsCertKey{ - TlsCertKey: &corev1.TlsCertKey{ - Cert: redactedString, - Key: redactedString, - }, - } - } - } else if _, ok := secret.Data["username"]; ok { - if _, ok := secret.Data["password"]; ok { - auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH - auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_UsernamePassword{ - UsernamePassword: &corev1.UsernamePassword{ - Username: redactedString, - Password: redactedString, - }, - } - } - } else if _, ok := secret.Data[apiv1.DockerConfigJsonKey]; ok { - auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON - auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_DockerCreds{ - DockerCreds: &corev1.DockerCredentials{ - Username: redactedString, - Password: redactedString, - Server: redactedString, - }, - } - } else { - log.Warning("Unrecognized type of secret: [%s]", secret.Name) - } - return tlsConfig, auth, nil -} diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go new file mode 100644 index 00000000000..e2e3e16c0e4 --- /dev/null +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go @@ -0,0 +1,567 @@ +// Copyright 2021-2022 the Kubeapps contributors. +// SPDX-License-Identifier: Apache-2.0 + +package main + +import ( + "context" + "encoding/base64" + + fluxmeta "github.com/fluxcd/pkg/apis/meta" + sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" + "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/statuserror" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + log "k8s.io/klog/v2" +) + +const ( + redactedString = "REDACTED" + // ref https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/#labels + managedByAnnotationName = "app.kubernetes.io/managed-by" + managedByAnnotationValue = "kubeapps" +) + +func (s *Server) handleAuthSecretForCreate( + ctx context.Context, + repoName types.NamespacedName, + repoType string, + tlsConfig *corev1.PackageRepositoryTlsConfig, + auth *corev1.PackageRepositoryAuth) (*apiv1.Secret, bool, error) { + + hasCaRef := tlsConfig != nil && tlsConfig.GetSecretRef() != nil + hasCaData := tlsConfig != nil && tlsConfig.GetCertAuthority() != "" + hasAuthRef := auth != nil && auth.GetSecretRef() != nil + hasAuthData := auth != nil && auth.GetSecretRef() == nil && auth.GetType() != corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED + + // if we have both ref config and data config, it is an invalid mixed configuration + if (hasCaRef || hasAuthRef) && (hasCaData || hasAuthData) { + return nil, false, status.Errorf(codes.InvalidArgument, "Package repository cannot mix referenced secrets and user provided secret data") + } + + // create/get secret + if hasCaRef || hasAuthRef { + secret, err := s.validateUserManagedRepoSecret(ctx, repoName, repoType, tlsConfig, auth) + return secret, false, err + } else if hasCaData || hasAuthData { + secret, _, err := newSecretFromTlsConfigAndAuth(repoName, repoType, tlsConfig, auth) + return secret, true, err + } else { + return nil, false, nil + } +} + +func (s *Server) handleAuthSecretForUpdate( + ctx context.Context, + repoName types.NamespacedName, + repoType string, + tlsConfig *corev1.PackageRepositoryTlsConfig, + auth *corev1.PackageRepositoryAuth, + existingSecretRef *fluxmeta.LocalObjectReference) (secret *apiv1.Secret, isKubeappsManagedSecret bool, updateRepoSecret bool, err error) { + + hasCaRef := tlsConfig != nil && tlsConfig.GetSecretRef() != nil + hasCaData := tlsConfig != nil && tlsConfig.GetCertAuthority() != "" + hasAuthRef := auth != nil && auth.GetSecretRef() != nil + hasAuthData := auth != nil && auth.GetSecretRef() == nil && auth.GetType() != corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED + + // if we have both ref config and data config, it is an invalid mixed configuration + if (hasCaRef || hasAuthRef) && (hasCaData || hasAuthData) { + return nil, false, false, status.Errorf(codes.InvalidArgument, "Package repository cannot mix referenced secrets and user provided secret data") + } + + if existingSecretRef != nil { + typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster) + if err != nil { + return nil, false, false, err + } + secretInterface := typedClient.CoreV1().Secrets(repoName.Namespace) + if secret, err := secretInterface.Get(ctx, existingSecretRef.Name, metav1.GetOptions{}); err != nil { + return nil, false, false, statuserror.FromK8sError("get", "secret", existingSecretRef.Name, err) + } else { + isKubeappsManagedSecret = isSecretKubeappsManaged(secret) + } + + // check we cannot change mode (per design spec) + if isKubeappsManagedSecret { + if hasAuthRef || hasCaRef { + return nil, false, false, status.Errorf(codes.InvalidArgument, "Auth management mode cannot be changed") + } + + if secret, updateRepoSecret, err = s.updateKubeappsManagedRepoSecret( + ctx, repoName, repoType, tlsConfig, auth, existingSecretRef); err != nil { + return nil, false, false, err + } else { + return secret, true, updateRepoSecret, nil + } + } + } + + // if we are here, then this is similar to create + if hasCaRef || hasAuthRef { + secret, err := s.validateUserManagedRepoSecret(ctx, repoName, repoType, tlsConfig, auth) + return secret, false, true, err + } else if hasCaData || hasAuthData { + secret, _, err := newSecretFromTlsConfigAndAuth(repoName, repoType, tlsConfig, auth) + return secret, true, true, err + } else { + return nil, isKubeappsManagedSecret, false, nil + } +} + +func (s *Server) validateUserManagedRepoSecret( + ctx context.Context, + repoName types.NamespacedName, + repoType string, + tlsConfig *corev1.PackageRepositoryTlsConfig, + auth *corev1.PackageRepositoryAuth) (*apiv1.Secret, error) { + var secretRefTls, secretRefAuth string + if tlsConfig != nil { + if tlsConfig.GetCertAuthority() != "" { + return nil, status.Errorf(codes.InvalidArgument, "Secret Ref must be used with user managed secrets") + } else if tlsConfig.GetSecretRef().GetName() != "" { + secretRefTls = tlsConfig.GetSecretRef().GetName() + } + } + + if auth != nil { + if auth.GetDockerCreds() != nil || + auth.GetHeader() != "" || + auth.GetTlsCertKey() != nil || + auth.GetUsernamePassword() != nil { + return nil, status.Errorf(codes.InvalidArgument, "Secret Ref must be used with user managed secrets") + } else if auth.GetSecretRef().GetName() != "" { + secretRefAuth = auth.GetSecretRef().GetName() + } + } + + var secretRef string + if secretRefTls != "" && secretRefAuth != "" && secretRefTls != secretRefAuth { + // flux repo spec only allows one secret per HelmRepository CRD + return nil, status.Errorf( + codes.InvalidArgument, "TLS config secret and Auth secret must be the same") + } else if secretRefTls != "" { + secretRef = secretRefTls + } else if secretRefAuth != "" { + secretRef = secretRefAuth + } + + var secret *apiv1.Secret + if secretRef != "" { + // check that the specified secret exists + if typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster); err != nil { + return nil, err + } else if secret, err = typedClient.CoreV1().Secrets(repoName.Namespace).Get(ctx, secretRef, metav1.GetOptions{}); err != nil { + return nil, statuserror.FromK8sError("get", "secret", secretRef, err) + } else { + // also check that the data in the opaque secret corresponds + // to specified auth type, e.g. if AuthType is + // PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, + // check that the secret has "username" and "password" fields, etc. + // it appears flux does not care about the k8s secret type (opaque vs tls vs basic-auth, etc.) + // https://github.com/fluxcd/source-controller/blob/bc5a47e821562b1c4f9731acd929b8d9bd23b3a8/controllers/helmrepository_controller.go#L357 + if secretRefTls != "" && secret.Data["caFile"] == nil { + return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing field 'caFile'", secretRef) + } + if secretRefAuth != "" { + switch auth.Type { + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH: + if secret.Data["username"] == nil || secret.Data["password"] == nil { + return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'username' and/or 'password'", secretRef) + } + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: + if secret.Data["keyFile"] == nil || secret.Data["certFile"] == nil { + return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'keyFile' and/or 'certFile'", secretRef) + } + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: + if repoType == sourcev1.HelmRepositoryTypeOCI { + if secret.Data[apiv1.DockerConfigJsonKey] == nil { + return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing field '%s'", secretRef, apiv1.DockerConfigJsonKey) + } + } else { + return nil, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported", auth.Type) + } + default: + return nil, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported", auth.Type) + } + } + } + + // ref https://github.com/vmware-tanzu/kubeapps/pull/4353#discussion_r816332595 + // check whether flux supports typed secrets in addition to opaque secrets + // https://kubernetes.io/docs/concepts/configuration/secret/#secret-types + // update: flux currently does not care about secret type, just what is in the data map. + } + return secret, nil +} + +func (s *Server) createKubeappsManagedRepoSecret( + ctx context.Context, + repoName types.NamespacedName, + typ string, + tlsConfig *corev1.PackageRepositoryTlsConfig, + auth *corev1.PackageRepositoryAuth) (*apiv1.Secret, error) { + + secret, _, err := newSecretFromTlsConfigAndAuth(repoName, typ, tlsConfig, auth) + if err != nil { + return nil, err + } + + if secret != nil { + // create a secret first, if applicable + if typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster); err != nil { + return nil, err + } else if secret, err = typedClient.CoreV1().Secrets(repoName.Namespace).Create(ctx, secret, metav1.CreateOptions{}); err != nil { + return nil, statuserror.FromK8sError("create", "secret", secret.GetName(), err) + } + } + return secret, nil +} + +// using owner references on the secret so that it can be +// (1) cleaned up automatically and/or +// (2) enable some control (ie. if I add a secret manually +// +// via kubectl before running kubeapps, it won't get deleted just +// +// because Kubeapps is deleting it)? +// see https://github.com/vmware-tanzu/kubeapps/pull/4630#discussion_r861446394 for details +func (s *Server) setOwnerReferencesForRepoSecret( + ctx context.Context, + secret *apiv1.Secret, + repo *sourcev1.HelmRepository) error { + + if repo.Spec.SecretRef != nil && secret != nil { + if typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster); err != nil { + return err + } else { + secretsInterface := typedClient.CoreV1().Secrets(repo.Namespace) + secret.OwnerReferences = []metav1.OwnerReference{ + *metav1.NewControllerRef( + repo, + schema.GroupVersionKind{ + Group: sourcev1.GroupVersion.Group, + Version: sourcev1.GroupVersion.Version, + Kind: sourcev1.HelmRepositoryKind, + }), + } + if _, err := secretsInterface.Update(ctx, secret, metav1.UpdateOptions{}); err != nil { + return statuserror.FromK8sError("update", "secrets", secret.Name, err) + } + } + } + return nil +} + +// returns 3 things: +// secret - either an existing or newly created secret, or nil if there should +// be no secret associated with a repository +// updateRepo - boolean indicating whether or not a HelmRepository CRD needs to be updated +// err - when bad things happen + +func (s *Server) updateKubeappsManagedRepoSecret( + ctx context.Context, + repoName types.NamespacedName, + typ string, + tlsConfig *corev1.PackageRepositoryTlsConfig, + auth *corev1.PackageRepositoryAuth, + existingSecretRef *fluxmeta.LocalObjectReference) (secret *apiv1.Secret, updateRepo bool, err error) { + + secret, isSameSecret, err := newSecretFromTlsConfigAndAuth(repoName, typ, tlsConfig, auth) + if err != nil { + return nil, false, err + } else if isSameSecret { + return nil, false, nil + } + + typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster) + if err != nil { + return nil, false, err + } + secretInterface := typedClient.CoreV1().Secrets(repoName.Namespace) + if secret != nil { + if existingSecretRef == nil { + // create a secret first + newSecret, err := secretInterface.Create(ctx, secret, metav1.CreateOptions{}) + if err != nil { + return nil, false, statuserror.FromK8sError("create", "secret", secret.GetGenerateName(), err) + } + return newSecret, true, nil + } else { + // TODO (gfichtenholt) we should optimize this to somehow tell if the existing secret + // is the same (data-wise) as the new one and if so skip all this + if err = secretInterface.Delete(ctx, existingSecretRef.Name, metav1.DeleteOptions{}); err != nil { + return nil, false, statuserror.FromK8sError("delete", "secret", existingSecretRef.Name, err) + } + // create a new one + newSecret, err := secretInterface.Create(ctx, secret, metav1.CreateOptions{}) + if err != nil { + return nil, false, statuserror.FromK8sError("create", "secret", secret.GetGenerateName(), err) + } + return newSecret, true, nil + } + } else if existingSecretRef != nil { + if err = secretInterface.Delete(ctx, existingSecretRef.Name, metav1.DeleteOptions{}); err != nil { + log.Errorf("Error deleting existing secret: [%s] due to %v", err) + } + } + return secret, true, nil +} + +func (s *Server) getRepoTlsConfigAndAuth(ctx context.Context, repo sourcev1.HelmRepository) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { + var tlsConfig *corev1.PackageRepositoryTlsConfig + var auth *corev1.PackageRepositoryAuth + + if repo.Spec.SecretRef != nil { + secretName := repo.Spec.SecretRef.Name + if s == nil || s.clientGetter == nil { + return nil, nil, status.Errorf(codes.Internal, "unexpected state in clientGetterHolder instance") + } + typedClient, err := s.clientGetter.Typed(ctx, s.kubeappsCluster) + if err != nil { + return nil, nil, err + } + secret, err := typedClient.CoreV1().Secrets(repo.Namespace).Get(ctx, secretName, metav1.GetOptions{}) + if err != nil { + return nil, nil, statuserror.FromK8sError("get", "secret", secretName, err) + } + + if isSecretKubeappsManaged(secret) { + if tlsConfig, auth, err = getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret); err != nil { + return nil, nil, err + } + } else { + if tlsConfig, auth, err = getRepoTlsConfigAndAuthWithUserManagedSecrets(secret); err != nil { + return nil, nil, err + } + } + } else { + auth = &corev1.PackageRepositoryAuth{ + Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED, + PassCredentials: repo.Spec.PassCredentials, + } + } + + if repo.Spec.PassCredentials { + if auth == nil { + auth = &corev1.PackageRepositoryAuth{ + PassCredentials: repo.Spec.PassCredentials, + } + } + } + + return tlsConfig, auth, nil +} + +// this func is only used with kubeapps-managed secrets +func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, + typ string, + tlsConfig *corev1.PackageRepositoryTlsConfig, + auth *corev1.PackageRepositoryAuth) (secret *apiv1.Secret, isSameSecret bool, err error) { + if tlsConfig != nil { + if tlsConfig.GetSecretRef() != nil { + return nil, false, status.Errorf(codes.InvalidArgument, "SecretRef may not be used with kubeapps managed secrets") + } + caCert := tlsConfig.GetCertAuthority() + if caCert == redactedString { + isSameSecret = true + } else if caCert != "" { + secret = newLocalOpaqueSecret(repoName) + secret.Data["caFile"] = []byte(caCert) + } + } + if auth != nil { + if auth.GetSecretRef() != nil { + return nil, false, status.Errorf(codes.InvalidArgument, "SecretRef may not be used with kubeapps managed secrets") + } + if secret == nil { + if auth.Type == corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON { + secret = newLocalDockerConfigJsonSecret(repoName) + } else { + secret = newLocalOpaqueSecret(repoName) + } + } + switch auth.Type { + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH: + if unp := auth.GetUsernamePassword(); unp != nil { + if unp.Username == redactedString && unp.Password == redactedString { + isSameSecret = true + } else { + secret.Data["username"] = []byte(unp.Username) + secret.Data["password"] = []byte(unp.Password) + } + } else { + return nil, false, status.Errorf(codes.Internal, "Username/Password configuration is missing") + } + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: + if ck := auth.GetTlsCertKey(); ck != nil { + if ck.Cert == redactedString && ck.Key == redactedString { + isSameSecret = true + } else { + secret.Data["certFile"] = []byte(ck.Cert) + secret.Data["keyFile"] = []byte(ck.Key) + } + } else { + return nil, false, status.Errorf(codes.Internal, "TLS Cert/Key configuration is missing") + } + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: + if typ == sourcev1.HelmRepositoryTypeOCI { + if dc := auth.GetDockerCreds(); dc != nil { + if dc.Username == redactedString && dc.Password == redactedString && dc.Server == redactedString { + isSameSecret = true + } else { + secret.Data = map[string][]byte{ + apiv1.DockerConfigJsonKey: []byte(`{"auths":{"` + + dc.Server + `":{"` + + `auth":"` + base64.StdEncoding.EncodeToString([]byte(dc.Username+":"+dc.Password)) + `"}}}`), + } + } + } else { + return nil, false, status.Errorf(codes.Internal, "Docker credentials configuration is missing") + } + } else { + return nil, false, status.Errorf(codes.Internal, "Unsupported package repository authentication type: %q", auth.Type) + } + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BEARER, + corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_AUTHORIZATION_HEADER: + return nil, false, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported", auth.Type) + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED: + return nil, true, nil + default: + return nil, false, status.Errorf(codes.Internal, "Unsupported package repository authentication type: %q", auth.Type) + } + } + return secret, isSameSecret, nil +} + +func getRepoTlsConfigAndAuthWithUserManagedSecrets(secret *apiv1.Secret) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { + var tlsConfig *corev1.PackageRepositoryTlsConfig + auth := &corev1.PackageRepositoryAuth{ + Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED, + } + + if _, ok := secret.Data["caFile"]; ok { + tlsConfig = &corev1.PackageRepositoryTlsConfig{ + // flux plug in doesn't support this option + InsecureSkipVerify: false, + PackageRepoTlsConfigOneOf: &corev1.PackageRepositoryTlsConfig_SecretRef{ + SecretRef: &corev1.SecretKeyReference{ + Name: secret.Name, + Key: "caFile", + }, + }, + } + } + if _, ok := secret.Data["certFile"]; ok { + if _, ok = secret.Data["keyFile"]; ok { + auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS + auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_SecretRef{ + SecretRef: &corev1.SecretKeyReference{Name: secret.Name}, + } + } + } else if _, ok := secret.Data["username"]; ok { + if _, ok = secret.Data["password"]; ok { + auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH + auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_SecretRef{ + SecretRef: &corev1.SecretKeyReference{Name: secret.Name}, + } + } + } else { + log.Warning("Unrecognized type of secret [%s]", secret.Name) + } + return tlsConfig, auth, nil +} + +// TODO (gfichtenolt) Per slack discussion +// In fact, keeping the existing API might mean we could return exactly what it already does today +// (i.e. all secrets) if called with an extra explicit option (includeSecrets=true in the request +// message, not sure, similar to kubectl config view --raw) and by default the secrets are REDACTED +// as you mention? This would mean clients will by default see only REDACTED secrets, +// but can request the full sensitive data when necessary? +func getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret *apiv1.Secret) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { + var tlsConfig *corev1.PackageRepositoryTlsConfig + auth := &corev1.PackageRepositoryAuth{ + Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_UNSPECIFIED, + } + + if _, ok := secret.Data["caFile"]; ok { + tlsConfig = &corev1.PackageRepositoryTlsConfig{ + // flux plug in doesn't support InsecureSkipVerify option + InsecureSkipVerify: false, + PackageRepoTlsConfigOneOf: &corev1.PackageRepositoryTlsConfig_CertAuthority{ + CertAuthority: redactedString, + }, + } + } + + if _, ok := secret.Data["certFile"]; ok { + if _, ok := secret.Data["keyFile"]; ok { + auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS + auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_TlsCertKey{ + TlsCertKey: &corev1.TlsCertKey{ + Cert: redactedString, + Key: redactedString, + }, + } + } + } else if _, ok := secret.Data["username"]; ok { + if _, ok := secret.Data["password"]; ok { + auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH + auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_UsernamePassword{ + UsernamePassword: &corev1.UsernamePassword{ + Username: redactedString, + Password: redactedString, + }, + } + } + } else if _, ok := secret.Data[apiv1.DockerConfigJsonKey]; ok { + auth.Type = corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON + auth.PackageRepoAuthOneOf = &corev1.PackageRepositoryAuth_DockerCreds{ + DockerCreds: &corev1.DockerCredentials{ + Username: redactedString, + Password: redactedString, + Server: redactedString, + }, + } + } else { + log.Warning("Unrecognized type of secret: [%s]", secret.Name) + } + return tlsConfig, auth, nil +} + +func isSecretKubeappsManaged(secret *apiv1.Secret) bool { + managedBy, ok := secret.Annotations[managedByAnnotationName] + return ok && managedBy == managedByAnnotationValue +} + +// "Local" in the sense of no namespace is specified +func newLocalOpaqueSecret(ownerRepo types.NamespacedName) *apiv1.Secret { + return &apiv1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + GenerateName: ownerRepo.Name + "-", + Annotations: map[string]string{ + managedByAnnotationName: managedByAnnotationValue, + }, + }, + Type: apiv1.SecretTypeOpaque, + Data: map[string][]byte{}, + } +} + +// "Local" in the sense of no namespace is specified +func newLocalDockerConfigJsonSecret(ownerRepo types.NamespacedName) *apiv1.Secret { + return &apiv1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + GenerateName: ownerRepo.Name + "-", + Annotations: map[string]string{ + managedByAnnotationName: managedByAnnotationValue, + }, + }, + Type: apiv1.SecretTypeDockerConfigJson, + Data: map[string][]byte{}, + } +} diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go index b76783fd2a7..fc8c470f4f7 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go @@ -201,10 +201,7 @@ func TestKindClusterAddPackageRepository(t *testing.T) { t.Fatalf("Environment variables GITHUB_USER and GITHUB_TOKEN need to be set to run this test") } - // TODO: probably requires TLS - gcp_host := "us-west1-docker.pkg.dev" - gcp_user := "" - gcp_pwd := "" + gcp_host, gcp_user, gcp_pwd := "us-west1-docker.pkg.dev", "", "" testCases := []struct { testName string @@ -213,7 +210,6 @@ func TestKindClusterAddPackageRepository(t *testing.T) { expectedResponse *corev1.AddPackageRepositoryResponse expectedStatusCode codes.Code expectedReconcileFailure bool - userManagedSecrets bool }{ { testName: "add repo test (simplest case)", @@ -243,16 +239,6 @@ func TestKindClusterAddPackageRepository(t *testing.T) { }, "foo", "bar"), expectedResponse: add_repo_expected_resp_5, expectedStatusCode: codes.OK, - userManagedSecrets: true, - }, - { - testName: "package repository with basic auth and existing secret (kubeapps managed secrets)", - request: add_repo_req_18, - existingSecret: newBasicAuthSecret(types.NamespacedName{ - Name: "secret-1", - Namespace: "default", - }, "foo", "bar"), - expectedStatusCode: codes.InvalidArgument, }, { testName: "package repository with TLS", @@ -263,16 +249,6 @@ func TestKindClusterAddPackageRepository(t *testing.T) { }, pub, priv, ca), expectedResponse: add_repo_expected_resp_5, expectedStatusCode: codes.OK, - userManagedSecrets: true, - }, - { - testName: "package repository with TLS (kubeapps managed secrets)", - request: add_repo_req_19, - existingSecret: newTlsSecret(types.NamespacedName{ - Name: "secret-2", - Namespace: "default", - }, pub, priv, ca), - expectedStatusCode: codes.InvalidArgument, }, { testName: "add OCI repo test (simplest case)", @@ -295,7 +271,6 @@ func TestKindClusterAddPackageRepository(t *testing.T) { }, ghUser, ghToken), expectedResponse: add_repo_expected_resp_8, expectedStatusCode: codes.OK, - userManagedSecrets: true, }, { testName: "test add OCI repo with dockerconfigjson secret (kubeapps managed)", @@ -312,7 +287,6 @@ func TestKindClusterAddPackageRepository(t *testing.T) { }, "ghcr.io", ghUser, ghToken), expectedResponse: add_repo_expected_resp_10, expectedStatusCode: codes.OK, - userManagedSecrets: true, }, { testName: "test add OCI repo from harbor registry with dockerconfigjson secret (kubeapps managed)", @@ -346,12 +320,21 @@ func TestKindClusterAddPackageRepository(t *testing.T) { } } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) - grpcContext, cancel := context.WithTimeout(grpcContext, defaultContextTimeout) defer cancel() resp, err := fluxPluginReposClient.AddPackageRepository(grpcContext, tc.request) + if err == nil { + t.Cleanup(func() { + err := kubeDeleteHelmRepository(t, types.NamespacedName{ + Name: tc.request.Name, + Namespace: tc.request.Context.Namespace, + }) + if err != nil { + t.Logf("Failed to delete helm source due to [%v]", err) + } + }) + } if tc.expectedStatusCode != codes.OK { if status.Code(err) != tc.expectedStatusCode { t.Fatalf("Expected %v, got: %v", tc.expectedStatusCode, err) @@ -360,15 +343,7 @@ func TestKindClusterAddPackageRepository(t *testing.T) { } else if err != nil { t.Fatal(err) } - t.Cleanup(func() { - err := kubeDeleteHelmRepository(t, types.NamespacedName{ - Name: tc.request.Name, - Namespace: tc.request.Context.Namespace, - }) - if err != nil { - t.Logf("Failed to delete helm source due to [%v]", err) - } - }) + opt1 := cmpopts.IgnoreUnexported( corev1.AddPackageRepositoryResponse{}, corev1.Context{}, @@ -414,7 +389,6 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { expectedResponse *corev1.GetPackageRepositoryDetailResponse expectedStatusCode codes.Code existingSecret *apiv1.Secret - userManagedSecrets bool }{ { testName: "gets detail for podinfo package repository", @@ -451,7 +425,6 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { Name: "secret-1", Namespace: "TBD", }, "foo", "bar"), - userManagedSecrets: true, }, { testName: "get detail succeeds for podinfo basic auth package repository with creds (kubeapps managed secrets)", @@ -460,7 +433,7 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { repoUrl: podinfo_basic_auth_repo_url, expectedStatusCode: codes.OK, expectedResponse: get_repo_detail_resp_14a, - existingSecret: newBasicAuthSecret(types.NamespacedName{ + existingSecret: newManagedBasicAuthSecret(types.NamespacedName{ Name: "secret-1", Namespace: "TBD", }, "foo", "bar"), @@ -503,7 +476,7 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { repoName: "my-podinfo-14", repoType: "oci", repoUrl: github_stefanprodan_podinfo_oci_registry_url, - existingSecret: newBasicAuthSecret(types.NamespacedName{ + existingSecret: newManagedBasicAuthSecret(types.NamespacedName{ Name: "secret-1", Namespace: "TBD", }, ghUser, ghToken), @@ -516,7 +489,7 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { repoName: "my-podinfo-15", repoType: "oci", repoUrl: github_stefanprodan_podinfo_oci_registry_url, - existingSecret: newDockerConfigJsonSecret(types.NamespacedName{ + existingSecret: newManagedDockerConfigJsonSecret(types.NamespacedName{ Name: "secret-1", Namespace: "TBD", }, "ghcr.io", ghUser, ghToken), @@ -529,7 +502,7 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { repoName: "my-podinfo-16", repoType: "oci", repoUrl: harbor_stefanprodan_podinfo_oci_registry_url, - existingSecret: newDockerConfigJsonSecret(types.NamespacedName{ + existingSecret: newManagedDockerConfigJsonSecret(types.NamespacedName{ Name: "secret-1", Namespace: "TBD", }, harbor_host, harbor_admin_user, harbor_admin_pwd), @@ -591,8 +564,6 @@ func TestKindClusterGetPackageRepositoryDetail(t *testing.T) { grpcCtx = grpcAdmin } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) - var resp *corev1.GetPackageRepositoryDetailResponse for { grpcCtx, cancel := context.WithTimeout(grpcCtx, defaultContextTimeout) @@ -1014,7 +985,7 @@ func TestKindClusterUpdatePackageRepository(t *testing.T) { grpcCtx = grpcAdmin } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) + // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) tc.request.PackageRepoRef.Context.Namespace = repoNamespace if tc.expectedResponse != nil { @@ -1206,7 +1177,7 @@ func TestKindClusterDeletePackageRepository(t *testing.T) { grpcCtx = grpcAdmin } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) + // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) tc.request.PackageRepoRef.Context.Namespace = repoNamespace @@ -1277,7 +1248,7 @@ func TestKindClusterUpdatePackageRepoSecretUnchanged(t *testing.T) { request := update_repo_req_17 repoName := "my-podinfo-6" repoUrl := podinfo_basic_auth_repo_url - oldSecret := newBasicAuthSecret(types.NamespacedName{ + oldSecret := newManagedBasicAuthSecret(types.NamespacedName{ Name: "secret-1", Namespace: "TBD"}, "foo", "bar") expectedStatusCode := codes.OK @@ -1316,8 +1287,6 @@ func TestKindClusterUpdatePackageRepoSecretUnchanged(t *testing.T) { t.Fatal(err) } - setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, false) - request.PackageRepoRef.Context.Namespace = repoNamespace expectedResponse.PackageRepoRef.Context.Namespace = repoNamespace expectedDetail.Detail.PackageRepoRef.Context.Namespace = repoNamespace @@ -1547,36 +1516,6 @@ func compareActualVsExpectedPackageRepositoryDetail(t *testing.T, actualDetail * } } -func setUserManagedSecrets(t *testing.T, fluxPluginReposClient v1alpha1.FluxV2RepositoriesServiceClient, value bool) bool { - ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) - defer cancel() - - oldValue, err := fluxPluginReposClient.SetUserManagedSecrets( - ctx, &v1alpha1.SetUserManagedSecretsRequest{Value: value}) - if err != nil { - t.Fatal(err) - } - return oldValue.Value -} - -func setUserManagedSecretsAndCleanup(t *testing.T, fluxPluginReposClient v1alpha1.FluxV2RepositoriesServiceClient, value bool) { - ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) - defer cancel() - - oldValue := setUserManagedSecrets(t, fluxPluginReposClient, value) - - t.Cleanup(func() { - ctx, cancel = context.WithTimeout(context.Background(), defaultContextTimeout) - defer cancel() - - _, err := fluxPluginReposClient.SetUserManagedSecrets( - ctx, &v1alpha1.SetUserManagedSecretsRequest{Value: oldValue}) - if err != nil { - t.Fatalf("Failed to reset user managed secrets flag back to [%t] due to: %+v", oldValue, err) - } - }) -} - func waitForRepoToReconcileWithSuccess(t *testing.T, fluxPluginReposClient v1alpha1.FluxV2RepositoriesServiceClient, ctx context.Context, name, namespace string) *corev1.GetPackageRepositoryDetailResponse { var actualDetail *corev1.GetPackageRepositoryDetailResponse var err error diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go index 893831267c4..3f092733c8d 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go @@ -6,8 +6,6 @@ package main import ( "context" "fmt" - authorizationv1 "k8s.io/api/authorization/v1" - k8stesting "k8s.io/client-go/testing" "net/http" "net/http/httptest" "os" @@ -15,6 +13,9 @@ import ( "testing" "time" + authorizationv1 "k8s.io/api/authorization/v1" + k8stesting "k8s.io/client-go/testing" + fluxmeta "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" redismock "github.com/go-redis/redismock/v8" @@ -1287,7 +1288,7 @@ func TestAddPackageRepository(t *testing.T) { { name: "errors when package repository with secret key reference (kubeapps managed secrets)", request: add_repo_req_7, - statusCode: codes.InvalidArgument, + statusCode: codes.NotFound, }, { name: "package repository with secret key reference", @@ -1309,7 +1310,7 @@ func TestAddPackageRepository(t *testing.T) { { name: "fails when package repository links to non-existing secret (kubeapps managed secrets)", request: add_repo_req_7, - statusCode: codes.InvalidArgument, + statusCode: codes.NotFound, }, { name: "package repository with basic auth and pass_credentials flag", @@ -1362,7 +1363,7 @@ func TestAddPackageRepository(t *testing.T) { { name: "package repository with basic auth and existing secret (kubeapps managed secrets)", request: add_repo_req_13, - statusCode: codes.InvalidArgument, + statusCode: codes.NotFound, }, { name: "errors when package repository with 1 secret for TLS CA and a different secret for basic auth (kubeapps managed secrets)", @@ -1408,7 +1409,7 @@ func TestAddPackageRepository(t *testing.T) { if err != nil { t.Fatalf("error instantiating the server: %v", err) } - s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets + // TODO s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets nsname := types.NamespacedName{Namespace: tc.request.Context.Namespace, Name: tc.request.Name} if tc.statusCode == codes.OK { @@ -1718,7 +1719,7 @@ func TestGetPackageRepositoryDetail(t *testing.T) { if err != nil { t.Fatalf("error instantiating the server: %v", err) } - s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets + // TODO s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets ctx := context.Background() actualResp, err := s.GetPackageRepositoryDetail(ctx, tc.request) @@ -2139,7 +2140,7 @@ func TestUpdatePackageRepository(t *testing.T) { if err != nil { t.Fatalf("error instantiating the server: %v", err) } - s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets + // TODO s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets ctx := context.Background() actualResp, err := s.UpdatePackageRepository(ctx, tc.request) @@ -2284,7 +2285,7 @@ func TestDeletePackageRepository(t *testing.T) { if err != nil { t.Fatalf("error instantiating the server: %v", err) } - s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets + // TODO s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets ctx := context.Background() ctrlClient, err := s.clientGetter.ControllerRuntime(ctx, s.kubeappsCluster) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go index 9bdddee17b3..78e40512380 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go @@ -6,6 +6,7 @@ package main import ( "context" "fmt" + "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/resources" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/helm" @@ -679,16 +680,6 @@ func (s *Server) GetPackageRepositoryPermissions(ctx context.Context, request *c }, nil } -// This endpoint exists only for integration unit tests -func (s *Server) SetUserManagedSecrets(ctx context.Context, request *v1alpha1.SetUserManagedSecretsRequest) (*v1alpha1.SetUserManagedSecretsResponse, error) { - log.Infof("+fluxv2 SetUserManagedSecrets [%t]", request.Value) - oldVal := s.pluginConfig.UserManagedSecrets - s.pluginConfig.UserManagedSecrets = request.Value - return &v1alpha1.SetUserManagedSecretsResponse{ - Value: oldVal, - }, nil -} - // makes the server look like a repo event sink. Facilitates code reuse between // use cases when something happens in background as a result of a watch event, // aka an "out-of-band" interaction and use cases when the user wants something diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go index 2121b980b6d..d1ecebbb451 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go @@ -10,12 +10,13 @@ import ( "encoding/base64" "encoding/json" "fmt" - k8stesting "k8s.io/client-go/testing" "net/http" "os" "reflect" "testing" + k8stesting "k8s.io/client-go/testing" + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/google/go-cmp/cmp" @@ -206,6 +207,15 @@ func newBasicAuthSecret(name types.NamespacedName, user, password string) *apiv1 } } +// newManaged... means "kubeapps managed" +func newManagedBasicAuthSecret(name types.NamespacedName, user, password string) *apiv1.Secret { + secret := newBasicAuthSecret(name, user, password) + secret.Annotations = map[string]string{ + managedByAnnotationName: managedByAnnotationValue, + } + return secret +} + // Note that according to https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets // TLS secrets need to look one way, but according to // https://fluxcd.io/docs/components/source/helmrepositories/#spec-examples they expect TLS secrets @@ -276,6 +286,14 @@ func newDockerConfigJsonSecret(name types.NamespacedName, server, user, password return s } +func newManagedDockerConfigJsonSecret(name types.NamespacedName, server, user, password string) *apiv1.Secret { + s := newDockerConfigJsonSecret(name, server, user, password) + s.Annotations = map[string]string{ + managedByAnnotationName: managedByAnnotationValue, + } + return s +} + func setSecretOwnerRef(repoName string, secret *apiv1.Secret) *apiv1.Secret { tRue := true secret.OwnerReferences = []metav1.OwnerReference{ diff --git a/cmd/kubeapps-apis/proto/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto b/cmd/kubeapps-apis/proto/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto index bfc4e278ac0..e4898198f48 100644 --- a/cmd/kubeapps-apis/proto/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto +++ b/cmd/kubeapps-apis/proto/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto @@ -115,10 +115,6 @@ service FluxV2RepositoriesService { }; } - // this endpoint only exists for the purpose of integration tests - rpc SetUserManagedSecrets(SetUserManagedSecretsRequest) returns (SetUserManagedSecretsResponse) { - } - rpc GetPackageRepositoryPermissions(kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsRequest) returns (kubeappsapis.core.packages.v1alpha1.GetPackageRepositoryPermissionsResponse) { option (google.api.http) = { get: "/plugins/fluxv2/packages/v1alpha1/repositories/c/{context.cluster}/permissions" @@ -126,14 +122,6 @@ service FluxV2RepositoriesService { } } -message SetUserManagedSecretsRequest { - bool value = 1; -} - -message SetUserManagedSecretsResponse { - bool value = 1; -} - // Flux PackageRepositoryCustomDetail // // Custom details for a Flux Package repository diff --git a/dashboard/src/gen/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.ts b/dashboard/src/gen/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.ts index e7389e67272..4be3a0915ed 100644 --- a/dashboard/src/gen/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.ts +++ b/dashboard/src/gen/kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.ts @@ -1,52 +1,45 @@ /* eslint-disable */ +import Long from "long"; import { grpc } from "@improbable-eng/grpc-web"; -import { BrowserHeaders } from "browser-headers"; import _m0 from "protobufjs/minimal"; import { - CreateInstalledPackageRequest, - CreateInstalledPackageResponse, - DeleteInstalledPackageRequest, - DeleteInstalledPackageResponse, - GetAvailablePackageDetailRequest, - GetAvailablePackageDetailResponse, GetAvailablePackageSummariesRequest, - GetAvailablePackageSummariesResponse, + GetAvailablePackageDetailRequest, GetAvailablePackageVersionsRequest, - GetAvailablePackageVersionsResponse, + GetInstalledPackageSummariesRequest, GetInstalledPackageDetailRequest, - GetInstalledPackageDetailResponse, + CreateInstalledPackageRequest, + UpdateInstalledPackageRequest, + DeleteInstalledPackageRequest, GetInstalledPackageResourceRefsRequest, - GetInstalledPackageResourceRefsResponse, - GetInstalledPackageSummariesRequest, + GetAvailablePackageSummariesResponse, + GetAvailablePackageDetailResponse, + GetAvailablePackageVersionsResponse, GetInstalledPackageSummariesResponse, - UpdateInstalledPackageRequest, + GetInstalledPackageDetailResponse, + CreateInstalledPackageResponse, UpdateInstalledPackageResponse, -} from "../../../../core/packages/v1alpha1/packages"; + DeleteInstalledPackageResponse, + GetInstalledPackageResourceRefsResponse, +} from "../../../../../kubeappsapis/core/packages/v1alpha1/packages"; import { AddPackageRepositoryRequest, - AddPackageRepositoryResponse, - DeletePackageRepositoryRequest, - DeletePackageRepositoryResponse, GetPackageRepositoryDetailRequest, - GetPackageRepositoryDetailResponse, - GetPackageRepositoryPermissionsRequest, - GetPackageRepositoryPermissionsResponse, GetPackageRepositorySummariesRequest, - GetPackageRepositorySummariesResponse, UpdatePackageRepositoryRequest, + DeletePackageRepositoryRequest, + GetPackageRepositoryPermissionsRequest, + AddPackageRepositoryResponse, + GetPackageRepositoryDetailResponse, + GetPackageRepositorySummariesResponse, UpdatePackageRepositoryResponse, -} from "../../../../core/packages/v1alpha1/repositories"; + DeletePackageRepositoryResponse, + GetPackageRepositoryPermissionsResponse, +} from "../../../../../kubeappsapis/core/packages/v1alpha1/repositories"; +import { BrowserHeaders } from "browser-headers"; export const protobufPackage = "kubeappsapis.plugins.fluxv2.packages.v1alpha1"; -export interface SetUserManagedSecretsRequest { - value: boolean; -} - -export interface SetUserManagedSecretsResponse { - value: boolean; -} - /** * Flux PackageRepositoryCustomDetail * @@ -67,113 +60,7 @@ export interface FluxPackageRepositoryCustomDetail { provider: string; } -function createBaseSetUserManagedSecretsRequest(): SetUserManagedSecretsRequest { - return { value: false }; -} - -export const SetUserManagedSecretsRequest = { - encode( - message: SetUserManagedSecretsRequest, - writer: _m0.Writer = _m0.Writer.create(), - ): _m0.Writer { - if (message.value === true) { - writer.uint32(8).bool(message.value); - } - return writer; - }, - - decode(input: _m0.Reader | Uint8Array, length?: number): SetUserManagedSecretsRequest { - const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); - let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseSetUserManagedSecretsRequest(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.value = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }, - - fromJSON(object: any): SetUserManagedSecretsRequest { - return { value: isSet(object.value) ? Boolean(object.value) : false }; - }, - - toJSON(message: SetUserManagedSecretsRequest): unknown { - const obj: any = {}; - message.value !== undefined && (obj.value = message.value); - return obj; - }, - - fromPartial, I>>( - object: I, - ): SetUserManagedSecretsRequest { - const message = createBaseSetUserManagedSecretsRequest(); - message.value = object.value ?? false; - return message; - }, -}; - -function createBaseSetUserManagedSecretsResponse(): SetUserManagedSecretsResponse { - return { value: false }; -} - -export const SetUserManagedSecretsResponse = { - encode( - message: SetUserManagedSecretsResponse, - writer: _m0.Writer = _m0.Writer.create(), - ): _m0.Writer { - if (message.value === true) { - writer.uint32(8).bool(message.value); - } - return writer; - }, - - decode(input: _m0.Reader | Uint8Array, length?: number): SetUserManagedSecretsResponse { - const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); - let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseSetUserManagedSecretsResponse(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - message.value = reader.bool(); - break; - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }, - - fromJSON(object: any): SetUserManagedSecretsResponse { - return { value: isSet(object.value) ? Boolean(object.value) : false }; - }, - - toJSON(message: SetUserManagedSecretsResponse): unknown { - const obj: any = {}; - message.value !== undefined && (obj.value = message.value); - return obj; - }, - - fromPartial, I>>( - object: I, - ): SetUserManagedSecretsResponse { - const message = createBaseSetUserManagedSecretsResponse(); - message.value = object.value ?? false; - return message; - }, -}; - -function createBaseFluxPackageRepositoryCustomDetail(): FluxPackageRepositoryCustomDetail { - return { provider: "" }; -} +const baseFluxPackageRepositoryCustomDetail: object = { provider: "" }; export const FluxPackageRepositoryCustomDetail = { encode( @@ -189,7 +76,9 @@ export const FluxPackageRepositoryCustomDetail = { decode(input: _m0.Reader | Uint8Array, length?: number): FluxPackageRepositoryCustomDetail { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseFluxPackageRepositoryCustomDetail(); + const message = { + ...baseFluxPackageRepositoryCustomDetail, + } as FluxPackageRepositoryCustomDetail; while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -205,7 +94,15 @@ export const FluxPackageRepositoryCustomDetail = { }, fromJSON(object: any): FluxPackageRepositoryCustomDetail { - return { provider: isSet(object.provider) ? String(object.provider) : "" }; + const message = { + ...baseFluxPackageRepositoryCustomDetail, + } as FluxPackageRepositoryCustomDetail; + if (object.provider !== undefined && object.provider !== null) { + message.provider = String(object.provider); + } else { + message.provider = ""; + } + return message; }, toJSON(message: FluxPackageRepositoryCustomDetail): unknown { @@ -214,11 +111,17 @@ export const FluxPackageRepositoryCustomDetail = { return obj; }, - fromPartial, I>>( - object: I, + fromPartial( + object: DeepPartial, ): FluxPackageRepositoryCustomDetail { - const message = createBaseFluxPackageRepositoryCustomDetail(); - message.provider = object.provider ?? ""; + const message = { + ...baseFluxPackageRepositoryCustomDetail, + } as FluxPackageRepositoryCustomDetail; + if (object.provider !== undefined && object.provider !== null) { + message.provider = object.provider; + } else { + message.provider = ""; + } return message; }, }; @@ -617,11 +520,6 @@ export interface FluxV2RepositoriesService { request: DeepPartial, metadata?: grpc.Metadata, ): Promise; - /** this endpoint only exists for the purpose of integration tests */ - SetUserManagedSecrets( - request: DeepPartial, - metadata?: grpc.Metadata, - ): Promise; GetPackageRepositoryPermissions( request: DeepPartial, metadata?: grpc.Metadata, @@ -638,7 +536,6 @@ export class FluxV2RepositoriesServiceClientImpl implements FluxV2RepositoriesSe this.GetPackageRepositorySummaries = this.GetPackageRepositorySummaries.bind(this); this.UpdatePackageRepository = this.UpdatePackageRepository.bind(this); this.DeletePackageRepository = this.DeletePackageRepository.bind(this); - this.SetUserManagedSecrets = this.SetUserManagedSecrets.bind(this); this.GetPackageRepositoryPermissions = this.GetPackageRepositoryPermissions.bind(this); } @@ -697,17 +594,6 @@ export class FluxV2RepositoriesServiceClientImpl implements FluxV2RepositoriesSe ); } - SetUserManagedSecrets( - request: DeepPartial, - metadata?: grpc.Metadata, - ): Promise { - return this.rpc.unary( - FluxV2RepositoriesServiceSetUserManagedSecretsDesc, - SetUserManagedSecretsRequest.fromPartial(request), - metadata, - ); - } - GetPackageRepositoryPermissions( request: DeepPartial, metadata?: grpc.Metadata, @@ -835,28 +721,6 @@ export const FluxV2RepositoriesServiceDeletePackageRepositoryDesc: UnaryMethodDe } as any, }; -export const FluxV2RepositoriesServiceSetUserManagedSecretsDesc: UnaryMethodDefinitionish = { - methodName: "SetUserManagedSecrets", - service: FluxV2RepositoriesServiceDesc, - requestStream: false, - responseStream: false, - requestType: { - serializeBinary() { - return SetUserManagedSecretsRequest.encode(this).finish(); - }, - } as any, - responseType: { - deserializeBinary(data: Uint8Array) { - return { - ...SetUserManagedSecretsResponse.decode(data), - toObject() { - return this; - }, - }; - }, - } as any, -}; - export const FluxV2RepositoriesServiceGetPackageRepositoryPermissionsDesc: UnaryMethodDefinitionish = { methodName: "GetPackageRepositoryPermissions", @@ -902,7 +766,6 @@ export class GrpcWebImpl { debug?: boolean; metadata?: grpc.Metadata; - upStreamRetryCodes?: number[]; }; constructor( @@ -912,7 +775,6 @@ export class GrpcWebImpl { debug?: boolean; metadata?: grpc.Metadata; - upStreamRetryCodes?: number[]; }, ) { this.host = host; @@ -927,7 +789,10 @@ export class GrpcWebImpl { const request = { ..._request, ...methodDesc.requestType }; const maybeCombinedMetadata = metadata && this.options.metadata - ? new BrowserHeaders({ ...this.options?.metadata.headersMap, ...metadata?.headersMap }) + ? new BrowserHeaders({ + ...this.options?.metadata.headersMap, + ...metadata?.headersMap, + }) : metadata || this.options.metadata; return new Promise((resolve, reject) => { grpc.unary(methodDesc, { @@ -940,11 +805,9 @@ export class GrpcWebImpl { if (response.status === grpc.Code.OK) { resolve(response.message); } else { - const err = new GrpcWebError( - response.statusMessage, - response.status, - response.trailers, - ); + const err = new Error(response.statusMessage) as any; + err.code = response.status; + err.metadata = response.trailers; reject(err); } }, @@ -954,7 +817,6 @@ export class GrpcWebImpl { } type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - export type DeepPartial = T extends Builtin ? T : T extends Array @@ -965,17 +827,7 @@ export type DeepPartial = T extends Builtin ? { [K in keyof T]?: DeepPartial } : Partial; -type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin - ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; - -function isSet(value: any): boolean { - return value !== null && value !== undefined; -} - -export class GrpcWebError extends Error { - constructor(message: string, public code: grpc.Code, public metadata: grpc.Metadata) { - super(message); - } +if (_m0.util.Long !== Long) { + _m0.util.Long = Long as any; + _m0.configure(); } diff --git a/script/makefiles/cluster-kind.mk b/script/makefiles/cluster-kind.mk index d4794f13835..125611dd464 100644 --- a/script/makefiles/cluster-kind.mk +++ b/script/makefiles/cluster-kind.mk @@ -21,7 +21,7 @@ ${CLUSTER_CONFIG}: --config=./site/content/docs/latest/reference/manifests/kubeapps-local-dev-apiserver-config.yaml \ --retain \ --wait 10s - kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-users-rbac.yaml +# kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-users-rbac.yaml kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml # TODO: need to add wait for condition=exists or similar - https://github.com/kubernetes/kubernetes/issues/83242 sleep 5 From 13a874e61bb009441fd20755d239dd88efd5960c Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Sun, 20 Nov 2022 18:07:34 -0800 Subject: [PATCH 02/12] incremental --- .../plugins/fluxv2/packages/v1alpha1/repo_auth.go | 15 ++++++++++----- .../fluxv2/packages/v1alpha1/test_util_test.go | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go index e2e3e16c0e4..23ca8edcdc7 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go @@ -23,7 +23,7 @@ import ( const ( redactedString = "REDACTED" // ref https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/#labels - managedByAnnotationName = "app.kubernetes.io/managed-by" + managedByAnnotationKey = "app.kubernetes.io/managed-by" managedByAnnotationValue = "kubeapps" ) @@ -534,8 +534,13 @@ func getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret *apiv1.Secret) (*c } func isSecretKubeappsManaged(secret *apiv1.Secret) bool { - managedBy, ok := secret.Annotations[managedByAnnotationName] - return ok && managedBy == managedByAnnotationValue + if !metav1.IsControlledBy(secret, repo) { + return false + } + if managedby := secret.GetAnnotations()[Annotation_ManagedBy_Key]; managedby != Annotation_ManagedBy_Value { + return false + } + return true } // "Local" in the sense of no namespace is specified @@ -544,7 +549,7 @@ func newLocalOpaqueSecret(ownerRepo types.NamespacedName) *apiv1.Secret { ObjectMeta: metav1.ObjectMeta{ GenerateName: ownerRepo.Name + "-", Annotations: map[string]string{ - managedByAnnotationName: managedByAnnotationValue, + managedByAnnotationKey: managedByAnnotationValue, }, }, Type: apiv1.SecretTypeOpaque, @@ -558,7 +563,7 @@ func newLocalDockerConfigJsonSecret(ownerRepo types.NamespacedName) *apiv1.Secre ObjectMeta: metav1.ObjectMeta{ GenerateName: ownerRepo.Name + "-", Annotations: map[string]string{ - managedByAnnotationName: managedByAnnotationValue, + managedByAnnotationKey: managedByAnnotationValue, }, }, Type: apiv1.SecretTypeDockerConfigJson, diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go index d1ecebbb451..16f1c004327 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go @@ -211,7 +211,7 @@ func newBasicAuthSecret(name types.NamespacedName, user, password string) *apiv1 func newManagedBasicAuthSecret(name types.NamespacedName, user, password string) *apiv1.Secret { secret := newBasicAuthSecret(name, user, password) secret.Annotations = map[string]string{ - managedByAnnotationName: managedByAnnotationValue, + managedByAnnotationKey: managedByAnnotationValue, } return secret } @@ -289,7 +289,7 @@ func newDockerConfigJsonSecret(name types.NamespacedName, server, user, password func newManagedDockerConfigJsonSecret(name types.NamespacedName, server, user, password string) *apiv1.Secret { s := newDockerConfigJsonSecret(name, server, user, password) s.Annotations = map[string]string{ - managedByAnnotationName: managedByAnnotationValue, + managedByAnnotationKey: managedByAnnotationValue, } return s } From 4ad1d60322941061505afffdac7be78c26d442e4 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Wed, 23 Nov 2022 19:49:16 -0800 Subject: [PATCH 03/12] incremental --- .../fluxv2/packages/v1alpha1/chart_integration_test.go | 4 ---- .../plugins/fluxv2/packages/v1alpha1/repo_integration_test.go | 2 -- .../plugins/fluxv2/packages/v1alpha1/repo_test.go | 1 - 3 files changed, 7 deletions(-) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go index 350322e6d38..aabebe8a4bd 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go @@ -782,8 +782,6 @@ func testKindClusterAvailablePackageEndpointsForOCIHelper( } } - // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) - if err := kubeAddHelmRepositoryAndCleanup( t, repoName, "oci", tc.registryUrl, secretName, 0); err != nil { t.Fatal(err) @@ -966,8 +964,6 @@ func TestKindClusterAvailablePackageEndpointsOCIRepo2Charts(t *testing.T) { } } - // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, true) - if err := kubeAddHelmRepositoryAndCleanup( t, repoName, "oci", tc.registryUrl, secretName, 0); err != nil { t.Fatal(err) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go index a579e23cebd..1d30430f503 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go @@ -1183,8 +1183,6 @@ func TestKindClusterDeletePackageRepository(t *testing.T) { grpcCtx = grpcAdmin } - // TODO setUserManagedSecretsAndCleanup(t, fluxPluginReposClient, tc.userManagedSecrets) - tc.request.PackageRepoRef.Context.Namespace = repoNamespace grpcCtx, cancel := context.WithTimeout(grpcCtx, defaultContextTimeout) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go index f3630935377..814195af43a 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go @@ -2188,7 +2188,6 @@ func TestDeletePackageRepository(t *testing.T) { if err != nil { t.Fatalf("error instantiating the server: %v", err) } - // TODO s.pluginConfig.UserManagedSecrets = tc.userManagedSecrets ctx := context.Background() ctrlClient, err := s.clientGetter.ControllerRuntime(ctx, s.kubeappsCluster) From 25419d6be476766b40ab92d72c68e2d5977b74b8 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Wed, 23 Nov 2022 21:56:30 -0800 Subject: [PATCH 04/12] incremental --- .../packages/v1alpha1/global_vars_test.go | 69 +++++++++++++++++++ .../fluxv2/packages/v1alpha1/repo_test.go | 38 ++++++++++ .../packages/v1alpha1/test_util_test.go | 1 + 3 files changed, 108 insertions(+) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go index 09e7a004474..8c2d752a31c 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go @@ -1505,6 +1505,32 @@ var ( } } + add_repo_req_30 = &corev1.AddPackageRepositoryRequest{ + Name: "bar", + Context: &corev1.Context{Namespace: "foo"}, + Type: "helm", + NamespaceScoped: true, + Url: "http://example.com", + Auth: &corev1.PackageRepositoryAuth{ + Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, + PackageRepoAuthOneOf: &corev1.PackageRepositoryAuth_UsernamePassword{ + UsernamePassword: &corev1.UsernamePassword{ + Username: "foo", + Password: "bar", + }, + }, + }, + TlsConfig: &corev1.PackageRepositoryTlsConfig{ + InsecureSkipVerify: false, + PackageRepoTlsConfigOneOf: &corev1.PackageRepositoryTlsConfig_SecretRef{ + SecretRef: &corev1.SecretKeyReference{ + Name: "secret-1", + Key: "caFile", + }, + }, + }, + } + add_repo_expected_resp = &corev1.AddPackageRepositoryResponse{ PackageRepoRef: repoRef("bar", "foo"), } @@ -3447,6 +3473,49 @@ var ( } } + update_repo_req_19 = &corev1.UpdatePackageRepositoryRequest{ + PackageRepoRef: repoRefInReq("repo-1", "namespace-1"), + Url: "http://newurl.com", + Auth: &corev1.PackageRepositoryAuth{ + Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, + PackageRepoAuthOneOf: &corev1.PackageRepositoryAuth_UsernamePassword{ + UsernamePassword: &corev1.UsernamePassword{ + Username: "foo", + Password: "bar", + }, + }, + }, + TlsConfig: &corev1.PackageRepositoryTlsConfig{ + InsecureSkipVerify: false, + PackageRepoTlsConfigOneOf: &corev1.PackageRepositoryTlsConfig_SecretRef{ + SecretRef: &corev1.SecretKeyReference{ + Name: "secret-1", + Key: "caFile", + }, + }, + }, + } + + update_repo_req_20 = &corev1.UpdatePackageRepositoryRequest{ + PackageRepoRef: repoRefInReq("repo-1", "namespace-1"), + Url: "http://newurl.com", + Auth: &corev1.PackageRepositoryAuth{ + Type: corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_BASIC_AUTH, + PackageRepoAuthOneOf: &corev1.PackageRepositoryAuth_UsernamePassword{ + UsernamePassword: &corev1.UsernamePassword{ + Username: "foo", + Password: "bar", + }, + }, + }, + } + + update_repo_req_21 = &corev1.UpdatePackageRepositoryRequest{ + PackageRepoRef: repoRefInReq("repo-1", "namespace-1"), + Url: "http://newurl.com", + Auth: secret_1_auth, + } + update_repo_resp_1 = &corev1.UpdatePackageRepositoryResponse{ PackageRepoRef: repoRef("repo-1", "namespace-1"), } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go index 814195af43a..6710194a6bf 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go @@ -1348,6 +1348,11 @@ func TestAddPackageRepository(t *testing.T) { expectedRepo: &add_repo_7, statusCode: codes.OK, }, + { + name: "returns error when mix referenced secrets and user provided secret data", + request: add_repo_req_30, + statusCode: codes.InvalidArgument, + }, } for _, tc := range testCases { @@ -2010,6 +2015,39 @@ func TestUpdatePackageRepository(t *testing.T) { expectedResponse: update_repo_resp_1, expectedDetail: update_repo_detail_15, }, + { + name: "returns error when mix referenced secrets and user provided secret data", + repoIndex: testYaml("valid-index.yaml"), + repoName: "repo-1", + repoNamespace: "namespace-1", + request: update_repo_req_19, + expectedStatusCode: codes.InvalidArgument, + }, + { + name: "update repository change Auth management mode (user-managed secrets)", + repoIndex: testYaml("valid-index.yaml"), + repoName: "repo-1", + repoNamespace: "namespace-1", + oldRepoSecret: newBasicAuthSecret(types.NamespacedName{ + Name: "secret-1", + Namespace: "namespace-1"}, "foo", "bar"), + request: update_repo_req_20, + expectedStatusCode: codes.InvalidArgument, + userManagedSecrets: true, + }, + { + name: "update repository change Auth management mode (kubeapps-managed secrets)", + repoIndex: testYaml("valid-index.yaml"), + repoName: "repo-1", + repoNamespace: "namespace-1", + oldRepoSecret: setSecretManagedByKubeapps(setSecretOwnerRef( + "repo-1", + newBasicAuthSecret(types.NamespacedName{ + Name: "secret-1", + Namespace: "namespace-1"}, "foo", "bar"))), + request: update_repo_req_21, + expectedStatusCode: codes.InvalidArgument, + }, } for _, tc := range testCases { diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go index fafdec17372..b57ae07b8e4 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go @@ -285,6 +285,7 @@ func setSecretManagedByKubeapps(secret *apiv1.Secret) *apiv1.Secret { return secret } +// TODO rewrite this func setSecretOwnerRef(repoName string, secret *apiv1.Secret) *apiv1.Secret { tRue := true secret.OwnerReferences = []metav1.OwnerReference{ From 6c1e0074e9077a68feead52f8ab2c68e1974a5eb Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Wed, 23 Nov 2022 22:12:02 -0800 Subject: [PATCH 05/12] incremental --- .../plugins/fluxv2/packages/v1alpha1/repo_test.go | 1 - .../plugins/fluxv2/packages/v1alpha1/test_util_test.go | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go index 6710194a6bf..7b4fd2bcc5c 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go @@ -1227,7 +1227,6 @@ func TestAddPackageRepository(t *testing.T) { request: add_repo_req_6(ca), expectedResponse: add_repo_expected_resp, expectedRepo: &add_repo_2, - // TODO: rewrite the way this works. make use of userManagedSecrets flag expectedCreatedSecret: setSecretManagedByKubeapps(setSecretOwnerRef( "bar", newTlsSecret(types.NamespacedName{ diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go index b57ae07b8e4..cd4f5464b55 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go @@ -285,7 +285,10 @@ func setSecretManagedByKubeapps(secret *apiv1.Secret) *apiv1.Secret { return secret } -// TODO rewrite this +// TODO (gfichenholt) technically speaking this isn't quite right for a test case +// that actually involves non-fake k8s environment. +// In order for this to be 100% right, we need a repo object with a UID set up. But +// its good enough for a fake k8s environment, which is where this is used func setSecretOwnerRef(repoName string, secret *apiv1.Secret) *apiv1.Secret { tRue := true secret.OwnerReferences = []metav1.OwnerReference{ From b30a1c638845a7280ed3f5dd31edbc5a6665cb2b Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Wed, 23 Nov 2022 22:17:44 -0800 Subject: [PATCH 06/12] undo unintented change --- script/makefiles/cluster-kind.mk | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/script/makefiles/cluster-kind.mk b/script/makefiles/cluster-kind.mk index 125611dd464..3793371f9cd 100644 --- a/script/makefiles/cluster-kind.mk +++ b/script/makefiles/cluster-kind.mk @@ -6,7 +6,6 @@ KUBE ?= ${HOME}/.kube CLUSTER_NAME ?= kubeapps ADDITIONAL_CLUSTER_NAME ?= kubeapps-additional -IMAGE ?= kindest/node:v1.24.0@sha256:0866296e693efe1fed79d5e6c7af8df71fc73ae45e3679af05342239cdc5bc8e CLUSTER_CONFIG = ${KUBE}/kind-config-${CLUSTER_NAME} ADDITIONAL_CLUSTER_CONFIG = ${KUBE}/kind-config-${ADDITIONAL_CLUSTER_NAME} @@ -15,14 +14,13 @@ ADDITIONAL_CLUSTER_CONFIG = ${KUBE}/kind-config-${ADDITIONAL_CLUSTER_NAME} # but is sufficient for the pod to be created so that we can copy the certs below. ${CLUSTER_CONFIG}: kind create cluster \ - --image ${IMAGE} \ --kubeconfig ${CLUSTER_CONFIG} \ --name ${CLUSTER_NAME} \ - --config=./site/content/docs/latest/reference/manifests/kubeapps-local-dev-apiserver-config.yaml \ + --config=./docs/howto/manifests/kubeapps-local-dev-apiserver-config.yaml \ --retain \ --wait 10s -# kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-users-rbac.yaml - kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml + kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./docs/howto/manifests/kubeapps-local-dev-users-rbac.yaml + kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./docs/howto/manifests/ingress-nginx-kind-with-large-proxy-buffers.yaml # TODO: need to add wait for condition=exists or similar - https://github.com/kubernetes/kubernetes/issues/83242 sleep 5 kubectl wait --kubeconfig=${CLUSTER_CONFIG} --namespace ingress-nginx \ @@ -45,23 +43,14 @@ ${ADDITIONAL_CLUSTER_CONFIG}: devel/dex.crt kind create cluster \ --kubeconfig ${ADDITIONAL_CLUSTER_CONFIG} \ --name ${ADDITIONAL_CLUSTER_NAME} \ - --config=./site/content/docs/latest/reference/manifests/kubeapps-local-dev-additional-apiserver-config.yaml \ + --config=./docs/howto/manifests/kubeapps-local-dev-additional-apiserver-config.yaml \ --retain \ --wait 10s - kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-users-rbac.yaml - kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-namespace-discovery-rbac.yaml + kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./docs/howto/manifests/kubeapps-local-dev-users-rbac.yaml + kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./docs/howto/manifests/kubeapps-local-dev-namespace-discovery-rbac.yaml additional-cluster-kind: ${ADDITIONAL_CLUSTER_CONFIG} -devel/additional-nginx: - kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml - # TODO: need to add wait for condition=exists or similar - https://github.com/kubernetes/kubernetes/issues/83242 - sleep 5 - kubectl wait --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} --namespace ingress-nginx \ - --for=condition=ready pod \ - --selector=app.kubernetes.io/component=controller \ - --timeout=120s - multi-cluster-kind: cluster-kind additional-cluster-kind delete-cluster-kind: @@ -71,4 +60,4 @@ delete-cluster-kind: rm ${ADDITIONAL_CLUSTER_CONFIG} || true rm devel/dex.* || true -.PHONY: additional-cluster-kind cluster-kind cluster-kind-delete multi-cluster-kind pause devel/additional-nginx +.PHONY: additional-cluster-kind cluster-kind cluster-kind-delete multi-cluster-kind pause From 8495e0a816078f36c5252f47762393015000de20 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Wed, 23 Nov 2022 22:22:15 -0800 Subject: [PATCH 07/12] undo unintended change --- script/makefiles/cluster-kind.mk | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/script/makefiles/cluster-kind.mk b/script/makefiles/cluster-kind.mk index 3793371f9cd..d4794f13835 100644 --- a/script/makefiles/cluster-kind.mk +++ b/script/makefiles/cluster-kind.mk @@ -6,6 +6,7 @@ KUBE ?= ${HOME}/.kube CLUSTER_NAME ?= kubeapps ADDITIONAL_CLUSTER_NAME ?= kubeapps-additional +IMAGE ?= kindest/node:v1.24.0@sha256:0866296e693efe1fed79d5e6c7af8df71fc73ae45e3679af05342239cdc5bc8e CLUSTER_CONFIG = ${KUBE}/kind-config-${CLUSTER_NAME} ADDITIONAL_CLUSTER_CONFIG = ${KUBE}/kind-config-${ADDITIONAL_CLUSTER_NAME} @@ -14,13 +15,14 @@ ADDITIONAL_CLUSTER_CONFIG = ${KUBE}/kind-config-${ADDITIONAL_CLUSTER_NAME} # but is sufficient for the pod to be created so that we can copy the certs below. ${CLUSTER_CONFIG}: kind create cluster \ + --image ${IMAGE} \ --kubeconfig ${CLUSTER_CONFIG} \ --name ${CLUSTER_NAME} \ - --config=./docs/howto/manifests/kubeapps-local-dev-apiserver-config.yaml \ + --config=./site/content/docs/latest/reference/manifests/kubeapps-local-dev-apiserver-config.yaml \ --retain \ --wait 10s - kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./docs/howto/manifests/kubeapps-local-dev-users-rbac.yaml - kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./docs/howto/manifests/ingress-nginx-kind-with-large-proxy-buffers.yaml + kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-users-rbac.yaml + kubectl apply --kubeconfig=${CLUSTER_CONFIG} -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml # TODO: need to add wait for condition=exists or similar - https://github.com/kubernetes/kubernetes/issues/83242 sleep 5 kubectl wait --kubeconfig=${CLUSTER_CONFIG} --namespace ingress-nginx \ @@ -43,14 +45,23 @@ ${ADDITIONAL_CLUSTER_CONFIG}: devel/dex.crt kind create cluster \ --kubeconfig ${ADDITIONAL_CLUSTER_CONFIG} \ --name ${ADDITIONAL_CLUSTER_NAME} \ - --config=./docs/howto/manifests/kubeapps-local-dev-additional-apiserver-config.yaml \ + --config=./site/content/docs/latest/reference/manifests/kubeapps-local-dev-additional-apiserver-config.yaml \ --retain \ --wait 10s - kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./docs/howto/manifests/kubeapps-local-dev-users-rbac.yaml - kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./docs/howto/manifests/kubeapps-local-dev-namespace-discovery-rbac.yaml + kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-users-rbac.yaml + kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f ./site/content/docs/latest/reference/manifests/kubeapps-local-dev-namespace-discovery-rbac.yaml additional-cluster-kind: ${ADDITIONAL_CLUSTER_CONFIG} +devel/additional-nginx: + kubectl apply --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml + # TODO: need to add wait for condition=exists or similar - https://github.com/kubernetes/kubernetes/issues/83242 + sleep 5 + kubectl wait --kubeconfig=${ADDITIONAL_CLUSTER_CONFIG} --namespace ingress-nginx \ + --for=condition=ready pod \ + --selector=app.kubernetes.io/component=controller \ + --timeout=120s + multi-cluster-kind: cluster-kind additional-cluster-kind delete-cluster-kind: @@ -60,4 +71,4 @@ delete-cluster-kind: rm ${ADDITIONAL_CLUSTER_CONFIG} || true rm devel/dex.* || true -.PHONY: additional-cluster-kind cluster-kind cluster-kind-delete multi-cluster-kind pause +.PHONY: additional-cluster-kind cluster-kind cluster-kind-delete multi-cluster-kind pause devel/additional-nginx From 7a0f6176eec0539e96dcdd60dbc68c38f439ecf7 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Wed, 23 Nov 2022 22:38:10 -0800 Subject: [PATCH 08/12] after upgrade buf and protoc gen --- .../fluxv2/packages/v1alpha1/fluxv2.pb.go | 77 ++++++++++--------- .../fluxv2/packages/v1alpha1/fluxv2.pb.gw.go | 62 +++++++-------- .../packages/v1alpha1/fluxv2_grpc.pb.go | 4 + 3 files changed, 74 insertions(+), 69 deletions(-) diff --git a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go index bfa7d7860e7..4d38524c249 100644 --- a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go +++ b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.1 // protoc (unknown) // source: kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto @@ -38,10 +38,11 @@ type FluxPackageRepositoryCustomDetail struct { // optional field that allows specifying an OIDC provider used for authentication purposes // Supported options are: - // - generic - // - aws - // - azure - // - gcp + // - generic + // - aws + // - azure + // - gcp + // // The provider field is supported only for Helm OCI repositories. The repository type must // be set to "oci" // ref https://fluxcd.io/flux/components/source/helmrepositories/#provider @@ -228,11 +229,11 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x33, - 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xde, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x01, + 0x2a, 0x22, 0x33, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, + 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0xde, 0x02, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, @@ -243,18 +244,18 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0xb3, 0x01, 0x1a, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, - 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0xdb, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, + 0x93, 0x02, 0xb3, 0x01, 0x3a, 0x01, 0x2a, 0x1a, 0xad, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x63, 0x2f, + 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, + 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x5f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x7d, 0x12, 0xdb, 0x02, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x42, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, @@ -312,11 +313,11 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x22, - 0x2e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, - 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x3a, - 0x01, 0x2a, 0x12, 0xd6, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, + 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, + 0x78, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x12, 0xd6, 0x02, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x46, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, @@ -363,17 +364,17 @@ var file_kubeappsapis_plugins_fluxv2_packages_v1alpha1_fluxv2_proto_rawDesc = [] 0x65, 0x2e, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xa2, 0x01, 0x1a, 0x9c, 0x01, - 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, 0x76, 0x32, 0x2f, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x63, - 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, - 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x12, + 0x6e, 0x73, 0x65, 0x22, 0xa9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xa2, 0x01, 0x3a, 0x01, 0x2a, + 0x1a, 0x9c, 0x01, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x66, 0x6c, 0x75, 0x78, + 0x76, 0x32, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, + 0x73, 0x2f, 0x63, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x7b, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x72, 0x65, 0x66, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xcd, 0x02, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x43, 0x2e, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x70, 0x70, 0x73, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, diff --git a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go index e94542e8de1..295eaab909d 100644 --- a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go +++ b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2.pb.gw.go @@ -15,7 +15,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - v1alpha1_0 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" + v1alpha1_1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" @@ -37,7 +37,7 @@ var ( ) func request_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetAvailablePackageSummariesRequest + var protoReq v1alpha1_1.GetAvailablePackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -53,7 +53,7 @@ func request_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx context.Co } func local_request_FluxV2PackagesService_GetAvailablePackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetAvailablePackageSummariesRequest + var protoReq v1alpha1_1.GetAvailablePackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -73,7 +73,7 @@ var ( ) func request_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetAvailablePackageDetailRequest + var protoReq v1alpha1_1.GetAvailablePackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -126,7 +126,7 @@ func request_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx context.Conte } func local_request_FluxV2PackagesService_GetAvailablePackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetAvailablePackageDetailRequest + var protoReq v1alpha1_1.GetAvailablePackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -183,7 +183,7 @@ var ( ) func request_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetAvailablePackageVersionsRequest + var protoReq v1alpha1_1.GetAvailablePackageVersionsRequest var metadata runtime.ServerMetadata var ( @@ -236,7 +236,7 @@ func request_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx context.Con } func local_request_FluxV2PackagesService_GetAvailablePackageVersions_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetAvailablePackageVersionsRequest + var protoReq v1alpha1_1.GetAvailablePackageVersionsRequest var metadata runtime.ServerMetadata var ( @@ -293,7 +293,7 @@ var ( ) func request_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetInstalledPackageSummariesRequest + var protoReq v1alpha1_1.GetInstalledPackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -309,7 +309,7 @@ func request_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx context.Co } func local_request_FluxV2PackagesService_GetInstalledPackageSummaries_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetInstalledPackageSummariesRequest + var protoReq v1alpha1_1.GetInstalledPackageSummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -329,7 +329,7 @@ var ( ) func request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetInstalledPackageDetailRequest + var protoReq v1alpha1_1.GetInstalledPackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -382,7 +382,7 @@ func request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context.Conte } func local_request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetInstalledPackageDetailRequest + var protoReq v1alpha1_1.GetInstalledPackageDetailRequest var metadata runtime.ServerMetadata var ( @@ -435,7 +435,7 @@ func local_request_FluxV2PackagesService_GetInstalledPackageDetail_0(ctx context } func request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.CreateInstalledPackageRequest + var protoReq v1alpha1_1.CreateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -452,7 +452,7 @@ func request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Context, } func local_request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.CreateInstalledPackageRequest + var protoReq v1alpha1_1.CreateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -469,7 +469,7 @@ func local_request_FluxV2PackagesService_CreateInstalledPackage_0(ctx context.Co } func request_FluxV2PackagesService_UpdateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.UpdateInstalledPackageRequest + var protoReq v1alpha1_1.UpdateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -523,7 +523,7 @@ func request_FluxV2PackagesService_UpdateInstalledPackage_0(ctx context.Context, } func local_request_FluxV2PackagesService_UpdateInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.UpdateInstalledPackageRequest + var protoReq v1alpha1_1.UpdateInstalledPackageRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -581,7 +581,7 @@ var ( ) func request_FluxV2PackagesService_DeleteInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.DeleteInstalledPackageRequest + var protoReq v1alpha1_1.DeleteInstalledPackageRequest var metadata runtime.ServerMetadata var ( @@ -634,7 +634,7 @@ func request_FluxV2PackagesService_DeleteInstalledPackage_0(ctx context.Context, } func local_request_FluxV2PackagesService_DeleteInstalledPackage_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.DeleteInstalledPackageRequest + var protoReq v1alpha1_1.DeleteInstalledPackageRequest var metadata runtime.ServerMetadata var ( @@ -691,7 +691,7 @@ var ( ) func request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2PackagesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetInstalledPackageResourceRefsRequest + var protoReq v1alpha1_1.GetInstalledPackageResourceRefsRequest var metadata runtime.ServerMetadata var ( @@ -744,7 +744,7 @@ func request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx context } func local_request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2PackagesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetInstalledPackageResourceRefsRequest + var protoReq v1alpha1_1.GetInstalledPackageResourceRefsRequest var metadata runtime.ServerMetadata var ( @@ -797,7 +797,7 @@ func local_request_FluxV2PackagesService_GetInstalledPackageResourceRefs_0(ctx c } func request_FluxV2RepositoriesService_AddPackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.AddPackageRepositoryRequest + var protoReq v1alpha1_1.AddPackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -814,7 +814,7 @@ func request_FluxV2RepositoriesService_AddPackageRepository_0(ctx context.Contex } func local_request_FluxV2RepositoriesService_AddPackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.AddPackageRepositoryRequest + var protoReq v1alpha1_1.AddPackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -835,7 +835,7 @@ var ( ) func request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetPackageRepositoryDetailRequest + var protoReq v1alpha1_1.GetPackageRepositoryDetailRequest var metadata runtime.ServerMetadata var ( @@ -888,7 +888,7 @@ func request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx context. } func local_request_FluxV2RepositoriesService_GetPackageRepositoryDetail_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetPackageRepositoryDetailRequest + var protoReq v1alpha1_1.GetPackageRepositoryDetailRequest var metadata runtime.ServerMetadata var ( @@ -945,7 +945,7 @@ var ( ) func request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetPackageRepositorySummariesRequest + var protoReq v1alpha1_1.GetPackageRepositorySummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -961,7 +961,7 @@ func request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx conte } func local_request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetPackageRepositorySummariesRequest + var protoReq v1alpha1_1.GetPackageRepositorySummariesRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { @@ -977,7 +977,7 @@ func local_request_FluxV2RepositoriesService_GetPackageRepositorySummaries_0(ctx } func request_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.UpdatePackageRepositoryRequest + var protoReq v1alpha1_1.UpdatePackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1031,7 +1031,7 @@ func request_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx context.Con } func local_request_FluxV2RepositoriesService_UpdatePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.UpdatePackageRepositoryRequest + var protoReq v1alpha1_1.UpdatePackageRepositoryRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) @@ -1089,7 +1089,7 @@ var ( ) func request_FluxV2RepositoriesService_DeletePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.DeletePackageRepositoryRequest + var protoReq v1alpha1_1.DeletePackageRepositoryRequest var metadata runtime.ServerMetadata var ( @@ -1142,7 +1142,7 @@ func request_FluxV2RepositoriesService_DeletePackageRepository_0(ctx context.Con } func local_request_FluxV2RepositoriesService_DeletePackageRepository_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.DeletePackageRepositoryRequest + var protoReq v1alpha1_1.DeletePackageRepositoryRequest var metadata runtime.ServerMetadata var ( @@ -1199,7 +1199,7 @@ var ( ) func request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx context.Context, marshaler runtime.Marshaler, client FluxV2RepositoriesServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetPackageRepositoryPermissionsRequest + var protoReq v1alpha1_1.GetPackageRepositoryPermissionsRequest var metadata runtime.ServerMetadata var ( @@ -1232,7 +1232,7 @@ func request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx con } func local_request_FluxV2RepositoriesService_GetPackageRepositoryPermissions_0(ctx context.Context, marshaler runtime.Marshaler, server FluxV2RepositoriesServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq v1alpha1_0.GetPackageRepositoryPermissionsRequest + var protoReq v1alpha1_1.GetPackageRepositoryPermissionsRequest var metadata runtime.ServerMetadata var ( diff --git a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go index 1578f50da99..3828b3a8a4e 100644 --- a/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go +++ b/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1/fluxv2_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: kubeappsapis/plugins/fluxv2/packages/v1alpha1/fluxv2.proto package v1alpha1 From f5bfe7eb3166c1bd6ab15906cec56918afd3bec2 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Mon, 28 Nov 2022 19:39:24 -0800 Subject: [PATCH 09/12] cleanup unintended changes --- chart/kubeapps/README.md | 3 +- chart/kubeapps/values.yaml | 2 - .../docs/kubeapps-apis.swagger.json | 944 +++++++++++------- 3 files changed, 587 insertions(+), 362 deletions(-) diff --git a/chart/kubeapps/README.md b/chart/kubeapps/README.md index e7ed4e218c8..fcf84a30085 100644 --- a/chart/kubeapps/README.md +++ b/chart/kubeapps/README.md @@ -472,7 +472,6 @@ Once you have installed Kubeapps follow the [Getting Started Guide](https://gith | `kubeappsapis.pluginConfig.kappController.packages.v1alpha1.defaultAllowDowngrades` | Default policy for allowing applications to be downgraded to previous versions | `false` | | `kubeappsapis.pluginConfig.kappController.packages.v1alpha1.globalPackagingNamespace` | Default global packaging namespace | `kapp-controller-packaging-global` | | `kubeappsapis.pluginConfig.flux.packages.v1alpha1.defaultUpgradePolicy` | Default upgrade policy generating version constraints | `none` | -| `kubeappsapis.pluginConfig.flux.packages.v1alpha1.userManagedSecrets` | Default policy for handling repository secrets, either managed by the user or by kubeapps-apis | `false` | | `kubeappsapis.pluginConfig.flux.packages.v1alpha1.noCrossNamespaceRefs` | Enable this flag to disallow cross-namespace references, useful when running Flux on multi-tenant clusters | `false` | | `kubeappsapis.pluginConfig.resources.packages.v1alpha1.trustedNamespaces.headerName` | Optional header name for trusted namespaces | `""` | | `kubeappsapis.pluginConfig.resources.packages.v1alpha1.trustedNamespaces.headerPattern` | Optional header pattern for trusted namespaces | `""` | @@ -1054,4 +1053,4 @@ 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. \ No newline at end of file +limitations under the License. diff --git a/chart/kubeapps/values.yaml b/chart/kubeapps/values.yaml index 7c5ffd2ddda..6ca003bc8a6 100644 --- a/chart/kubeapps/values.yaml +++ b/chart/kubeapps/values.yaml @@ -1537,8 +1537,6 @@ kubeappsapis: ## @param kubeappsapis.pluginConfig.flux.packages.v1alpha1.defaultUpgradePolicy Default upgrade policy generating version constraints ## enum: [ "major", "minor", "patch", "none" ] defaultUpgradePolicy: none - ## @param kubeappsapis.pluginConfig.flux.packages.v1alpha1.userManagedSecrets Default policy for handling repository secrets, either managed by the user or by kubeapps-apis - userManagedSecrets: false ## @param kubeappsapis.pluginConfig.flux.packages.v1alpha1.noCrossNamespaceRefs Enable this flag to disallow cross-namespace references, useful when running Flux on multi-tenant clusters noCrossNamespaceRefs: false resources: diff --git a/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json b/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json index abe2ba7b90c..6ffb04931c6 100644 --- a/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json +++ b/cmd/kubeapps-apis/docs/kubeapps-apis.swagger.json @@ -79,28 +79,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query. Text query for the request", + "description": "Text query\n\nText query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories. Collection of categories for the request", + "description": "Categories\n\nCollection of categories for the request", "in": "query", "required": false, "type": "array", @@ -111,7 +111,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories. Collection of repositories where the packages belong to", + "description": "Repositories\n\nCollection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -122,28 +122,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version. Package version for the request", + "description": "Package version\n\nPackage version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version. Packaged app version for the request", + "description": "App version\n\nPackaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -210,7 +210,8 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "pkgVersion", @@ -280,7 +281,8 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "pkgVersion", @@ -319,28 +321,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -374,6 +376,7 @@ "parameters": [ { "name": "body", + "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -570,7 +573,41 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" + "type": "object", + "properties": { + "installedPackageRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the package.", + "title": "Installed package context" + }, + "plugin": { + "type": "object", + "example": { + "name": "kapp_controller.packages", + "version": "v1alpha1" + }, + "description": "The plugin used to identify and interact with the installed package.\nThis field can be omitted when the request is in the context of a specific plugin.", + "title": "The plugin used to identify and interact with the installed package.\nThis field can be omitted when the request is in the context of a specific plugin." + } + }, + "title": "A reference uniquely identifying the installed package being updated.\nRequired" + }, + "pkgVersionReference": { + "$ref": "#/definitions/v1alpha1VersionReference" + }, + "values": { + "type": "string", + "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." + }, + "reconciliationOptions": { + "$ref": "#/definitions/v1alpha1ReconciliationOptions" + } + }, + "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", + "title": "UpdateInstalledPackageRequest" } } ], @@ -666,14 +703,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -706,6 +743,7 @@ "parameters": [ { "name": "body", + "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -749,7 +787,7 @@ }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -815,7 +853,8 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" } ], "tags": [ @@ -876,7 +915,8 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" } ], "tags": [ @@ -937,14 +977,60 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" + "type": "object", + "properties": { + "packageRepoRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the repository.", + "title": "The context (cluster/namespace) for the repository." + }, + "plugin": { + "type": "object", + "example": { + "name": "kapp_controller.packages", + "version": "v1alpha1" + }, + "description": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a\nspecific plugin.", + "title": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a\nspecific plugin." + } + }, + "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" + }, + "url": { + "type": "string", + "description": "URL identifying the package repository location." + }, + "description": { + "type": "string", + "description": "A user-provided description." + }, + "interval": { + "type": "string", + "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" + }, + "tlsConfig": { + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" + }, + "auth": { + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" + }, + "customDetail": { + "$ref": "#/definitions/protobufAny" + } + }, + "description": "Request for UpdatePackageRepository", + "title": "UpdatePackageRepositoryRequest" } } ], @@ -1005,28 +1091,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query. Text query for the request", + "description": "Text query\n\nText query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories. Collection of categories for the request", + "description": "Categories\n\nCollection of categories for the request", "in": "query", "required": false, "type": "array", @@ -1037,7 +1123,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories. Collection of repositories where the packages belong to", + "description": "Repositories\n\nCollection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -1048,28 +1134,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version. Package version for the request", + "description": "Package version\n\nPackage version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version. Packaged app version for the request", + "description": "App version\n\nPackaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -1123,18 +1209,19 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1194,18 +1281,19 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1248,28 +1336,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -1304,6 +1392,7 @@ "parameters": [ { "name": "body", + "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -1362,14 +1451,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1424,14 +1513,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1489,7 +1578,35 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" + "type": "object", + "properties": { + "installedPackageRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the package.", + "title": "Installed package context" + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "title": "A reference uniquely identifying the installed package being updated.\nRequired" + }, + "pkgVersionReference": { + "$ref": "#/definitions/v1alpha1VersionReference" + }, + "values": { + "type": "string", + "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." + }, + "reconciliationOptions": { + "$ref": "#/definitions/v1alpha1ReconciliationOptions" + } + }, + "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", + "title": "UpdateInstalledPackageRequest" } } ], @@ -1544,14 +1661,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1586,14 +1703,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -1627,6 +1744,7 @@ "parameters": [ { "name": "body", + "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -1670,7 +1788,7 @@ }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -1722,18 +1840,19 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1783,18 +1902,19 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -1844,14 +1964,54 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" + "type": "object", + "properties": { + "packageRepoRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the repository.", + "title": "The context (cluster/namespace) for the repository." + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" + }, + "url": { + "type": "string", + "description": "URL identifying the package repository location." + }, + "description": { + "type": "string", + "description": "A user-provided description." + }, + "interval": { + "type": "string", + "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" + }, + "tlsConfig": { + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" + }, + "auth": { + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" + }, + "customDetail": { + "$ref": "#/definitions/protobufAny" + } + }, + "description": "Request for UpdatePackageRepository", + "title": "UpdatePackageRepositoryRequest" } } ], @@ -1885,28 +2045,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query. Text query for the request", + "description": "Text query\n\nText query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories. Collection of categories for the request", + "description": "Categories\n\nCollection of categories for the request", "in": "query", "required": false, "type": "array", @@ -1917,7 +2077,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories. Collection of repositories where the packages belong to", + "description": "Repositories\n\nCollection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -1928,28 +2088,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version. Package version for the request", + "description": "Package version\n\nPackage version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version. Packaged app version for the request", + "description": "App version\n\nPackaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -2003,18 +2163,19 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2074,18 +2235,19 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2128,28 +2290,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -2184,6 +2346,7 @@ "parameters": [ { "name": "body", + "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -2242,14 +2405,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2304,14 +2467,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2369,7 +2532,35 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" + "type": "object", + "properties": { + "installedPackageRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the package.", + "title": "Installed package context" + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "title": "A reference uniquely identifying the installed package being updated.\nRequired" + }, + "pkgVersionReference": { + "$ref": "#/definitions/v1alpha1VersionReference" + }, + "values": { + "type": "string", + "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." + }, + "reconciliationOptions": { + "$ref": "#/definitions/v1alpha1ReconciliationOptions" + } + }, + "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", + "title": "UpdateInstalledPackageRequest" } } ], @@ -2424,14 +2615,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2491,7 +2682,30 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1RollbackInstalledPackageRequest" + "type": "object", + "properties": { + "installedPackageRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the package.", + "title": "Installed package context" + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "description": "A reference uniquely identifying the installed package.", + "title": "Installed package reference" + }, + "releaseRevision": { + "type": "integer", + "format": "int32", + "description": "A number identifying the Helm revision to which to rollback.", + "title": "ReleaseRevision" + } + } } } ], @@ -2524,14 +2738,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -2565,6 +2779,7 @@ "parameters": [ { "name": "body", + "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -2608,7 +2823,7 @@ }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -2660,18 +2875,19 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2721,18 +2937,19 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -2782,14 +2999,54 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" + "type": "object", + "properties": { + "packageRepoRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the repository.", + "title": "The context (cluster/namespace) for the repository." + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" + }, + "url": { + "type": "string", + "description": "URL identifying the package repository location." + }, + "description": { + "type": "string", + "description": "A user-provided description." + }, + "interval": { + "type": "string", + "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" + }, + "tlsConfig": { + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" + }, + "auth": { + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" + }, + "customDetail": { + "$ref": "#/definitions/protobufAny" + } + }, + "description": "Request for UpdatePackageRepository", + "title": "UpdatePackageRepositoryRequest" } } ], @@ -2823,28 +3080,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.query", - "description": "Text query. Text query for the request", + "description": "Text query\n\nText query for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.categories", - "description": "Categories. Collection of categories for the request", + "description": "Categories\n\nCollection of categories for the request", "in": "query", "required": false, "type": "array", @@ -2855,7 +3112,7 @@ }, { "name": "filterOptions.repositories", - "description": "Repositories. Collection of repositories where the packages belong to", + "description": "Repositories\n\nCollection of repositories where the packages belong to", "in": "query", "required": false, "type": "array", @@ -2866,28 +3123,28 @@ }, { "name": "filterOptions.pkgVersion", - "description": "Package version. Package version for the request", + "description": "Package version\n\nPackage version for the request", "in": "query", "required": false, "type": "string" }, { "name": "filterOptions.appVersion", - "description": "App version. Packaged app version for the request", + "description": "App version\n\nPackaged app version for the request", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -2941,18 +3198,19 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3012,18 +3270,19 @@ "description": "Available package identifier\n\nThe fully qualified identifier for the available package\n(ie. a unique name for the context). For some packaging systems\n(particularly those where an available package is backed by a CR) this\nwill just be the name, but for others such as those where an available\npackage is not backed by a CR (eg. standard helm) it may be necessary\nto include the repository in the name or even the repo namespace\nto ensure this is unique.\nFor example two helm repositories can define\nan \"apache\" chart that is available globally, the names would need to\nencode that to be unique (ie. \"repoA:apache\" and \"repoB:apache\").", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "availablePackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "availablePackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3066,28 +3325,28 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageToken", - "description": "Page token. The client uses this field to request a specific page of the list results.", + "description": "Page token\n\nThe client uses this field to request a specific page of the list results.", "in": "query", "required": false, "type": "string" }, { "name": "paginationOptions.pageSize", - "description": "Page size. Clients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", + "description": "Page size\n\nClients use this field to specify the maximum number of results to be\nreturned by the server. The server may further constrain the maximum number\nof results returned in a single page. If the page_size is 0, the server\nwill decide the number of results to be returned.", "in": "query", "required": false, "type": "integer", @@ -3122,6 +3381,7 @@ "parameters": [ { "name": "body", + "description": "Request for CreateInstalledPackage", "in": "body", "required": true, "schema": { @@ -3180,14 +3440,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3242,14 +3502,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3307,7 +3567,35 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdateInstalledPackageRequest" + "type": "object", + "properties": { + "installedPackageRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the package.", + "title": "Installed package context" + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "title": "A reference uniquely identifying the installed package being updated.\nRequired" + }, + "pkgVersionReference": { + "$ref": "#/definitions/v1alpha1VersionReference" + }, + "values": { + "type": "string", + "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." + }, + "reconciliationOptions": { + "$ref": "#/definitions/v1alpha1ReconciliationOptions" + } + }, + "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", + "title": "UpdateInstalledPackageRequest" } } ], @@ -3362,14 +3650,14 @@ }, { "name": "installedPackageRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "installedPackageRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3404,14 +3692,14 @@ "parameters": [ { "name": "context.cluster", - "description": "Cluster. A cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", + "description": "Cluster\n\nA cluster name can be provided to target a specific cluster if multiple\nclusters are configured, otherwise all clusters will be assumed.", "in": "query", "required": false, "type": "string" }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -3445,6 +3733,7 @@ "parameters": [ { "name": "body", + "description": "Request for AddPackageRepository", "in": "body", "required": true, "schema": { @@ -3488,7 +3777,7 @@ }, { "name": "context.namespace", - "description": "Namespace. A namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", "in": "query", "required": false, "type": "string" @@ -3540,18 +3829,19 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3601,18 +3891,19 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "packageRepoRef.plugin.name", - "description": "Plugin name. The name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", + "description": "Plugin name\n\nThe name of the plugin, such as `fluxv2.packages` or `kapp_controller.packages`.", "in": "query", "required": false, "type": "string" }, { "name": "packageRepoRef.plugin.version", - "description": "Plugin version. The version of the plugin, such as v1alpha1", + "description": "Plugin version\n\nThe version of the plugin, such as v1alpha1", "in": "query", "required": false, "type": "string" @@ -3662,14 +3953,54 @@ "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context).", "in": "path", "required": true, - "type": "string" + "type": "string", + "pattern": ".+" }, { "name": "body", "in": "body", "required": true, "schema": { - "$ref": "#/definitions/v1alpha1UpdatePackageRepositoryRequest" + "type": "object", + "properties": { + "packageRepoRef": { + "type": "object", + "properties": { + "context": { + "type": "object", + "description": "The context (cluster/namespace) for the repository.", + "title": "The context (cluster/namespace) for the repository." + }, + "plugin": { + "$ref": "#/definitions/v1alpha1Plugin" + } + }, + "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" + }, + "url": { + "type": "string", + "description": "URL identifying the package repository location." + }, + "description": { + "type": "string", + "description": "A user-provided description." + }, + "interval": { + "type": "string", + "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" + }, + "tlsConfig": { + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" + }, + "auth": { + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" + }, + "customDetail": { + "$ref": "#/definitions/protobufAny" + } + }, + "description": "Request for UpdatePackageRepository", + "title": "UpdatePackageRepositoryRequest" } } ], @@ -3741,6 +4072,34 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "context.namespace", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "group", + "description": "Group API Group of the Resource. \"*\" means all.\n+optional", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "resource", + "description": "Resource is one of the existing resource types. \"*\" means all.\n+optional", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "verb", + "description": "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.\n+optional", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3776,6 +4135,13 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "context.namespace", + "description": "Namespace\n\nA namespace must be provided if the context of the operation is for a resource\nor resources in a particular namespace.\nFor requests to list items, not including a namespace here implies that the context\nfor the request is everything the requesting user can read, though the result can\nbe filtered by any filtering options of the request. Plugins may choose to return\nUnimplemented for some queries for which we do not yet have a need.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -3902,6 +4268,31 @@ "in": "path", "required": true, "type": "string" + }, + { + "name": "type", + "description": "Type\n\nThe type of the secret. Valid values are defined by the Type enumeration.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "SECRET_TYPE_OPAQUE_UNSPECIFIED", + "SECRET_TYPE_SERVICE_ACCOUNT_TOKEN", + "SECRET_TYPE_DOCKER_CONFIG", + "SECRET_TYPE_DOCKER_CONFIG_JSON", + "SECRET_TYPE_BASIC_AUTH", + "SECRET_TYPE_SSH_AUTH", + "SECRET_TYPE_TLS", + "SECRET_TYPE_BOOTSTRAP_TOKEN" + ], + "default": "SECRET_TYPE_OPAQUE_UNSPECIFIED" + }, + { + "name": "name", + "description": "Name\n\nThe name of the secret.", + "in": "query", + "required": false, + "type": "string" } ], "tags": [ @@ -4019,7 +4410,7 @@ }, { "name": "watch", - "description": "Watch. When true, this will cause the stream to remain open with updated\nresources being sent as events are received from the Kubernetes API\nserver.", + "description": "Watch\n\nWhen true, this will cause the stream to remain open with updated\nresources being sent as events are received from the Kubernetes API\nserver.", "in": "query", "required": false, "type": "boolean" @@ -4049,16 +4440,12 @@ "protobufAny": { "type": "object", "properties": { - "typeUrl": { + "@type": { "type": "string", "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." - }, - "value": { - "type": "string", - "format": "byte", - "description": "Must be a valid serialized protocol buffer of the above specified type." } }, + "additionalProperties": {}, "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\nExample 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\nExample 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" }, "rpcStatus": { @@ -4083,8 +4470,7 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context", - "description": "The target context where the package repository is intended to be\ninstalled." + "$ref": "#/definitions/v1alpha1Context" }, "name": { "type": "string", @@ -4111,20 +4497,16 @@ "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" }, "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig", - "title": "TLS-specific parameters for connecting to a repository. Optional" + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" }, "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth", - "title": "authentication parameters for connecting to a repository. Optional" + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin", - "description": "The plugin used to interact with this package repository.\nThis field should be omitted when the request is in the context of a\nspecific plugin." + "$ref": "#/definitions/v1alpha1Plugin" }, "customDetail": { - "$ref": "#/definitions/protobufAny", - "title": "Custom data added by the plugin\nA plugin can define custom details for data which is not yet, or\nnever will be specified in the core AddPackageRepositoryRequest\nfields. The use of an `Any` field means that each plugin can define\nthe structure of this message as required, while still satisfying the\ncore interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any\nJust for reference, some of the examples that have been chosen not to\nbe part of the core API but rather plugin-specific details are:\n direct-helm:\n - image pull secrets\n - list of oci repositories\n - filter rules\n - sync job pod template" + "$ref": "#/definitions/protobufAny" } }, "description": "Request for AddPackageRepository", @@ -4134,8 +4516,7 @@ "type": "object", "properties": { "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference", - "title": "TODO: add example for API docs\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n example: '{\"package_repo_ref\": {}}'\n};" + "$ref": "#/definitions/v1alpha1PackageRepositoryReference" } }, "description": "Response for AddPackageRepositoryRequest", @@ -4145,9 +4526,7 @@ "type": "object", "properties": { "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference", - "description": "A reference uniquely identifying the package.", - "title": "Available package reference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference" }, "name": { "type": "string", @@ -4155,9 +4534,7 @@ "title": "Available package name" }, "version": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "The version of the package and application.", - "title": "Available version" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "repoUrl": { "type": "string", @@ -4224,9 +4601,7 @@ "title": "Available package categories" }, "customDetail": { - "$ref": "#/definitions/protobufAny", - "description": "A plugin can define custom details for data which is not yet, or never will\nbe specified in the core.packaging.CreateInstalledPackageRequest fields. The use\nof an `Any` field means that each plugin can define the structure of this\nmessage as required, while still satisfying the core interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any", - "title": "Custom data added by the plugin" + "$ref": "#/definitions/protobufAny" } }, "description": "An AvailablePackageDetail provides additional details required when\ninspecting an individual package.", @@ -4236,9 +4611,7 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context", - "description": "The context (cluster/namespace) for the package.", - "title": "Available package context" + "$ref": "#/definitions/v1alpha1Context" }, "identifier": { "type": "string", @@ -4246,9 +4619,7 @@ "title": "Available package identifier" }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin", - "description": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a specific plugin.", - "title": "Plugin for the available package" + "$ref": "#/definitions/v1alpha1Plugin" } }, "description": "An AvailablePackageReference has the minimum information required to uniquely\nidentify an available package. This is re-used on the summary and details of an\navailable package.", @@ -4258,9 +4629,7 @@ "type": "object", "properties": { "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference", - "description": "A reference uniquely identifying the package.", - "title": "Available package reference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference" }, "name": { "type": "string", @@ -4268,9 +4637,7 @@ "title": "Available package name" }, "latestVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "The latest version available for this package. Often expected when viewing\na summary of many available packages.", - "title": "Latest available version" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "iconUrl": { "type": "string", @@ -4342,28 +4709,24 @@ "type": "object", "properties": { "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference", - "description": "A reference uniquely identifying the package available for installation." + "$ref": "#/definitions/v1alpha1AvailablePackageReference" }, "targetContext": { - "$ref": "#/definitions/v1alpha1Context", - "description": "The target context where the package is intended to be installed." + "$ref": "#/definitions/v1alpha1Context" }, "name": { "type": "string", "title": "A user-provided name for the installed package (eg. project-x-db)" }, "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference", - "description": "For helm this will be the exact version in VersionReference.version\nFor other plugins we can extend the VersionReference as needed." + "$ref": "#/definitions/v1alpha1VersionReference" }, "values": { "type": "string", "description": "An optional serialized values string to be included when templating a package\nin the format expected by the plugin. Included when the backend format doesn't\nuse secrets or configmaps for values or supports both. These values are layered\non top of any values refs above, when relevant." }, "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions", - "description": "An optional field for specifying data common to systems that reconcile\nthe package on the cluster." + "$ref": "#/definitions/v1alpha1ReconciliationOptions" } }, "description": "Request for CreateInstalledPackage", @@ -4463,9 +4826,7 @@ "type": "object", "properties": { "availablePackageDetail": { - "$ref": "#/definitions/v1alpha1AvailablePackageDetail", - "description": "The requested AvailablePackageDetail", - "title": "Available package detail" + "$ref": "#/definitions/v1alpha1AvailablePackageDetail" } }, "description": "Response for GetAvailablePackageDetail", @@ -4541,9 +4902,7 @@ "type": "object", "properties": { "installedPackageDetail": { - "$ref": "#/definitions/v1alpha1InstalledPackageDetail", - "description": "The requested InstalledPackageDetail", - "title": "InstalledPackageDetail" + "$ref": "#/definitions/v1alpha1InstalledPackageDetail" } }, "description": "Response for GetInstalledPackageDetail", @@ -4604,8 +4963,7 @@ "type": "object", "properties": { "detail": { - "$ref": "#/definitions/v1alpha1PackageRepositoryDetail", - "title": "package repository detail" + "$ref": "#/definitions/v1alpha1PackageRepositoryDetail" } }, "description": "Response for GetPackageRepositoryDetail", @@ -4640,9 +4998,7 @@ "type": "object", "properties": { "resourceRef": { - "$ref": "#/definitions/v1alpha1ResourceRef", - "description": "The resource reference for this single resource.", - "title": "ResourceRef" + "$ref": "#/definitions/v1alpha1ResourceRef" }, "manifest": { "type": "string", @@ -4685,14 +5041,10 @@ "type": "object", "properties": { "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference", - "description": "A reference uniquely identifying the installed package.", - "title": "InstalledPackageReference" + "$ref": "#/definitions/v1alpha1InstalledPackageReference" }, "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference", - "description": "The package version reference defines a version or constraint limiting\nmatching package versions.", - "title": "PkgVersionReference" + "$ref": "#/definitions/v1alpha1VersionReference" }, "name": { "type": "string", @@ -4700,9 +5052,7 @@ "title": "Installed package name" }, "currentVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "The version of the package which is currently installed.", - "title": "CurrentVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "valuesApplied": { "type": "string", @@ -4710,14 +5060,10 @@ "title": "ValuesApplied" }, "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions", - "description": "An optional field specifying data common to systems that reconcile\nthe package installation on the cluster asynchronously. In particular,\nthis specifies the service account used to perform the reconcilliation.", - "title": "ReconciliationOptions" + "$ref": "#/definitions/v1alpha1ReconciliationOptions" }, "status": { - "$ref": "#/definitions/v1alpha1InstalledPackageStatus", - "description": "The current status of the installed package.", - "title": "Status" + "$ref": "#/definitions/v1alpha1InstalledPackageStatus" }, "postInstallationNotes": { "type": "string", @@ -4725,24 +5071,16 @@ "title": "PostInstallationNotes" }, "availablePackageRef": { - "$ref": "#/definitions/v1alpha1AvailablePackageReference", - "description": "A reference to the available package for this installation.\nUseful to lookup the package display name, icon and other info.", - "title": "Available package reference" + "$ref": "#/definitions/v1alpha1AvailablePackageReference" }, "latestMatchingVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "Only non-empty if an available upgrade matches the specified pkg_version_reference.\nFor example, if the pkg_version_reference is \"\u003e10.3.0 \u003c 10.4.0\" and 10.3.1\nis installed, then:\n * if 10.3.2 is available, latest_matching_version should be 10.3.2, but\n * if 10.4 is available while \u003e10.3.1 is not, this should remain empty.", - "title": "LatestMatchingVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "latestVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "The latest version available for this package, regardless of the pkg_version_reference.", - "title": "LatestVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "customDetail": { - "$ref": "#/definitions/protobufAny", - "description": "A plugin can define custom details for data which is not yet, or never will\nbe specified in the core.packaging.CreateInstalledPackageRequest fields. The use\nof an `Any` field means that each plugin can define the structure of this\nmessage as required, while still satisfying the core interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any", - "title": "Custom data added by the plugin" + "$ref": "#/definitions/protobufAny" } }, "description": "An InstalledPackageDetail includes details about the installed package that are\ntypically useful when presenting a single installed package.", @@ -4752,17 +5090,14 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context", - "description": "The context (cluster/namespace) for the package.", - "title": "Installed package context" + "$ref": "#/definitions/v1alpha1Context" }, "identifier": { "type": "string", "description": "The fully qualified identifier for the installed package\n(ie. a unique name for the context)." }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin", - "description": "The plugin used to identify and interact with the installed package.\nThis field can be omitted when the request is in the context of a specific plugin." + "$ref": "#/definitions/v1alpha1Plugin" } }, "description": "An InstalledPackageReference has the minimum information required to uniquely\nidentify an installed package.", @@ -4777,9 +5112,7 @@ "title": "Ready" }, "reason": { - "$ref": "#/definitions/v1alpha1InstalledPackageStatusStatusReason", - "description": "An enum indicating the reason for the current status.", - "title": "Reason" + "$ref": "#/definitions/v1alpha1InstalledPackageStatusStatusReason" }, "userReason": { "type": "string", @@ -4807,9 +5140,7 @@ "type": "object", "properties": { "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference", - "description": "A reference uniquely identifying the package.", - "title": "InstalledPackageReference" + "$ref": "#/definitions/v1alpha1InstalledPackageReference" }, "name": { "type": "string", @@ -4817,14 +5148,10 @@ "title": "Name" }, "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference", - "description": "The package version reference defines a version or constraint limiting\nmatching package versions.", - "title": "PkgVersionReference" + "$ref": "#/definitions/v1alpha1VersionReference" }, "currentVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "The current version of the package being reconciled, which may be\nin one of these states:\n - has been successfully installed/upgraded or\n - is currently being installed/upgraded or\n - has failed to install/upgrade", - "title": "CurrentVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "iconUrl": { "type": "string", @@ -4842,19 +5169,13 @@ "title": "ShortDescription" }, "latestMatchingVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "Only non-empty if an available upgrade matches the specified pkg_version_reference.\nFor example, if the pkg_version_reference is \"\u003e10.3.0 \u003c 10.4.0\" and 10.3.1\nis installed, then:\n * if 10.3.2 is available, latest_matching_version should be 10.3.2, but\n * if 10.4 is available while \u003e10.3.1 is not, this should remain empty.", - "title": "LatestMatchingVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "latestVersion": { - "$ref": "#/definitions/v1alpha1PackageAppVersion", - "description": "The latest version available for this package, regardless of the pkg_version_reference.", - "title": "LatestVersion" + "$ref": "#/definitions/v1alpha1PackageAppVersion" }, "status": { - "$ref": "#/definitions/v1alpha1InstalledPackageStatus", - "description": "The current status of the installed package.", - "title": "Status" + "$ref": "#/definitions/v1alpha1InstalledPackageStatus" } }, "description": "An InstalledPackageSummary provides a summary of an installed package\nuseful when aggregating many installed packages.", @@ -4936,32 +5257,26 @@ "$ref": "#/definitions/PackageRepositoryAuthPackageRepositoryAuthType" }, "usernamePassword": { - "$ref": "#/definitions/v1alpha1UsernamePassword", - "title": "username and plain text password" + "$ref": "#/definitions/v1alpha1UsernamePassword" }, "tlsCertKey": { - "$ref": "#/definitions/v1alpha1TlsCertKey", - "title": "certificate and key for TLS-based authentication" + "$ref": "#/definitions/v1alpha1TlsCertKey" }, "dockerCreds": { - "$ref": "#/definitions/v1alpha1DockerCredentials", - "title": "docker credentials" + "$ref": "#/definitions/v1alpha1DockerCredentials" }, "header": { "type": "string", "title": "for Bearer Auth token value\nfor Custom Auth, complete value of \"Authorization\" header" }, "secretRef": { - "$ref": "#/definitions/v1alpha1SecretKeyReference", - "title": "a reference to an existing secret" + "$ref": "#/definitions/v1alpha1SecretKeyReference" }, "sshCreds": { - "$ref": "#/definitions/v1alpha1SshCredentials", - "title": "SSH credentials" + "$ref": "#/definitions/v1alpha1SshCredentials" }, "opaqueCreds": { - "$ref": "#/definitions/v1alpha1OpaqueCredentials", - "title": "opaque credentials" + "$ref": "#/definitions/v1alpha1OpaqueCredentials" }, "passCredentials": { "type": "boolean", @@ -4975,8 +5290,7 @@ "type": "object", "properties": { "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference", - "description": "A reference uniquely identifying the package repository." + "$ref": "#/definitions/v1alpha1PackageRepositoryReference" }, "name": { "type": "string", @@ -5003,20 +5317,16 @@ "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"" }, "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig", - "title": "TLS-specific parameters for connecting to a repository.\nIf the cert authority was configured for this repository, then in the context\nof GetPackageRepositoryDetail() operation, the PackageRepositoryTlsConfig will ALWAYS\ncontain an existing SecretKeyReference, rather that cert_authority field" + "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig" }, "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth", - "title": "authentication parameters for connecting to a repository.\nIf Basic Auth or TLS or Docker Creds Auth was configured for this repository,\nthen in the context of GetPackageRepositoryDetail() operation, the\nPackageRepositoryAuth will ALWAYS contain an existing SecretKeyReference,\nrather that string values that may have been used when package repository was created\nfield" + "$ref": "#/definitions/v1alpha1PackageRepositoryAuth" }, "customDetail": { - "$ref": "#/definitions/protobufAny", - "title": "Custom data added by the plugin" + "$ref": "#/definitions/protobufAny" }, "status": { - "$ref": "#/definitions/v1alpha1PackageRepositoryStatus", - "description": "current status of the repository which can include reconciliation\nstatus, where relevant." + "$ref": "#/definitions/v1alpha1PackageRepositoryStatus" } }, "title": "PackageRepositoryDetail" @@ -5025,16 +5335,14 @@ "type": "object", "properties": { "context": { - "$ref": "#/definitions/v1alpha1Context", - "description": "The context (cluster/namespace) for the repository." + "$ref": "#/definitions/v1alpha1Context" }, "identifier": { "type": "string", "description": "The fully qualified identifier for the repository\n(i.e. a unique name for the context)." }, "plugin": { - "$ref": "#/definitions/v1alpha1Plugin", - "description": "The plugin used to interact with this available package.\nThis field should be omitted when the request is in the context of a\nspecific plugin." + "$ref": "#/definitions/v1alpha1Plugin" } }, "description": "A PackageRepositoryReference has the minimum information required to\nuniquely identify a package repository.", @@ -5049,9 +5357,7 @@ "title": "Ready" }, "reason": { - "$ref": "#/definitions/v1alpha1PackageRepositoryStatusStatusReason", - "description": "An enum indicating the reason for the current status.", - "title": "Reason" + "$ref": "#/definitions/v1alpha1PackageRepositoryStatusStatusReason" }, "userReason": { "type": "string", @@ -5078,8 +5384,7 @@ "type": "object", "properties": { "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference", - "description": "A reference uniquely identifying the package repository." + "$ref": "#/definitions/v1alpha1PackageRepositoryReference" }, "name": { "type": "string", @@ -5102,8 +5407,7 @@ "description": "URL identifying the package repository location." }, "status": { - "$ref": "#/definitions/v1alpha1PackageRepositoryStatus", - "description": "current status of the repository which can include reconciliation\nstatus, where relevant." + "$ref": "#/definitions/v1alpha1PackageRepositoryStatus" }, "requiresAuth": { "type": "boolean", @@ -5124,8 +5428,7 @@ "title": "certificate authority. Optional" }, "secretRef": { - "$ref": "#/definitions/v1alpha1SecretKeyReference", - "title": "a reference to an existing secret that contains custom CA" + "$ref": "#/definitions/v1alpha1SecretKeyReference" } }, "title": "PackageRepositoryTlsConfig" @@ -5214,28 +5517,11 @@ "description": "A reference to a Kubernetes resource related to a specific installed package.\nThe context (cluster) for each resource is that of the related\ninstalled package.", "title": "Resource reference" }, - "v1alpha1RollbackInstalledPackageRequest": { - "type": "object", - "properties": { - "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference", - "description": "A reference uniquely identifying the installed package.", - "title": "Installed package reference" - }, - "releaseRevision": { - "type": "integer", - "format": "int32", - "description": "A number identifying the Helm revision to which to rollback.", - "title": "ReleaseRevision" - } - } - }, "v1alpha1RollbackInstalledPackageResponse": { "type": "object", "properties": { "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference", - "title": "TODO: add example for API docs\noption (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {\n example: '{\"installed_package_ref\": {}}'\n};" + "$ref": "#/definitions/v1alpha1InstalledPackageReference" } }, "description": "Response for RollbackInstalledPackage", @@ -5299,29 +5585,6 @@ }, "title": "TlsCertKey" }, - "v1alpha1UpdateInstalledPackageRequest": { - "type": "object", - "properties": { - "installedPackageRef": { - "$ref": "#/definitions/v1alpha1InstalledPackageReference", - "title": "A reference uniquely identifying the installed package being updated.\nRequired" - }, - "pkgVersionReference": { - "$ref": "#/definitions/v1alpha1VersionReference", - "title": "For helm this will be the exact version in VersionReference.version\nFor fluxv2 this could be any semver constraint expression\nFor other plugins we can extend the VersionReference as needed. Optional" - }, - "values": { - "type": "string", - "description": "An optional serialized values string to be included when templating a\npackage in the format expected by the plugin. Included when the backend\nformat doesn't use secrets or configmaps for values or supports both.\nThese values are layered on top of any values refs above, when\nrelevant." - }, - "reconciliationOptions": { - "$ref": "#/definitions/v1alpha1ReconciliationOptions", - "description": "An optional field for specifying data common to systems that reconcile\nthe package on the cluster." - } - }, - "description": "Request for UpdateInstalledPackage. The intent is to reach the desired state specified\nby the fields in the request, while leaving other fields intact. This is a whole\nobject \"Update\" semantics rather than \"Patch\" semantics. The caller will provide the\nvalues for the fields below, which will replace, or be overlaid onto, the\ncorresponding fields in the existing resource. For example, with the\nUpdateInstalledPackageRequest, it is not possible to change just the 'package version\nreference' without also specifying 'values' field. As a side effect, not specifying the\n'values' field in the request means there are no values specified in the desired state.\nSo the meaning of each field value is describing the desired state of the corresponding\nfield in the resource after the update operation has completed the renconciliation.", - "title": "UpdateInstalledPackageRequest" - }, "v1alpha1UpdateInstalledPackageResponse": { "type": "object", "properties": { @@ -5332,41 +5595,6 @@ "description": "Response for UpdateInstalledPackage", "title": "UpdateInstalledPackageResponse" }, - "v1alpha1UpdatePackageRepositoryRequest": { - "type": "object", - "properties": { - "packageRepoRef": { - "$ref": "#/definitions/v1alpha1PackageRepositoryReference", - "title": "A reference uniquely identifying the package repository being updated.\nThe only required field" - }, - "url": { - "type": "string", - "description": "URL identifying the package repository location." - }, - "description": { - "type": "string", - "description": "A user-provided description." - }, - "interval": { - "type": "string", - "title": "The interval at which to check the upstream for updates (in time+unit)\nSome plugins may, addionally, support other formats, for instance,\na cron expression.\ne.g., \"*/10 * * * *\" will be equivalent to \"10m\"\nOptional. Defaults to 10m if not specified" - }, - "tlsConfig": { - "$ref": "#/definitions/v1alpha1PackageRepositoryTlsConfig", - "title": "TLS-specific parameters for connecting to a repository. Optional" - }, - "auth": { - "$ref": "#/definitions/v1alpha1PackageRepositoryAuth", - "title": "authentication parameters for connecting to a repository. Optional" - }, - "customDetail": { - "$ref": "#/definitions/protobufAny", - "title": "Custom data added by the plugin\nA plugin can define custom details for data which is not yet, or\nnever will be specified in the core AddPackageRepositoryRequest\nfields. The use of an `Any` field means that each plugin can define\nthe structure of this message as required, while still satisfying the\ncore interface.\nSee https://developers.google.com/protocol-buffers/docs/proto3#any\nJust for reference, some of the examples that have been chosen not to\nbe part of the core API but rather plugin-specific details are:\n direct-helm:\n - image pull secrets\n - list of oci repositories\n - filter rules\n - sync job pod template" - } - }, - "description": "Request for UpdatePackageRepository", - "title": "UpdatePackageRepositoryRequest" - }, "v1alpha1UpdatePackageRepositoryResponse": { "type": "object", "properties": { From 64d1afc83af032423b4176de43796cd2a2e467dc Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Mon, 28 Nov 2022 20:11:00 -0800 Subject: [PATCH 10/12] dimitri's comments --- .../fluxv2/packages/v1alpha1/repo_auth.go | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go index 90690280c4d..b4c96e408aa 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go @@ -203,8 +203,14 @@ func (s *Server) validateUserManagedRepoSecret( return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'username' and/or 'password'", secretRef) } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: - if secret.Data["keyFile"] == nil || secret.Data["certFile"] == nil { - return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'keyFile' and/or 'certFile'", secretRef) + if repoType == sourcev1.HelmRepositoryTypeOCI { + // ref https://fluxcd.io/flux/components/source/helmrepositories/#tls-authentication + // Note: TLS authentication is not yet supported by OCI Helm repositories. + return nil, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported for OCI repositories", auth.Type) + } else { + if secret.Data["keyFile"] == nil || secret.Data["certFile"] == nil { + return nil, status.Errorf(codes.Internal, "Specified secret [%s] missing fields 'keyFile' and/or 'certFile'", secretRef) + } } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: if repoType == sourcev1.HelmRepositoryTypeOCI { @@ -310,7 +316,7 @@ func (s *Server) getRepoTlsConfigAndAuth(ctx context.Context, repo sourcev1.Helm // this func is only used with kubeapps-managed secrets func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, - typ string, + repoType string, tlsConfig *corev1.PackageRepositoryTlsConfig, auth *corev1.PackageRepositoryAuth) (secret *apiv1.Secret, isSameSecret bool, err error) { if tlsConfig != nil { @@ -349,18 +355,25 @@ func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, return nil, false, status.Errorf(codes.Internal, "Username/Password configuration is missing") } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: - if ck := auth.GetTlsCertKey(); ck != nil { - if ck.Cert == redactedString && ck.Key == redactedString { - isSameSecret = true + if repoType == sourcev1.HelmRepositoryTypeOCI { + // ref https://fluxcd.io/flux/components/source/helmrepositories/#tls-authentication + // Note: TLS authentication is not yet supported by OCI Helm repositories. + return nil, false, status.Errorf(codes.Internal, "Package repository authentication type %q is not supported for OCI repositories", auth.Type) + } else { + if ck := auth.GetTlsCertKey(); ck != nil { + if ck.Cert == redactedString && ck.Key == redactedString { + isSameSecret = true + } else { + secret.Data["certFile"] = []byte(ck.Cert) + secret.Data["keyFile"] = []byte(ck.Key) + } } else { - secret.Data["certFile"] = []byte(ck.Cert) - secret.Data["keyFile"] = []byte(ck.Key) + return nil, false, status.Errorf(codes.Internal, "TLS Cert/Key configuration is missing") } - } else { - return nil, false, status.Errorf(codes.Internal, "TLS Cert/Key configuration is missing") } + case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: - if typ == sourcev1.HelmRepositoryTypeOCI { + if repoType == sourcev1.HelmRepositoryTypeOCI { if dc := auth.GetDockerCreds(); dc != nil { if dc.Username == redactedString && dc.Password == redactedString && dc.Server == redactedString { isSameSecret = true From 88c28888cd2999d80fb229e5b8c8966cd1e0503c Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Mon, 28 Nov 2022 20:21:48 -0800 Subject: [PATCH 11/12] dimitri comments #2 --- .../fluxv2/packages/v1alpha1/repo_auth.go | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go index b4c96e408aa..3811584e4d2 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go @@ -5,7 +5,7 @@ package main import ( "context" - "encoding/base64" + "encoding/json" sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" @@ -17,6 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" log "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/credentialprovider" ) const ( @@ -375,14 +376,24 @@ func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: if repoType == sourcev1.HelmRepositoryTypeOCI { if dc := auth.GetDockerCreds(); dc != nil { - if dc.Username == redactedString && dc.Password == redactedString && dc.Server == redactedString { + if dc.Password == redactedString { isSameSecret = true } else { - secret.Data = map[string][]byte{ - apiv1.DockerConfigJsonKey: []byte(`{"auths":{"` + - dc.Server + `":{"` + - `auth":"` + base64.StdEncoding.EncodeToString([]byte(dc.Username+":"+dc.Password)) + `"}}}`), + secret.Type = apiv1.SecretTypeDockerConfigJson + dockerConfig := &credentialprovider.DockerConfigJSON{ + Auths: map[string]credentialprovider.DockerConfigEntry{ + dc.Server: { + Username: dc.Username, + Password: dc.Password, + Email: dc.Email, + }, + }, } + dockerConfigJson, err := json.Marshal(dockerConfig) + if err != nil { + return nil, false, status.Errorf(codes.InvalidArgument, "Docker credentials are wrong") + } + secret.Data[apiv1.DockerConfigJsonKey] = dockerConfigJson } } else { return nil, false, status.Errorf(codes.Internal, "Docker credentials configuration is missing") @@ -489,6 +500,7 @@ func getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret *apiv1.Secret) (*c Username: redactedString, Password: redactedString, Server: redactedString, + Email: redactedString, }, } } else { From 5da63721b7dba8474f236b9dccc2a04e05e4ce57 Mon Sep 17 00:00:00 2001 From: gfichtenholt Date: Mon, 28 Nov 2022 21:42:04 -0800 Subject: [PATCH 12/12] fix integration tests --- .../plugins/fluxv2/packages/v1alpha1/global_vars_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go index 8c2d752a31c..c1b235400ed 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go @@ -3143,6 +3143,7 @@ var ( Username: redactedString, Password: redactedString, Server: redactedString, + Email: redactedString, }, }, }, @@ -3184,6 +3185,7 @@ var ( Username: redactedString, Password: redactedString, Server: redactedString, + Email: redactedString, }, }, },