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.
Files changed (151) hide show
  1. {strongdm-13.11.0 → strongdm-14.0.0}/PKG-INFO +2 -2
  2. {strongdm-13.11.0 → strongdm-14.0.0}/setup.py +2 -2
  3. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_pb2.py +12 -8
  4. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_pb2.py +6 -6
  5. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +4 -4
  6. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_pb2.py +30 -23
  7. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_pb2_grpc.py +4 -4
  8. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_pb2.py +4 -4
  9. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/client.py +15 -1
  10. strongdm-14.0.0/strongdm/managed_secrets_pb2.py +460 -0
  11. strongdm-14.0.0/strongdm/managed_secrets_pb2_grpc.py +398 -0
  12. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/models.py +2650 -423
  13. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/plumbing.py +4486 -2790
  14. strongdm-14.0.0/strongdm/secret_engine_policy_pb2.py +78 -0
  15. strongdm-14.0.0/strongdm/secret_engine_types_pb2.py +147 -0
  16. strongdm-14.0.0/strongdm/secret_engines_pb2.py +325 -0
  17. strongdm-14.0.0/strongdm/secret_engines_pb2_grpc.py +355 -0
  18. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/svc.py +698 -12
  19. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/PKG-INFO +2 -2
  20. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/SOURCES.txt +6 -0
  21. {strongdm-13.11.0 → strongdm-14.0.0}/LICENSE +0 -0
  22. {strongdm-13.11.0 → strongdm-14.0.0}/README.md +0 -0
  23. {strongdm-13.11.0 → strongdm-14.0.0}/setup.cfg +0 -0
  24. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/__init__.py +0 -0
  25. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_request_events_history_pb2.py +0 -0
  26. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
  27. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_history_pb2.py +0 -0
  28. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
  29. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_pb2.py +0 -0
  30. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/access_requests_pb2_grpc.py +0 -0
  31. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_history_pb2.py +0 -0
  32. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
  33. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_pb2.py +0 -0
  34. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
  35. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_history_pb2.py +0 -0
  36. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
  37. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_pb2.py +0 -0
  38. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_grants_pb2_grpc.py +0 -0
  39. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_permissions_pb2.py +0 -0
  40. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
  41. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_history_pb2.py +0 -0
  42. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
  43. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_pb2.py +0 -0
  44. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/account_resources_pb2_grpc.py +0 -0
  45. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_history_pb2.py +0 -0
  46. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
  47. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/accounts_pb2_grpc.py +0 -0
  48. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/activities_pb2.py +0 -0
  49. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/activities_pb2_grpc.py +0 -0
  50. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
  51. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
  52. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
  53. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
  54. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_history_pb2.py +0 -0
  55. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
  56. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
  57. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/constants.py +0 -0
  58. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/control_panel_pb2.py +0 -0
  59. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/control_panel_pb2_grpc.py +0 -0
  60. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/drivers_pb2.py +0 -0
  61. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/drivers_pb2_grpc.py +0 -0
  62. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/errors.py +0 -0
  63. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/health_checks_pb2.py +0 -0
  64. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/health_checks_pb2_grpc.py +0 -0
  65. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_history_pb2.py +0 -0
  66. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
  67. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_pb2.py +0 -0
  68. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
  69. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_history_pb2.py +0 -0
  70. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
  71. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_pb2.py +0 -0
  72. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
  73. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_history_pb2.py +0 -0
  74. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
  75. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_pb2.py +0 -0
  76. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/nodes_pb2_grpc.py +0 -0
  77. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/options_pb2.py +0 -0
  78. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/options_pb2_grpc.py +0 -0
  79. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/organization_history_pb2.py +0 -0
  80. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/organization_history_pb2_grpc.py +0 -0
  81. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_nodes_pb2.py +0 -0
  82. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
  83. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_peers_pb2.py +0 -0
  84. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
  85. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_resources_pb2.py +0 -0
  86. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
  87. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_groups_pb2.py +0 -0
  88. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
  89. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_history_pb2.py +0 -0
  90. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_history_pb2_grpc.py +0 -0
  91. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_pb2.py +0 -0
  92. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/policies_pb2_grpc.py +0 -0
  93. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
  94. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
  95. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/queries_pb2.py +0 -0
  96. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/queries_pb2_grpc.py +0 -0
  97. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_history_pb2.py +0 -0
  98. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
  99. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_pb2.py +0 -0
  100. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
  101. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
  102. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
  103. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_pb2.py +0 -0
  104. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
  105. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/replays_pb2.py +0 -0
  106. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/replays_pb2_grpc.py +0 -0
  107. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_history_pb2.py +0 -0
  108. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_history_pb2_grpc.py +0 -0
  109. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_pb2.py +0 -0
  110. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/resources_pb2_grpc.py +0 -0
  111. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_history_pb2.py +0 -0
  112. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
  113. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_pb2.py +0 -0
  114. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/role_resources_pb2_grpc.py +0 -0
  115. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_history_pb2.py +0 -0
  116. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_history_pb2_grpc.py +0 -0
  117. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_pb2.py +0 -0
  118. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/roles_pb2_grpc.py +0 -0
  119. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
  120. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
  121. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_healths_pb2.py +0 -0
  122. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
  123. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_types_pb2.py +0 -0
  124. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
  125. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_history_pb2.py +0 -0
  126. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
  127. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_pb2.py +0 -0
  128. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
  129. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/spec_pb2.py +0 -0
  130. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/spec_pb2_grpc.py +0 -0
  131. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/tags_pb2.py +0 -0
  132. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/tags_pb2_grpc.py +0 -0
  133. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
  134. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
  135. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_pb2.py +0 -0
  136. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
  137. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_history_pb2.py +0 -0
  138. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_history_pb2_grpc.py +0 -0
  139. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_pb2.py +0 -0
  140. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_assignments_pb2_grpc.py +0 -0
  141. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_history_pb2.py +0 -0
  142. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
  143. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_pb2.py +0 -0
  144. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
  145. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_history_pb2.py +0 -0
  146. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
  147. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_pb2.py +0 -0
  148. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm/workflows_pb2_grpc.py +0 -0
  149. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/dependency_links.txt +0 -0
  150. {strongdm-13.11.0 → strongdm-14.0.0}/strongdm.egg-info/requires.txt +0 -0
  151. {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.