From ff576948815f5a2d5e912e3782ca9f2f485ae254 Mon Sep 17 00:00:00 2001 From: Scaleway Bot Date: Thu, 11 Apr 2024 17:13:50 +0200 Subject: [PATCH] feat(secret_manager): add AccessSecretVersionByPath endpoint (#491) --- .../scaleway_async/secret/v1beta1/__init__.py | 2 + .../scaleway_async/secret/v1beta1/api.py | 50 +++++++++++++++++++ .../scaleway_async/secret/v1beta1/types.py | 31 ++++++++++++ scaleway/scaleway/secret/v1beta1/__init__.py | 2 + scaleway/scaleway/secret/v1beta1/api.py | 50 +++++++++++++++++++ scaleway/scaleway/secret/v1beta1/types.py | 31 ++++++++++++ 6 files changed, 166 insertions(+) diff --git a/scaleway-async/scaleway_async/secret/v1beta1/__init__.py b/scaleway-async/scaleway_async/secret/v1beta1/__init__.py index f11f378f..7cc33c69 100644 --- a/scaleway-async/scaleway_async/secret/v1beta1/__init__.py +++ b/scaleway-async/scaleway_async/secret/v1beta1/__init__.py @@ -14,6 +14,7 @@ from .types import BrowseSecretsResponseItem from .types import SecretVersion from .types import Secret +from .types import AccessSecretVersionByPathRequest from .types import AccessSecretVersionRequest from .types import AccessSecretVersionResponse from .types import AddSecretOwnerRequest @@ -57,6 +58,7 @@ "BrowseSecretsResponseItem", "SecretVersion", "Secret", + "AccessSecretVersionByPathRequest", "AccessSecretVersionRequest", "AccessSecretVersionResponse", "AddSecretOwnerRequest", diff --git a/scaleway-async/scaleway_async/secret/v1beta1/api.py b/scaleway-async/scaleway_async/secret/v1beta1/api.py index 7b8be509..0c74b127 100644 --- a/scaleway-async/scaleway_async/secret/v1beta1/api.py +++ b/scaleway-async/scaleway_async/secret/v1beta1/api.py @@ -832,6 +832,56 @@ async def access_secret_version( self._throw_on_error(res) return unmarshal_AccessSecretVersionResponse(res.json()) + async def access_secret_version_by_path( + self, + *, + secret_path: str, + secret_name: str, + revision: str, + region: Optional[Region] = None, + project_id: Optional[str] = None, + ) -> AccessSecretVersionResponse: + """ + Access a secret's version using the secret's name and path. + Access sensitive data in a secret's version specified by the `region`, `secret_name`, `secret_path` and `revision` parameters. + :param secret_path: Secret's path. + :param secret_name: Secret's name. + :param revision: The first version of the secret is numbered 1, and all subsequent revisions augment by 1. Value can be either: + - an integer (the revision number) + - "latest" (the latest revision) + - "latest_enabled" (the latest enabled revision). + :param region: Region to target. If none is passed will use default region from the config. + :param project_id: ID of the Project to target. + :return: :class:`AccessSecretVersionResponse ` + + Usage: + :: + + result = await api.access_secret_version_by_path( + secret_path="example", + secret_name="example", + revision="example", + ) + """ + + param_region = validate_path_param( + "region", region or self.client.default_region + ) + param_revision = validate_path_param("revision", revision) + + res = self._request( + "GET", + f"/secret-manager/v1beta1/regions/{param_region}/secrets-by-path/versions/{param_revision}/access", + params={ + "project_id": project_id or self.client.default_project_id, + "secret_name": secret_name, + "secret_path": secret_path, + }, + ) + + self._throw_on_error(res) + return unmarshal_AccessSecretVersionResponse(res.json()) + async def enable_secret_version( self, *, diff --git a/scaleway-async/scaleway_async/secret/v1beta1/types.py b/scaleway-async/scaleway_async/secret/v1beta1/types.py index cc769f33..17f547b6 100644 --- a/scaleway-async/scaleway_async/secret/v1beta1/types.py +++ b/scaleway-async/scaleway_async/secret/v1beta1/types.py @@ -280,6 +280,37 @@ class Secret: """ +@dataclass +class AccessSecretVersionByPathRequest: + secret_path: str + """ + Secret's path. + """ + + secret_name: str + """ + Secret's name. + """ + + revision: str + """ + The first version of the secret is numbered 1, and all subsequent revisions augment by 1. Value can be either: +- an integer (the revision number) +- "latest" (the latest revision) +- "latest_enabled" (the latest enabled revision). + """ + + region: Optional[Region] + """ + Region to target. If none is passed will use default region from the config. + """ + + project_id: Optional[str] + """ + ID of the Project to target. + """ + + @dataclass class AccessSecretVersionRequest: secret_id: str diff --git a/scaleway/scaleway/secret/v1beta1/__init__.py b/scaleway/scaleway/secret/v1beta1/__init__.py index f11f378f..7cc33c69 100644 --- a/scaleway/scaleway/secret/v1beta1/__init__.py +++ b/scaleway/scaleway/secret/v1beta1/__init__.py @@ -14,6 +14,7 @@ from .types import BrowseSecretsResponseItem from .types import SecretVersion from .types import Secret +from .types import AccessSecretVersionByPathRequest from .types import AccessSecretVersionRequest from .types import AccessSecretVersionResponse from .types import AddSecretOwnerRequest @@ -57,6 +58,7 @@ "BrowseSecretsResponseItem", "SecretVersion", "Secret", + "AccessSecretVersionByPathRequest", "AccessSecretVersionRequest", "AccessSecretVersionResponse", "AddSecretOwnerRequest", diff --git a/scaleway/scaleway/secret/v1beta1/api.py b/scaleway/scaleway/secret/v1beta1/api.py index c23fac71..d6daf94f 100644 --- a/scaleway/scaleway/secret/v1beta1/api.py +++ b/scaleway/scaleway/secret/v1beta1/api.py @@ -832,6 +832,56 @@ def access_secret_version( self._throw_on_error(res) return unmarshal_AccessSecretVersionResponse(res.json()) + def access_secret_version_by_path( + self, + *, + secret_path: str, + secret_name: str, + revision: str, + region: Optional[Region] = None, + project_id: Optional[str] = None, + ) -> AccessSecretVersionResponse: + """ + Access a secret's version using the secret's name and path. + Access sensitive data in a secret's version specified by the `region`, `secret_name`, `secret_path` and `revision` parameters. + :param secret_path: Secret's path. + :param secret_name: Secret's name. + :param revision: The first version of the secret is numbered 1, and all subsequent revisions augment by 1. Value can be either: + - an integer (the revision number) + - "latest" (the latest revision) + - "latest_enabled" (the latest enabled revision). + :param region: Region to target. If none is passed will use default region from the config. + :param project_id: ID of the Project to target. + :return: :class:`AccessSecretVersionResponse ` + + Usage: + :: + + result = api.access_secret_version_by_path( + secret_path="example", + secret_name="example", + revision="example", + ) + """ + + param_region = validate_path_param( + "region", region or self.client.default_region + ) + param_revision = validate_path_param("revision", revision) + + res = self._request( + "GET", + f"/secret-manager/v1beta1/regions/{param_region}/secrets-by-path/versions/{param_revision}/access", + params={ + "project_id": project_id or self.client.default_project_id, + "secret_name": secret_name, + "secret_path": secret_path, + }, + ) + + self._throw_on_error(res) + return unmarshal_AccessSecretVersionResponse(res.json()) + def enable_secret_version( self, *, diff --git a/scaleway/scaleway/secret/v1beta1/types.py b/scaleway/scaleway/secret/v1beta1/types.py index cc769f33..17f547b6 100644 --- a/scaleway/scaleway/secret/v1beta1/types.py +++ b/scaleway/scaleway/secret/v1beta1/types.py @@ -280,6 +280,37 @@ class Secret: """ +@dataclass +class AccessSecretVersionByPathRequest: + secret_path: str + """ + Secret's path. + """ + + secret_name: str + """ + Secret's name. + """ + + revision: str + """ + The first version of the secret is numbered 1, and all subsequent revisions augment by 1. Value can be either: +- an integer (the revision number) +- "latest" (the latest revision) +- "latest_enabled" (the latest enabled revision). + """ + + region: Optional[Region] + """ + Region to target. If none is passed will use default region from the config. + """ + + project_id: Optional[str] + """ + ID of the Project to target. + """ + + @dataclass class AccessSecretVersionRequest: secret_id: str