strongdm 13.10.0__zip → 13.12.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.10.0 → strongdm-13.12.0}/PKG-INFO +2 -2
- {strongdm-13.10.0 → strongdm-13.12.0}/setup.py +2 -2
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/client.py +15 -1
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/drivers_pb2.py +25 -21
- strongdm-13.12.0/strongdm/managed_secrets_pb2.py +460 -0
- strongdm-13.12.0/strongdm/managed_secrets_pb2_grpc.py +398 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/models.py +7067 -4951
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/plumbing.py +4510 -2892
- strongdm-13.12.0/strongdm/secret_engine_policy_pb2.py +78 -0
- strongdm-13.12.0/strongdm/secret_engine_types_pb2.py +147 -0
- strongdm-13.12.0/strongdm/secret_engines_pb2.py +325 -0
- strongdm-13.12.0/strongdm/secret_engines_pb2_grpc.py +355 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/svc.py +686 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm.egg-info/PKG-INFO +2 -2
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm.egg-info/SOURCES.txt +6 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/LICENSE +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/README.md +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/setup.cfg +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/__init__.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/access_request_events_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/access_requests_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/access_requests_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/access_requests_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_attachments_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_attachments_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_grants_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_grants_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_grants_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_permissions_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_resources_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_resources_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/account_resources_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/accounts_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/accounts_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/accounts_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/activities_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/activities_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_approvers_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_steps_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflow_steps_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflows_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflows_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/constants.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/control_panel_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/control_panel_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/drivers_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/errors.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/health_checks_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/health_checks_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_aliases_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_aliases_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_sets_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_sets_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/nodes_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/nodes_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/nodes_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/options_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/options_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/organization_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/organization_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_group_nodes_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_group_peers_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_group_resources_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_groups_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/policies_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/policies_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/policies_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/policies_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/queries_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/queries_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identities_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identities_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identity_groups_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/replays_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/replays_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/resources_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/resources_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/resources_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/resources_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/role_resources_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/role_resources_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/role_resources_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/roles_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/roles_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/roles_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/roles_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_store_healths_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_store_types_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_stores_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_stores_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/spec_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/spec_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/tags_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/tags_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_approvers_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_assignments_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_assignments_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_assignments_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_assignments_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_roles_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_roles_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflows_history_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflows_pb2.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm/workflows_pb2_grpc.py +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm.egg-info/dependency_links.txt +0 -0
- {strongdm-13.10.0 → strongdm-13.12.0}/strongdm.egg-info/requires.txt +0 -0
- {strongdm-13.10.0 → strongdm-13.12.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 *
|
@@ -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.
|