strongdm 13.11.0__zip → 14.0.0__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {strongdm-13.11.0 → strongdm-14.0.0}/PKG-INFO +2 -2
- {strongdm-13.11.0 → strongdm-14.0.0}/setup.py +2 -2
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_pb2.py +12 -8
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_pb2.py +6 -6
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +4 -4
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_pb2.py +30 -23
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_pb2_grpc.py +4 -4
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_pb2.py +4 -4
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/client.py +15 -1
- strongdm-14.0.0/strongdm/managed_secrets_pb2.py +460 -0
- strongdm-14.0.0/strongdm/managed_secrets_pb2_grpc.py +398 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/models.py +2650 -423
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/plumbing.py +4486 -2790
- strongdm-14.0.0/strongdm/secret_engine_policy_pb2.py +78 -0
- strongdm-14.0.0/strongdm/secret_engine_types_pb2.py +147 -0
- strongdm-14.0.0/strongdm/secret_engines_pb2.py +325 -0
- strongdm-14.0.0/strongdm/secret_engines_pb2_grpc.py +355 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/svc.py +698 -12
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/PKG-INFO +2 -2
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/SOURCES.txt +6 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/LICENSE +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/README.md +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/setup.cfg +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/__init__.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_request_events_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_permissions_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/activities_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/activities_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/constants.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/control_panel_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/control_panel_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/drivers_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/drivers_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/errors.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/health_checks_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/health_checks_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/options_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/options_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/organization_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/organization_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_nodes_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_peers_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_resources_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_groups_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/queries_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/queries_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/replays_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/replays_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_healths_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_types_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/spec_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/spec_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/tags_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/tags_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_history_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_pb2.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_pb2_grpc.py +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/dependency_links.txt +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/requires.txt +0 -0
- {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/top_level.txt +0 -0
@@ -76,6 +76,8 @@ from .identity_sets_pb2 import *
|
|
76
76
|
from .identity_sets_pb2_grpc import *
|
77
77
|
from .identity_sets_history_pb2 import *
|
78
78
|
from .identity_sets_history_pb2_grpc import *
|
79
|
+
from .managed_secrets_pb2 import *
|
80
|
+
from .managed_secrets_pb2_grpc import *
|
79
81
|
from .nodes_pb2 import *
|
80
82
|
from .nodes_pb2_grpc import *
|
81
83
|
from .nodes_history_pb2 import *
|
@@ -120,10 +122,16 @@ from .roles_pb2 import *
|
|
120
122
|
from .roles_pb2_grpc import *
|
121
123
|
from .roles_history_pb2 import *
|
122
124
|
from .roles_history_pb2_grpc import *
|
125
|
+
from .secret_engine_policy_pb2 import *
|
126
|
+
from .secret_engine_policy_pb2_grpc import *
|
127
|
+
from .secret_engine_types_pb2 import *
|
128
|
+
from .secret_engine_types_pb2_grpc import *
|
123
129
|
from .secret_store_types_pb2 import *
|
124
130
|
from .secret_store_types_pb2_grpc import *
|
125
131
|
from .secret_stores_pb2 import *
|
126
132
|
from .secret_stores_pb2_grpc import *
|
133
|
+
from .secret_engines_pb2 import *
|
134
|
+
from .secret_engines_pb2_grpc import *
|
127
135
|
from .secret_store_healths_pb2 import *
|
128
136
|
from .secret_store_healths_pb2_grpc import *
|
129
137
|
from .secret_stores_history_pb2 import *
|
@@ -1289,7 +1297,7 @@ class ApprovalWorkflowApprovers:
|
|
1289
1297
|
|
1290
1298
|
def create(self, approval_workflow_approver, timeout=None):
|
1291
1299
|
'''
|
1292
|
-
Create creates a new approval workflow approver.
|
1300
|
+
Deprecated: Create creates a new approval workflow approver.
|
1293
1301
|
'''
|
1294
1302
|
req = ApprovalWorkflowApproverCreateRequest()
|
1295
1303
|
|
@@ -1323,7 +1331,7 @@ class ApprovalWorkflowApprovers:
|
|
1323
1331
|
|
1324
1332
|
def get(self, id, timeout=None):
|
1325
1333
|
'''
|
1326
|
-
Get reads one approval workflow approver by ID.
|
1334
|
+
Deprecated: Get reads one approval workflow approver by ID.
|
1327
1335
|
'''
|
1328
1336
|
req = ApprovalWorkflowApproverGetRequest()
|
1329
1337
|
if self.parent.snapshot_datetime is not None:
|
@@ -1359,7 +1367,7 @@ class ApprovalWorkflowApprovers:
|
|
1359
1367
|
|
1360
1368
|
def delete(self, id, timeout=None):
|
1361
1369
|
'''
|
1362
|
-
Delete deletes an existing approval workflow approver.
|
1370
|
+
Deprecated: Delete deletes an existing approval workflow approver.
|
1363
1371
|
'''
|
1364
1372
|
req = ApprovalWorkflowApproverDeleteRequest()
|
1365
1373
|
|
@@ -1389,7 +1397,7 @@ class ApprovalWorkflowApprovers:
|
|
1389
1397
|
|
1390
1398
|
def list(self, filter, *args, timeout=None):
|
1391
1399
|
'''
|
1392
|
-
Lists existing approval workflow approvers.
|
1400
|
+
Deprecated: Lists existing approval workflow approvers.
|
1393
1401
|
'''
|
1394
1402
|
req = ApprovalWorkflowApproverListRequest()
|
1395
1403
|
req.meta.CopyFrom(ListRequestMetadata())
|
@@ -1436,13 +1444,13 @@ class SnapshotApprovalWorkflowApprovers:
|
|
1436
1444
|
|
1437
1445
|
def get(self, id, timeout=None):
|
1438
1446
|
'''
|
1439
|
-
Get reads one approval workflow approver by ID.
|
1447
|
+
Deprecated: Get reads one approval workflow approver by ID.
|
1440
1448
|
'''
|
1441
1449
|
return self.approval_workflow_approvers.get(id, timeout=timeout)
|
1442
1450
|
|
1443
1451
|
def list(self, filter, *args, timeout=None):
|
1444
1452
|
'''
|
1445
|
-
Lists existing approval workflow approvers.
|
1453
|
+
Deprecated: Lists existing approval workflow approvers.
|
1446
1454
|
'''
|
1447
1455
|
return self.approval_workflow_approvers.list(filter,
|
1448
1456
|
*args,
|
@@ -1508,7 +1516,7 @@ class ApprovalWorkflowSteps:
|
|
1508
1516
|
|
1509
1517
|
def create(self, approval_workflow_step, timeout=None):
|
1510
1518
|
'''
|
1511
|
-
Create creates a new approval workflow step.
|
1519
|
+
Deprecated: Create creates a new approval workflow step.
|
1512
1520
|
'''
|
1513
1521
|
req = ApprovalWorkflowStepCreateRequest()
|
1514
1522
|
|
@@ -1542,7 +1550,7 @@ class ApprovalWorkflowSteps:
|
|
1542
1550
|
|
1543
1551
|
def get(self, id, timeout=None):
|
1544
1552
|
'''
|
1545
|
-
Get reads one approval workflow step by ID.
|
1553
|
+
Deprecated: Get reads one approval workflow step by ID.
|
1546
1554
|
'''
|
1547
1555
|
req = ApprovalWorkflowStepGetRequest()
|
1548
1556
|
if self.parent.snapshot_datetime is not None:
|
@@ -1578,7 +1586,7 @@ class ApprovalWorkflowSteps:
|
|
1578
1586
|
|
1579
1587
|
def delete(self, id, timeout=None):
|
1580
1588
|
'''
|
1581
|
-
Delete deletes an existing approval workflow step.
|
1589
|
+
Deprecated: Delete deletes an existing approval workflow step.
|
1582
1590
|
'''
|
1583
1591
|
req = ApprovalWorkflowStepDeleteRequest()
|
1584
1592
|
|
@@ -1608,7 +1616,7 @@ class ApprovalWorkflowSteps:
|
|
1608
1616
|
|
1609
1617
|
def list(self, filter, *args, timeout=None):
|
1610
1618
|
'''
|
1611
|
-
Lists existing approval workflow steps.
|
1619
|
+
Deprecated: Lists existing approval workflow steps.
|
1612
1620
|
'''
|
1613
1621
|
req = ApprovalWorkflowStepListRequest()
|
1614
1622
|
req.meta.CopyFrom(ListRequestMetadata())
|
@@ -1655,13 +1663,13 @@ class SnapshotApprovalWorkflowSteps:
|
|
1655
1663
|
|
1656
1664
|
def get(self, id, timeout=None):
|
1657
1665
|
'''
|
1658
|
-
Get reads one approval workflow step by ID.
|
1666
|
+
Deprecated: Get reads one approval workflow step by ID.
|
1659
1667
|
'''
|
1660
1668
|
return self.approval_workflow_steps.get(id, timeout=timeout)
|
1661
1669
|
|
1662
1670
|
def list(self, filter, *args, timeout=None):
|
1663
1671
|
'''
|
1664
|
-
Lists existing approval workflow steps.
|
1672
|
+
Deprecated: Lists existing approval workflow steps.
|
1665
1673
|
'''
|
1666
1674
|
return self.approval_workflow_steps.list(filter,
|
1667
1675
|
*args,
|
@@ -2629,6 +2637,367 @@ class IdentitySetsHistory:
|
|
2629
2637
|
return generator(self, req)
|
2630
2638
|
|
2631
2639
|
|
2640
|
+
class ManagedSecrets:
|
2641
|
+
'''
|
2642
|
+
ManagedSecret is a private vertical for creating, reading, updating,
|
2643
|
+
deleting, listing and rotating the managed secrets in the secrets engines as
|
2644
|
+
an authenticated user.
|
2645
|
+
See `strongdm.models.ManagedSecret`.
|
2646
|
+
'''
|
2647
|
+
def __init__(self, channel, client):
|
2648
|
+
self.parent = client
|
2649
|
+
self.stub = ManagedSecretsStub(channel)
|
2650
|
+
|
2651
|
+
def list(self, filter, *args, timeout=None):
|
2652
|
+
'''
|
2653
|
+
List returns Managed Secrets from a Secret Engine.
|
2654
|
+
'''
|
2655
|
+
req = ManagedSecretListRequest()
|
2656
|
+
req.meta.CopyFrom(ListRequestMetadata())
|
2657
|
+
if self.parent.page_limit > 0:
|
2658
|
+
req.meta.limit = self.parent.page_limit
|
2659
|
+
if self.parent.snapshot_datetime is not None:
|
2660
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
2661
|
+
|
2662
|
+
req.filter = plumbing.quote_filter_args(filter, *args)
|
2663
|
+
|
2664
|
+
def generator(svc, req):
|
2665
|
+
tries = 0
|
2666
|
+
while True:
|
2667
|
+
try:
|
2668
|
+
plumbing_response = svc.stub.List(
|
2669
|
+
req,
|
2670
|
+
metadata=svc.parent.get_metadata(
|
2671
|
+
'ManagedSecrets.List', req),
|
2672
|
+
timeout=timeout)
|
2673
|
+
except Exception as e:
|
2674
|
+
if self.parent.shouldRetry(tries, e):
|
2675
|
+
tries += 1
|
2676
|
+
self.parent.jitterSleep(tries)
|
2677
|
+
continue
|
2678
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2679
|
+
tries = 0
|
2680
|
+
for plumbing_item in plumbing_response.managed_secrets:
|
2681
|
+
yield plumbing.convert_managed_secret_to_porcelain(
|
2682
|
+
plumbing_item)
|
2683
|
+
if plumbing_response.meta.next_cursor == '':
|
2684
|
+
break
|
2685
|
+
req.meta.cursor = plumbing_response.meta.next_cursor
|
2686
|
+
|
2687
|
+
return generator(self, req)
|
2688
|
+
|
2689
|
+
def list_by_actor(self, filter, *args, timeout=None):
|
2690
|
+
'''
|
2691
|
+
List returns Managed Secrets for an Actor from a Secret Engine.
|
2692
|
+
'''
|
2693
|
+
req = ManagedSecretListRequest()
|
2694
|
+
req.meta.CopyFrom(ListRequestMetadata())
|
2695
|
+
if self.parent.page_limit > 0:
|
2696
|
+
req.meta.limit = self.parent.page_limit
|
2697
|
+
if self.parent.snapshot_datetime is not None:
|
2698
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
2699
|
+
|
2700
|
+
req.filter = plumbing.quote_filter_args(filter, *args)
|
2701
|
+
|
2702
|
+
def generator(svc, req):
|
2703
|
+
tries = 0
|
2704
|
+
while True:
|
2705
|
+
try:
|
2706
|
+
plumbing_response = svc.stub.ListByActor(
|
2707
|
+
req,
|
2708
|
+
metadata=svc.parent.get_metadata(
|
2709
|
+
'ManagedSecrets.ListByActor', req),
|
2710
|
+
timeout=timeout)
|
2711
|
+
except Exception as e:
|
2712
|
+
if self.parent.shouldRetry(tries, e):
|
2713
|
+
tries += 1
|
2714
|
+
self.parent.jitterSleep(tries)
|
2715
|
+
continue
|
2716
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2717
|
+
tries = 0
|
2718
|
+
for plumbing_item in plumbing_response.managed_secrets:
|
2719
|
+
yield plumbing.convert_managed_secret_to_porcelain(
|
2720
|
+
plumbing_item)
|
2721
|
+
if plumbing_response.meta.next_cursor == '':
|
2722
|
+
break
|
2723
|
+
req.meta.cursor = plumbing_response.meta.next_cursor
|
2724
|
+
|
2725
|
+
return generator(self, req)
|
2726
|
+
|
2727
|
+
def create(self, managed_secret, timeout=None):
|
2728
|
+
'''
|
2729
|
+
Create creates a Managed Secret
|
2730
|
+
'''
|
2731
|
+
req = ManagedSecretCreateRequest()
|
2732
|
+
|
2733
|
+
if managed_secret is not None:
|
2734
|
+
req.managed_secret.CopyFrom(
|
2735
|
+
plumbing.convert_managed_secret_to_plumbing(managed_secret))
|
2736
|
+
tries = 0
|
2737
|
+
plumbing_response = None
|
2738
|
+
while True:
|
2739
|
+
try:
|
2740
|
+
plumbing_response = self.stub.Create(
|
2741
|
+
req,
|
2742
|
+
metadata=self.parent.get_metadata('ManagedSecrets.Create',
|
2743
|
+
req),
|
2744
|
+
timeout=timeout)
|
2745
|
+
except Exception as e:
|
2746
|
+
if self.parent.shouldRetry(tries, e):
|
2747
|
+
tries += 1
|
2748
|
+
self.parent.jitterSleep(tries)
|
2749
|
+
continue
|
2750
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2751
|
+
break
|
2752
|
+
|
2753
|
+
resp = models.ManagedSecretCreateResponse()
|
2754
|
+
resp.managed_secret = plumbing.convert_managed_secret_to_porcelain(
|
2755
|
+
plumbing_response.managed_secret)
|
2756
|
+
resp.meta = plumbing.convert_create_response_metadata_to_porcelain(
|
2757
|
+
plumbing_response.meta)
|
2758
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2759
|
+
plumbing_response.rate_limit)
|
2760
|
+
return resp
|
2761
|
+
|
2762
|
+
def update(self, managed_secret, timeout=None):
|
2763
|
+
'''
|
2764
|
+
Update updates a Managed Secret
|
2765
|
+
'''
|
2766
|
+
req = ManagedSecretUpdateRequest()
|
2767
|
+
|
2768
|
+
if managed_secret is not None:
|
2769
|
+
req.managed_secret.CopyFrom(
|
2770
|
+
plumbing.convert_managed_secret_to_plumbing(managed_secret))
|
2771
|
+
tries = 0
|
2772
|
+
plumbing_response = None
|
2773
|
+
while True:
|
2774
|
+
try:
|
2775
|
+
plumbing_response = self.stub.Update(
|
2776
|
+
req,
|
2777
|
+
metadata=self.parent.get_metadata('ManagedSecrets.Update',
|
2778
|
+
req),
|
2779
|
+
timeout=timeout)
|
2780
|
+
except Exception as e:
|
2781
|
+
if self.parent.shouldRetry(tries, e):
|
2782
|
+
tries += 1
|
2783
|
+
self.parent.jitterSleep(tries)
|
2784
|
+
continue
|
2785
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2786
|
+
break
|
2787
|
+
|
2788
|
+
resp = models.ManagedSecretUpdateResponse()
|
2789
|
+
resp.managed_secret = plumbing.convert_managed_secret_to_porcelain(
|
2790
|
+
plumbing_response.managed_secret)
|
2791
|
+
resp.meta = plumbing.convert_update_response_metadata_to_porcelain(
|
2792
|
+
plumbing_response.meta)
|
2793
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2794
|
+
plumbing_response.rate_limit)
|
2795
|
+
return resp
|
2796
|
+
|
2797
|
+
def rotate(self, id, timeout=None):
|
2798
|
+
'''
|
2799
|
+
Rotate forces rotation of Managed Secret
|
2800
|
+
'''
|
2801
|
+
req = ManagedSecretRotateRequest()
|
2802
|
+
|
2803
|
+
req.id = (id)
|
2804
|
+
tries = 0
|
2805
|
+
plumbing_response = None
|
2806
|
+
while True:
|
2807
|
+
try:
|
2808
|
+
plumbing_response = self.stub.Rotate(
|
2809
|
+
req,
|
2810
|
+
metadata=self.parent.get_metadata('ManagedSecrets.Rotate',
|
2811
|
+
req),
|
2812
|
+
timeout=timeout)
|
2813
|
+
except Exception as e:
|
2814
|
+
if self.parent.shouldRetry(tries, e):
|
2815
|
+
tries += 1
|
2816
|
+
self.parent.jitterSleep(tries)
|
2817
|
+
continue
|
2818
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2819
|
+
break
|
2820
|
+
|
2821
|
+
resp = models.ManagedSecretRotateResponse()
|
2822
|
+
resp.meta = plumbing.convert_generic_response_metadata_to_porcelain(
|
2823
|
+
plumbing_response.meta)
|
2824
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2825
|
+
plumbing_response.rate_limit)
|
2826
|
+
return resp
|
2827
|
+
|
2828
|
+
def delete(self, id, timeout=None):
|
2829
|
+
'''
|
2830
|
+
Delete deletes a Managed Secret
|
2831
|
+
'''
|
2832
|
+
req = ManagedSecretDeleteRequest()
|
2833
|
+
|
2834
|
+
req.id = (id)
|
2835
|
+
tries = 0
|
2836
|
+
plumbing_response = None
|
2837
|
+
while True:
|
2838
|
+
try:
|
2839
|
+
plumbing_response = self.stub.Delete(
|
2840
|
+
req,
|
2841
|
+
metadata=self.parent.get_metadata('ManagedSecrets.Delete',
|
2842
|
+
req),
|
2843
|
+
timeout=timeout)
|
2844
|
+
except Exception as e:
|
2845
|
+
if self.parent.shouldRetry(tries, e):
|
2846
|
+
tries += 1
|
2847
|
+
self.parent.jitterSleep(tries)
|
2848
|
+
continue
|
2849
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2850
|
+
break
|
2851
|
+
|
2852
|
+
resp = models.ManagedSecretDeleteResponse()
|
2853
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2854
|
+
plumbing_response.rate_limit)
|
2855
|
+
return resp
|
2856
|
+
|
2857
|
+
def get(self, id, timeout=None):
|
2858
|
+
'''
|
2859
|
+
Get gets details of a Managed Secret without sensitive data
|
2860
|
+
'''
|
2861
|
+
req = ManagedSecretGetRequest()
|
2862
|
+
if self.parent.snapshot_datetime is not None:
|
2863
|
+
req.meta.CopyFrom(GetRequestMetadata())
|
2864
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
2865
|
+
|
2866
|
+
req.id = (id)
|
2867
|
+
tries = 0
|
2868
|
+
plumbing_response = None
|
2869
|
+
while True:
|
2870
|
+
try:
|
2871
|
+
plumbing_response = self.stub.Get(
|
2872
|
+
req,
|
2873
|
+
metadata=self.parent.get_metadata('ManagedSecrets.Get',
|
2874
|
+
req),
|
2875
|
+
timeout=timeout)
|
2876
|
+
except Exception as e:
|
2877
|
+
if self.parent.shouldRetry(tries, e):
|
2878
|
+
tries += 1
|
2879
|
+
self.parent.jitterSleep(tries)
|
2880
|
+
continue
|
2881
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2882
|
+
break
|
2883
|
+
|
2884
|
+
resp = models.ManagedSecretGetResponse()
|
2885
|
+
resp.managed_secret = plumbing.convert_managed_secret_to_porcelain(
|
2886
|
+
plumbing_response.managed_secret)
|
2887
|
+
resp.meta = plumbing.convert_get_response_metadata_to_porcelain(
|
2888
|
+
plumbing_response.meta)
|
2889
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2890
|
+
plumbing_response.rate_limit)
|
2891
|
+
return resp
|
2892
|
+
|
2893
|
+
def retrieve(self, id, public_key, timeout=None):
|
2894
|
+
'''
|
2895
|
+
Retrieve returns Managed Secret with sensitive data
|
2896
|
+
'''
|
2897
|
+
req = ManagedSecretRetrieveRequest()
|
2898
|
+
|
2899
|
+
req.id = (id)
|
2900
|
+
req.public_key = (public_key)
|
2901
|
+
tries = 0
|
2902
|
+
plumbing_response = None
|
2903
|
+
while True:
|
2904
|
+
try:
|
2905
|
+
plumbing_response = self.stub.Retrieve(
|
2906
|
+
req,
|
2907
|
+
metadata=self.parent.get_metadata(
|
2908
|
+
'ManagedSecrets.Retrieve', req),
|
2909
|
+
timeout=timeout)
|
2910
|
+
except Exception as e:
|
2911
|
+
if self.parent.shouldRetry(tries, e):
|
2912
|
+
tries += 1
|
2913
|
+
self.parent.jitterSleep(tries)
|
2914
|
+
continue
|
2915
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2916
|
+
break
|
2917
|
+
|
2918
|
+
resp = models.ManagedSecretRetrieveResponse()
|
2919
|
+
resp.managed_secret = plumbing.convert_managed_secret_to_porcelain(
|
2920
|
+
plumbing_response.managed_secret)
|
2921
|
+
resp.meta = plumbing.convert_get_response_metadata_to_porcelain(
|
2922
|
+
plumbing_response.meta)
|
2923
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2924
|
+
plumbing_response.rate_limit)
|
2925
|
+
return resp
|
2926
|
+
|
2927
|
+
def validate(self, id, timeout=None):
|
2928
|
+
'''
|
2929
|
+
Validate returns the result of testing the stored credential against the
|
2930
|
+
secret engine.
|
2931
|
+
'''
|
2932
|
+
req = ManagedSecretValidateRequest()
|
2933
|
+
|
2934
|
+
req.id = (id)
|
2935
|
+
tries = 0
|
2936
|
+
plumbing_response = None
|
2937
|
+
while True:
|
2938
|
+
try:
|
2939
|
+
plumbing_response = self.stub.Validate(
|
2940
|
+
req,
|
2941
|
+
metadata=self.parent.get_metadata(
|
2942
|
+
'ManagedSecrets.Validate', req),
|
2943
|
+
timeout=timeout)
|
2944
|
+
except Exception as e:
|
2945
|
+
if self.parent.shouldRetry(tries, e):
|
2946
|
+
tries += 1
|
2947
|
+
self.parent.jitterSleep(tries)
|
2948
|
+
continue
|
2949
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2950
|
+
break
|
2951
|
+
|
2952
|
+
resp = models.ManagedSecretValidateResponse()
|
2953
|
+
resp.invalid_info = (plumbing_response.invalid_info)
|
2954
|
+
resp.meta = plumbing.convert_get_response_metadata_to_porcelain(
|
2955
|
+
plumbing_response.meta)
|
2956
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
2957
|
+
plumbing_response.rate_limit)
|
2958
|
+
resp.valid = (plumbing_response.valid)
|
2959
|
+
return resp
|
2960
|
+
|
2961
|
+
def logs(self, filter, *args, timeout=None):
|
2962
|
+
'''
|
2963
|
+
Logs returns the audit records for the managed secret. This may be replaced
|
2964
|
+
in the future.
|
2965
|
+
'''
|
2966
|
+
req = ManagedSecretLogsRequest()
|
2967
|
+
req.meta.CopyFrom(ListRequestMetadata())
|
2968
|
+
if self.parent.page_limit > 0:
|
2969
|
+
req.meta.limit = self.parent.page_limit
|
2970
|
+
if self.parent.snapshot_datetime is not None:
|
2971
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
2972
|
+
|
2973
|
+
req.filter = plumbing.quote_filter_args(filter, *args)
|
2974
|
+
|
2975
|
+
def generator(svc, req):
|
2976
|
+
tries = 0
|
2977
|
+
while True:
|
2978
|
+
try:
|
2979
|
+
plumbing_response = svc.stub.Logs(
|
2980
|
+
req,
|
2981
|
+
metadata=svc.parent.get_metadata(
|
2982
|
+
'ManagedSecrets.Logs', req),
|
2983
|
+
timeout=timeout)
|
2984
|
+
except Exception as e:
|
2985
|
+
if self.parent.shouldRetry(tries, e):
|
2986
|
+
tries += 1
|
2987
|
+
self.parent.jitterSleep(tries)
|
2988
|
+
continue
|
2989
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
2990
|
+
tries = 0
|
2991
|
+
for plumbing_item in plumbing_response.managed_secret_logs:
|
2992
|
+
yield plumbing.convert_managed_secret_log_to_porcelain(
|
2993
|
+
plumbing_item)
|
2994
|
+
if plumbing_response.meta.next_cursor == '':
|
2995
|
+
break
|
2996
|
+
req.meta.cursor = plumbing_response.meta.next_cursor
|
2997
|
+
|
2998
|
+
return generator(self, req)
|
2999
|
+
|
3000
|
+
|
2632
3001
|
class Nodes:
|
2633
3002
|
'''
|
2634
3003
|
Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
|
@@ -5454,6 +5823,323 @@ class SnapshotSecretStores:
|
|
5454
5823
|
return self.secret_stores.list(filter, *args, timeout=timeout)
|
5455
5824
|
|
5456
5825
|
|
5826
|
+
class SecretEngines:
|
5827
|
+
'''
|
5828
|
+
|
5829
|
+
See:
|
5830
|
+
`strongdm.models.ActiveDirectoryEngine`
|
5831
|
+
`strongdm.models.KeyValueEngine`
|
5832
|
+
'''
|
5833
|
+
def __init__(self, channel, client):
|
5834
|
+
self.parent = client
|
5835
|
+
self.stub = SecretEnginesStub(channel)
|
5836
|
+
|
5837
|
+
def list(self, filter, *args, timeout=None):
|
5838
|
+
'''
|
5839
|
+
List returns a list of Secret Engines
|
5840
|
+
'''
|
5841
|
+
req = SecretEngineListRequest()
|
5842
|
+
req.meta.CopyFrom(ListRequestMetadata())
|
5843
|
+
if self.parent.page_limit > 0:
|
5844
|
+
req.meta.limit = self.parent.page_limit
|
5845
|
+
if self.parent.snapshot_datetime is not None:
|
5846
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
5847
|
+
|
5848
|
+
req.filter = plumbing.quote_filter_args(filter, *args)
|
5849
|
+
|
5850
|
+
def generator(svc, req):
|
5851
|
+
tries = 0
|
5852
|
+
while True:
|
5853
|
+
try:
|
5854
|
+
plumbing_response = svc.stub.List(
|
5855
|
+
req,
|
5856
|
+
metadata=svc.parent.get_metadata(
|
5857
|
+
'SecretEngines.List', req),
|
5858
|
+
timeout=timeout)
|
5859
|
+
except Exception as e:
|
5860
|
+
if self.parent.shouldRetry(tries, e):
|
5861
|
+
tries += 1
|
5862
|
+
self.parent.jitterSleep(tries)
|
5863
|
+
continue
|
5864
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
5865
|
+
tries = 0
|
5866
|
+
for plumbing_item in plumbing_response.secret_engines:
|
5867
|
+
yield plumbing.convert_secret_engine_to_porcelain(
|
5868
|
+
plumbing_item)
|
5869
|
+
if plumbing_response.meta.next_cursor == '':
|
5870
|
+
break
|
5871
|
+
req.meta.cursor = plumbing_response.meta.next_cursor
|
5872
|
+
|
5873
|
+
return generator(self, req)
|
5874
|
+
|
5875
|
+
def get(self, id, timeout=None):
|
5876
|
+
'''
|
5877
|
+
Get returns a secret engine details
|
5878
|
+
'''
|
5879
|
+
req = SecretEngineGetRequest()
|
5880
|
+
if self.parent.snapshot_datetime is not None:
|
5881
|
+
req.meta.CopyFrom(GetRequestMetadata())
|
5882
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
5883
|
+
|
5884
|
+
req.id = (id)
|
5885
|
+
tries = 0
|
5886
|
+
plumbing_response = None
|
5887
|
+
while True:
|
5888
|
+
try:
|
5889
|
+
plumbing_response = self.stub.Get(
|
5890
|
+
req,
|
5891
|
+
metadata=self.parent.get_metadata('SecretEngines.Get',
|
5892
|
+
req),
|
5893
|
+
timeout=timeout)
|
5894
|
+
except Exception as e:
|
5895
|
+
if self.parent.shouldRetry(tries, e):
|
5896
|
+
tries += 1
|
5897
|
+
self.parent.jitterSleep(tries)
|
5898
|
+
continue
|
5899
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
5900
|
+
break
|
5901
|
+
|
5902
|
+
resp = models.SecretEngineGetResponse()
|
5903
|
+
resp.meta = plumbing.convert_get_response_metadata_to_porcelain(
|
5904
|
+
plumbing_response.meta)
|
5905
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
5906
|
+
plumbing_response.rate_limit)
|
5907
|
+
resp.secret_engine = plumbing.convert_secret_engine_to_porcelain(
|
5908
|
+
plumbing_response.secret_engine)
|
5909
|
+
return resp
|
5910
|
+
|
5911
|
+
def create(self, secret_engine, timeout=None):
|
5912
|
+
'''
|
5913
|
+
Create creates a secret engine
|
5914
|
+
'''
|
5915
|
+
req = SecretEngineCreateRequest()
|
5916
|
+
|
5917
|
+
if secret_engine is not None:
|
5918
|
+
req.secret_engine.CopyFrom(
|
5919
|
+
plumbing.convert_secret_engine_to_plumbing(secret_engine))
|
5920
|
+
tries = 0
|
5921
|
+
plumbing_response = None
|
5922
|
+
while True:
|
5923
|
+
try:
|
5924
|
+
plumbing_response = self.stub.Create(
|
5925
|
+
req,
|
5926
|
+
metadata=self.parent.get_metadata('SecretEngines.Create',
|
5927
|
+
req),
|
5928
|
+
timeout=timeout)
|
5929
|
+
except Exception as e:
|
5930
|
+
if self.parent.shouldRetry(tries, e):
|
5931
|
+
tries += 1
|
5932
|
+
self.parent.jitterSleep(tries)
|
5933
|
+
continue
|
5934
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
5935
|
+
break
|
5936
|
+
|
5937
|
+
resp = models.SecretEngineCreateResponse()
|
5938
|
+
resp.meta = plumbing.convert_create_response_metadata_to_porcelain(
|
5939
|
+
plumbing_response.meta)
|
5940
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
5941
|
+
plumbing_response.rate_limit)
|
5942
|
+
resp.secret_engine = plumbing.convert_secret_engine_to_porcelain(
|
5943
|
+
plumbing_response.secret_engine)
|
5944
|
+
return resp
|
5945
|
+
|
5946
|
+
def update(self, secret_engine, timeout=None):
|
5947
|
+
'''
|
5948
|
+
Update updates a secret engine
|
5949
|
+
'''
|
5950
|
+
req = SecretEngineUpdateRequest()
|
5951
|
+
|
5952
|
+
if secret_engine is not None:
|
5953
|
+
req.secret_engine.CopyFrom(
|
5954
|
+
plumbing.convert_secret_engine_to_plumbing(secret_engine))
|
5955
|
+
tries = 0
|
5956
|
+
plumbing_response = None
|
5957
|
+
while True:
|
5958
|
+
try:
|
5959
|
+
plumbing_response = self.stub.Update(
|
5960
|
+
req,
|
5961
|
+
metadata=self.parent.get_metadata('SecretEngines.Update',
|
5962
|
+
req),
|
5963
|
+
timeout=timeout)
|
5964
|
+
except Exception as e:
|
5965
|
+
if self.parent.shouldRetry(tries, e):
|
5966
|
+
tries += 1
|
5967
|
+
self.parent.jitterSleep(tries)
|
5968
|
+
continue
|
5969
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
5970
|
+
break
|
5971
|
+
|
5972
|
+
resp = models.SecretEngineUpdateResponse()
|
5973
|
+
resp.meta = plumbing.convert_update_response_metadata_to_porcelain(
|
5974
|
+
plumbing_response.meta)
|
5975
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
5976
|
+
plumbing_response.rate_limit)
|
5977
|
+
resp.secret_engine = plumbing.convert_secret_engine_to_porcelain(
|
5978
|
+
plumbing_response.secret_engine)
|
5979
|
+
return resp
|
5980
|
+
|
5981
|
+
def delete(self, id, timeout=None):
|
5982
|
+
'''
|
5983
|
+
Delete deletes a secret engine
|
5984
|
+
'''
|
5985
|
+
req = SecretEngineDeleteRequest()
|
5986
|
+
|
5987
|
+
req.id = (id)
|
5988
|
+
tries = 0
|
5989
|
+
plumbing_response = None
|
5990
|
+
while True:
|
5991
|
+
try:
|
5992
|
+
plumbing_response = self.stub.Delete(
|
5993
|
+
req,
|
5994
|
+
metadata=self.parent.get_metadata('SecretEngines.Delete',
|
5995
|
+
req),
|
5996
|
+
timeout=timeout)
|
5997
|
+
except Exception as e:
|
5998
|
+
if self.parent.shouldRetry(tries, e):
|
5999
|
+
tries += 1
|
6000
|
+
self.parent.jitterSleep(tries)
|
6001
|
+
continue
|
6002
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
6003
|
+
break
|
6004
|
+
|
6005
|
+
resp = models.SecretEngineDeleteResponse()
|
6006
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
6007
|
+
plumbing_response.rate_limit)
|
6008
|
+
return resp
|
6009
|
+
|
6010
|
+
def list_secret_stores(self, filter, *args, timeout=None):
|
6011
|
+
'''
|
6012
|
+
ListSecretStores returns a list of Secret Stores that can be used as a backing store
|
6013
|
+
for Secret Engine
|
6014
|
+
'''
|
6015
|
+
req = SecretStoreListRequest()
|
6016
|
+
req.meta.CopyFrom(ListRequestMetadata())
|
6017
|
+
if self.parent.page_limit > 0:
|
6018
|
+
req.meta.limit = self.parent.page_limit
|
6019
|
+
if self.parent.snapshot_datetime is not None:
|
6020
|
+
req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
|
6021
|
+
|
6022
|
+
req.filter = plumbing.quote_filter_args(filter, *args)
|
6023
|
+
|
6024
|
+
def generator(svc, req):
|
6025
|
+
tries = 0
|
6026
|
+
while True:
|
6027
|
+
try:
|
6028
|
+
plumbing_response = svc.stub.ListSecretStores(
|
6029
|
+
req,
|
6030
|
+
metadata=svc.parent.get_metadata(
|
6031
|
+
'SecretEngines.ListSecretStores', req),
|
6032
|
+
timeout=timeout)
|
6033
|
+
except Exception as e:
|
6034
|
+
if self.parent.shouldRetry(tries, e):
|
6035
|
+
tries += 1
|
6036
|
+
self.parent.jitterSleep(tries)
|
6037
|
+
continue
|
6038
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
6039
|
+
tries = 0
|
6040
|
+
for plumbing_item in plumbing_response.secret_stores:
|
6041
|
+
yield plumbing.convert_secret_store_to_porcelain(
|
6042
|
+
plumbing_item)
|
6043
|
+
if plumbing_response.meta.next_cursor == '':
|
6044
|
+
break
|
6045
|
+
req.meta.cursor = plumbing_response.meta.next_cursor
|
6046
|
+
|
6047
|
+
return generator(self, req)
|
6048
|
+
|
6049
|
+
def generate_keys(self, secret_engine_id, timeout=None):
|
6050
|
+
'''
|
6051
|
+
GenerateKeys generates a private key, stores it in a secret store and stores a public key in a secret engine
|
6052
|
+
'''
|
6053
|
+
req = GenerateKeysRequest()
|
6054
|
+
|
6055
|
+
req.secret_engine_id = (secret_engine_id)
|
6056
|
+
tries = 0
|
6057
|
+
plumbing_response = None
|
6058
|
+
while True:
|
6059
|
+
try:
|
6060
|
+
plumbing_response = self.stub.GenerateKeys(
|
6061
|
+
req,
|
6062
|
+
metadata=self.parent.get_metadata(
|
6063
|
+
'SecretEngines.GenerateKeys', req),
|
6064
|
+
timeout=timeout)
|
6065
|
+
except Exception as e:
|
6066
|
+
if self.parent.shouldRetry(tries, e):
|
6067
|
+
tries += 1
|
6068
|
+
self.parent.jitterSleep(tries)
|
6069
|
+
continue
|
6070
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
6071
|
+
break
|
6072
|
+
|
6073
|
+
resp = models.GenerateKeysResponse()
|
6074
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
6075
|
+
plumbing_response.rate_limit)
|
6076
|
+
return resp
|
6077
|
+
|
6078
|
+
def healthcheck(self, secret_engine_id, timeout=None):
|
6079
|
+
'''
|
6080
|
+
Healthcheck triggers a healthcheck for all nodes serving a secret engine
|
6081
|
+
'''
|
6082
|
+
req = HealthcheckRequest()
|
6083
|
+
|
6084
|
+
req.secret_engine_id = (secret_engine_id)
|
6085
|
+
tries = 0
|
6086
|
+
plumbing_response = None
|
6087
|
+
while True:
|
6088
|
+
try:
|
6089
|
+
plumbing_response = self.stub.Healthcheck(
|
6090
|
+
req,
|
6091
|
+
metadata=self.parent.get_metadata(
|
6092
|
+
'SecretEngines.Healthcheck', req),
|
6093
|
+
timeout=timeout)
|
6094
|
+
except Exception as e:
|
6095
|
+
if self.parent.shouldRetry(tries, e):
|
6096
|
+
tries += 1
|
6097
|
+
self.parent.jitterSleep(tries)
|
6098
|
+
continue
|
6099
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
6100
|
+
break
|
6101
|
+
|
6102
|
+
resp = models.HealthcheckResponse()
|
6103
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
6104
|
+
plumbing_response.rate_limit)
|
6105
|
+
resp.status = plumbing.convert_repeated_healthcheck_status_to_porcelain(
|
6106
|
+
plumbing_response.status)
|
6107
|
+
return resp
|
6108
|
+
|
6109
|
+
def rotate(self, id, password_policy, timeout=None):
|
6110
|
+
'''
|
6111
|
+
Rotate rotates secret engine's credentials
|
6112
|
+
'''
|
6113
|
+
req = SecretEngineRotateRequest()
|
6114
|
+
|
6115
|
+
req.id = (id)
|
6116
|
+
if password_policy is not None:
|
6117
|
+
req.password_policy.CopyFrom(
|
6118
|
+
plumbing.convert_secret_engine_password_policy_to_plumbing(
|
6119
|
+
password_policy))
|
6120
|
+
tries = 0
|
6121
|
+
plumbing_response = None
|
6122
|
+
while True:
|
6123
|
+
try:
|
6124
|
+
plumbing_response = self.stub.Rotate(
|
6125
|
+
req,
|
6126
|
+
metadata=self.parent.get_metadata('SecretEngines.Rotate',
|
6127
|
+
req),
|
6128
|
+
timeout=timeout)
|
6129
|
+
except Exception as e:
|
6130
|
+
if self.parent.shouldRetry(tries, e):
|
6131
|
+
tries += 1
|
6132
|
+
self.parent.jitterSleep(tries)
|
6133
|
+
continue
|
6134
|
+
raise plumbing.convert_error_to_porcelain(e) from e
|
6135
|
+
break
|
6136
|
+
|
6137
|
+
resp = models.SecretEngineRotateResponse()
|
6138
|
+
resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain(
|
6139
|
+
plumbing_response.rate_limit)
|
6140
|
+
return resp
|
6141
|
+
|
6142
|
+
|
5457
6143
|
class SecretStoreHealths:
|
5458
6144
|
'''
|
5459
6145
|
SecretStoreHealths exposes health states for secret stores.
|