Updated Security Client APIs (#450)

Signed-off-by: saimedhi <saimedhi@amazon.com>
This commit is contained in:
Sai Medhini Reddy Maryada
2023-07-26 18:38:49 -04:00
committed by GitHub
parent 87b402c16e
commit caeaa13250
10 changed files with 311 additions and 120 deletions
+1
View File
@@ -22,6 +22,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Added the ability to run tests matching a pattern to `.ci/run-tests` ([#454](https://github.com/opensearch-project/opensearch-py/pull/454))
### Changed
- Moved security from `plugins` to `clients` ([#442](https://github.com/opensearch-project/opensearch-py/pull/442))
- Updated Security Client APIs ([#450](https://github.com/opensearch-project/opensearch-py/pull/450))
### Deprecated
### Removed
- Removed support for Python 2.7 ([#421](https://github.com/opensearch-project/opensearch-py/pull/421))
+2 -2
View File
@@ -26,7 +26,7 @@ role_content = {
],
}
response = client.security.put_role(role_name, body=role_content)
response = client.security.create_role(role_name, body=role_content)
print(response)
```
@@ -45,7 +45,7 @@ print(response)
user_name = "test-user"
user_content = {"password": "test_password", "opendistro_security_roles": []}
response = client.security.put_role(user_name, body=user_content)
response = client.security.create_user(user_name, body=user_content)
print(response)
```
+74 -44
View File
@@ -24,21 +24,19 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def change_password(
self, current_password, password, params=None, headers=None
):
async def change_password(self, body, params=None, headers=None):
"""
Changes the password for the current user.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PUT",
_make_path("_plugins", "_security", "api", "account"),
params=params,
headers=headers,
body={
"current_password": current_password,
"password": password,
},
body=body,
)
@query_params()
@@ -88,14 +86,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_action_group(self, action_group, body, params=None, headers=None):
async def create_action_group(self, action_group, body, params=None, headers=None):
"""
Creates or replaces the specified action group.
"""
if action_group in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'action-group'."
)
for param in (action_group, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PUT",
@@ -110,10 +107,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of an action group.
"""
if action_group in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'action-group'."
)
for param in (action_group, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PATCH",
@@ -128,6 +124,9 @@ class SecurityClient(NamespacedClient):
"""
Creates, updates, or deletes multiple action groups in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "actiongroups"),
@@ -179,12 +178,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_user(self, username, body, params=None, headers=None):
async def create_user(self, username, body, params=None, headers=None):
"""
Creates or replaces the specified user.
"""
if username in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'username'.")
for param in (username, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PUT",
@@ -199,8 +199,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of an internal user.
"""
if username in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'username'.")
for param in (username, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PATCH",
@@ -215,6 +216,9 @@ class SecurityClient(NamespacedClient):
"""
Creates, updates, or deletes multiple internal users in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "internalusers"),
@@ -266,12 +270,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_role(self, role, body, params=None, headers=None):
async def create_role(self, role, body, params=None, headers=None):
"""
Creates or replaces the specified role.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PUT",
@@ -286,8 +291,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of a role.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PATCH",
@@ -302,6 +308,9 @@ class SecurityClient(NamespacedClient):
"""
Creates, updates, or deletes multiple roles in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "roles"),
@@ -338,7 +347,7 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def delete_role_mappings(self, role, params=None, headers=None):
async def delete_role_mapping(self, role, params=None, headers=None):
"""
Deletes the specified role mapping.
"""
@@ -353,12 +362,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_role_mappings(self, role, body, params=None, headers=None):
async def create_role_mapping(self, role, body, params=None, headers=None):
"""
Creates or replaces the specified role mapping.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PUT",
@@ -373,8 +383,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of a role mapping.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PATCH",
@@ -389,6 +400,9 @@ class SecurityClient(NamespacedClient):
"""
Creates or updates multiple role mappings in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "rolesmapping"),
@@ -440,12 +454,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_tenant(self, tenant, body, params=None, headers=None):
async def create_tenant(self, tenant, body, params=None, headers=None):
"""
Creates or replaces the specified tenant.
"""
if tenant in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'tenant'.")
for param in (tenant, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PUT",
@@ -460,8 +475,9 @@ class SecurityClient(NamespacedClient):
"""
Add, delete, or modify a single tenant.
"""
if tenant in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'tenant'.")
for param in (tenant, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PATCH",
@@ -476,6 +492,9 @@ class SecurityClient(NamespacedClient):
"""
Add, delete, or modify multiple tenants in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "tenants"),
@@ -497,10 +516,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_configuration(self, body, params=None, headers=None):
async def update_configuration(self, body, params=None, headers=None):
"""
Retrieves the current Security plugin configuration in JSON format.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PUT",
_make_path("_plugins", "_security", "api", "securityconfig", "config"),
@@ -514,6 +536,9 @@ class SecurityClient(NamespacedClient):
"""
Updates the existing configuration using the REST API.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "securityconfig"),
@@ -537,16 +562,15 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_distinguished_names(
async def update_distinguished_names(
self, cluster_name, body, params=None, headers=None
):
"""
Adds or updates the specified distinguished names in the cluster's or node's allow list.
"""
if cluster_name in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'cluster-name'."
)
for param in (cluster_name, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return await self.transport.perform_request(
"PUT",
@@ -648,10 +672,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
async def put_audit_configuration(self, body, params=None, headers=None):
async def update_audit_config(self, body, params=None, headers=None):
"""
A PUT call updates the audit configuration.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PUT",
_make_path("_opendistro", "_security", "api", "audit", "config"),
@@ -665,6 +692,9 @@ class SecurityClient(NamespacedClient):
"""
A PATCH call is used to update specified fields in the audit configuration.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return await self.transport.perform_request(
"PATCH",
_make_path("_opendistro", "_security", "api", "audit"),
+10 -11
View File
@@ -16,8 +16,7 @@ class SecurityClient(NamespacedClient):
) -> Any: ...
async def change_password(
self,
current_password: Any,
current_papasswordssword: Any,
body: Any,
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Any: ...
@@ -36,7 +35,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Any: ...
async def put_action_group(
async def create_action_group(
self,
action_group: Any,
body: Any,
@@ -68,7 +67,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Any: ...
async def put_user(
async def create_user(
self,
username: Any,
body: Any,
@@ -94,7 +93,7 @@ class SecurityClient(NamespacedClient):
async def delete_role(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def put_role(
async def create_role(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def patch_role(
@@ -109,10 +108,10 @@ class SecurityClient(NamespacedClient):
async def get_role_mappings(
self, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def delete_role_mappings(
async def delete_role_mapping(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def put_role_mappings(
async def create_role_mapping(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def patch_role_mapping(
@@ -136,7 +135,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Any: ...
async def put_tenant(
async def create_tenant(
self,
tenant: Any,
body: Any,
@@ -156,7 +155,7 @@ class SecurityClient(NamespacedClient):
async def get_configuration(
self, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def put_configuration(
async def update_configuration(
self, body: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def patch_configuration(
@@ -168,7 +167,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Any: ...
async def put_distinguished_names(
async def update_distinguished_names(
self,
cluster_name: Any,
body: Any,
@@ -199,7 +198,7 @@ class SecurityClient(NamespacedClient):
async def get_audit_configuration(
self, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def put_audit_configuration(
async def update_audit_config(
self, body: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Any: ...
async def patch_audit_configuration(
+74 -42
View File
@@ -24,19 +24,19 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def change_password(self, current_password, password, params=None, headers=None):
def change_password(self, body, params=None, headers=None):
"""
Changes the password for the current user.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PUT",
_make_path("_plugins", "_security", "api", "account"),
params=params,
headers=headers,
body={
"current_password": current_password,
"password": password,
},
body=body,
)
@query_params()
@@ -86,14 +86,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_action_group(self, action_group, body, params=None, headers=None):
def create_action_group(self, action_group, body, params=None, headers=None):
"""
Creates or replaces the specified action group.
"""
if action_group in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'action-group'."
)
for param in (action_group, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
@@ -108,10 +107,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of an action group.
"""
if action_group in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'action-group'."
)
for param in (action_group, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PATCH",
@@ -126,6 +124,9 @@ class SecurityClient(NamespacedClient):
"""
Creates, updates, or deletes multiple action groups in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "actiongroups"),
@@ -177,12 +178,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_user(self, username, body, params=None, headers=None):
def create_user(self, username, body, params=None, headers=None):
"""
Creates or replaces the specified user.
"""
if username in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'username'.")
for param in (username, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
@@ -197,8 +199,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of an internal user.
"""
if username in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'username'.")
for param in (username, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PATCH",
@@ -213,6 +216,9 @@ class SecurityClient(NamespacedClient):
"""
Creates, updates, or deletes multiple internal users in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "internalusers"),
@@ -264,12 +270,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_role(self, role, body, params=None, headers=None):
def create_role(self, role, body, params=None, headers=None):
"""
Creates or replaces the specified role.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
@@ -284,8 +291,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of a role.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PATCH",
@@ -300,6 +308,9 @@ class SecurityClient(NamespacedClient):
"""
Creates, updates, or deletes multiple roles in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "roles"),
@@ -336,7 +347,7 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def delete_role_mappings(self, role, params=None, headers=None):
def delete_role_mapping(self, role, params=None, headers=None):
"""
Deletes the specified role mapping.
"""
@@ -351,12 +362,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_role_mappings(self, role, body, params=None, headers=None):
def create_role_mapping(self, role, body, params=None, headers=None):
"""
Creates or replaces the specified role mapping.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
@@ -371,8 +383,9 @@ class SecurityClient(NamespacedClient):
"""
Updates individual attributes of a role mapping.
"""
if role in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'role'.")
for param in (role, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PATCH",
@@ -387,6 +400,9 @@ class SecurityClient(NamespacedClient):
"""
Creates or updates multiple role mappings in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "rolesmapping"),
@@ -438,12 +454,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_tenant(self, tenant, body, params=None, headers=None):
def create_tenant(self, tenant, body, params=None, headers=None):
"""
Creates or replaces the specified tenant.
"""
if tenant in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'tenant'.")
for param in (tenant, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
@@ -458,8 +475,9 @@ class SecurityClient(NamespacedClient):
"""
Add, delete, or modify a single tenant.
"""
if tenant in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'tenant'.")
for param in (tenant, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PATCH",
@@ -474,6 +492,9 @@ class SecurityClient(NamespacedClient):
"""
Add, delete, or modify multiple tenants in a single call.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "tenants"),
@@ -495,10 +516,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_configuration(self, body, params=None, headers=None):
def update_configuration(self, body, params=None, headers=None):
"""
Retrieves the current Security plugin configuration in JSON format.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PUT",
_make_path("_plugins", "_security", "api", "securityconfig", "config"),
@@ -512,6 +536,9 @@ class SecurityClient(NamespacedClient):
"""
Updates the existing configuration using the REST API.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_plugins", "_security", "api", "securityconfig"),
@@ -533,14 +560,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_distinguished_names(self, cluster_name, body, params=None, headers=None):
def update_distinguished_names(self, cluster_name, body, params=None, headers=None):
"""
Adds or updates the specified distinguished names in the cluster's or node's allow list.
"""
if cluster_name in SKIP_IN_PATH:
raise ValueError(
"Empty value passed for a required argument 'cluster-name'."
)
for param in (cluster_name, body):
if param in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument.")
return self.transport.perform_request(
"PUT",
@@ -642,10 +668,13 @@ class SecurityClient(NamespacedClient):
)
@query_params()
def put_audit_configuration(self, body, params=None, headers=None):
def update_audit_config(self, body, params=None, headers=None):
"""
A PUT call updates the audit configuration.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PUT",
_make_path("_opendistro", "_security", "api", "audit", "config"),
@@ -659,6 +688,9 @@ class SecurityClient(NamespacedClient):
"""
A PATCH call is used to update specified fields in the audit configuration.
"""
if body in SKIP_IN_PATH:
raise ValueError("Empty value passed for a required argument 'body'.")
return self.transport.perform_request(
"PATCH",
_make_path("_opendistro", "_security", "api", "audit"),
+10 -11
View File
@@ -16,8 +16,7 @@ class SecurityClient(NamespacedClient):
) -> Union[bool, Any]: ...
def change_password(
self,
current_password: Any,
current_papasswordssword: Any,
body: Any,
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Union[bool, Any]: ...
@@ -36,7 +35,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Union[bool, Any]: ...
def put_action_group(
def create_action_group(
self,
action_group: Any,
body: Any,
@@ -68,7 +67,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Union[bool, Any]: ...
def put_user(
def create_user(
self,
username: Any,
body: Any,
@@ -94,7 +93,7 @@ class SecurityClient(NamespacedClient):
def delete_role(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def put_role(
def create_role(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def patch_role(
@@ -109,10 +108,10 @@ class SecurityClient(NamespacedClient):
def get_role_mappings(
self, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def delete_role_mappings(
def delete_role_mapping(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def put_role_mappings(
def create_role_mapping(
self, role: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def patch_role_mapping(
@@ -136,7 +135,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Union[bool, Any]: ...
def put_tenant(
def create_tenant(
self,
tenant: Any,
body: Any,
@@ -156,7 +155,7 @@ class SecurityClient(NamespacedClient):
def get_configuration(
self, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def put_configuration(
def update_configuration(
self, body: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def patch_configuration(
@@ -168,7 +167,7 @@ class SecurityClient(NamespacedClient):
params: Union[Any, None] = ...,
headers: Union[Any, None] = ...,
) -> Union[bool, Any]: ...
def put_distinguished_names(
def update_distinguished_names(
self,
cluster_name: Any,
body: Any,
@@ -199,7 +198,7 @@ class SecurityClient(NamespacedClient):
def get_audit_configuration(
self, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def put_audit_configuration(
def update_audit_config(
self, body: Any, params: Union[Any, None] = ..., headers: Union[Any, None] = ...
) -> Union[bool, Any]: ...
def patch_audit_configuration(
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env python
# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
# A basic OpenSearch sample that create and manage roles.
from opensearchpy import OpenSearch
# connect to OpenSearch
host = 'localhost'
port = 9200
auth = ('admin', 'admin') # For testing only. Don't store credentials in code.
client = OpenSearch(
hosts = [{'host': host, 'port': port}],
http_auth = auth,
use_ssl = True,
verify_certs = False,
ssl_show_warn = False
)
# Create a Role
role_name = "test-role"
role_content = {
"cluster_permissions": ["cluster_monitor"],
"index_permissions": [
{
"index_patterns": ["index", "test-*"],
"allowed_actions": [
"data_access",
"indices_monitor",
],
}
],
}
response = client.security.create_role(role_name, body=role_content)
print(response)
# Get a Role
role_name = "test-role"
response = client.security.get_role(role_name)
print(response)
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env python
# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
# A basic OpenSearch sample that create and manage users.
from opensearchpy import OpenSearch
# connect to OpenSearch
host = 'localhost'
port = 9200
auth = ('admin', 'admin') # For testing only. Don't store credentials in code.
client = OpenSearch(
hosts = [{'host': host, 'port': port}],
http_auth = auth,
use_ssl = True,
verify_certs = False,
ssl_show_warn = False
)
# Create a User
user_name = "test-user"
user_content = {"password": "opensearch@123", "opendistro_security_roles": []}
response = client.security.create_user(user_name, body=user_content)
print(response)
# Get a User
user_name = "test-user"
response = client.security.get_user(user_name)
print(response)
@@ -52,13 +52,21 @@ class TestSecurityPlugin(IsolatedAsyncioTestCase):
async def test_create_role(self):
# Test to create role
response = await self.client.security.put_role(
response = await self.client.security.create_role(
self.ROLE_NAME, body=self.ROLE_CONTENT
)
self.assertNotIn("errors", response)
self.assertIn(response.get("status"), ["CREATED", "OK"])
async def test_create_role_with_body_param_empty(self):
try:
await self.client.security.create_role(self.ROLE_NAME, body="")
except ValueError as error:
assert str(error) == "Empty value passed for a required argument."
else:
assert False
async def test_get_role(self):
# Create a role
await self.test_create_role()
@@ -77,7 +85,7 @@ class TestSecurityPlugin(IsolatedAsyncioTestCase):
role_content["cluster_permissions"] = ["cluster_all"]
# Test to update role
response = await self.client.security.put_role(
response = await self.client.security.create_role(
self.ROLE_NAME, body=role_content
)
@@ -99,18 +107,26 @@ class TestSecurityPlugin(IsolatedAsyncioTestCase):
async def test_create_user(self):
# Test to create user
response = await self.client.security.put_user(
response = await self.client.security.create_user(
self.USER_NAME, body=self.USER_CONTENT
)
self.assertNotIn("errors", response)
self.assertIn(response.get("status"), ["CREATED", "OK"])
async def test_create_user_with_body_param_empty(self):
try:
await self.client.security.create_user(self.USER_NAME, body="")
except ValueError as error:
assert str(error) == "Empty value passed for a required argument."
else:
assert False
async def test_create_user_with_role(self):
await self.test_create_role()
# Test to create user
response = await self.client.security.put_user(
response = await self.client.security.create_user(
self.USER_NAME,
body={
"password": "opensearchpy@123",
@@ -139,7 +155,7 @@ class TestSecurityPlugin(IsolatedAsyncioTestCase):
user_content["password"] = "123@opensearchpy"
# Test to update user
response = await self.client.security.put_user(
response = await self.client.security.create_user(
self.USER_NAME, body=user_content
)
@@ -46,11 +46,21 @@ class TestSecurityPlugin(TestCase):
def test_create_role(self):
# Test to create role
response = self.client.security.put_role(self.ROLE_NAME, body=self.ROLE_CONTENT)
response = self.client.security.create_role(
self.ROLE_NAME, body=self.ROLE_CONTENT
)
self.assertNotIn("errors", response)
self.assertIn(response.get("status"), ["CREATED", "OK"])
def test_create_role_with_body_param_empty(self):
try:
self.client.security.create_role(self.ROLE_NAME, body="")
except ValueError as error:
assert str(error) == "Empty value passed for a required argument."
else:
assert False
def test_get_role(self):
# Create a role
self.test_create_role()
@@ -69,7 +79,7 @@ class TestSecurityPlugin(TestCase):
role_content["cluster_permissions"] = ["cluster_all"]
# Test to update role
response = self.client.security.put_role(self.ROLE_NAME, body=role_content)
response = self.client.security.create_role(self.ROLE_NAME, body=role_content)
self.assertNotIn("errors", response)
self.assertEqual("OK", response.get("status"))
@@ -89,16 +99,26 @@ class TestSecurityPlugin(TestCase):
def test_create_user(self):
# Test to create user
response = self.client.security.put_user(self.USER_NAME, body=self.USER_CONTENT)
response = self.client.security.create_user(
self.USER_NAME, body=self.USER_CONTENT
)
self.assertNotIn("errors", response)
self.assertIn(response.get("status"), ["CREATED", "OK"])
def test_create_user_with_body_param_empty(self):
try:
self.client.security.create_user(self.USER_NAME, body="")
except ValueError as error:
assert str(error) == "Empty value passed for a required argument."
else:
assert False
def test_create_user_with_role(self):
self.test_create_role()
# Test to create user
response = self.client.security.put_user(
response = self.client.security.create_user(
self.USER_NAME,
body={
"password": "opensearchpy@123",
@@ -127,7 +147,7 @@ class TestSecurityPlugin(TestCase):
user_content["password"] = "123@opensearchpy"
# Test to update user
response = self.client.security.put_user(self.USER_NAME, body=user_content)
response = self.client.security.create_user(self.USER_NAME, body=user_content)
self.assertNotIn("errors", response)
self.assertEqual("OK", response.get("status"))