Skip to content

Commit 4f80f3b

Browse files
committed
client: support cmk operations
1 parent dcafdf7 commit 4f80f3b

File tree

2 files changed

+171
-0
lines changed

2 files changed

+171
-0
lines changed

aiven/client/cli.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7019,6 +7019,96 @@ def service__opensearch__snapshot__restore(self) -> None:
70197019
)
70207020
self.print_response(response, json=True)
70217021

7022+
@arg.project
7023+
@arg.json
7024+
def project__cmks__accessors(self) -> None:
7025+
"""List project customer managed key accessors"""
7026+
response = self.client.project_cmks_accessors(
7027+
project=self.get_project(),
7028+
)
7029+
if self.args.json:
7030+
self.print_response(response, json=self.args.json)
7031+
else:
7032+
# Using custom formatting here, as accessor fields could change
7033+
print("PROVIDER DETAILS")
7034+
print("======== =======")
7035+
for provider in response["accessors"]:
7036+
details = f"\n{'':8} ".join(f"{k} {v}" for k, v in response["accessors"][provider].items())
7037+
print(f"{provider:8} {details}")
7038+
7039+
@arg.project
7040+
@arg.json
7041+
def project__cmks__list(self) -> None:
7042+
"""List project customer managed keys (CMKs)"""
7043+
response = self.client.project_cmks_list(
7044+
project=self.get_project(),
7045+
)
7046+
if self.args.json:
7047+
self.print_response(response, json=self.args.json)
7048+
else:
7049+
layout = ["id", "status", "cloud", "resource"]
7050+
self.print_response(response["cmks"], json=self.args.json, table_layout=layout)
7051+
7052+
@arg.project
7053+
@arg("--cmk-id", help="CMK Identifier", required=True)
7054+
@arg.json
7055+
def project__cmks__get(self) -> None:
7056+
"""Get details on a customer managed keys (CMKs)"""
7057+
response = self.client.project_cmks_get(
7058+
project=self.get_project(),
7059+
cmk_id=self.args.cmk_id,
7060+
)
7061+
if self.args.json:
7062+
self.print_response(response, json=self.args.json)
7063+
else:
7064+
layout = ["property", "value"]
7065+
fields = [
7066+
{
7067+
"property": k,
7068+
"value": v,
7069+
}
7070+
for k, v in response["cmk"].items()
7071+
]
7072+
self.print_response(fields, json=self.args.json, table_layout=layout)
7073+
7074+
@arg.project
7075+
@arg("--provider", choices=["gcp", "aws", "oci"], required=True)
7076+
@arg("--resource", help="Resource name", required=True)
7077+
@arg.json
7078+
def project__cmks__create(self) -> None:
7079+
"""Define a project customer managed key (CMK)"""
7080+
response = self.client.project_cmks_create(
7081+
project=self.get_project(),
7082+
provider=self.args.provider,
7083+
resource=self.args.resource,
7084+
)
7085+
if self.args.json:
7086+
self.print_response(response, json=self.args.json)
7087+
else:
7088+
layout = ["property", "value"]
7089+
fields = [
7090+
{
7091+
"property": k,
7092+
"value": v,
7093+
}
7094+
for k, v in response["cmk"].items()
7095+
]
7096+
self.print_response(fields, json=self.args.json, table_layout=layout)
7097+
7098+
@arg.project
7099+
@arg("--cmk-id", help="CMK Identifier", required=True)
7100+
@arg.json
7101+
def project__cmks__delete(self) -> None:
7102+
"""Delete a customer managed keys (CMKs)"""
7103+
response = self.client.project_cmks_delete(
7104+
project=self.get_project(),
7105+
cmk_id=self.args.cmk_id,
7106+
)
7107+
if self.args.json:
7108+
self.print_response(response, json=self.args.json)
7109+
else:
7110+
cmk_id = response["cmk"]["id"]
7111+
print(f"Deleted CMK '{cmk_id}'")
70227112

70237113
if __name__ == "__main__":
70247114
AivenCLI().main()

aiven/client/client.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3409,3 +3409,84 @@ def opensearch_snapshot_restore(
34093409
),
34103410
body=body,
34113411
)
3412+
3413+
def project_cmks_accessors(
3414+
self,
3415+
project: str,
3416+
) -> Mapping:
3417+
return self.verify(
3418+
self.get,
3419+
self.build_path(
3420+
"project",
3421+
project,
3422+
"secrets",
3423+
"cmks",
3424+
"accessors",
3425+
),
3426+
)
3427+
3428+
def project_cmks_list(
3429+
self,
3430+
project: str,
3431+
) -> Mapping:
3432+
return self.verify(
3433+
self.get,
3434+
self.build_path(
3435+
"project",
3436+
project,
3437+
"secrets",
3438+
"cmks",
3439+
),
3440+
)
3441+
3442+
def project_cmks_get(
3443+
self,
3444+
project: str,
3445+
cmk_id: str,
3446+
) -> Mapping:
3447+
return self.verify(
3448+
self.get,
3449+
self.build_path(
3450+
"project",
3451+
project,
3452+
"secrets",
3453+
"cmks",
3454+
cmk_id,
3455+
),
3456+
)
3457+
3458+
def project_cmks_create(
3459+
self,
3460+
project: str,
3461+
provider: str,
3462+
resource: str,
3463+
) -> Mapping:
3464+
return self.verify(
3465+
self.post,
3466+
self.build_path(
3467+
"project",
3468+
project,
3469+
"secrets",
3470+
"cmks",
3471+
),
3472+
body={
3473+
"cloud": provider,
3474+
"resource": resource,
3475+
},
3476+
)
3477+
3478+
def project_cmks_delete(
3479+
self,
3480+
project: str,
3481+
cmk_id: str,
3482+
) -> Mapping:
3483+
return self.verify(
3484+
self.delete,
3485+
self.build_path(
3486+
"project",
3487+
project,
3488+
"secrets",
3489+
"cmks",
3490+
cmk_id,
3491+
),
3492+
)

0 commit comments

Comments
 (0)