Skip to content

Commit 94b1193

Browse files
authored
MinioAdmin: allow specifying policies as dict besides file (#1480)
1 parent b700153 commit 94b1193

File tree

1 file changed

+36
-16
lines changed

1 file changed

+36
-16
lines changed

minio/minioadmin.py

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -452,16 +452,25 @@ def group_list(self) -> str:
452452
response = self._url_open("GET", _COMMAND.LIST_GROUPS)
453453
return response.data.decode()
454454

455-
def policy_add(self, policy_name: str, policy_file: str) -> str:
455+
def policy_add(self,
456+
policy_name: str,
457+
policy_file: str | os.PathLike | None = None,
458+
policy: dict | None = None) -> str:
456459
"""Add new policy."""
457-
with open(policy_file, encoding='utf-8') as file:
458-
response = self._url_open(
459-
"PUT",
460-
_COMMAND.ADD_CANNED_POLICY,
461-
query_params={"name": policy_name},
462-
body=file.read().encode(),
463-
)
464-
return response.data.decode()
460+
if not (policy_file is not None) ^ (policy is not None):
461+
raise ValueError("either policy_file or policy must be provided")
462+
if policy_file:
463+
with open(policy_file, encoding='utf-8') as file:
464+
body = file.read().encode()
465+
else:
466+
body = json.dumps(policy).encode()
467+
response = self._url_open(
468+
"PUT",
469+
_COMMAND.ADD_CANNED_POLICY,
470+
query_params={"name": policy_name},
471+
body=body,
472+
)
473+
return response.data.decode()
465474

466475
def policy_remove(self, policy_name: str) -> str:
467476
"""Remove policy."""
@@ -753,7 +762,8 @@ def add_service_account(self,
753762
secret_key: str | None = None,
754763
name: str | None = None,
755764
description: str | None = None,
756-
policy_file: str | None = None,
765+
policy: dict | None = None,
766+
policy_file: str | os.PathLike | None = None,
757767
expiration: str | None = None,
758768
status: str | None = None) -> str:
759769
"""
@@ -763,7 +773,9 @@ def add_service_account(self,
763773
raise ValueError("both access key and secret key must be provided")
764774
if access_key == "" or secret_key == "":
765775
raise ValueError("access key or secret key must not be empty")
766-
data = {
776+
if policy_file is not None and policy is not None:
777+
raise ValueError("either policy_file or policy must be provided")
778+
data: dict[str, Any] = {
767779
"status": "enabled",
768780
"accessKey": access_key,
769781
"secretKey": secret_key,
@@ -775,6 +787,8 @@ def add_service_account(self,
775787
if policy_file:
776788
with open(policy_file, encoding="utf-8") as file:
777789
data["policy"] = json.load(file)
790+
if policy:
791+
data["policy"] = policy
778792
if expiration:
779793
data["expiration"] = expiration
780794
if status:
@@ -797,16 +811,20 @@ def update_service_account(self,
797811
secret_key: str | None = None,
798812
name: str | None = None,
799813
description: str | None = None,
800-
policy_file: str | None = None,
814+
policy_file: str | os.PathLike | None = None,
815+
policy: dict | None = None,
801816
expiration: str | None = None,
802817
status: str | None = None) -> str:
803818
"""Update an existing service account"""
804-
args = [secret_key, name, description, policy_file, expiration, status]
819+
args = [secret_key, name, description,
820+
policy_file, policy, expiration, status]
805821
if not any(arg for arg in args):
806822
raise ValueError("at least one of secret_key, name, description, "
807-
"policy_file, expiration or status must be "
808-
"specified")
809-
data = {}
823+
"policy_file, policy, expiration or status must "
824+
"be specified")
825+
if policy_file is not None and policy is not None:
826+
raise ValueError("either policy_file or policy must be provided")
827+
data: dict[str, Any] = {}
810828
if secret_key:
811829
data["newSecretKey"] = secret_key
812830
if name:
@@ -816,6 +834,8 @@ def update_service_account(self,
816834
if policy_file:
817835
with open(policy_file, encoding="utf-8") as file:
818836
data["newPolicy"] = json.load(file)
837+
if policy:
838+
data["newPolicy"] = policy
819839
if expiration:
820840
data["newExpiration"] = expiration
821841
if status:

0 commit comments

Comments
 (0)