Skip to content

Commit 5b98b20

Browse files
authored
feat(secret): add ephemeral policy (#403)
1 parent f2d1d78 commit 5b98b20

File tree

8 files changed

+408
-100
lines changed

8 files changed

+408
-100
lines changed

scaleway-async/scaleway_async/secret/v1alpha1/__init__.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# This file was automatically generated. DO NOT EDIT.
22
# If you have any remark or suggestion do not hesitate to open an issue.
3+
from .types import EphemeralPolicyAction
34
from .types import ListFoldersRequestOrderBy
45
from .types import ListSecretsRequestOrderBy
56
from .types import Product
6-
from .types import SecretEphemeralAction
77
from .types import SecretStatus
88
from .types import SecretType
99
from .types import SecretVersionStatus
1010
from .types import AccessSecretVersionResponse
11+
from .types import EphemeralPolicy
12+
from .types import EphemeralStatus
1113
from .types import Folder
1214
from .types import ListFoldersResponse
1315
from .types import ListSecretVersionsResponse
@@ -19,14 +21,16 @@
1921
from .api import SecretV1Alpha1API
2022

2123
__all__ = [
24+
"EphemeralPolicyAction",
2225
"ListFoldersRequestOrderBy",
2326
"ListSecretsRequestOrderBy",
2427
"Product",
25-
"SecretEphemeralAction",
2628
"SecretStatus",
2729
"SecretType",
2830
"SecretVersionStatus",
2931
"AccessSecretVersionResponse",
32+
"EphemeralPolicy",
33+
"EphemeralStatus",
3034
"Folder",
3135
"ListFoldersResponse",
3236
"ListSecretVersionsResponse",

scaleway-async/scaleway_async/secret/v1alpha1/api.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# This file was automatically generated. DO NOT EDIT.
22
# If you have any remark or suggestion do not hesitate to open an issue.
33

4-
from datetime import datetime
54
from typing import List, Optional
65

76
from scaleway_core.api import API
@@ -16,10 +15,11 @@
1615
ListFoldersRequestOrderBy,
1716
ListSecretsRequestOrderBy,
1817
Product,
19-
SecretEphemeralAction,
2018
SecretType,
2119
SecretVersionStatus,
2220
AccessSecretVersionResponse,
21+
EphemeralPolicy,
22+
EphemeralStatus,
2323
Folder,
2424
ListFoldersResponse,
2525
ListSecretVersionsResponse,
@@ -68,13 +68,12 @@ async def create_secret(
6868
*,
6969
name: str,
7070
type_: SecretType,
71-
ephemeral_action: SecretEphemeralAction,
7271
region: Optional[Region] = None,
7372
project_id: Optional[str] = None,
7473
tags: Optional[List[str]] = None,
7574
description: Optional[str] = None,
7675
path: Optional[str] = None,
77-
expires_at: Optional[datetime] = None,
76+
ephemeral_policy_template: Optional[EphemeralPolicy] = None,
7877
) -> Secret:
7978
"""
8079
Create a secret.
@@ -88,9 +87,8 @@ async def create_secret(
8887
(Optional.) See `Secret.Type` enum for description of values. If not specified, the type is `Opaque`.
8988
:param path: Path of the secret.
9089
(Optional.) Location of the secret in the directory structure. If not specified, the path is `/`.
91-
:param expires_at: Expiration date of the secret.
92-
(Optional.) Date on which the secret will be deleted or deactivated.
93-
:param ephemeral_action: Action to be taken when the secret expires.
90+
:param ephemeral_policy_template: Ephemeral policy of the secret.
91+
(Optional.) Policy that defines whether/when a secret's versions expire. By default, the policy is applied to all the secret's versions.
9492
:return: :class:`Secret <Secret>`
9593
9694
Usage:
@@ -99,7 +97,6 @@ async def create_secret(
9997
result = await api.create_secret(
10098
name="example",
10199
type_=unknown_secret_type,
102-
ephemeral_action=unknown_ephemeral_action,
103100
)
104101
"""
105102

@@ -114,13 +111,12 @@ async def create_secret(
114111
CreateSecretRequest(
115112
name=name,
116113
type_=type_,
117-
ephemeral_action=ephemeral_action,
118114
region=region,
119115
project_id=project_id,
120116
tags=tags,
121117
description=description,
122118
path=path,
123-
expires_at=expires_at,
119+
ephemeral_policy_template=ephemeral_policy_template,
124120
),
125121
self.client,
126122
),
@@ -257,17 +253,20 @@ async def update_secret(
257253
tags: Optional[List[str]] = None,
258254
description: Optional[str] = None,
259255
path: Optional[str] = None,
256+
ephemeral_policy_template: Optional[EphemeralPolicy] = None,
260257
) -> Secret:
261258
"""
262259
Update metadata of a secret.
263-
Edit a secret's metadata such as name, tag(s) and description. The secret to update is specified by the `secret_id` and `region` parameters.
260+
Edit a secret's metadata such as name, tag(s), description and ephemeral policy. The secret to update is specified by the `secret_id` and `region` parameters.
264261
:param region: Region to target. If none is passed will use default region from the config.
265262
:param secret_id: ID of the secret.
266263
:param name: Secret's updated name (optional).
267264
:param tags: Secret's updated list of tags (optional).
268265
:param description: Description of the secret.
269266
:param path: Path of the folder.
270267
(Optional.) Location of the folder in the directory structure. If not specified, the path is `/`.
268+
:param ephemeral_policy_template: Ephemeral policy of the secret.
269+
(Optional.) Policy that defines whether/when a secret's versions expire.
271270
:return: :class:`Secret <Secret>`
272271
273272
Usage:
@@ -292,6 +291,7 @@ async def update_secret(
292291
tags=tags,
293292
description=description,
294293
path=path,
294+
ephemeral_policy_template=ephemeral_policy_template,
295295
),
296296
self.client,
297297
),
@@ -905,6 +905,7 @@ async def update_secret_version(
905905
revision: str,
906906
region: Optional[Region] = None,
907907
description: Optional[str] = None,
908+
ephemeral_status: Optional[EphemeralStatus] = None,
908909
) -> SecretVersion:
909910
"""
910911
Update metadata of a version.
@@ -917,6 +918,8 @@ async def update_secret_version(
917918
- "latest" (the latest revision)
918919
- "latest_enabled" (the latest enabled revision).
919920
:param description: Description of the version.
921+
:param ephemeral_status: Ephemeral status of the version.
922+
(Optional.) Status that defines the version's expiration date, whether it expires after being accessed once, and the action to perform (disable or delete) once the version expires.
920923
:return: :class:`SecretVersion <SecretVersion>`
921924
922925
Usage:
@@ -943,6 +946,7 @@ async def update_secret_version(
943946
revision=revision,
944947
region=region,
945948
description=description,
949+
ephemeral_status=ephemeral_status,
946950
),
947951
self.client,
948952
),

scaleway-async/scaleway_async/secret/v1alpha1/marshalling.py

Lines changed: 102 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
)
1111
from dateutil import parser
1212
from .types import (
13+
EphemeralPolicyAction,
1314
Product,
14-
SecretEphemeralAction,
1515
SecretType,
1616
AccessSecretVersionResponse,
17+
EphemeralPolicy,
18+
EphemeralStatus,
1719
Folder,
1820
ListFoldersResponse,
1921
ListSecretVersionsResponse,
@@ -32,6 +34,46 @@
3234
)
3335

3436

37+
def unmarshal_EphemeralPolicy(data: Any) -> EphemeralPolicy:
38+
if type(data) is not dict:
39+
raise TypeError(
40+
f"Unmarshalling the type 'EphemeralPolicy' failed as data isn't a dictionary."
41+
)
42+
43+
args: Dict[str, Any] = {}
44+
45+
field = data.get("action", None)
46+
args["action"] = field
47+
48+
field = data.get("expires_once_accessed", None)
49+
args["expires_once_accessed"] = field
50+
51+
field = data.get("time_to_live", None)
52+
args["time_to_live"] = field
53+
54+
return EphemeralPolicy(**args)
55+
56+
57+
def unmarshal_EphemeralStatus(data: Any) -> EphemeralStatus:
58+
if type(data) is not dict:
59+
raise TypeError(
60+
f"Unmarshalling the type 'EphemeralStatus' failed as data isn't a dictionary."
61+
)
62+
63+
args: Dict[str, Any] = {}
64+
65+
field = data.get("action", None)
66+
args["action"] = field
67+
68+
field = data.get("expires_at", None)
69+
args["expires_at"] = parser.isoparse(field) if type(field) is str else field
70+
71+
field = data.get("expires_once_accessed", None)
72+
args["expires_once_accessed"] = field
73+
74+
return EphemeralStatus(**args)
75+
76+
3577
def unmarshal_Folder(data: Any) -> Folder:
3678
if type(data) is not dict:
3779
raise TypeError(
@@ -75,11 +117,10 @@ def unmarshal_Secret(data: Any) -> Secret:
75117
field = data.get("description", None)
76118
args["description"] = field
77119

78-
field = data.get("ephemeral_action", None)
79-
args["ephemeral_action"] = field
80-
81-
field = data.get("expires_at", None)
82-
args["expires_at"] = parser.isoparse(field) if type(field) is str else field
120+
field = data.get("ephemeral_policy_template", None)
121+
args["ephemeral_policy_template"] = (
122+
unmarshal_EphemeralPolicy(field) if field is not None else None
123+
)
83124

84125
field = data.get("id", None)
85126
args["id"] = field
@@ -134,6 +175,11 @@ def unmarshal_SecretVersion(data: Any) -> SecretVersion:
134175
field = data.get("description", None)
135176
args["description"] = field
136177

178+
field = data.get("ephemeral_status", None)
179+
args["ephemeral_status"] = (
180+
unmarshal_EphemeralStatus(field) if field is not None else None
181+
)
182+
137183
field = data.get("is_latest", None)
138184
args["is_latest"] = field
139185

@@ -249,6 +295,42 @@ def unmarshal_ListTagsResponse(data: Any) -> ListTagsResponse:
249295
return ListTagsResponse(**args)
250296

251297

298+
def marshal_EphemeralPolicy(
299+
request: EphemeralPolicy,
300+
defaults: ProfileDefaults,
301+
) -> Dict[str, Any]:
302+
output: Dict[str, Any] = {}
303+
304+
if request.action is not None:
305+
output["action"] = EphemeralPolicyAction(request.action)
306+
307+
if request.expires_once_accessed is not None:
308+
output["expires_once_accessed"] = request.expires_once_accessed
309+
310+
if request.time_to_live is not None:
311+
output["time_to_live"] = request.time_to_live
312+
313+
return output
314+
315+
316+
def marshal_EphemeralStatus(
317+
request: EphemeralStatus,
318+
defaults: ProfileDefaults,
319+
) -> Dict[str, Any]:
320+
output: Dict[str, Any] = {}
321+
322+
if request.action is not None:
323+
output["action"] = EphemeralPolicyAction(request.action)
324+
325+
if request.expires_at is not None:
326+
output["expires_at"] = request.expires_at.astimezone().isoformat()
327+
328+
if request.expires_once_accessed is not None:
329+
output["expires_once_accessed"] = request.expires_once_accessed
330+
331+
return output
332+
333+
252334
def marshal_PasswordGenerationParams(
253335
request: PasswordGenerationParams,
254336
defaults: ProfileDefaults,
@@ -315,11 +397,10 @@ def marshal_CreateSecretRequest(
315397
if request.description is not None:
316398
output["description"] = request.description
317399

318-
if request.ephemeral_action is not None:
319-
output["ephemeral_action"] = SecretEphemeralAction(request.ephemeral_action)
320-
321-
if request.expires_at is not None:
322-
output["expires_at"] = request.expires_at.astimezone().isoformat()
400+
if request.ephemeral_policy_template is not None:
401+
output["ephemeral_policy_template"] = marshal_EphemeralPolicy(
402+
request.ephemeral_policy_template, defaults
403+
)
323404

324405
if request.name is not None:
325406
output["name"] = request.name
@@ -413,6 +494,11 @@ def marshal_UpdateSecretRequest(
413494
if request.description is not None:
414495
output["description"] = request.description
415496

497+
if request.ephemeral_policy_template is not None:
498+
output["ephemeral_policy_template"] = marshal_EphemeralPolicy(
499+
request.ephemeral_policy_template, defaults
500+
)
501+
416502
if request.name is not None:
417503
output["name"] = request.name
418504

@@ -434,4 +520,9 @@ def marshal_UpdateSecretVersionRequest(
434520
if request.description is not None:
435521
output["description"] = request.description
436522

523+
if request.ephemeral_status is not None:
524+
output["ephemeral_status"] = marshal_EphemeralStatus(
525+
request.ephemeral_status, defaults
526+
)
527+
437528
return output

0 commit comments

Comments
 (0)