strongdm.svc
1# Copyright 2020 StrongDM Inc 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# 15 16# Code generated by protogen. DO NOT EDIT. 17 18import grpc 19from . import plumbing 20from . import models 21from .options_pb2 import * 22from .options_pb2_grpc import * 23from .spec_pb2 import * 24from .spec_pb2_grpc import * 25from .tags_pb2 import * 26from .tags_pb2_grpc import * 27from .access_requests_pb2 import * 28from .access_requests_pb2_grpc import * 29from .access_request_events_history_pb2 import * 30from .access_request_events_history_pb2_grpc import * 31from .access_requests_history_pb2 import * 32from .access_requests_history_pb2_grpc import * 33from .drivers_pb2 import * 34from .drivers_pb2_grpc import * 35from .account_attachments_pb2 import * 36from .account_attachments_pb2_grpc import * 37from .account_attachments_history_pb2 import * 38from .account_attachments_history_pb2_grpc import * 39from .account_grants_pb2 import * 40from .account_grants_pb2_grpc import * 41from .account_grants_history_pb2 import * 42from .account_grants_history_pb2_grpc import * 43from .account_permissions_pb2 import * 44from .account_permissions_pb2_grpc import * 45from .account_resources_pb2 import * 46from .account_resources_pb2_grpc import * 47from .account_resources_history_pb2 import * 48from .account_resources_history_pb2_grpc import * 49from .accounts_pb2 import * 50from .accounts_pb2_grpc import * 51from .accounts_history_pb2 import * 52from .accounts_history_pb2_grpc import * 53from .activities_pb2 import * 54from .activities_pb2_grpc import * 55from .approval_workflow_approvers_pb2 import * 56from .approval_workflow_approvers_pb2_grpc import * 57from .approval_workflow_approvers_history_pb2 import * 58from .approval_workflow_approvers_history_pb2_grpc import * 59from .approval_workflow_steps_pb2 import * 60from .approval_workflow_steps_pb2_grpc import * 61from .approval_workflow_steps_history_pb2 import * 62from .approval_workflow_steps_history_pb2_grpc import * 63from .approval_workflows_pb2 import * 64from .approval_workflows_pb2_grpc import * 65from .approval_workflows_history_pb2 import * 66from .approval_workflows_history_pb2_grpc import * 67from .control_panel_pb2 import * 68from .control_panel_pb2_grpc import * 69from .roles_pb2 import * 70from .roles_pb2_grpc import * 71from .health_checks_pb2 import * 72from .health_checks_pb2_grpc import * 73from .identity_aliases_pb2 import * 74from .identity_aliases_pb2_grpc import * 75from .identity_aliases_history_pb2 import * 76from .identity_aliases_history_pb2_grpc import * 77from .identity_sets_pb2 import * 78from .identity_sets_pb2_grpc import * 79from .identity_sets_history_pb2 import * 80from .identity_sets_history_pb2_grpc import * 81from .managed_secrets_pb2 import * 82from .managed_secrets_pb2_grpc import * 83from .nodes_pb2 import * 84from .nodes_pb2_grpc import * 85from .nodes_history_pb2 import * 86from .nodes_history_pb2_grpc import * 87from .organization_history_pb2 import * 88from .organization_history_pb2_grpc import * 89from .peering_group_nodes_pb2 import * 90from .peering_group_nodes_pb2_grpc import * 91from .peering_group_peers_pb2 import * 92from .peering_group_peers_pb2_grpc import * 93from .peering_group_resources_pb2 import * 94from .peering_group_resources_pb2_grpc import * 95from .peering_groups_pb2 import * 96from .peering_groups_pb2_grpc import * 97from .policies_pb2 import * 98from .policies_pb2_grpc import * 99from .policies_history_pb2 import * 100from .policies_history_pb2_grpc import * 101from .proxy_cluster_keys_pb2 import * 102from .proxy_cluster_keys_pb2_grpc import * 103from .queries_pb2 import * 104from .queries_pb2_grpc import * 105from .remote_identities_pb2 import * 106from .remote_identities_pb2_grpc import * 107from .remote_identities_history_pb2 import * 108from .remote_identities_history_pb2_grpc import * 109from .remote_identity_groups_pb2 import * 110from .remote_identity_groups_pb2_grpc import * 111from .remote_identity_groups_history_pb2 import * 112from .remote_identity_groups_history_pb2_grpc import * 113from .replays_pb2 import * 114from .replays_pb2_grpc import * 115from .resources_pb2 import * 116from .resources_pb2_grpc import * 117from .resources_history_pb2 import * 118from .resources_history_pb2_grpc import * 119from .role_resources_pb2 import * 120from .role_resources_pb2_grpc import * 121from .role_resources_history_pb2 import * 122from .role_resources_history_pb2_grpc import * 123from .roles_history_pb2 import * 124from .roles_history_pb2_grpc import * 125from .secret_engine_policy_pb2 import * 126from .secret_engine_policy_pb2_grpc import * 127from .secret_engine_types_pb2 import * 128from .secret_engine_types_pb2_grpc import * 129from .secret_store_types_pb2 import * 130from .secret_store_types_pb2_grpc import * 131from .secret_stores_pb2 import * 132from .secret_stores_pb2_grpc import * 133from .secret_engines_pb2 import * 134from .secret_engines_pb2_grpc import * 135from .secret_store_healths_pb2 import * 136from .secret_store_healths_pb2_grpc import * 137from .secret_stores_history_pb2 import * 138from .secret_stores_history_pb2_grpc import * 139from .workflow_approvers_pb2 import * 140from .workflow_approvers_pb2_grpc import * 141from .workflow_approvers_history_pb2 import * 142from .workflow_approvers_history_pb2_grpc import * 143from .workflow_roles_pb2 import * 144from .workflow_roles_pb2_grpc import * 145from .workflow_roles_history_pb2 import * 146from .workflow_roles_history_pb2_grpc import * 147from .workflows_pb2 import * 148from .workflows_pb2_grpc import * 149from .workflows_history_pb2 import * 150from .workflows_history_pb2_grpc import * 151import warnings 152import functools 153import time 154 155 156def deprecated(func): 157 """This is a decorator which can be used to mark functions 158 as deprecated. It will result in a warning being emitted 159 when the function is used.""" 160 @functools.wraps(func) 161 def new_func(*args, **kwargs): 162 warnings.warn("Call to deprecated function {}.".format(func.__name__), 163 category=DeprecationWarning, 164 stacklevel=2) 165 return func(*args, **kwargs) 166 167 return new_func 168 169 170class AccessRequests: 171 ''' 172 AccessRequests are requests for access to a resource that may match a Workflow. 173 See `strongdm.models.AccessRequest`. 174 ''' 175 def __init__(self, channel, client): 176 self.parent = client 177 self.stub = AccessRequestsStub(channel) 178 179 def list(self, filter, *args, timeout=None): 180 ''' 181 Lists existing access requests. 182 ''' 183 deadline = None if timeout is None else time.time() + timeout 184 req = AccessRequestListRequest() 185 req.meta.CopyFrom(ListRequestMetadata()) 186 if self.parent.page_limit > 0: 187 req.meta.limit = self.parent.page_limit 188 if self.parent.snapshot_datetime is not None: 189 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 190 191 req.filter = plumbing.quote_filter_args(filter, *args) 192 193 def generator(svc, req): 194 tries = 0 195 while True: 196 t = None if deadline is None else deadline - time.time() 197 try: 198 plumbing_response = svc.stub.List( 199 req, 200 metadata=svc.parent.get_metadata( 201 'AccessRequests.List', req), 202 timeout=t) 203 except Exception as e: 204 if self.parent.shouldRetry(tries, e, deadline): 205 tries += 1 206 time.sleep( 207 self.parent.exponentialBackoff(tries, deadline)) 208 continue 209 raise plumbing.convert_error_to_porcelain(e) from e 210 tries = 0 211 for plumbing_item in plumbing_response.access_requests: 212 yield plumbing.convert_access_request_to_porcelain( 213 plumbing_item) 214 if plumbing_response.meta.next_cursor == '': 215 break 216 req.meta.cursor = plumbing_response.meta.next_cursor 217 218 return generator(self, req) 219 220 221class SnapshotAccessRequests: 222 ''' 223 SnapshotAccessRequests exposes the read only methods of the AccessRequests 224 service for historical queries. 225 ''' 226 def __init__(self, access_requests): 227 self.access_requests = access_requests 228 229 def list(self, filter, *args, timeout=None): 230 ''' 231 Lists existing access requests. 232 ''' 233 return self.access_requests.list(filter, *args, timeout=timeout) 234 235 236class AccessRequestEventsHistory: 237 ''' 238 AccessRequestEventsHistory provides records of all changes to the state of an AccessRequest. 239 See `strongdm.models.AccessRequestEventHistory`. 240 ''' 241 def __init__(self, channel, client): 242 self.parent = client 243 self.stub = AccessRequestEventsHistoryStub(channel) 244 245 def list(self, filter, *args, timeout=None): 246 ''' 247 List gets a list of AccessRequestEventHistory records matching a given set of criteria. 248 ''' 249 deadline = None if timeout is None else time.time() + timeout 250 req = AccessRequestEventHistoryListRequest() 251 req.meta.CopyFrom(ListRequestMetadata()) 252 if self.parent.page_limit > 0: 253 req.meta.limit = self.parent.page_limit 254 if self.parent.snapshot_datetime is not None: 255 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 256 257 req.filter = plumbing.quote_filter_args(filter, *args) 258 259 def generator(svc, req): 260 tries = 0 261 while True: 262 t = None if deadline is None else deadline - time.time() 263 try: 264 plumbing_response = svc.stub.List( 265 req, 266 metadata=svc.parent.get_metadata( 267 'AccessRequestEventsHistory.List', req), 268 timeout=t) 269 except Exception as e: 270 if self.parent.shouldRetry(tries, e, deadline): 271 tries += 1 272 time.sleep( 273 self.parent.exponentialBackoff(tries, deadline)) 274 continue 275 raise plumbing.convert_error_to_porcelain(e) from e 276 tries = 0 277 for plumbing_item in plumbing_response.history: 278 yield plumbing.convert_access_request_event_history_to_porcelain( 279 plumbing_item) 280 if plumbing_response.meta.next_cursor == '': 281 break 282 req.meta.cursor = plumbing_response.meta.next_cursor 283 284 return generator(self, req) 285 286 287class AccessRequestsHistory: 288 ''' 289 AccessRequestsHistory provides records of all changes to the state of an AccessRequest. 290 See `strongdm.models.AccessRequestHistory`. 291 ''' 292 def __init__(self, channel, client): 293 self.parent = client 294 self.stub = AccessRequestsHistoryStub(channel) 295 296 def list(self, filter, *args, timeout=None): 297 ''' 298 List gets a list of AccessRequestHistory records matching a given set of criteria. 299 ''' 300 deadline = None if timeout is None else time.time() + timeout 301 req = AccessRequestHistoryListRequest() 302 req.meta.CopyFrom(ListRequestMetadata()) 303 if self.parent.page_limit > 0: 304 req.meta.limit = self.parent.page_limit 305 if self.parent.snapshot_datetime is not None: 306 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 307 308 req.filter = plumbing.quote_filter_args(filter, *args) 309 310 def generator(svc, req): 311 tries = 0 312 while True: 313 t = None if deadline is None else deadline - time.time() 314 try: 315 plumbing_response = svc.stub.List( 316 req, 317 metadata=svc.parent.get_metadata( 318 'AccessRequestsHistory.List', req), 319 timeout=t) 320 except Exception as e: 321 if self.parent.shouldRetry(tries, e, deadline): 322 tries += 1 323 time.sleep( 324 self.parent.exponentialBackoff(tries, deadline)) 325 continue 326 raise plumbing.convert_error_to_porcelain(e) from e 327 tries = 0 328 for plumbing_item in plumbing_response.history: 329 yield plumbing.convert_access_request_history_to_porcelain( 330 plumbing_item) 331 if plumbing_response.meta.next_cursor == '': 332 break 333 req.meta.cursor = plumbing_response.meta.next_cursor 334 335 return generator(self, req) 336 337 338class AccountAttachments: 339 ''' 340 AccountAttachments assign an account to a role. 341 See `strongdm.models.AccountAttachment`. 342 ''' 343 def __init__(self, channel, client): 344 self.parent = client 345 self.stub = AccountAttachmentsStub(channel) 346 347 def create(self, account_attachment, timeout=None): 348 ''' 349 Create registers a new AccountAttachment. 350 ''' 351 deadline = None if timeout is None else time.time() + timeout 352 req = AccountAttachmentCreateRequest() 353 354 if account_attachment is not None: 355 req.account_attachment.CopyFrom( 356 plumbing.convert_account_attachment_to_plumbing( 357 account_attachment)) 358 tries = 0 359 plumbing_response = None 360 while True: 361 t = None if deadline is None else deadline - time.time() 362 try: 363 plumbing_response = self.stub.Create( 364 req, 365 metadata=self.parent.get_metadata( 366 'AccountAttachments.Create', req), 367 timeout=t) 368 except Exception as e: 369 if self.parent.shouldRetry(tries, e, deadline): 370 tries += 1 371 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 372 continue 373 raise plumbing.convert_error_to_porcelain(e) from e 374 break 375 376 resp = models.AccountAttachmentCreateResponse() 377 resp.account_attachment = plumbing.convert_account_attachment_to_porcelain( 378 plumbing_response.account_attachment) 379 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 380 plumbing_response.meta) 381 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 382 plumbing_response.rate_limit) 383 return resp 384 385 def get(self, id, timeout=None): 386 ''' 387 Get reads one AccountAttachment by ID. 388 ''' 389 deadline = None if timeout is None else time.time() + timeout 390 req = AccountAttachmentGetRequest() 391 if self.parent.snapshot_datetime is not None: 392 req.meta.CopyFrom(GetRequestMetadata()) 393 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 394 395 req.id = (id) 396 tries = 0 397 plumbing_response = None 398 while True: 399 t = None if deadline is None else deadline - time.time() 400 try: 401 plumbing_response = self.stub.Get( 402 req, 403 metadata=self.parent.get_metadata('AccountAttachments.Get', 404 req), 405 timeout=t) 406 except Exception as e: 407 if self.parent.shouldRetry(tries, e, deadline): 408 tries += 1 409 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 410 continue 411 raise plumbing.convert_error_to_porcelain(e) from e 412 break 413 414 resp = models.AccountAttachmentGetResponse() 415 resp.account_attachment = plumbing.convert_account_attachment_to_porcelain( 416 plumbing_response.account_attachment) 417 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 418 plumbing_response.meta) 419 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 420 plumbing_response.rate_limit) 421 return resp 422 423 def delete(self, id, timeout=None): 424 ''' 425 Delete removes a AccountAttachment by ID. 426 ''' 427 deadline = None if timeout is None else time.time() + timeout 428 req = AccountAttachmentDeleteRequest() 429 430 req.id = (id) 431 tries = 0 432 plumbing_response = None 433 while True: 434 t = None if deadline is None else deadline - time.time() 435 try: 436 plumbing_response = self.stub.Delete( 437 req, 438 metadata=self.parent.get_metadata( 439 'AccountAttachments.Delete', req), 440 timeout=t) 441 except Exception as e: 442 if self.parent.shouldRetry(tries, e, deadline): 443 tries += 1 444 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 445 continue 446 raise plumbing.convert_error_to_porcelain(e) from e 447 break 448 449 resp = models.AccountAttachmentDeleteResponse() 450 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 451 plumbing_response.meta) 452 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 453 plumbing_response.rate_limit) 454 return resp 455 456 def list(self, filter, *args, timeout=None): 457 ''' 458 List gets a list of AccountAttachments matching a given set of criteria. 459 ''' 460 deadline = None if timeout is None else time.time() + timeout 461 req = AccountAttachmentListRequest() 462 req.meta.CopyFrom(ListRequestMetadata()) 463 if self.parent.page_limit > 0: 464 req.meta.limit = self.parent.page_limit 465 if self.parent.snapshot_datetime is not None: 466 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 467 468 req.filter = plumbing.quote_filter_args(filter, *args) 469 470 def generator(svc, req): 471 tries = 0 472 while True: 473 t = None if deadline is None else deadline - time.time() 474 try: 475 plumbing_response = svc.stub.List( 476 req, 477 metadata=svc.parent.get_metadata( 478 'AccountAttachments.List', req), 479 timeout=t) 480 except Exception as e: 481 if self.parent.shouldRetry(tries, e, deadline): 482 tries += 1 483 time.sleep( 484 self.parent.exponentialBackoff(tries, deadline)) 485 continue 486 raise plumbing.convert_error_to_porcelain(e) from e 487 tries = 0 488 for plumbing_item in plumbing_response.account_attachments: 489 yield plumbing.convert_account_attachment_to_porcelain( 490 plumbing_item) 491 if plumbing_response.meta.next_cursor == '': 492 break 493 req.meta.cursor = plumbing_response.meta.next_cursor 494 495 return generator(self, req) 496 497 498class SnapshotAccountAttachments: 499 ''' 500 SnapshotAccountAttachments exposes the read only methods of the AccountAttachments 501 service for historical queries. 502 ''' 503 def __init__(self, account_attachments): 504 self.account_attachments = account_attachments 505 506 def get(self, id, timeout=None): 507 ''' 508 Get reads one AccountAttachment by ID. 509 ''' 510 return self.account_attachments.get(id, timeout=timeout) 511 512 def list(self, filter, *args, timeout=None): 513 ''' 514 List gets a list of AccountAttachments matching a given set of criteria. 515 ''' 516 return self.account_attachments.list(filter, *args, timeout=timeout) 517 518 519class AccountAttachmentsHistory: 520 ''' 521 AccountAttachmentsHistory records all changes to the state of an AccountAttachment. 522 See `strongdm.models.AccountAttachmentHistory`. 523 ''' 524 def __init__(self, channel, client): 525 self.parent = client 526 self.stub = AccountAttachmentsHistoryStub(channel) 527 528 def list(self, filter, *args, timeout=None): 529 ''' 530 List gets a list of AccountAttachmentHistory records matching a given set of criteria. 531 ''' 532 deadline = None if timeout is None else time.time() + timeout 533 req = AccountAttachmentHistoryListRequest() 534 req.meta.CopyFrom(ListRequestMetadata()) 535 if self.parent.page_limit > 0: 536 req.meta.limit = self.parent.page_limit 537 if self.parent.snapshot_datetime is not None: 538 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 539 540 req.filter = plumbing.quote_filter_args(filter, *args) 541 542 def generator(svc, req): 543 tries = 0 544 while True: 545 t = None if deadline is None else deadline - time.time() 546 try: 547 plumbing_response = svc.stub.List( 548 req, 549 metadata=svc.parent.get_metadata( 550 'AccountAttachmentsHistory.List', req), 551 timeout=t) 552 except Exception as e: 553 if self.parent.shouldRetry(tries, e, deadline): 554 tries += 1 555 time.sleep( 556 self.parent.exponentialBackoff(tries, deadline)) 557 continue 558 raise plumbing.convert_error_to_porcelain(e) from e 559 tries = 0 560 for plumbing_item in plumbing_response.history: 561 yield plumbing.convert_account_attachment_history_to_porcelain( 562 plumbing_item) 563 if plumbing_response.meta.next_cursor == '': 564 break 565 req.meta.cursor = plumbing_response.meta.next_cursor 566 567 return generator(self, req) 568 569 570class AccountGrants: 571 ''' 572 AccountGrants assign a resource directly to an account, giving the account the permission to connect to that resource. 573 See `strongdm.models.AccountGrant`. 574 ''' 575 def __init__(self, channel, client): 576 self.parent = client 577 self.stub = AccountGrantsStub(channel) 578 579 def create(self, account_grant, timeout=None): 580 ''' 581 Create registers a new AccountGrant. 582 ''' 583 deadline = None if timeout is None else time.time() + timeout 584 req = AccountGrantCreateRequest() 585 586 if account_grant is not None: 587 req.account_grant.CopyFrom( 588 plumbing.convert_account_grant_to_plumbing(account_grant)) 589 tries = 0 590 plumbing_response = None 591 while True: 592 t = None if deadline is None else deadline - time.time() 593 try: 594 plumbing_response = self.stub.Create( 595 req, 596 metadata=self.parent.get_metadata('AccountGrants.Create', 597 req), 598 timeout=t) 599 except Exception as e: 600 if self.parent.shouldRetry(tries, e, deadline): 601 tries += 1 602 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 603 continue 604 raise plumbing.convert_error_to_porcelain(e) from e 605 break 606 607 resp = models.AccountGrantCreateResponse() 608 resp.account_grant = plumbing.convert_account_grant_to_porcelain( 609 plumbing_response.account_grant) 610 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 611 plumbing_response.meta) 612 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 613 plumbing_response.rate_limit) 614 return resp 615 616 def get(self, id, timeout=None): 617 ''' 618 Get reads one AccountGrant by ID. 619 ''' 620 deadline = None if timeout is None else time.time() + timeout 621 req = AccountGrantGetRequest() 622 if self.parent.snapshot_datetime is not None: 623 req.meta.CopyFrom(GetRequestMetadata()) 624 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 625 626 req.id = (id) 627 tries = 0 628 plumbing_response = None 629 while True: 630 t = None if deadline is None else deadline - time.time() 631 try: 632 plumbing_response = self.stub.Get( 633 req, 634 metadata=self.parent.get_metadata('AccountGrants.Get', 635 req), 636 timeout=t) 637 except Exception as e: 638 if self.parent.shouldRetry(tries, e, deadline): 639 tries += 1 640 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 641 continue 642 raise plumbing.convert_error_to_porcelain(e) from e 643 break 644 645 resp = models.AccountGrantGetResponse() 646 resp.account_grant = plumbing.convert_account_grant_to_porcelain( 647 plumbing_response.account_grant) 648 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 649 plumbing_response.meta) 650 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 651 plumbing_response.rate_limit) 652 return resp 653 654 def delete(self, id, timeout=None): 655 ''' 656 Delete removes a AccountGrant by ID. 657 ''' 658 deadline = None if timeout is None else time.time() + timeout 659 req = AccountGrantDeleteRequest() 660 661 req.id = (id) 662 tries = 0 663 plumbing_response = None 664 while True: 665 t = None if deadline is None else deadline - time.time() 666 try: 667 plumbing_response = self.stub.Delete( 668 req, 669 metadata=self.parent.get_metadata('AccountGrants.Delete', 670 req), 671 timeout=t) 672 except Exception as e: 673 if self.parent.shouldRetry(tries, e, deadline): 674 tries += 1 675 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 676 continue 677 raise plumbing.convert_error_to_porcelain(e) from e 678 break 679 680 resp = models.AccountGrantDeleteResponse() 681 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 682 plumbing_response.meta) 683 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 684 plumbing_response.rate_limit) 685 return resp 686 687 def list(self, filter, *args, timeout=None): 688 ''' 689 List gets a list of AccountGrants matching a given set of criteria. 690 ''' 691 deadline = None if timeout is None else time.time() + timeout 692 req = AccountGrantListRequest() 693 req.meta.CopyFrom(ListRequestMetadata()) 694 if self.parent.page_limit > 0: 695 req.meta.limit = self.parent.page_limit 696 if self.parent.snapshot_datetime is not None: 697 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 698 699 req.filter = plumbing.quote_filter_args(filter, *args) 700 701 def generator(svc, req): 702 tries = 0 703 while True: 704 t = None if deadline is None else deadline - time.time() 705 try: 706 plumbing_response = svc.stub.List( 707 req, 708 metadata=svc.parent.get_metadata( 709 'AccountGrants.List', req), 710 timeout=t) 711 except Exception as e: 712 if self.parent.shouldRetry(tries, e, deadline): 713 tries += 1 714 time.sleep( 715 self.parent.exponentialBackoff(tries, deadline)) 716 continue 717 raise plumbing.convert_error_to_porcelain(e) from e 718 tries = 0 719 for plumbing_item in plumbing_response.account_grants: 720 yield plumbing.convert_account_grant_to_porcelain( 721 plumbing_item) 722 if plumbing_response.meta.next_cursor == '': 723 break 724 req.meta.cursor = plumbing_response.meta.next_cursor 725 726 return generator(self, req) 727 728 729class SnapshotAccountGrants: 730 ''' 731 SnapshotAccountGrants exposes the read only methods of the AccountGrants 732 service for historical queries. 733 ''' 734 def __init__(self, account_grants): 735 self.account_grants = account_grants 736 737 def get(self, id, timeout=None): 738 ''' 739 Get reads one AccountGrant by ID. 740 ''' 741 return self.account_grants.get(id, timeout=timeout) 742 743 def list(self, filter, *args, timeout=None): 744 ''' 745 List gets a list of AccountGrants matching a given set of criteria. 746 ''' 747 return self.account_grants.list(filter, *args, timeout=timeout) 748 749 750class AccountGrantsHistory: 751 ''' 752 AccountGrantsHistory records all changes to the state of an AccountGrant. 753 See `strongdm.models.AccountGrantHistory`. 754 ''' 755 def __init__(self, channel, client): 756 self.parent = client 757 self.stub = AccountGrantsHistoryStub(channel) 758 759 def list(self, filter, *args, timeout=None): 760 ''' 761 List gets a list of AccountGrantHistory records matching a given set of criteria. 762 ''' 763 deadline = None if timeout is None else time.time() + timeout 764 req = AccountGrantHistoryListRequest() 765 req.meta.CopyFrom(ListRequestMetadata()) 766 if self.parent.page_limit > 0: 767 req.meta.limit = self.parent.page_limit 768 if self.parent.snapshot_datetime is not None: 769 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 770 771 req.filter = plumbing.quote_filter_args(filter, *args) 772 773 def generator(svc, req): 774 tries = 0 775 while True: 776 t = None if deadline is None else deadline - time.time() 777 try: 778 plumbing_response = svc.stub.List( 779 req, 780 metadata=svc.parent.get_metadata( 781 'AccountGrantsHistory.List', req), 782 timeout=t) 783 except Exception as e: 784 if self.parent.shouldRetry(tries, e, deadline): 785 tries += 1 786 time.sleep( 787 self.parent.exponentialBackoff(tries, deadline)) 788 continue 789 raise plumbing.convert_error_to_porcelain(e) from e 790 tries = 0 791 for plumbing_item in plumbing_response.history: 792 yield plumbing.convert_account_grant_history_to_porcelain( 793 plumbing_item) 794 if plumbing_response.meta.next_cursor == '': 795 break 796 req.meta.cursor = plumbing_response.meta.next_cursor 797 798 return generator(self, req) 799 800 801class AccountPermissions: 802 ''' 803 AccountPermissions records the granular permissions accounts have, allowing them to execute 804 relevant commands via StrongDM's APIs. 805 See `strongdm.models.AccountPermission`. 806 ''' 807 def __init__(self, channel, client): 808 self.parent = client 809 self.stub = AccountPermissionsStub(channel) 810 811 def list(self, filter, *args, timeout=None): 812 ''' 813 List gets a list of Permission records matching a given set of criteria. 814 ''' 815 deadline = None if timeout is None else time.time() + timeout 816 req = AccountPermissionListRequest() 817 req.meta.CopyFrom(ListRequestMetadata()) 818 if self.parent.page_limit > 0: 819 req.meta.limit = self.parent.page_limit 820 if self.parent.snapshot_datetime is not None: 821 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 822 823 req.filter = plumbing.quote_filter_args(filter, *args) 824 825 def generator(svc, req): 826 tries = 0 827 while True: 828 t = None if deadline is None else deadline - time.time() 829 try: 830 plumbing_response = svc.stub.List( 831 req, 832 metadata=svc.parent.get_metadata( 833 'AccountPermissions.List', req), 834 timeout=t) 835 except Exception as e: 836 if self.parent.shouldRetry(tries, e, deadline): 837 tries += 1 838 time.sleep( 839 self.parent.exponentialBackoff(tries, deadline)) 840 continue 841 raise plumbing.convert_error_to_porcelain(e) from e 842 tries = 0 843 for plumbing_item in plumbing_response.permissions: 844 yield plumbing.convert_account_permission_to_porcelain( 845 plumbing_item) 846 if plumbing_response.meta.next_cursor == '': 847 break 848 req.meta.cursor = plumbing_response.meta.next_cursor 849 850 return generator(self, req) 851 852 853class SnapshotAccountPermissions: 854 ''' 855 SnapshotAccountPermissions exposes the read only methods of the AccountPermissions 856 service for historical queries. 857 ''' 858 def __init__(self, account_permissions): 859 self.account_permissions = account_permissions 860 861 def list(self, filter, *args, timeout=None): 862 ''' 863 List gets a list of Permission records matching a given set of criteria. 864 ''' 865 return self.account_permissions.list(filter, *args, timeout=timeout) 866 867 868class AccountResources: 869 ''' 870 AccountResources enumerates the resources to which accounts have access. 871 The AccountResources service is read-only. 872 See `strongdm.models.AccountResource`. 873 ''' 874 def __init__(self, channel, client): 875 self.parent = client 876 self.stub = AccountResourcesStub(channel) 877 878 def list(self, filter, *args, timeout=None): 879 ''' 880 List gets a list of AccountResource records matching a given set of criteria. 881 ''' 882 deadline = None if timeout is None else time.time() + timeout 883 req = AccountResourceListRequest() 884 req.meta.CopyFrom(ListRequestMetadata()) 885 if self.parent.page_limit > 0: 886 req.meta.limit = self.parent.page_limit 887 if self.parent.snapshot_datetime is not None: 888 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 889 890 req.filter = plumbing.quote_filter_args(filter, *args) 891 892 def generator(svc, req): 893 tries = 0 894 while True: 895 t = None if deadline is None else deadline - time.time() 896 try: 897 plumbing_response = svc.stub.List( 898 req, 899 metadata=svc.parent.get_metadata( 900 'AccountResources.List', req), 901 timeout=t) 902 except Exception as e: 903 if self.parent.shouldRetry(tries, e, deadline): 904 tries += 1 905 time.sleep( 906 self.parent.exponentialBackoff(tries, deadline)) 907 continue 908 raise plumbing.convert_error_to_porcelain(e) from e 909 tries = 0 910 for plumbing_item in plumbing_response.account_resources: 911 yield plumbing.convert_account_resource_to_porcelain( 912 plumbing_item) 913 if plumbing_response.meta.next_cursor == '': 914 break 915 req.meta.cursor = plumbing_response.meta.next_cursor 916 917 return generator(self, req) 918 919 920class SnapshotAccountResources: 921 ''' 922 SnapshotAccountResources exposes the read only methods of the AccountResources 923 service for historical queries. 924 ''' 925 def __init__(self, account_resources): 926 self.account_resources = account_resources 927 928 def list(self, filter, *args, timeout=None): 929 ''' 930 List gets a list of AccountResource records matching a given set of criteria. 931 ''' 932 return self.account_resources.list(filter, *args, timeout=timeout) 933 934 935class AccountResourcesHistory: 936 ''' 937 AccountResourcesHistory records all changes to the state of a AccountResource. 938 See `strongdm.models.AccountResourceHistory`. 939 ''' 940 def __init__(self, channel, client): 941 self.parent = client 942 self.stub = AccountResourcesHistoryStub(channel) 943 944 def list(self, filter, *args, timeout=None): 945 ''' 946 List gets a list of AccountResourceHistory records matching a given set of criteria. 947 ''' 948 deadline = None if timeout is None else time.time() + timeout 949 req = AccountResourceHistoryListRequest() 950 req.meta.CopyFrom(ListRequestMetadata()) 951 if self.parent.page_limit > 0: 952 req.meta.limit = self.parent.page_limit 953 if self.parent.snapshot_datetime is not None: 954 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 955 956 req.filter = plumbing.quote_filter_args(filter, *args) 957 958 def generator(svc, req): 959 tries = 0 960 while True: 961 t = None if deadline is None else deadline - time.time() 962 try: 963 plumbing_response = svc.stub.List( 964 req, 965 metadata=svc.parent.get_metadata( 966 'AccountResourcesHistory.List', req), 967 timeout=t) 968 except Exception as e: 969 if self.parent.shouldRetry(tries, e, deadline): 970 tries += 1 971 time.sleep( 972 self.parent.exponentialBackoff(tries, deadline)) 973 continue 974 raise plumbing.convert_error_to_porcelain(e) from e 975 tries = 0 976 for plumbing_item in plumbing_response.history: 977 yield plumbing.convert_account_resource_history_to_porcelain( 978 plumbing_item) 979 if plumbing_response.meta.next_cursor == '': 980 break 981 req.meta.cursor = plumbing_response.meta.next_cursor 982 983 return generator(self, req) 984 985 986class Accounts: 987 ''' 988 Accounts are users that have access to strongDM. There are two types of accounts: 989 1. **Users:** humans who are authenticated through username and password or SSO. 990 2. **Service Accounts:** machines that are authenticated using a service token. 991 3. **Tokens** are access keys with permissions that can be used for authentication. 992 See: 993 `strongdm.models.Service` 994 `strongdm.models.Token` 995 `strongdm.models.User` 996 ''' 997 def __init__(self, channel, client): 998 self.parent = client 999 self.stub = AccountsStub(channel) 1000 1001 def create(self, account, timeout=None): 1002 ''' 1003 Create registers a new Account. 1004 ''' 1005 deadline = None if timeout is None else time.time() + timeout 1006 req = AccountCreateRequest() 1007 1008 if account is not None: 1009 req.account.CopyFrom(plumbing.convert_account_to_plumbing(account)) 1010 tries = 0 1011 plumbing_response = None 1012 while True: 1013 t = None if deadline is None else deadline - time.time() 1014 try: 1015 plumbing_response = self.stub.Create( 1016 req, 1017 metadata=self.parent.get_metadata('Accounts.Create', req), 1018 timeout=t) 1019 except Exception as e: 1020 if self.parent.shouldRetry(tries, e, deadline): 1021 tries += 1 1022 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1023 continue 1024 raise plumbing.convert_error_to_porcelain(e) from e 1025 break 1026 1027 resp = models.AccountCreateResponse() 1028 resp.access_key = (plumbing_response.access_key) 1029 resp.account = plumbing.convert_account_to_porcelain( 1030 plumbing_response.account) 1031 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 1032 plumbing_response.meta) 1033 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1034 plumbing_response.rate_limit) 1035 resp.secret_key = (plumbing_response.secret_key) 1036 resp.token = (plumbing_response.token) 1037 return resp 1038 1039 def get(self, id, timeout=None): 1040 ''' 1041 Get reads one Account by ID. 1042 ''' 1043 deadline = None if timeout is None else time.time() + timeout 1044 req = AccountGetRequest() 1045 if self.parent.snapshot_datetime is not None: 1046 req.meta.CopyFrom(GetRequestMetadata()) 1047 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1048 1049 req.id = (id) 1050 tries = 0 1051 plumbing_response = None 1052 while True: 1053 t = None if deadline is None else deadline - time.time() 1054 try: 1055 plumbing_response = self.stub.Get( 1056 req, 1057 metadata=self.parent.get_metadata('Accounts.Get', req), 1058 timeout=t) 1059 except Exception as e: 1060 if self.parent.shouldRetry(tries, e, deadline): 1061 tries += 1 1062 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1063 continue 1064 raise plumbing.convert_error_to_porcelain(e) from e 1065 break 1066 1067 resp = models.AccountGetResponse() 1068 resp.account = plumbing.convert_account_to_porcelain( 1069 plumbing_response.account) 1070 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1071 plumbing_response.meta) 1072 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1073 plumbing_response.rate_limit) 1074 return resp 1075 1076 def update(self, account, timeout=None): 1077 ''' 1078 Update replaces all the fields of an Account by ID. 1079 ''' 1080 deadline = None if timeout is None else time.time() + timeout 1081 req = AccountUpdateRequest() 1082 1083 if account is not None: 1084 req.account.CopyFrom(plumbing.convert_account_to_plumbing(account)) 1085 tries = 0 1086 plumbing_response = None 1087 while True: 1088 t = None if deadline is None else deadline - time.time() 1089 try: 1090 plumbing_response = self.stub.Update( 1091 req, 1092 metadata=self.parent.get_metadata('Accounts.Update', req), 1093 timeout=t) 1094 except Exception as e: 1095 if self.parent.shouldRetry(tries, e, deadline): 1096 tries += 1 1097 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1098 continue 1099 raise plumbing.convert_error_to_porcelain(e) from e 1100 break 1101 1102 resp = models.AccountUpdateResponse() 1103 resp.account = plumbing.convert_account_to_porcelain( 1104 plumbing_response.account) 1105 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 1106 plumbing_response.meta) 1107 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1108 plumbing_response.rate_limit) 1109 return resp 1110 1111 def delete(self, id, timeout=None): 1112 ''' 1113 Delete removes an Account by ID. 1114 ''' 1115 deadline = None if timeout is None else time.time() + timeout 1116 req = AccountDeleteRequest() 1117 1118 req.id = (id) 1119 tries = 0 1120 plumbing_response = None 1121 while True: 1122 t = None if deadline is None else deadline - time.time() 1123 try: 1124 plumbing_response = self.stub.Delete( 1125 req, 1126 metadata=self.parent.get_metadata('Accounts.Delete', req), 1127 timeout=t) 1128 except Exception as e: 1129 if self.parent.shouldRetry(tries, e, deadline): 1130 tries += 1 1131 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1132 continue 1133 raise plumbing.convert_error_to_porcelain(e) from e 1134 break 1135 1136 resp = models.AccountDeleteResponse() 1137 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 1138 plumbing_response.meta) 1139 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1140 plumbing_response.rate_limit) 1141 return resp 1142 1143 def list(self, filter, *args, timeout=None): 1144 ''' 1145 List gets a list of Accounts matching a given set of criteria. 1146 ''' 1147 deadline = None if timeout is None else time.time() + timeout 1148 req = AccountListRequest() 1149 req.meta.CopyFrom(ListRequestMetadata()) 1150 if self.parent.page_limit > 0: 1151 req.meta.limit = self.parent.page_limit 1152 if self.parent.snapshot_datetime is not None: 1153 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1154 1155 req.filter = plumbing.quote_filter_args(filter, *args) 1156 1157 def generator(svc, req): 1158 tries = 0 1159 while True: 1160 t = None if deadline is None else deadline - time.time() 1161 try: 1162 plumbing_response = svc.stub.List( 1163 req, 1164 metadata=svc.parent.get_metadata('Accounts.List', req), 1165 timeout=t) 1166 except Exception as e: 1167 if self.parent.shouldRetry(tries, e, deadline): 1168 tries += 1 1169 time.sleep( 1170 self.parent.exponentialBackoff(tries, deadline)) 1171 continue 1172 raise plumbing.convert_error_to_porcelain(e) from e 1173 tries = 0 1174 for plumbing_item in plumbing_response.accounts: 1175 yield plumbing.convert_account_to_porcelain(plumbing_item) 1176 if plumbing_response.meta.next_cursor == '': 1177 break 1178 req.meta.cursor = plumbing_response.meta.next_cursor 1179 1180 return generator(self, req) 1181 1182 1183class SnapshotAccounts: 1184 ''' 1185 SnapshotAccounts exposes the read only methods of the Accounts 1186 service for historical queries. 1187 ''' 1188 def __init__(self, accounts): 1189 self.accounts = accounts 1190 1191 def get(self, id, timeout=None): 1192 ''' 1193 Get reads one Account by ID. 1194 ''' 1195 return self.accounts.get(id, timeout=timeout) 1196 1197 def list(self, filter, *args, timeout=None): 1198 ''' 1199 List gets a list of Accounts matching a given set of criteria. 1200 ''' 1201 return self.accounts.list(filter, *args, timeout=timeout) 1202 1203 1204class AccountsHistory: 1205 ''' 1206 AccountsHistory records all changes to the state of an Account. 1207 See `strongdm.models.AccountHistory`. 1208 ''' 1209 def __init__(self, channel, client): 1210 self.parent = client 1211 self.stub = AccountsHistoryStub(channel) 1212 1213 def list(self, filter, *args, timeout=None): 1214 ''' 1215 List gets a list of AccountHistory records matching a given set of criteria. 1216 ''' 1217 deadline = None if timeout is None else time.time() + timeout 1218 req = AccountHistoryListRequest() 1219 req.meta.CopyFrom(ListRequestMetadata()) 1220 if self.parent.page_limit > 0: 1221 req.meta.limit = self.parent.page_limit 1222 if self.parent.snapshot_datetime is not None: 1223 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1224 1225 req.filter = plumbing.quote_filter_args(filter, *args) 1226 1227 def generator(svc, req): 1228 tries = 0 1229 while True: 1230 t = None if deadline is None else deadline - time.time() 1231 try: 1232 plumbing_response = svc.stub.List( 1233 req, 1234 metadata=svc.parent.get_metadata( 1235 'AccountsHistory.List', req), 1236 timeout=t) 1237 except Exception as e: 1238 if self.parent.shouldRetry(tries, e, deadline): 1239 tries += 1 1240 time.sleep( 1241 self.parent.exponentialBackoff(tries, deadline)) 1242 continue 1243 raise plumbing.convert_error_to_porcelain(e) from e 1244 tries = 0 1245 for plumbing_item in plumbing_response.history: 1246 yield plumbing.convert_account_history_to_porcelain( 1247 plumbing_item) 1248 if plumbing_response.meta.next_cursor == '': 1249 break 1250 req.meta.cursor = plumbing_response.meta.next_cursor 1251 1252 return generator(self, req) 1253 1254 1255class Activities: 1256 ''' 1257 An Activity is a record of an action taken against a strongDM deployment, e.g. 1258 a user creation, resource deletion, sso configuration change, etc. The Activities 1259 service is read-only. 1260 See `strongdm.models.Activity`. 1261 ''' 1262 def __init__(self, channel, client): 1263 self.parent = client 1264 self.stub = ActivitiesStub(channel) 1265 1266 def get(self, id, timeout=None): 1267 ''' 1268 Get reads one Activity by ID. 1269 ''' 1270 deadline = None if timeout is None else time.time() + timeout 1271 req = ActivityGetRequest() 1272 if self.parent.snapshot_datetime is not None: 1273 req.meta.CopyFrom(GetRequestMetadata()) 1274 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1275 1276 req.id = (id) 1277 tries = 0 1278 plumbing_response = None 1279 while True: 1280 t = None if deadline is None else deadline - time.time() 1281 try: 1282 plumbing_response = self.stub.Get( 1283 req, 1284 metadata=self.parent.get_metadata('Activities.Get', req), 1285 timeout=t) 1286 except Exception as e: 1287 if self.parent.shouldRetry(tries, e, deadline): 1288 tries += 1 1289 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1290 continue 1291 raise plumbing.convert_error_to_porcelain(e) from e 1292 break 1293 1294 resp = models.ActivityGetResponse() 1295 resp.activity = plumbing.convert_activity_to_porcelain( 1296 plumbing_response.activity) 1297 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1298 plumbing_response.meta) 1299 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1300 plumbing_response.rate_limit) 1301 return resp 1302 1303 def list(self, filter, *args, timeout=None): 1304 ''' 1305 List gets a list of Activities matching a given set of criteria. 1306 The 'before' and 'after' filters can be used to control the time 1307 range of the output activities. If not provided, one week of back 1308 of activities will be returned. 1309 ''' 1310 deadline = None if timeout is None else time.time() + timeout 1311 req = ActivityListRequest() 1312 req.meta.CopyFrom(ListRequestMetadata()) 1313 if self.parent.page_limit > 0: 1314 req.meta.limit = self.parent.page_limit 1315 if self.parent.snapshot_datetime is not None: 1316 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1317 1318 req.filter = plumbing.quote_filter_args(filter, *args) 1319 1320 def generator(svc, req): 1321 tries = 0 1322 while True: 1323 t = None if deadline is None else deadline - time.time() 1324 try: 1325 plumbing_response = svc.stub.List( 1326 req, 1327 metadata=svc.parent.get_metadata( 1328 'Activities.List', req), 1329 timeout=t) 1330 except Exception as e: 1331 if self.parent.shouldRetry(tries, e, deadline): 1332 tries += 1 1333 time.sleep( 1334 self.parent.exponentialBackoff(tries, deadline)) 1335 continue 1336 raise plumbing.convert_error_to_porcelain(e) from e 1337 tries = 0 1338 for plumbing_item in plumbing_response.activities: 1339 yield plumbing.convert_activity_to_porcelain(plumbing_item) 1340 if plumbing_response.meta.next_cursor == '': 1341 break 1342 req.meta.cursor = plumbing_response.meta.next_cursor 1343 1344 return generator(self, req) 1345 1346 1347class ApprovalWorkflowApprovers: 1348 ''' 1349 ApprovalWorkflowApprovers link approval workflow approvers to an ApprovalWorkflowStep 1350 See `strongdm.models.ApprovalWorkflowApprover`. 1351 ''' 1352 def __init__(self, channel, client): 1353 self.parent = client 1354 self.stub = ApprovalWorkflowApproversStub(channel) 1355 1356 def create(self, approval_workflow_approver, timeout=None): 1357 ''' 1358 Deprecated: Create creates a new approval workflow approver. 1359 ''' 1360 deadline = None if timeout is None else time.time() + timeout 1361 req = ApprovalWorkflowApproverCreateRequest() 1362 1363 if approval_workflow_approver is not None: 1364 req.approval_workflow_approver.CopyFrom( 1365 plumbing.convert_approval_workflow_approver_to_plumbing( 1366 approval_workflow_approver)) 1367 tries = 0 1368 plumbing_response = None 1369 while True: 1370 t = None if deadline is None else deadline - time.time() 1371 try: 1372 plumbing_response = self.stub.Create( 1373 req, 1374 metadata=self.parent.get_metadata( 1375 'ApprovalWorkflowApprovers.Create', req), 1376 timeout=t) 1377 except Exception as e: 1378 if self.parent.shouldRetry(tries, e, deadline): 1379 tries += 1 1380 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1381 continue 1382 raise plumbing.convert_error_to_porcelain(e) from e 1383 break 1384 1385 resp = models.ApprovalWorkflowApproverCreateResponse() 1386 resp.approval_workflow_approver = plumbing.convert_approval_workflow_approver_to_porcelain( 1387 plumbing_response.approval_workflow_approver) 1388 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1389 plumbing_response.rate_limit) 1390 return resp 1391 1392 def get(self, id, timeout=None): 1393 ''' 1394 Deprecated: Get reads one approval workflow approver by ID. 1395 ''' 1396 deadline = None if timeout is None else time.time() + timeout 1397 req = ApprovalWorkflowApproverGetRequest() 1398 if self.parent.snapshot_datetime is not None: 1399 req.meta.CopyFrom(GetRequestMetadata()) 1400 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1401 1402 req.id = (id) 1403 tries = 0 1404 plumbing_response = None 1405 while True: 1406 t = None if deadline is None else deadline - time.time() 1407 try: 1408 plumbing_response = self.stub.Get( 1409 req, 1410 metadata=self.parent.get_metadata( 1411 'ApprovalWorkflowApprovers.Get', req), 1412 timeout=t) 1413 except Exception as e: 1414 if self.parent.shouldRetry(tries, e, deadline): 1415 tries += 1 1416 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1417 continue 1418 raise plumbing.convert_error_to_porcelain(e) from e 1419 break 1420 1421 resp = models.ApprovalWorkflowApproverGetResponse() 1422 resp.approval_workflow_approver = plumbing.convert_approval_workflow_approver_to_porcelain( 1423 plumbing_response.approval_workflow_approver) 1424 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1425 plumbing_response.meta) 1426 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1427 plumbing_response.rate_limit) 1428 return resp 1429 1430 def delete(self, id, timeout=None): 1431 ''' 1432 Deprecated: Delete deletes an existing approval workflow approver. 1433 ''' 1434 deadline = None if timeout is None else time.time() + timeout 1435 req = ApprovalWorkflowApproverDeleteRequest() 1436 1437 req.id = (id) 1438 tries = 0 1439 plumbing_response = None 1440 while True: 1441 t = None if deadline is None else deadline - time.time() 1442 try: 1443 plumbing_response = self.stub.Delete( 1444 req, 1445 metadata=self.parent.get_metadata( 1446 'ApprovalWorkflowApprovers.Delete', req), 1447 timeout=t) 1448 except Exception as e: 1449 if self.parent.shouldRetry(tries, e, deadline): 1450 tries += 1 1451 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1452 continue 1453 raise plumbing.convert_error_to_porcelain(e) from e 1454 break 1455 1456 resp = models.ApprovalWorkflowApproverDeleteResponse() 1457 resp.id = (plumbing_response.id) 1458 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1459 plumbing_response.rate_limit) 1460 return resp 1461 1462 def list(self, filter, *args, timeout=None): 1463 ''' 1464 Deprecated: Lists existing approval workflow approvers. 1465 ''' 1466 deadline = None if timeout is None else time.time() + timeout 1467 req = ApprovalWorkflowApproverListRequest() 1468 req.meta.CopyFrom(ListRequestMetadata()) 1469 if self.parent.page_limit > 0: 1470 req.meta.limit = self.parent.page_limit 1471 if self.parent.snapshot_datetime is not None: 1472 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1473 1474 req.filter = plumbing.quote_filter_args(filter, *args) 1475 1476 def generator(svc, req): 1477 tries = 0 1478 while True: 1479 t = None if deadline is None else deadline - time.time() 1480 try: 1481 plumbing_response = svc.stub.List( 1482 req, 1483 metadata=svc.parent.get_metadata( 1484 'ApprovalWorkflowApprovers.List', req), 1485 timeout=t) 1486 except Exception as e: 1487 if self.parent.shouldRetry(tries, e, deadline): 1488 tries += 1 1489 time.sleep( 1490 self.parent.exponentialBackoff(tries, deadline)) 1491 continue 1492 raise plumbing.convert_error_to_porcelain(e) from e 1493 tries = 0 1494 for plumbing_item in plumbing_response.approval_workflow_approvers: 1495 yield plumbing.convert_approval_workflow_approver_to_porcelain( 1496 plumbing_item) 1497 if plumbing_response.meta.next_cursor == '': 1498 break 1499 req.meta.cursor = plumbing_response.meta.next_cursor 1500 1501 return generator(self, req) 1502 1503 1504class SnapshotApprovalWorkflowApprovers: 1505 ''' 1506 SnapshotApprovalWorkflowApprovers exposes the read only methods of the ApprovalWorkflowApprovers 1507 service for historical queries. 1508 ''' 1509 def __init__(self, approval_workflow_approvers): 1510 self.approval_workflow_approvers = approval_workflow_approvers 1511 1512 def get(self, id, timeout=None): 1513 ''' 1514 Deprecated: Get reads one approval workflow approver by ID. 1515 ''' 1516 return self.approval_workflow_approvers.get(id, timeout=timeout) 1517 1518 def list(self, filter, *args, timeout=None): 1519 ''' 1520 Deprecated: Lists existing approval workflow approvers. 1521 ''' 1522 return self.approval_workflow_approvers.list(filter, 1523 *args, 1524 timeout=timeout) 1525 1526 1527class ApprovalWorkflowApproversHistory: 1528 ''' 1529 ApprovalWorkflowApproversHistory records all changes to the state of an ApprovalWorkflowApprover. 1530 See `strongdm.models.ApprovalWorkflowApproverHistory`. 1531 ''' 1532 def __init__(self, channel, client): 1533 self.parent = client 1534 self.stub = ApprovalWorkflowApproversHistoryStub(channel) 1535 1536 def list(self, filter, *args, timeout=None): 1537 ''' 1538 List gets a list of ApprovalWorkflowApproverHistory records matching a given set of criteria. 1539 ''' 1540 deadline = None if timeout is None else time.time() + timeout 1541 req = ApprovalWorkflowApproverHistoryListRequest() 1542 req.meta.CopyFrom(ListRequestMetadata()) 1543 if self.parent.page_limit > 0: 1544 req.meta.limit = self.parent.page_limit 1545 if self.parent.snapshot_datetime is not None: 1546 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1547 1548 req.filter = plumbing.quote_filter_args(filter, *args) 1549 1550 def generator(svc, req): 1551 tries = 0 1552 while True: 1553 t = None if deadline is None else deadline - time.time() 1554 try: 1555 plumbing_response = svc.stub.List( 1556 req, 1557 metadata=svc.parent.get_metadata( 1558 'ApprovalWorkflowApproversHistory.List', req), 1559 timeout=t) 1560 except Exception as e: 1561 if self.parent.shouldRetry(tries, e, deadline): 1562 tries += 1 1563 time.sleep( 1564 self.parent.exponentialBackoff(tries, deadline)) 1565 continue 1566 raise plumbing.convert_error_to_porcelain(e) from e 1567 tries = 0 1568 for plumbing_item in plumbing_response.history: 1569 yield plumbing.convert_approval_workflow_approver_history_to_porcelain( 1570 plumbing_item) 1571 if plumbing_response.meta.next_cursor == '': 1572 break 1573 req.meta.cursor = plumbing_response.meta.next_cursor 1574 1575 return generator(self, req) 1576 1577 1578class ApprovalWorkflowSteps: 1579 ''' 1580 ApprovalWorkflowSteps link approval workflow steps to an ApprovalWorkflow 1581 See `strongdm.models.ApprovalWorkflowStep`. 1582 ''' 1583 def __init__(self, channel, client): 1584 self.parent = client 1585 self.stub = ApprovalWorkflowStepsStub(channel) 1586 1587 def create(self, approval_workflow_step, timeout=None): 1588 ''' 1589 Deprecated: Create creates a new approval workflow step. 1590 ''' 1591 deadline = None if timeout is None else time.time() + timeout 1592 req = ApprovalWorkflowStepCreateRequest() 1593 1594 if approval_workflow_step is not None: 1595 req.approval_workflow_step.CopyFrom( 1596 plumbing.convert_approval_workflow_step_to_plumbing( 1597 approval_workflow_step)) 1598 tries = 0 1599 plumbing_response = None 1600 while True: 1601 t = None if deadline is None else deadline - time.time() 1602 try: 1603 plumbing_response = self.stub.Create( 1604 req, 1605 metadata=self.parent.get_metadata( 1606 'ApprovalWorkflowSteps.Create', req), 1607 timeout=t) 1608 except Exception as e: 1609 if self.parent.shouldRetry(tries, e, deadline): 1610 tries += 1 1611 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1612 continue 1613 raise plumbing.convert_error_to_porcelain(e) from e 1614 break 1615 1616 resp = models.ApprovalWorkflowStepCreateResponse() 1617 resp.approval_workflow_step = plumbing.convert_approval_workflow_step_to_porcelain( 1618 plumbing_response.approval_workflow_step) 1619 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1620 plumbing_response.rate_limit) 1621 return resp 1622 1623 def get(self, id, timeout=None): 1624 ''' 1625 Deprecated: Get reads one approval workflow step by ID. 1626 ''' 1627 deadline = None if timeout is None else time.time() + timeout 1628 req = ApprovalWorkflowStepGetRequest() 1629 if self.parent.snapshot_datetime is not None: 1630 req.meta.CopyFrom(GetRequestMetadata()) 1631 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1632 1633 req.id = (id) 1634 tries = 0 1635 plumbing_response = None 1636 while True: 1637 t = None if deadline is None else deadline - time.time() 1638 try: 1639 plumbing_response = self.stub.Get( 1640 req, 1641 metadata=self.parent.get_metadata( 1642 'ApprovalWorkflowSteps.Get', req), 1643 timeout=t) 1644 except Exception as e: 1645 if self.parent.shouldRetry(tries, e, deadline): 1646 tries += 1 1647 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1648 continue 1649 raise plumbing.convert_error_to_porcelain(e) from e 1650 break 1651 1652 resp = models.ApprovalWorkflowStepGetResponse() 1653 resp.approval_workflow_step = plumbing.convert_approval_workflow_step_to_porcelain( 1654 plumbing_response.approval_workflow_step) 1655 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1656 plumbing_response.meta) 1657 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1658 plumbing_response.rate_limit) 1659 return resp 1660 1661 def delete(self, id, timeout=None): 1662 ''' 1663 Deprecated: Delete deletes an existing approval workflow step. 1664 ''' 1665 deadline = None if timeout is None else time.time() + timeout 1666 req = ApprovalWorkflowStepDeleteRequest() 1667 1668 req.id = (id) 1669 tries = 0 1670 plumbing_response = None 1671 while True: 1672 t = None if deadline is None else deadline - time.time() 1673 try: 1674 plumbing_response = self.stub.Delete( 1675 req, 1676 metadata=self.parent.get_metadata( 1677 'ApprovalWorkflowSteps.Delete', req), 1678 timeout=t) 1679 except Exception as e: 1680 if self.parent.shouldRetry(tries, e, deadline): 1681 tries += 1 1682 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1683 continue 1684 raise plumbing.convert_error_to_porcelain(e) from e 1685 break 1686 1687 resp = models.ApprovalWorkflowStepDeleteResponse() 1688 resp.id = (plumbing_response.id) 1689 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1690 plumbing_response.rate_limit) 1691 return resp 1692 1693 def list(self, filter, *args, timeout=None): 1694 ''' 1695 Deprecated: Lists existing approval workflow steps. 1696 ''' 1697 deadline = None if timeout is None else time.time() + timeout 1698 req = ApprovalWorkflowStepListRequest() 1699 req.meta.CopyFrom(ListRequestMetadata()) 1700 if self.parent.page_limit > 0: 1701 req.meta.limit = self.parent.page_limit 1702 if self.parent.snapshot_datetime is not None: 1703 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1704 1705 req.filter = plumbing.quote_filter_args(filter, *args) 1706 1707 def generator(svc, req): 1708 tries = 0 1709 while True: 1710 t = None if deadline is None else deadline - time.time() 1711 try: 1712 plumbing_response = svc.stub.List( 1713 req, 1714 metadata=svc.parent.get_metadata( 1715 'ApprovalWorkflowSteps.List', req), 1716 timeout=t) 1717 except Exception as e: 1718 if self.parent.shouldRetry(tries, e, deadline): 1719 tries += 1 1720 time.sleep( 1721 self.parent.exponentialBackoff(tries, deadline)) 1722 continue 1723 raise plumbing.convert_error_to_porcelain(e) from e 1724 tries = 0 1725 for plumbing_item in plumbing_response.approval_workflow_steps: 1726 yield plumbing.convert_approval_workflow_step_to_porcelain( 1727 plumbing_item) 1728 if plumbing_response.meta.next_cursor == '': 1729 break 1730 req.meta.cursor = plumbing_response.meta.next_cursor 1731 1732 return generator(self, req) 1733 1734 1735class SnapshotApprovalWorkflowSteps: 1736 ''' 1737 SnapshotApprovalWorkflowSteps exposes the read only methods of the ApprovalWorkflowSteps 1738 service for historical queries. 1739 ''' 1740 def __init__(self, approval_workflow_steps): 1741 self.approval_workflow_steps = approval_workflow_steps 1742 1743 def get(self, id, timeout=None): 1744 ''' 1745 Deprecated: Get reads one approval workflow step by ID. 1746 ''' 1747 return self.approval_workflow_steps.get(id, timeout=timeout) 1748 1749 def list(self, filter, *args, timeout=None): 1750 ''' 1751 Deprecated: Lists existing approval workflow steps. 1752 ''' 1753 return self.approval_workflow_steps.list(filter, 1754 *args, 1755 timeout=timeout) 1756 1757 1758class ApprovalWorkflowStepsHistory: 1759 ''' 1760 ApprovalWorkflowStepsHistory records all changes to the state of an ApprovalWorkflowStep. 1761 See `strongdm.models.ApprovalWorkflowStepHistory`. 1762 ''' 1763 def __init__(self, channel, client): 1764 self.parent = client 1765 self.stub = ApprovalWorkflowStepsHistoryStub(channel) 1766 1767 def list(self, filter, *args, timeout=None): 1768 ''' 1769 List gets a list of ApprovalWorkflowStepHistory records matching a given set of criteria. 1770 ''' 1771 deadline = None if timeout is None else time.time() + timeout 1772 req = ApprovalWorkflowStepHistoryListRequest() 1773 req.meta.CopyFrom(ListRequestMetadata()) 1774 if self.parent.page_limit > 0: 1775 req.meta.limit = self.parent.page_limit 1776 if self.parent.snapshot_datetime is not None: 1777 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1778 1779 req.filter = plumbing.quote_filter_args(filter, *args) 1780 1781 def generator(svc, req): 1782 tries = 0 1783 while True: 1784 t = None if deadline is None else deadline - time.time() 1785 try: 1786 plumbing_response = svc.stub.List( 1787 req, 1788 metadata=svc.parent.get_metadata( 1789 'ApprovalWorkflowStepsHistory.List', req), 1790 timeout=t) 1791 except Exception as e: 1792 if self.parent.shouldRetry(tries, e, deadline): 1793 tries += 1 1794 time.sleep( 1795 self.parent.exponentialBackoff(tries, deadline)) 1796 continue 1797 raise plumbing.convert_error_to_porcelain(e) from e 1798 tries = 0 1799 for plumbing_item in plumbing_response.history: 1800 yield plumbing.convert_approval_workflow_step_history_to_porcelain( 1801 plumbing_item) 1802 if plumbing_response.meta.next_cursor == '': 1803 break 1804 req.meta.cursor = plumbing_response.meta.next_cursor 1805 1806 return generator(self, req) 1807 1808 1809class ApprovalWorkflows: 1810 ''' 1811 ApprovalWorkflows are the mechanism by which requests for access can be viewed by authorized 1812 approvers and be approved or denied. 1813 See `strongdm.models.ApprovalWorkflow`. 1814 ''' 1815 def __init__(self, channel, client): 1816 self.parent = client 1817 self.stub = ApprovalWorkflowsStub(channel) 1818 1819 def create(self, approval_workflow, timeout=None): 1820 ''' 1821 Create creates a new approval workflow and requires a name and approval mode for the approval workflow. 1822 ''' 1823 deadline = None if timeout is None else time.time() + timeout 1824 req = ApprovalWorkflowCreateRequest() 1825 1826 if approval_workflow is not None: 1827 req.approval_workflow.CopyFrom( 1828 plumbing.convert_approval_workflow_to_plumbing( 1829 approval_workflow)) 1830 tries = 0 1831 plumbing_response = None 1832 while True: 1833 t = None if deadline is None else deadline - time.time() 1834 try: 1835 plumbing_response = self.stub.Create( 1836 req, 1837 metadata=self.parent.get_metadata( 1838 'ApprovalWorkflows.Create', req), 1839 timeout=t) 1840 except Exception as e: 1841 if self.parent.shouldRetry(tries, e, deadline): 1842 tries += 1 1843 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1844 continue 1845 raise plumbing.convert_error_to_porcelain(e) from e 1846 break 1847 1848 resp = models.ApprovalWorkflowCreateResponse() 1849 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1850 plumbing_response.approval_workflow) 1851 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1852 plumbing_response.rate_limit) 1853 return resp 1854 1855 def get(self, id, timeout=None): 1856 ''' 1857 Get reads one approval workflow by ID. 1858 ''' 1859 deadline = None if timeout is None else time.time() + timeout 1860 req = ApprovalWorkflowGetRequest() 1861 if self.parent.snapshot_datetime is not None: 1862 req.meta.CopyFrom(GetRequestMetadata()) 1863 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1864 1865 req.id = (id) 1866 tries = 0 1867 plumbing_response = None 1868 while True: 1869 t = None if deadline is None else deadline - time.time() 1870 try: 1871 plumbing_response = self.stub.Get( 1872 req, 1873 metadata=self.parent.get_metadata('ApprovalWorkflows.Get', 1874 req), 1875 timeout=t) 1876 except Exception as e: 1877 if self.parent.shouldRetry(tries, e, deadline): 1878 tries += 1 1879 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1880 continue 1881 raise plumbing.convert_error_to_porcelain(e) from e 1882 break 1883 1884 resp = models.ApprovalWorkflowGetResponse() 1885 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1886 plumbing_response.approval_workflow) 1887 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1888 plumbing_response.meta) 1889 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1890 plumbing_response.rate_limit) 1891 return resp 1892 1893 def delete(self, id, timeout=None): 1894 ''' 1895 Delete deletes an existing approval workflow. 1896 ''' 1897 deadline = None if timeout is None else time.time() + timeout 1898 req = ApprovalWorkflowDeleteRequest() 1899 1900 req.id = (id) 1901 tries = 0 1902 plumbing_response = None 1903 while True: 1904 t = None if deadline is None else deadline - time.time() 1905 try: 1906 plumbing_response = self.stub.Delete( 1907 req, 1908 metadata=self.parent.get_metadata( 1909 'ApprovalWorkflows.Delete', req), 1910 timeout=t) 1911 except Exception as e: 1912 if self.parent.shouldRetry(tries, e, deadline): 1913 tries += 1 1914 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1915 continue 1916 raise plumbing.convert_error_to_porcelain(e) from e 1917 break 1918 1919 resp = models.ApprovalWorkflowDeleteResponse() 1920 resp.id = (plumbing_response.id) 1921 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1922 plumbing_response.rate_limit) 1923 return resp 1924 1925 def update(self, approval_workflow, timeout=None): 1926 ''' 1927 Update updates an existing approval workflow. 1928 ''' 1929 deadline = None if timeout is None else time.time() + timeout 1930 req = ApprovalWorkflowUpdateRequest() 1931 1932 if approval_workflow is not None: 1933 req.approval_workflow.CopyFrom( 1934 plumbing.convert_approval_workflow_to_plumbing( 1935 approval_workflow)) 1936 tries = 0 1937 plumbing_response = None 1938 while True: 1939 t = None if deadline is None else deadline - time.time() 1940 try: 1941 plumbing_response = self.stub.Update( 1942 req, 1943 metadata=self.parent.get_metadata( 1944 'ApprovalWorkflows.Update', req), 1945 timeout=t) 1946 except Exception as e: 1947 if self.parent.shouldRetry(tries, e, deadline): 1948 tries += 1 1949 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1950 continue 1951 raise plumbing.convert_error_to_porcelain(e) from e 1952 break 1953 1954 resp = models.ApprovalWorkflowUpdateResponse() 1955 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1956 plumbing_response.approval_workflow) 1957 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1958 plumbing_response.rate_limit) 1959 return resp 1960 1961 def list(self, filter, *args, timeout=None): 1962 ''' 1963 Lists existing approval workflows. 1964 ''' 1965 deadline = None if timeout is None else time.time() + timeout 1966 req = ApprovalWorkflowListRequest() 1967 req.meta.CopyFrom(ListRequestMetadata()) 1968 if self.parent.page_limit > 0: 1969 req.meta.limit = self.parent.page_limit 1970 if self.parent.snapshot_datetime is not None: 1971 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1972 1973 req.filter = plumbing.quote_filter_args(filter, *args) 1974 1975 def generator(svc, req): 1976 tries = 0 1977 while True: 1978 t = None if deadline is None else deadline - time.time() 1979 try: 1980 plumbing_response = svc.stub.List( 1981 req, 1982 metadata=svc.parent.get_metadata( 1983 'ApprovalWorkflows.List', req), 1984 timeout=t) 1985 except Exception as e: 1986 if self.parent.shouldRetry(tries, e, deadline): 1987 tries += 1 1988 time.sleep( 1989 self.parent.exponentialBackoff(tries, deadline)) 1990 continue 1991 raise plumbing.convert_error_to_porcelain(e) from e 1992 tries = 0 1993 for plumbing_item in plumbing_response.approval_workflows: 1994 yield plumbing.convert_approval_workflow_to_porcelain( 1995 plumbing_item) 1996 if plumbing_response.meta.next_cursor == '': 1997 break 1998 req.meta.cursor = plumbing_response.meta.next_cursor 1999 2000 return generator(self, req) 2001 2002 2003class SnapshotApprovalWorkflows: 2004 ''' 2005 SnapshotApprovalWorkflows exposes the read only methods of the ApprovalWorkflows 2006 service for historical queries. 2007 ''' 2008 def __init__(self, approval_workflows): 2009 self.approval_workflows = approval_workflows 2010 2011 def get(self, id, timeout=None): 2012 ''' 2013 Get reads one approval workflow by ID. 2014 ''' 2015 return self.approval_workflows.get(id, timeout=timeout) 2016 2017 def list(self, filter, *args, timeout=None): 2018 ''' 2019 Lists existing approval workflows. 2020 ''' 2021 return self.approval_workflows.list(filter, *args, timeout=timeout) 2022 2023 2024class ApprovalWorkflowsHistory: 2025 ''' 2026 ApprovalWorkflowsHistory records all changes to the state of an ApprovalWorkflow. 2027 See `strongdm.models.ApprovalWorkflowHistory`. 2028 ''' 2029 def __init__(self, channel, client): 2030 self.parent = client 2031 self.stub = ApprovalWorkflowsHistoryStub(channel) 2032 2033 def list(self, filter, *args, timeout=None): 2034 ''' 2035 List gets a list of ApprovalWorkflowHistory records matching a given set of criteria. 2036 ''' 2037 deadline = None if timeout is None else time.time() + timeout 2038 req = ApprovalWorkflowHistoryListRequest() 2039 req.meta.CopyFrom(ListRequestMetadata()) 2040 if self.parent.page_limit > 0: 2041 req.meta.limit = self.parent.page_limit 2042 if self.parent.snapshot_datetime is not None: 2043 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2044 2045 req.filter = plumbing.quote_filter_args(filter, *args) 2046 2047 def generator(svc, req): 2048 tries = 0 2049 while True: 2050 t = None if deadline is None else deadline - time.time() 2051 try: 2052 plumbing_response = svc.stub.List( 2053 req, 2054 metadata=svc.parent.get_metadata( 2055 'ApprovalWorkflowsHistory.List', req), 2056 timeout=t) 2057 except Exception as e: 2058 if self.parent.shouldRetry(tries, e, deadline): 2059 tries += 1 2060 time.sleep( 2061 self.parent.exponentialBackoff(tries, deadline)) 2062 continue 2063 raise plumbing.convert_error_to_porcelain(e) from e 2064 tries = 0 2065 for plumbing_item in plumbing_response.history: 2066 yield plumbing.convert_approval_workflow_history_to_porcelain( 2067 plumbing_item) 2068 if plumbing_response.meta.next_cursor == '': 2069 break 2070 req.meta.cursor = plumbing_response.meta.next_cursor 2071 2072 return generator(self, req) 2073 2074 2075class ControlPanel: 2076 ''' 2077 ControlPanel contains all administrative controls. 2078 ''' 2079 def __init__(self, channel, client): 2080 self.parent = client 2081 self.stub = ControlPanelStub(channel) 2082 2083 def get_sshca_public_key(self, timeout=None): 2084 ''' 2085 GetSSHCAPublicKey retrieves the SSH CA public key. 2086 ''' 2087 deadline = None if timeout is None else time.time() + timeout 2088 req = ControlPanelGetSSHCAPublicKeyRequest() 2089 2090 tries = 0 2091 plumbing_response = None 2092 while True: 2093 t = None if deadline is None else deadline - time.time() 2094 try: 2095 plumbing_response = self.stub.GetSSHCAPublicKey( 2096 req, 2097 metadata=self.parent.get_metadata( 2098 'ControlPanel.GetSSHCAPublicKey', req), 2099 timeout=t) 2100 except Exception as e: 2101 if self.parent.shouldRetry(tries, e, deadline): 2102 tries += 1 2103 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2104 continue 2105 raise plumbing.convert_error_to_porcelain(e) from e 2106 break 2107 2108 resp = models.ControlPanelGetSSHCAPublicKeyResponse() 2109 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2110 plumbing_response.meta) 2111 resp.public_key = (plumbing_response.public_key) 2112 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2113 plumbing_response.rate_limit) 2114 return resp 2115 2116 def get_rdpca_public_key(self, timeout=None): 2117 ''' 2118 GetRDPCAPublicKey retrieves the RDP CA public key. 2119 ''' 2120 deadline = None if timeout is None else time.time() + timeout 2121 req = ControlPanelGetRDPCAPublicKeyRequest() 2122 2123 tries = 0 2124 plumbing_response = None 2125 while True: 2126 t = None if deadline is None else deadline - time.time() 2127 try: 2128 plumbing_response = self.stub.GetRDPCAPublicKey( 2129 req, 2130 metadata=self.parent.get_metadata( 2131 'ControlPanel.GetRDPCAPublicKey', req), 2132 timeout=t) 2133 except Exception as e: 2134 if self.parent.shouldRetry(tries, e, deadline): 2135 tries += 1 2136 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2137 continue 2138 raise plumbing.convert_error_to_porcelain(e) from e 2139 break 2140 2141 resp = models.ControlPanelGetRDPCAPublicKeyResponse() 2142 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2143 plumbing_response.meta) 2144 resp.public_key = (plumbing_response.public_key) 2145 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2146 plumbing_response.rate_limit) 2147 return resp 2148 2149 def verify_jwt(self, token, timeout=None): 2150 ''' 2151 VerifyJWT reports whether the given JWT token (x-sdm-token) is valid. 2152 ''' 2153 deadline = None if timeout is None else time.time() + timeout 2154 req = ControlPanelVerifyJWTRequest() 2155 2156 req.token = (token) 2157 tries = 0 2158 plumbing_response = None 2159 while True: 2160 t = None if deadline is None else deadline - time.time() 2161 try: 2162 plumbing_response = self.stub.VerifyJWT( 2163 req, 2164 metadata=self.parent.get_metadata('ControlPanel.VerifyJWT', 2165 req), 2166 timeout=t) 2167 except Exception as e: 2168 if self.parent.shouldRetry(tries, e, deadline): 2169 tries += 1 2170 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2171 continue 2172 raise plumbing.convert_error_to_porcelain(e) from e 2173 break 2174 2175 resp = models.ControlPanelVerifyJWTResponse() 2176 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2177 plumbing_response.meta) 2178 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2179 plumbing_response.rate_limit) 2180 resp.valid = (plumbing_response.valid) 2181 return resp 2182 2183 2184class Roles: 2185 ''' 2186 A Role has a list of access rules which determine which Resources the members 2187 of the Role have access to. An Account can be a member of multiple Roles via 2188 AccountAttachments. 2189 See `strongdm.models.Role`. 2190 ''' 2191 def __init__(self, channel, client): 2192 self.parent = client 2193 self.stub = RolesStub(channel) 2194 2195 def create(self, role, timeout=None): 2196 ''' 2197 Create registers a new Role. 2198 ''' 2199 deadline = None if timeout is None else time.time() + timeout 2200 req = RoleCreateRequest() 2201 2202 if role is not None: 2203 req.role.CopyFrom(plumbing.convert_role_to_plumbing(role)) 2204 tries = 0 2205 plumbing_response = None 2206 while True: 2207 t = None if deadline is None else deadline - time.time() 2208 try: 2209 plumbing_response = self.stub.Create( 2210 req, 2211 metadata=self.parent.get_metadata('Roles.Create', req), 2212 timeout=t) 2213 except Exception as e: 2214 if self.parent.shouldRetry(tries, e, deadline): 2215 tries += 1 2216 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2217 continue 2218 raise plumbing.convert_error_to_porcelain(e) from e 2219 break 2220 2221 resp = models.RoleCreateResponse() 2222 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2223 plumbing_response.meta) 2224 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2225 plumbing_response.rate_limit) 2226 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2227 return resp 2228 2229 def get(self, id, timeout=None): 2230 ''' 2231 Get reads one Role by ID. 2232 ''' 2233 deadline = None if timeout is None else time.time() + timeout 2234 req = RoleGetRequest() 2235 if self.parent.snapshot_datetime is not None: 2236 req.meta.CopyFrom(GetRequestMetadata()) 2237 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2238 2239 req.id = (id) 2240 tries = 0 2241 plumbing_response = None 2242 while True: 2243 t = None if deadline is None else deadline - time.time() 2244 try: 2245 plumbing_response = self.stub.Get( 2246 req, 2247 metadata=self.parent.get_metadata('Roles.Get', req), 2248 timeout=t) 2249 except Exception as e: 2250 if self.parent.shouldRetry(tries, e, deadline): 2251 tries += 1 2252 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2253 continue 2254 raise plumbing.convert_error_to_porcelain(e) from e 2255 break 2256 2257 resp = models.RoleGetResponse() 2258 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2259 plumbing_response.meta) 2260 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2261 plumbing_response.rate_limit) 2262 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2263 return resp 2264 2265 def update(self, role, timeout=None): 2266 ''' 2267 Update replaces all the fields of a Role by ID. 2268 ''' 2269 deadline = None if timeout is None else time.time() + timeout 2270 req = RoleUpdateRequest() 2271 2272 if role is not None: 2273 req.role.CopyFrom(plumbing.convert_role_to_plumbing(role)) 2274 tries = 0 2275 plumbing_response = None 2276 while True: 2277 t = None if deadline is None else deadline - time.time() 2278 try: 2279 plumbing_response = self.stub.Update( 2280 req, 2281 metadata=self.parent.get_metadata('Roles.Update', req), 2282 timeout=t) 2283 except Exception as e: 2284 if self.parent.shouldRetry(tries, e, deadline): 2285 tries += 1 2286 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2287 continue 2288 raise plumbing.convert_error_to_porcelain(e) from e 2289 break 2290 2291 resp = models.RoleUpdateResponse() 2292 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2293 plumbing_response.meta) 2294 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2295 plumbing_response.rate_limit) 2296 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2297 return resp 2298 2299 def delete(self, id, timeout=None): 2300 ''' 2301 Delete removes a Role by ID. 2302 ''' 2303 deadline = None if timeout is None else time.time() + timeout 2304 req = RoleDeleteRequest() 2305 2306 req.id = (id) 2307 tries = 0 2308 plumbing_response = None 2309 while True: 2310 t = None if deadline is None else deadline - time.time() 2311 try: 2312 plumbing_response = self.stub.Delete( 2313 req, 2314 metadata=self.parent.get_metadata('Roles.Delete', req), 2315 timeout=t) 2316 except Exception as e: 2317 if self.parent.shouldRetry(tries, e, deadline): 2318 tries += 1 2319 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2320 continue 2321 raise plumbing.convert_error_to_porcelain(e) from e 2322 break 2323 2324 resp = models.RoleDeleteResponse() 2325 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2326 plumbing_response.meta) 2327 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2328 plumbing_response.rate_limit) 2329 return resp 2330 2331 def list(self, filter, *args, timeout=None): 2332 ''' 2333 List gets a list of Roles matching a given set of criteria. 2334 ''' 2335 deadline = None if timeout is None else time.time() + timeout 2336 req = RoleListRequest() 2337 req.meta.CopyFrom(ListRequestMetadata()) 2338 if self.parent.page_limit > 0: 2339 req.meta.limit = self.parent.page_limit 2340 if self.parent.snapshot_datetime is not None: 2341 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2342 2343 req.filter = plumbing.quote_filter_args(filter, *args) 2344 2345 def generator(svc, req): 2346 tries = 0 2347 while True: 2348 t = None if deadline is None else deadline - time.time() 2349 try: 2350 plumbing_response = svc.stub.List( 2351 req, 2352 metadata=svc.parent.get_metadata('Roles.List', req), 2353 timeout=t) 2354 except Exception as e: 2355 if self.parent.shouldRetry(tries, e, deadline): 2356 tries += 1 2357 time.sleep( 2358 self.parent.exponentialBackoff(tries, deadline)) 2359 continue 2360 raise plumbing.convert_error_to_porcelain(e) from e 2361 tries = 0 2362 for plumbing_item in plumbing_response.roles: 2363 yield plumbing.convert_role_to_porcelain(plumbing_item) 2364 if plumbing_response.meta.next_cursor == '': 2365 break 2366 req.meta.cursor = plumbing_response.meta.next_cursor 2367 2368 return generator(self, req) 2369 2370 2371class SnapshotRoles: 2372 ''' 2373 SnapshotRoles exposes the read only methods of the Roles 2374 service for historical queries. 2375 ''' 2376 def __init__(self, roles): 2377 self.roles = roles 2378 2379 def get(self, id, timeout=None): 2380 ''' 2381 Get reads one Role by ID. 2382 ''' 2383 return self.roles.get(id, timeout=timeout) 2384 2385 def list(self, filter, *args, timeout=None): 2386 ''' 2387 List gets a list of Roles matching a given set of criteria. 2388 ''' 2389 return self.roles.list(filter, *args, timeout=timeout) 2390 2391 2392class HealthChecks: 2393 ''' 2394 HealthChecks lists the last healthcheck between each node and resource. 2395 Note the unconventional capitalization here is to prevent having a collision with GRPC 2396 See `strongdm.models.Healthcheck`. 2397 ''' 2398 def __init__(self, channel, client): 2399 self.parent = client 2400 self.stub = HealthChecksStub(channel) 2401 2402 def list(self, filter, *args, timeout=None): 2403 ''' 2404 List gets a list of Healthchecks matching a given set of criteria. 2405 ''' 2406 deadline = None if timeout is None else time.time() + timeout 2407 req = HealthcheckListRequest() 2408 req.meta.CopyFrom(ListRequestMetadata()) 2409 if self.parent.page_limit > 0: 2410 req.meta.limit = self.parent.page_limit 2411 if self.parent.snapshot_datetime is not None: 2412 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2413 2414 req.filter = plumbing.quote_filter_args(filter, *args) 2415 2416 def generator(svc, req): 2417 tries = 0 2418 while True: 2419 t = None if deadline is None else deadline - time.time() 2420 try: 2421 plumbing_response = svc.stub.List( 2422 req, 2423 metadata=svc.parent.get_metadata( 2424 'HealthChecks.List', req), 2425 timeout=t) 2426 except Exception as e: 2427 if self.parent.shouldRetry(tries, e, deadline): 2428 tries += 1 2429 time.sleep( 2430 self.parent.exponentialBackoff(tries, deadline)) 2431 continue 2432 raise plumbing.convert_error_to_porcelain(e) from e 2433 tries = 0 2434 for plumbing_item in plumbing_response.healthchecks: 2435 yield plumbing.convert_healthcheck_to_porcelain( 2436 plumbing_item) 2437 if plumbing_response.meta.next_cursor == '': 2438 break 2439 req.meta.cursor = plumbing_response.meta.next_cursor 2440 2441 return generator(self, req) 2442 2443 2444class IdentityAliases: 2445 ''' 2446 IdentityAliases assign an alias to an account within an IdentitySet. 2447 The alias is used as the username when connecting to a identity supported resource. 2448 See `strongdm.models.IdentityAlias`. 2449 ''' 2450 def __init__(self, channel, client): 2451 self.parent = client 2452 self.stub = IdentityAliasesStub(channel) 2453 2454 def create(self, identity_alias, timeout=None): 2455 ''' 2456 Create registers a new IdentityAlias. 2457 ''' 2458 deadline = None if timeout is None else time.time() + timeout 2459 req = IdentityAliasCreateRequest() 2460 2461 if identity_alias is not None: 2462 req.identity_alias.CopyFrom( 2463 plumbing.convert_identity_alias_to_plumbing(identity_alias)) 2464 tries = 0 2465 plumbing_response = None 2466 while True: 2467 t = None if deadline is None else deadline - time.time() 2468 try: 2469 plumbing_response = self.stub.Create( 2470 req, 2471 metadata=self.parent.get_metadata('IdentityAliases.Create', 2472 req), 2473 timeout=t) 2474 except Exception as e: 2475 if self.parent.shouldRetry(tries, e, deadline): 2476 tries += 1 2477 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2478 continue 2479 raise plumbing.convert_error_to_porcelain(e) from e 2480 break 2481 2482 resp = models.IdentityAliasCreateResponse() 2483 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2484 plumbing_response.identity_alias) 2485 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2486 plumbing_response.meta) 2487 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2488 plumbing_response.rate_limit) 2489 return resp 2490 2491 def get(self, id, timeout=None): 2492 ''' 2493 Get reads one IdentityAlias by ID. 2494 ''' 2495 deadline = None if timeout is None else time.time() + timeout 2496 req = IdentityAliasGetRequest() 2497 if self.parent.snapshot_datetime is not None: 2498 req.meta.CopyFrom(GetRequestMetadata()) 2499 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2500 2501 req.id = (id) 2502 tries = 0 2503 plumbing_response = None 2504 while True: 2505 t = None if deadline is None else deadline - time.time() 2506 try: 2507 plumbing_response = self.stub.Get( 2508 req, 2509 metadata=self.parent.get_metadata('IdentityAliases.Get', 2510 req), 2511 timeout=t) 2512 except Exception as e: 2513 if self.parent.shouldRetry(tries, e, deadline): 2514 tries += 1 2515 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2516 continue 2517 raise plumbing.convert_error_to_porcelain(e) from e 2518 break 2519 2520 resp = models.IdentityAliasGetResponse() 2521 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2522 plumbing_response.identity_alias) 2523 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2524 plumbing_response.meta) 2525 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2526 plumbing_response.rate_limit) 2527 return resp 2528 2529 def update(self, identity_alias, timeout=None): 2530 ''' 2531 Update replaces all the fields of a IdentityAlias by ID. 2532 ''' 2533 deadline = None if timeout is None else time.time() + timeout 2534 req = IdentityAliasUpdateRequest() 2535 2536 if identity_alias is not None: 2537 req.identity_alias.CopyFrom( 2538 plumbing.convert_identity_alias_to_plumbing(identity_alias)) 2539 tries = 0 2540 plumbing_response = None 2541 while True: 2542 t = None if deadline is None else deadline - time.time() 2543 try: 2544 plumbing_response = self.stub.Update( 2545 req, 2546 metadata=self.parent.get_metadata('IdentityAliases.Update', 2547 req), 2548 timeout=t) 2549 except Exception as e: 2550 if self.parent.shouldRetry(tries, e, deadline): 2551 tries += 1 2552 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2553 continue 2554 raise plumbing.convert_error_to_porcelain(e) from e 2555 break 2556 2557 resp = models.IdentityAliasUpdateResponse() 2558 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2559 plumbing_response.identity_alias) 2560 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2561 plumbing_response.meta) 2562 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2563 plumbing_response.rate_limit) 2564 return resp 2565 2566 def delete(self, id, timeout=None): 2567 ''' 2568 Delete removes a IdentityAlias by ID. 2569 ''' 2570 deadline = None if timeout is None else time.time() + timeout 2571 req = IdentityAliasDeleteRequest() 2572 2573 req.id = (id) 2574 tries = 0 2575 plumbing_response = None 2576 while True: 2577 t = None if deadline is None else deadline - time.time() 2578 try: 2579 plumbing_response = self.stub.Delete( 2580 req, 2581 metadata=self.parent.get_metadata('IdentityAliases.Delete', 2582 req), 2583 timeout=t) 2584 except Exception as e: 2585 if self.parent.shouldRetry(tries, e, deadline): 2586 tries += 1 2587 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2588 continue 2589 raise plumbing.convert_error_to_porcelain(e) from e 2590 break 2591 2592 resp = models.IdentityAliasDeleteResponse() 2593 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2594 plumbing_response.meta) 2595 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2596 plumbing_response.rate_limit) 2597 return resp 2598 2599 def list(self, filter, *args, timeout=None): 2600 ''' 2601 List gets a list of IdentityAliases matching a given set of criteria. 2602 ''' 2603 deadline = None if timeout is None else time.time() + timeout 2604 req = IdentityAliasListRequest() 2605 req.meta.CopyFrom(ListRequestMetadata()) 2606 if self.parent.page_limit > 0: 2607 req.meta.limit = self.parent.page_limit 2608 if self.parent.snapshot_datetime is not None: 2609 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2610 2611 req.filter = plumbing.quote_filter_args(filter, *args) 2612 2613 def generator(svc, req): 2614 tries = 0 2615 while True: 2616 t = None if deadline is None else deadline - time.time() 2617 try: 2618 plumbing_response = svc.stub.List( 2619 req, 2620 metadata=svc.parent.get_metadata( 2621 'IdentityAliases.List', req), 2622 timeout=t) 2623 except Exception as e: 2624 if self.parent.shouldRetry(tries, e, deadline): 2625 tries += 1 2626 time.sleep( 2627 self.parent.exponentialBackoff(tries, deadline)) 2628 continue 2629 raise plumbing.convert_error_to_porcelain(e) from e 2630 tries = 0 2631 for plumbing_item in plumbing_response.identity_aliases: 2632 yield plumbing.convert_identity_alias_to_porcelain( 2633 plumbing_item) 2634 if plumbing_response.meta.next_cursor == '': 2635 break 2636 req.meta.cursor = plumbing_response.meta.next_cursor 2637 2638 return generator(self, req) 2639 2640 2641class SnapshotIdentityAliases: 2642 ''' 2643 SnapshotIdentityAliases exposes the read only methods of the IdentityAliases 2644 service for historical queries. 2645 ''' 2646 def __init__(self, identity_aliases): 2647 self.identity_aliases = identity_aliases 2648 2649 def get(self, id, timeout=None): 2650 ''' 2651 Get reads one IdentityAlias by ID. 2652 ''' 2653 return self.identity_aliases.get(id, timeout=timeout) 2654 2655 def list(self, filter, *args, timeout=None): 2656 ''' 2657 List gets a list of IdentityAliases matching a given set of criteria. 2658 ''' 2659 return self.identity_aliases.list(filter, *args, timeout=timeout) 2660 2661 2662class IdentityAliasesHistory: 2663 ''' 2664 IdentityAliasesHistory records all changes to the state of a IdentityAlias. 2665 See `strongdm.models.IdentityAliasHistory`. 2666 ''' 2667 def __init__(self, channel, client): 2668 self.parent = client 2669 self.stub = IdentityAliasesHistoryStub(channel) 2670 2671 def list(self, filter, *args, timeout=None): 2672 ''' 2673 List gets a list of IdentityAliasHistory records matching a given set of criteria. 2674 ''' 2675 deadline = None if timeout is None else time.time() + timeout 2676 req = IdentityAliasHistoryListRequest() 2677 req.meta.CopyFrom(ListRequestMetadata()) 2678 if self.parent.page_limit > 0: 2679 req.meta.limit = self.parent.page_limit 2680 if self.parent.snapshot_datetime is not None: 2681 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2682 2683 req.filter = plumbing.quote_filter_args(filter, *args) 2684 2685 def generator(svc, req): 2686 tries = 0 2687 while True: 2688 t = None if deadline is None else deadline - time.time() 2689 try: 2690 plumbing_response = svc.stub.List( 2691 req, 2692 metadata=svc.parent.get_metadata( 2693 'IdentityAliasesHistory.List', req), 2694 timeout=t) 2695 except Exception as e: 2696 if self.parent.shouldRetry(tries, e, deadline): 2697 tries += 1 2698 time.sleep( 2699 self.parent.exponentialBackoff(tries, deadline)) 2700 continue 2701 raise plumbing.convert_error_to_porcelain(e) from e 2702 tries = 0 2703 for plumbing_item in plumbing_response.history: 2704 yield plumbing.convert_identity_alias_history_to_porcelain( 2705 plumbing_item) 2706 if plumbing_response.meta.next_cursor == '': 2707 break 2708 req.meta.cursor = plumbing_response.meta.next_cursor 2709 2710 return generator(self, req) 2711 2712 2713class IdentitySets: 2714 ''' 2715 A IdentitySet is a named grouping of Identity Aliases for Accounts. 2716 An Account's relationship to a IdentitySet is defined via IdentityAlias objects. 2717 See `strongdm.models.IdentitySet`. 2718 ''' 2719 def __init__(self, channel, client): 2720 self.parent = client 2721 self.stub = IdentitySetsStub(channel) 2722 2723 def create(self, identity_set, timeout=None): 2724 ''' 2725 Create registers a new IdentitySet. 2726 ''' 2727 deadline = None if timeout is None else time.time() + timeout 2728 req = IdentitySetCreateRequest() 2729 2730 if identity_set is not None: 2731 req.identity_set.CopyFrom( 2732 plumbing.convert_identity_set_to_plumbing(identity_set)) 2733 tries = 0 2734 plumbing_response = None 2735 while True: 2736 t = None if deadline is None else deadline - time.time() 2737 try: 2738 plumbing_response = self.stub.Create( 2739 req, 2740 metadata=self.parent.get_metadata('IdentitySets.Create', 2741 req), 2742 timeout=t) 2743 except Exception as e: 2744 if self.parent.shouldRetry(tries, e, deadline): 2745 tries += 1 2746 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2747 continue 2748 raise plumbing.convert_error_to_porcelain(e) from e 2749 break 2750 2751 resp = models.IdentitySetCreateResponse() 2752 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2753 plumbing_response.identity_set) 2754 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2755 plumbing_response.meta) 2756 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2757 plumbing_response.rate_limit) 2758 return resp 2759 2760 def get(self, id, timeout=None): 2761 ''' 2762 Get reads one IdentitySet by ID. 2763 ''' 2764 deadline = None if timeout is None else time.time() + timeout 2765 req = IdentitySetGetRequest() 2766 if self.parent.snapshot_datetime is not None: 2767 req.meta.CopyFrom(GetRequestMetadata()) 2768 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2769 2770 req.id = (id) 2771 tries = 0 2772 plumbing_response = None 2773 while True: 2774 t = None if deadline is None else deadline - time.time() 2775 try: 2776 plumbing_response = self.stub.Get( 2777 req, 2778 metadata=self.parent.get_metadata('IdentitySets.Get', req), 2779 timeout=t) 2780 except Exception as e: 2781 if self.parent.shouldRetry(tries, e, deadline): 2782 tries += 1 2783 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2784 continue 2785 raise plumbing.convert_error_to_porcelain(e) from e 2786 break 2787 2788 resp = models.IdentitySetGetResponse() 2789 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2790 plumbing_response.identity_set) 2791 resp.meta = plumbing.convert_get_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 update(self, identity_set, timeout=None): 2798 ''' 2799 Update replaces all the fields of a IdentitySet by ID. 2800 ''' 2801 deadline = None if timeout is None else time.time() + timeout 2802 req = IdentitySetUpdateRequest() 2803 2804 if identity_set is not None: 2805 req.identity_set.CopyFrom( 2806 plumbing.convert_identity_set_to_plumbing(identity_set)) 2807 tries = 0 2808 plumbing_response = None 2809 while True: 2810 t = None if deadline is None else deadline - time.time() 2811 try: 2812 plumbing_response = self.stub.Update( 2813 req, 2814 metadata=self.parent.get_metadata('IdentitySets.Update', 2815 req), 2816 timeout=t) 2817 except Exception as e: 2818 if self.parent.shouldRetry(tries, e, deadline): 2819 tries += 1 2820 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2821 continue 2822 raise plumbing.convert_error_to_porcelain(e) from e 2823 break 2824 2825 resp = models.IdentitySetUpdateResponse() 2826 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2827 plumbing_response.identity_set) 2828 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2829 plumbing_response.meta) 2830 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2831 plumbing_response.rate_limit) 2832 return resp 2833 2834 def delete(self, id, timeout=None): 2835 ''' 2836 Delete removes a IdentitySet by ID. 2837 ''' 2838 deadline = None if timeout is None else time.time() + timeout 2839 req = IdentitySetDeleteRequest() 2840 2841 req.id = (id) 2842 tries = 0 2843 plumbing_response = None 2844 while True: 2845 t = None if deadline is None else deadline - time.time() 2846 try: 2847 plumbing_response = self.stub.Delete( 2848 req, 2849 metadata=self.parent.get_metadata('IdentitySets.Delete', 2850 req), 2851 timeout=t) 2852 except Exception as e: 2853 if self.parent.shouldRetry(tries, e, deadline): 2854 tries += 1 2855 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2856 continue 2857 raise plumbing.convert_error_to_porcelain(e) from e 2858 break 2859 2860 resp = models.IdentitySetDeleteResponse() 2861 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2862 plumbing_response.meta) 2863 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2864 plumbing_response.rate_limit) 2865 return resp 2866 2867 def list(self, filter, *args, timeout=None): 2868 ''' 2869 List gets a list of IdentitySets matching a given set of criteria. 2870 ''' 2871 deadline = None if timeout is None else time.time() + timeout 2872 req = IdentitySetListRequest() 2873 req.meta.CopyFrom(ListRequestMetadata()) 2874 if self.parent.page_limit > 0: 2875 req.meta.limit = self.parent.page_limit 2876 if self.parent.snapshot_datetime is not None: 2877 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2878 2879 req.filter = plumbing.quote_filter_args(filter, *args) 2880 2881 def generator(svc, req): 2882 tries = 0 2883 while True: 2884 t = None if deadline is None else deadline - time.time() 2885 try: 2886 plumbing_response = svc.stub.List( 2887 req, 2888 metadata=svc.parent.get_metadata( 2889 'IdentitySets.List', req), 2890 timeout=t) 2891 except Exception as e: 2892 if self.parent.shouldRetry(tries, e, deadline): 2893 tries += 1 2894 time.sleep( 2895 self.parent.exponentialBackoff(tries, deadline)) 2896 continue 2897 raise plumbing.convert_error_to_porcelain(e) from e 2898 tries = 0 2899 for plumbing_item in plumbing_response.identity_sets: 2900 yield plumbing.convert_identity_set_to_porcelain( 2901 plumbing_item) 2902 if plumbing_response.meta.next_cursor == '': 2903 break 2904 req.meta.cursor = plumbing_response.meta.next_cursor 2905 2906 return generator(self, req) 2907 2908 2909class SnapshotIdentitySets: 2910 ''' 2911 SnapshotIdentitySets exposes the read only methods of the IdentitySets 2912 service for historical queries. 2913 ''' 2914 def __init__(self, identity_sets): 2915 self.identity_sets = identity_sets 2916 2917 def get(self, id, timeout=None): 2918 ''' 2919 Get reads one IdentitySet by ID. 2920 ''' 2921 return self.identity_sets.get(id, timeout=timeout) 2922 2923 def list(self, filter, *args, timeout=None): 2924 ''' 2925 List gets a list of IdentitySets matching a given set of criteria. 2926 ''' 2927 return self.identity_sets.list(filter, *args, timeout=timeout) 2928 2929 2930class IdentitySetsHistory: 2931 ''' 2932 IdentitySetsHistory records all changes to the state of a IdentitySet. 2933 See `strongdm.models.IdentitySetHistory`. 2934 ''' 2935 def __init__(self, channel, client): 2936 self.parent = client 2937 self.stub = IdentitySetsHistoryStub(channel) 2938 2939 def list(self, filter, *args, timeout=None): 2940 ''' 2941 List gets a list of IdentitySetHistory records matching a given set of criteria. 2942 ''' 2943 deadline = None if timeout is None else time.time() + timeout 2944 req = IdentitySetHistoryListRequest() 2945 req.meta.CopyFrom(ListRequestMetadata()) 2946 if self.parent.page_limit > 0: 2947 req.meta.limit = self.parent.page_limit 2948 if self.parent.snapshot_datetime is not None: 2949 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2950 2951 req.filter = plumbing.quote_filter_args(filter, *args) 2952 2953 def generator(svc, req): 2954 tries = 0 2955 while True: 2956 t = None if deadline is None else deadline - time.time() 2957 try: 2958 plumbing_response = svc.stub.List( 2959 req, 2960 metadata=svc.parent.get_metadata( 2961 'IdentitySetsHistory.List', req), 2962 timeout=t) 2963 except Exception as e: 2964 if self.parent.shouldRetry(tries, e, deadline): 2965 tries += 1 2966 time.sleep( 2967 self.parent.exponentialBackoff(tries, deadline)) 2968 continue 2969 raise plumbing.convert_error_to_porcelain(e) from e 2970 tries = 0 2971 for plumbing_item in plumbing_response.history: 2972 yield plumbing.convert_identity_set_history_to_porcelain( 2973 plumbing_item) 2974 if plumbing_response.meta.next_cursor == '': 2975 break 2976 req.meta.cursor = plumbing_response.meta.next_cursor 2977 2978 return generator(self, req) 2979 2980 2981class ManagedSecrets: 2982 ''' 2983 ManagedSecret is a private vertical for creating, reading, updating, 2984 deleting, listing and rotating the managed secrets in the secrets engines as 2985 an authenticated user. 2986 See `strongdm.models.ManagedSecret`. 2987 ''' 2988 def __init__(self, channel, client): 2989 self.parent = client 2990 self.stub = ManagedSecretsStub(channel) 2991 2992 def list(self, filter, *args, timeout=None): 2993 ''' 2994 List returns Managed Secrets from a Secret Engine. 2995 ''' 2996 deadline = None if timeout is None else time.time() + timeout 2997 req = ManagedSecretListRequest() 2998 req.meta.CopyFrom(ListRequestMetadata()) 2999 if self.parent.page_limit > 0: 3000 req.meta.limit = self.parent.page_limit 3001 if self.parent.snapshot_datetime is not None: 3002 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3003 3004 req.filter = plumbing.quote_filter_args(filter, *args) 3005 3006 def generator(svc, req): 3007 tries = 0 3008 while True: 3009 t = None if deadline is None else deadline - time.time() 3010 try: 3011 plumbing_response = svc.stub.List( 3012 req, 3013 metadata=svc.parent.get_metadata( 3014 'ManagedSecrets.List', req), 3015 timeout=t) 3016 except Exception as e: 3017 if self.parent.shouldRetry(tries, e, deadline): 3018 tries += 1 3019 time.sleep( 3020 self.parent.exponentialBackoff(tries, deadline)) 3021 continue 3022 raise plumbing.convert_error_to_porcelain(e) from e 3023 tries = 0 3024 for plumbing_item in plumbing_response.managed_secrets: 3025 yield plumbing.convert_managed_secret_to_porcelain( 3026 plumbing_item) 3027 if plumbing_response.meta.next_cursor == '': 3028 break 3029 req.meta.cursor = plumbing_response.meta.next_cursor 3030 3031 return generator(self, req) 3032 3033 def list_by_actor(self, filter, *args, timeout=None): 3034 ''' 3035 List returns Managed Secrets for an Actor from a Secret Engine. 3036 ''' 3037 deadline = None if timeout is None else time.time() + timeout 3038 req = ManagedSecretListRequest() 3039 req.meta.CopyFrom(ListRequestMetadata()) 3040 if self.parent.page_limit > 0: 3041 req.meta.limit = self.parent.page_limit 3042 if self.parent.snapshot_datetime is not None: 3043 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3044 3045 req.filter = plumbing.quote_filter_args(filter, *args) 3046 3047 def generator(svc, req): 3048 tries = 0 3049 while True: 3050 t = None if deadline is None else deadline - time.time() 3051 try: 3052 plumbing_response = svc.stub.ListByActor( 3053 req, 3054 metadata=svc.parent.get_metadata( 3055 'ManagedSecrets.ListByActor', req), 3056 timeout=t) 3057 except Exception as e: 3058 if self.parent.shouldRetry(tries, e, deadline): 3059 tries += 1 3060 time.sleep( 3061 self.parent.exponentialBackoff(tries, deadline)) 3062 continue 3063 raise plumbing.convert_error_to_porcelain(e) from e 3064 tries = 0 3065 for plumbing_item in plumbing_response.managed_secrets: 3066 yield plumbing.convert_managed_secret_to_porcelain( 3067 plumbing_item) 3068 if plumbing_response.meta.next_cursor == '': 3069 break 3070 req.meta.cursor = plumbing_response.meta.next_cursor 3071 3072 return generator(self, req) 3073 3074 def create(self, managed_secret, timeout=None): 3075 ''' 3076 Create creates a Managed Secret 3077 ''' 3078 deadline = None if timeout is None else time.time() + timeout 3079 req = ManagedSecretCreateRequest() 3080 3081 if managed_secret is not None: 3082 req.managed_secret.CopyFrom( 3083 plumbing.convert_managed_secret_to_plumbing(managed_secret)) 3084 tries = 0 3085 plumbing_response = None 3086 while True: 3087 t = None if deadline is None else deadline - time.time() 3088 try: 3089 plumbing_response = self.stub.Create( 3090 req, 3091 metadata=self.parent.get_metadata('ManagedSecrets.Create', 3092 req), 3093 timeout=t) 3094 except Exception as e: 3095 if self.parent.shouldRetry(tries, e, deadline): 3096 tries += 1 3097 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3098 continue 3099 raise plumbing.convert_error_to_porcelain(e) from e 3100 break 3101 3102 resp = models.ManagedSecretCreateResponse() 3103 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3104 plumbing_response.managed_secret) 3105 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3106 plumbing_response.meta) 3107 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3108 plumbing_response.rate_limit) 3109 return resp 3110 3111 def update(self, managed_secret, timeout=None): 3112 ''' 3113 Update updates a Managed Secret 3114 ''' 3115 deadline = None if timeout is None else time.time() + timeout 3116 req = ManagedSecretUpdateRequest() 3117 3118 if managed_secret is not None: 3119 req.managed_secret.CopyFrom( 3120 plumbing.convert_managed_secret_to_plumbing(managed_secret)) 3121 tries = 0 3122 plumbing_response = None 3123 while True: 3124 t = None if deadline is None else deadline - time.time() 3125 try: 3126 plumbing_response = self.stub.Update( 3127 req, 3128 metadata=self.parent.get_metadata('ManagedSecrets.Update', 3129 req), 3130 timeout=t) 3131 except Exception as e: 3132 if self.parent.shouldRetry(tries, e, deadline): 3133 tries += 1 3134 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3135 continue 3136 raise plumbing.convert_error_to_porcelain(e) from e 3137 break 3138 3139 resp = models.ManagedSecretUpdateResponse() 3140 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3141 plumbing_response.managed_secret) 3142 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 3143 plumbing_response.meta) 3144 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3145 plumbing_response.rate_limit) 3146 return resp 3147 3148 def rotate(self, id, timeout=None): 3149 ''' 3150 Rotate forces rotation of Managed Secret 3151 ''' 3152 deadline = None if timeout is None else time.time() + timeout 3153 req = ManagedSecretRotateRequest() 3154 3155 req.id = (id) 3156 tries = 0 3157 plumbing_response = None 3158 while True: 3159 t = None if deadline is None else deadline - time.time() 3160 try: 3161 plumbing_response = self.stub.Rotate( 3162 req, 3163 metadata=self.parent.get_metadata('ManagedSecrets.Rotate', 3164 req), 3165 timeout=t) 3166 except Exception as e: 3167 if self.parent.shouldRetry(tries, e, deadline): 3168 tries += 1 3169 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3170 continue 3171 raise plumbing.convert_error_to_porcelain(e) from e 3172 break 3173 3174 resp = models.ManagedSecretRotateResponse() 3175 resp.meta = plumbing.convert_generic_response_metadata_to_porcelain( 3176 plumbing_response.meta) 3177 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3178 plumbing_response.rate_limit) 3179 return resp 3180 3181 def delete(self, id, timeout=None): 3182 ''' 3183 Delete deletes a Managed Secret 3184 ''' 3185 deadline = None if timeout is None else time.time() + timeout 3186 req = ManagedSecretDeleteRequest() 3187 3188 req.id = (id) 3189 tries = 0 3190 plumbing_response = None 3191 while True: 3192 t = None if deadline is None else deadline - time.time() 3193 try: 3194 plumbing_response = self.stub.Delete( 3195 req, 3196 metadata=self.parent.get_metadata('ManagedSecrets.Delete', 3197 req), 3198 timeout=t) 3199 except Exception as e: 3200 if self.parent.shouldRetry(tries, e, deadline): 3201 tries += 1 3202 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3203 continue 3204 raise plumbing.convert_error_to_porcelain(e) from e 3205 break 3206 3207 resp = models.ManagedSecretDeleteResponse() 3208 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3209 plumbing_response.rate_limit) 3210 return resp 3211 3212 def force_delete(self, id, timeout=None): 3213 ''' 3214 ForceDelete deletes a Managed Secret regardless of errors on external system 3215 ''' 3216 deadline = None if timeout is None else time.time() + timeout 3217 req = ManagedSecretDeleteRequest() 3218 3219 req.id = (id) 3220 tries = 0 3221 plumbing_response = None 3222 while True: 3223 t = None if deadline is None else deadline - time.time() 3224 try: 3225 plumbing_response = self.stub.ForceDelete( 3226 req, 3227 metadata=self.parent.get_metadata( 3228 'ManagedSecrets.ForceDelete', req), 3229 timeout=t) 3230 except Exception as e: 3231 if self.parent.shouldRetry(tries, e, deadline): 3232 tries += 1 3233 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3234 continue 3235 raise plumbing.convert_error_to_porcelain(e) from e 3236 break 3237 3238 resp = models.ManagedSecretDeleteResponse() 3239 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3240 plumbing_response.rate_limit) 3241 return resp 3242 3243 def get(self, id, timeout=None): 3244 ''' 3245 Get gets details of a Managed Secret without sensitive data 3246 ''' 3247 deadline = None if timeout is None else time.time() + timeout 3248 req = ManagedSecretGetRequest() 3249 if self.parent.snapshot_datetime is not None: 3250 req.meta.CopyFrom(GetRequestMetadata()) 3251 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3252 3253 req.id = (id) 3254 tries = 0 3255 plumbing_response = None 3256 while True: 3257 t = None if deadline is None else deadline - time.time() 3258 try: 3259 plumbing_response = self.stub.Get( 3260 req, 3261 metadata=self.parent.get_metadata('ManagedSecrets.Get', 3262 req), 3263 timeout=t) 3264 except Exception as e: 3265 if self.parent.shouldRetry(tries, e, deadline): 3266 tries += 1 3267 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3268 continue 3269 raise plumbing.convert_error_to_porcelain(e) from e 3270 break 3271 3272 resp = models.ManagedSecretGetResponse() 3273 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3274 plumbing_response.managed_secret) 3275 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3276 plumbing_response.meta) 3277 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3278 plumbing_response.rate_limit) 3279 return resp 3280 3281 def retrieve(self, id, public_key, timeout=None): 3282 ''' 3283 Retrieve returns Managed Secret with sensitive data 3284 ''' 3285 deadline = None if timeout is None else time.time() + timeout 3286 req = ManagedSecretRetrieveRequest() 3287 3288 req.id = (id) 3289 req.public_key = (public_key) 3290 tries = 0 3291 plumbing_response = None 3292 while True: 3293 t = None if deadline is None else deadline - time.time() 3294 try: 3295 plumbing_response = self.stub.Retrieve( 3296 req, 3297 metadata=self.parent.get_metadata( 3298 'ManagedSecrets.Retrieve', req), 3299 timeout=t) 3300 except Exception as e: 3301 if self.parent.shouldRetry(tries, e, deadline): 3302 tries += 1 3303 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3304 continue 3305 raise plumbing.convert_error_to_porcelain(e) from e 3306 break 3307 3308 resp = models.ManagedSecretRetrieveResponse() 3309 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3310 plumbing_response.managed_secret) 3311 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3312 plumbing_response.meta) 3313 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3314 plumbing_response.rate_limit) 3315 return resp 3316 3317 def validate(self, id, timeout=None): 3318 ''' 3319 Validate returns the result of testing the stored credential against the 3320 secret engine. 3321 ''' 3322 deadline = None if timeout is None else time.time() + timeout 3323 req = ManagedSecretValidateRequest() 3324 3325 req.id = (id) 3326 tries = 0 3327 plumbing_response = None 3328 while True: 3329 t = None if deadline is None else deadline - time.time() 3330 try: 3331 plumbing_response = self.stub.Validate( 3332 req, 3333 metadata=self.parent.get_metadata( 3334 'ManagedSecrets.Validate', req), 3335 timeout=t) 3336 except Exception as e: 3337 if self.parent.shouldRetry(tries, e, deadline): 3338 tries += 1 3339 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3340 continue 3341 raise plumbing.convert_error_to_porcelain(e) from e 3342 break 3343 3344 resp = models.ManagedSecretValidateResponse() 3345 resp.invalid_info = (plumbing_response.invalid_info) 3346 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3347 plumbing_response.meta) 3348 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3349 plumbing_response.rate_limit) 3350 resp.valid = (plumbing_response.valid) 3351 return resp 3352 3353 def logs(self, filter, *args, timeout=None): 3354 ''' 3355 Logs returns the audit records for the managed secret. This may be replaced 3356 in the future. 3357 ''' 3358 deadline = None if timeout is None else time.time() + timeout 3359 req = ManagedSecretLogsRequest() 3360 req.meta.CopyFrom(ListRequestMetadata()) 3361 if self.parent.page_limit > 0: 3362 req.meta.limit = self.parent.page_limit 3363 if self.parent.snapshot_datetime is not None: 3364 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3365 3366 req.filter = plumbing.quote_filter_args(filter, *args) 3367 3368 def generator(svc, req): 3369 tries = 0 3370 while True: 3371 t = None if deadline is None else deadline - time.time() 3372 try: 3373 plumbing_response = svc.stub.Logs( 3374 req, 3375 metadata=svc.parent.get_metadata( 3376 'ManagedSecrets.Logs', req), 3377 timeout=t) 3378 except Exception as e: 3379 if self.parent.shouldRetry(tries, e, deadline): 3380 tries += 1 3381 time.sleep( 3382 self.parent.exponentialBackoff(tries, deadline)) 3383 continue 3384 raise plumbing.convert_error_to_porcelain(e) from e 3385 tries = 0 3386 for plumbing_item in plumbing_response.managed_secret_logs: 3387 yield plumbing.convert_managed_secret_log_to_porcelain( 3388 plumbing_item) 3389 if plumbing_response.meta.next_cursor == '': 3390 break 3391 req.meta.cursor = plumbing_response.meta.next_cursor 3392 3393 return generator(self, req) 3394 3395 3396class Nodes: 3397 ''' 3398 Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes: 3399 - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers. 3400 - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections. 3401 See: 3402 `strongdm.models.Gateway` 3403 `strongdm.models.ProxyCluster` 3404 `strongdm.models.Relay` 3405 ''' 3406 def __init__(self, channel, client): 3407 self.parent = client 3408 self.stub = NodesStub(channel) 3409 3410 def create(self, node, timeout=None): 3411 ''' 3412 Create registers a new Node. 3413 ''' 3414 deadline = None if timeout is None else time.time() + timeout 3415 req = NodeCreateRequest() 3416 3417 if node is not None: 3418 req.node.CopyFrom(plumbing.convert_node_to_plumbing(node)) 3419 tries = 0 3420 plumbing_response = None 3421 while True: 3422 t = None if deadline is None else deadline - time.time() 3423 try: 3424 plumbing_response = self.stub.Create( 3425 req, 3426 metadata=self.parent.get_metadata('Nodes.Create', req), 3427 timeout=t) 3428 except Exception as e: 3429 if self.parent.shouldRetry(tries, e, deadline): 3430 tries += 1 3431 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3432 continue 3433 raise plumbing.convert_error_to_porcelain(e) from e 3434 break 3435 3436 resp = models.NodeCreateResponse() 3437 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3438 plumbing_response.meta) 3439 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3440 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3441 plumbing_response.rate_limit) 3442 resp.token = (plumbing_response.token) 3443 return resp 3444 3445 def get(self, id, timeout=None): 3446 ''' 3447 Get reads one Node by ID. 3448 ''' 3449 deadline = None if timeout is None else time.time() + timeout 3450 req = NodeGetRequest() 3451 if self.parent.snapshot_datetime is not None: 3452 req.meta.CopyFrom(GetRequestMetadata()) 3453 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3454 3455 req.id = (id) 3456 tries = 0 3457 plumbing_response = None 3458 while True: 3459 t = None if deadline is None else deadline - time.time() 3460 try: 3461 plumbing_response = self.stub.Get( 3462 req, 3463 metadata=self.parent.get_metadata('Nodes.Get', req), 3464 timeout=t) 3465 except Exception as e: 3466 if self.parent.shouldRetry(tries, e, deadline): 3467 tries += 1 3468 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3469 continue 3470 raise plumbing.convert_error_to_porcelain(e) from e 3471 break 3472 3473 resp = models.NodeGetResponse() 3474 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3475 plumbing_response.meta) 3476 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3477 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3478 plumbing_response.rate_limit) 3479 return resp 3480 3481 def update(self, node, timeout=None): 3482 ''' 3483 Update replaces all the fields of a Node by ID. 3484 ''' 3485 deadline = None if timeout is None else time.time() + timeout 3486 req = NodeUpdateRequest() 3487 3488 if node is not None: 3489 req.node.CopyFrom(plumbing.convert_node_to_plumbing(node)) 3490 tries = 0 3491 plumbing_response = None 3492 while True: 3493 t = None if deadline is None else deadline - time.time() 3494 try: 3495 plumbing_response = self.stub.Update( 3496 req, 3497 metadata=self.parent.get_metadata('Nodes.Update', req), 3498 timeout=t) 3499 except Exception as e: 3500 if self.parent.shouldRetry(tries, e, deadline): 3501 tries += 1 3502 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3503 continue 3504 raise plumbing.convert_error_to_porcelain(e) from e 3505 break 3506 3507 resp = models.NodeUpdateResponse() 3508 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 3509 plumbing_response.meta) 3510 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3511 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3512 plumbing_response.rate_limit) 3513 return resp 3514 3515 def delete(self, id, timeout=None): 3516 ''' 3517 Delete removes a Node by ID. 3518 ''' 3519 deadline = None if timeout is None else time.time() + timeout 3520 req = NodeDeleteRequest() 3521 3522 req.id = (id) 3523 tries = 0 3524 plumbing_response = None 3525 while True: 3526 t = None if deadline is None else deadline - time.time() 3527 try: 3528 plumbing_response = self.stub.Delete( 3529 req, 3530 metadata=self.parent.get_metadata('Nodes.Delete', req), 3531 timeout=t) 3532 except Exception as e: 3533 if self.parent.shouldRetry(tries, e, deadline): 3534 tries += 1 3535 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3536 continue 3537 raise plumbing.convert_error_to_porcelain(e) from e 3538 break 3539 3540 resp = models.NodeDeleteResponse() 3541 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3542 plumbing_response.meta) 3543 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3544 plumbing_response.rate_limit) 3545 return resp 3546 3547 def list(self, filter, *args, timeout=None): 3548 ''' 3549 List gets a list of Nodes matching a given set of criteria. 3550 ''' 3551 deadline = None if timeout is None else time.time() + timeout 3552 req = NodeListRequest() 3553 req.meta.CopyFrom(ListRequestMetadata()) 3554 if self.parent.page_limit > 0: 3555 req.meta.limit = self.parent.page_limit 3556 if self.parent.snapshot_datetime is not None: 3557 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3558 3559 req.filter = plumbing.quote_filter_args(filter, *args) 3560 3561 def generator(svc, req): 3562 tries = 0 3563 while True: 3564 t = None if deadline is None else deadline - time.time() 3565 try: 3566 plumbing_response = svc.stub.List( 3567 req, 3568 metadata=svc.parent.get_metadata('Nodes.List', req), 3569 timeout=t) 3570 except Exception as e: 3571 if self.parent.shouldRetry(tries, e, deadline): 3572 tries += 1 3573 time.sleep( 3574 self.parent.exponentialBackoff(tries, deadline)) 3575 continue 3576 raise plumbing.convert_error_to_porcelain(e) from e 3577 tries = 0 3578 for plumbing_item in plumbing_response.nodes: 3579 yield plumbing.convert_node_to_porcelain(plumbing_item) 3580 if plumbing_response.meta.next_cursor == '': 3581 break 3582 req.meta.cursor = plumbing_response.meta.next_cursor 3583 3584 return generator(self, req) 3585 3586 3587class SnapshotNodes: 3588 ''' 3589 SnapshotNodes exposes the read only methods of the Nodes 3590 service for historical queries. 3591 ''' 3592 def __init__(self, nodes): 3593 self.nodes = nodes 3594 3595 def get(self, id, timeout=None): 3596 ''' 3597 Get reads one Node by ID. 3598 ''' 3599 return self.nodes.get(id, timeout=timeout) 3600 3601 def list(self, filter, *args, timeout=None): 3602 ''' 3603 List gets a list of Nodes matching a given set of criteria. 3604 ''' 3605 return self.nodes.list(filter, *args, timeout=timeout) 3606 3607 3608class NodesHistory: 3609 ''' 3610 NodesHistory records all changes to the state of a Node. 3611 See `strongdm.models.NodeHistory`. 3612 ''' 3613 def __init__(self, channel, client): 3614 self.parent = client 3615 self.stub = NodesHistoryStub(channel) 3616 3617 def list(self, filter, *args, timeout=None): 3618 ''' 3619 List gets a list of NodeHistory records matching a given set of criteria. 3620 ''' 3621 deadline = None if timeout is None else time.time() + timeout 3622 req = NodeHistoryListRequest() 3623 req.meta.CopyFrom(ListRequestMetadata()) 3624 if self.parent.page_limit > 0: 3625 req.meta.limit = self.parent.page_limit 3626 if self.parent.snapshot_datetime is not None: 3627 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3628 3629 req.filter = plumbing.quote_filter_args(filter, *args) 3630 3631 def generator(svc, req): 3632 tries = 0 3633 while True: 3634 t = None if deadline is None else deadline - time.time() 3635 try: 3636 plumbing_response = svc.stub.List( 3637 req, 3638 metadata=svc.parent.get_metadata( 3639 'NodesHistory.List', req), 3640 timeout=t) 3641 except Exception as e: 3642 if self.parent.shouldRetry(tries, e, deadline): 3643 tries += 1 3644 time.sleep( 3645 self.parent.exponentialBackoff(tries, deadline)) 3646 continue 3647 raise plumbing.convert_error_to_porcelain(e) from e 3648 tries = 0 3649 for plumbing_item in plumbing_response.history: 3650 yield plumbing.convert_node_history_to_porcelain( 3651 plumbing_item) 3652 if plumbing_response.meta.next_cursor == '': 3653 break 3654 req.meta.cursor = plumbing_response.meta.next_cursor 3655 3656 return generator(self, req) 3657 3658 3659class OrganizationHistory: 3660 ''' 3661 OrganizationHistory records all changes to the state of an Organization. 3662 See `strongdm.models.OrganizationHistoryRecord`. 3663 ''' 3664 def __init__(self, channel, client): 3665 self.parent = client 3666 self.stub = OrganizationHistoryStub(channel) 3667 3668 def list(self, filter, *args, timeout=None): 3669 ''' 3670 List gets a list of OrganizationHistory records matching a given set of criteria. 3671 ''' 3672 deadline = None if timeout is None else time.time() + timeout 3673 req = OrganizationHistoryListRequest() 3674 req.meta.CopyFrom(ListRequestMetadata()) 3675 if self.parent.page_limit > 0: 3676 req.meta.limit = self.parent.page_limit 3677 if self.parent.snapshot_datetime is not None: 3678 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3679 3680 req.filter = plumbing.quote_filter_args(filter, *args) 3681 3682 def generator(svc, req): 3683 tries = 0 3684 while True: 3685 t = None if deadline is None else deadline - time.time() 3686 try: 3687 plumbing_response = svc.stub.List( 3688 req, 3689 metadata=svc.parent.get_metadata( 3690 'OrganizationHistory.List', req), 3691 timeout=t) 3692 except Exception as e: 3693 if self.parent.shouldRetry(tries, e, deadline): 3694 tries += 1 3695 time.sleep( 3696 self.parent.exponentialBackoff(tries, deadline)) 3697 continue 3698 raise plumbing.convert_error_to_porcelain(e) from e 3699 tries = 0 3700 for plumbing_item in plumbing_response.history: 3701 yield plumbing.convert_organization_history_record_to_porcelain( 3702 plumbing_item) 3703 if plumbing_response.meta.next_cursor == '': 3704 break 3705 req.meta.cursor = plumbing_response.meta.next_cursor 3706 3707 return generator(self, req) 3708 3709 3710class PeeringGroupNodes: 3711 ''' 3712 PeeringGroupNodes provides the building blocks necessary to obtain attach a node to a peering group. 3713 See `strongdm.models.PeeringGroupNode`. 3714 ''' 3715 def __init__(self, channel, client): 3716 self.parent = client 3717 self.stub = PeeringGroupNodesStub(channel) 3718 3719 def create(self, peering_group_node, timeout=None): 3720 ''' 3721 Create attaches a Node to a PeeringGroup 3722 ''' 3723 deadline = None if timeout is None else time.time() + timeout 3724 req = PeeringGroupNodeCreateRequest() 3725 3726 if peering_group_node is not None: 3727 req.peering_group_node.CopyFrom( 3728 plumbing.convert_peering_group_node_to_plumbing( 3729 peering_group_node)) 3730 tries = 0 3731 plumbing_response = None 3732 while True: 3733 t = None if deadline is None else deadline - time.time() 3734 try: 3735 plumbing_response = self.stub.Create( 3736 req, 3737 metadata=self.parent.get_metadata( 3738 'PeeringGroupNodes.Create', req), 3739 timeout=t) 3740 except Exception as e: 3741 if self.parent.shouldRetry(tries, e, deadline): 3742 tries += 1 3743 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3744 continue 3745 raise plumbing.convert_error_to_porcelain(e) from e 3746 break 3747 3748 resp = models.PeeringGroupNodeCreateResponse() 3749 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3750 plumbing_response.meta) 3751 resp.peering_group_node = plumbing.convert_peering_group_node_to_porcelain( 3752 plumbing_response.peering_group_node) 3753 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3754 plumbing_response.rate_limit) 3755 return resp 3756 3757 def delete(self, id, timeout=None): 3758 ''' 3759 Delete detaches a Node to a PeeringGroup. 3760 ''' 3761 deadline = None if timeout is None else time.time() + timeout 3762 req = PeeringGroupNodeDeleteRequest() 3763 3764 req.id = (id) 3765 tries = 0 3766 plumbing_response = None 3767 while True: 3768 t = None if deadline is None else deadline - time.time() 3769 try: 3770 plumbing_response = self.stub.Delete( 3771 req, 3772 metadata=self.parent.get_metadata( 3773 'PeeringGroupNodes.Delete', req), 3774 timeout=t) 3775 except Exception as e: 3776 if self.parent.shouldRetry(tries, e, deadline): 3777 tries += 1 3778 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3779 continue 3780 raise plumbing.convert_error_to_porcelain(e) from e 3781 break 3782 3783 resp = models.PeeringGroupNodeDeleteResponse() 3784 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3785 plumbing_response.meta) 3786 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3787 plumbing_response.rate_limit) 3788 return resp 3789 3790 def get(self, id, timeout=None): 3791 ''' 3792 Get reads the information of one peering group to node attachment. 3793 ''' 3794 deadline = None if timeout is None else time.time() + timeout 3795 req = PeeringGroupNodeGetRequest() 3796 if self.parent.snapshot_datetime is not None: 3797 req.meta.CopyFrom(GetRequestMetadata()) 3798 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3799 3800 req.id = (id) 3801 tries = 0 3802 plumbing_response = None 3803 while True: 3804 t = None if deadline is None else deadline - time.time() 3805 try: 3806 plumbing_response = self.stub.Get( 3807 req, 3808 metadata=self.parent.get_metadata('PeeringGroupNodes.Get', 3809 req), 3810 timeout=t) 3811 except Exception as e: 3812 if self.parent.shouldRetry(tries, e, deadline): 3813 tries += 1 3814 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3815 continue 3816 raise plumbing.convert_error_to_porcelain(e) from e 3817 break 3818 3819 resp = models.PeeringGroupNodeGetResponse() 3820 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3821 plumbing_response.meta) 3822 resp.peering_group_node = plumbing.convert_peering_group_node_to_porcelain( 3823 plumbing_response.peering_group_node) 3824 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3825 plumbing_response.rate_limit) 3826 return resp 3827 3828 def list(self, filter, *args, timeout=None): 3829 ''' 3830 List gets a list of peering group node attachments. 3831 ''' 3832 deadline = None if timeout is None else time.time() + timeout 3833 req = PeeringGroupNodeListRequest() 3834 req.meta.CopyFrom(ListRequestMetadata()) 3835 if self.parent.page_limit > 0: 3836 req.meta.limit = self.parent.page_limit 3837 if self.parent.snapshot_datetime is not None: 3838 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3839 3840 req.filter = plumbing.quote_filter_args(filter, *args) 3841 3842 def generator(svc, req): 3843 tries = 0 3844 while True: 3845 t = None if deadline is None else deadline - time.time() 3846 try: 3847 plumbing_response = svc.stub.List( 3848 req, 3849 metadata=svc.parent.get_metadata( 3850 'PeeringGroupNodes.List', req), 3851 timeout=t) 3852 except Exception as e: 3853 if self.parent.shouldRetry(tries, e, deadline): 3854 tries += 1 3855 time.sleep( 3856 self.parent.exponentialBackoff(tries, deadline)) 3857 continue 3858 raise plumbing.convert_error_to_porcelain(e) from e 3859 tries = 0 3860 for plumbing_item in plumbing_response.peering_group_nodes: 3861 yield plumbing.convert_peering_group_node_to_porcelain( 3862 plumbing_item) 3863 if plumbing_response.meta.next_cursor == '': 3864 break 3865 req.meta.cursor = plumbing_response.meta.next_cursor 3866 3867 return generator(self, req) 3868 3869 3870class PeeringGroupPeers: 3871 ''' 3872 PeeringGroupPeers provides the building blocks necessary to link two peering groups. 3873 See `strongdm.models.PeeringGroupPeer`. 3874 ''' 3875 def __init__(self, channel, client): 3876 self.parent = client 3877 self.stub = PeeringGroupPeersStub(channel) 3878 3879 def create(self, peering_group_peer, timeout=None): 3880 ''' 3881 Create links two peering groups. 3882 ''' 3883 deadline = None if timeout is None else time.time() + timeout 3884 req = PeeringGroupPeerCreateRequest() 3885 3886 if peering_group_peer is not None: 3887 req.peering_group_peer.CopyFrom( 3888 plumbing.convert_peering_group_peer_to_plumbing( 3889 peering_group_peer)) 3890 tries = 0 3891 plumbing_response = None 3892 while True: 3893 t = None if deadline is None else deadline - time.time() 3894 try: 3895 plumbing_response = self.stub.Create( 3896 req, 3897 metadata=self.parent.get_metadata( 3898 'PeeringGroupPeers.Create', req), 3899 timeout=t) 3900 except Exception as e: 3901 if self.parent.shouldRetry(tries, e, deadline): 3902 tries += 1 3903 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3904 continue 3905 raise plumbing.convert_error_to_porcelain(e) from e 3906 break 3907 3908 resp = models.PeeringGroupPeerCreateResponse() 3909 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3910 plumbing_response.meta) 3911 resp.peering_group_peer = plumbing.convert_peering_group_peer_to_porcelain( 3912 plumbing_response.peering_group_peer) 3913 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3914 plumbing_response.rate_limit) 3915 return resp 3916 3917 def delete(self, id, timeout=None): 3918 ''' 3919 Delete unlinks two peering groups. 3920 ''' 3921 deadline = None if timeout is None else time.time() + timeout 3922 req = PeeringGroupPeerDeleteRequest() 3923 3924 req.id = (id) 3925 tries = 0 3926 plumbing_response = None 3927 while True: 3928 t = None if deadline is None else deadline - time.time() 3929 try: 3930 plumbing_response = self.stub.Delete( 3931 req, 3932 metadata=self.parent.get_metadata( 3933 'PeeringGroupPeers.Delete', req), 3934 timeout=t) 3935 except Exception as e: 3936 if self.parent.shouldRetry(tries, e, deadline): 3937 tries += 1 3938 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3939 continue 3940 raise plumbing.convert_error_to_porcelain(e) from e 3941 break 3942 3943 resp = models.PeeringGroupPeerDeleteResponse() 3944 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3945 plumbing_response.meta) 3946 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3947 plumbing_response.rate_limit) 3948 return resp 3949 3950 def get(self, id, timeout=None): 3951 ''' 3952 Get reads the information of one peering group link. 3953 ''' 3954 deadline = None if timeout is None else time.time() + timeout 3955 req = PeeringGroupPeerGetRequest() 3956 if self.parent.snapshot_datetime is not None: 3957 req.meta.CopyFrom(GetRequestMetadata()) 3958 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3959 3960 req.id = (id) 3961 tries = 0 3962 plumbing_response = None 3963 while True: 3964 t = None if deadline is None else deadline - time.time() 3965 try: 3966 plumbing_response = self.stub.Get( 3967 req, 3968 metadata=self.parent.get_metadata('PeeringGroupPeers.Get', 3969 req), 3970 timeout=t) 3971 except Exception as e: 3972 if self.parent.shouldRetry(tries, e, deadline): 3973 tries += 1 3974 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3975 continue 3976 raise plumbing.convert_error_to_porcelain(e) from e 3977 break 3978 3979 resp = models.PeeringGroupPeerGetResponse() 3980 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3981 plumbing_response.meta) 3982 resp.peering_group_peer = plumbing.convert_peering_group_peer_to_porcelain( 3983 plumbing_response.peering_group_peer) 3984 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3985 plumbing_response.rate_limit) 3986 return resp 3987 3988 def list(self, filter, *args, timeout=None): 3989 ''' 3990 List gets a list of peering group links. 3991 ''' 3992 deadline = None if timeout is None else time.time() + timeout 3993 req = PeeringGroupPeerListRequest() 3994 req.meta.CopyFrom(ListRequestMetadata()) 3995 if self.parent.page_limit > 0: 3996 req.meta.limit = self.parent.page_limit 3997 if self.parent.snapshot_datetime is not None: 3998 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3999 4000 req.filter = plumbing.quote_filter_args(filter, *args) 4001 4002 def generator(svc, req): 4003 tries = 0 4004 while True: 4005 t = None if deadline is None else deadline - time.time() 4006 try: 4007 plumbing_response = svc.stub.List( 4008 req, 4009 metadata=svc.parent.get_metadata( 4010 'PeeringGroupPeers.List', req), 4011 timeout=t) 4012 except Exception as e: 4013 if self.parent.shouldRetry(tries, e, deadline): 4014 tries += 1 4015 time.sleep( 4016 self.parent.exponentialBackoff(tries, deadline)) 4017 continue 4018 raise plumbing.convert_error_to_porcelain(e) from e 4019 tries = 0 4020 for plumbing_item in plumbing_response.peering_group_peers: 4021 yield plumbing.convert_peering_group_peer_to_porcelain( 4022 plumbing_item) 4023 if plumbing_response.meta.next_cursor == '': 4024 break 4025 req.meta.cursor = plumbing_response.meta.next_cursor 4026 4027 return generator(self, req) 4028 4029 4030class PeeringGroupResources: 4031 ''' 4032 PeeringGroupResources provides the building blocks necessary to obtain attach a resource to a peering group. 4033 See `strongdm.models.PeeringGroupResource`. 4034 ''' 4035 def __init__(self, channel, client): 4036 self.parent = client 4037 self.stub = PeeringGroupResourcesStub(channel) 4038 4039 def create(self, peering_group_resource, timeout=None): 4040 ''' 4041 Create attaches a Resource to a PeeringGroup 4042 ''' 4043 deadline = None if timeout is None else time.time() + timeout 4044 req = PeeringGroupResourceCreateRequest() 4045 4046 if peering_group_resource is not None: 4047 req.peering_group_resource.CopyFrom( 4048 plumbing.convert_peering_group_resource_to_plumbing( 4049 peering_group_resource)) 4050 tries = 0 4051 plumbing_response = None 4052 while True: 4053 t = None if deadline is None else deadline - time.time() 4054 try: 4055 plumbing_response = self.stub.Create( 4056 req, 4057 metadata=self.parent.get_metadata( 4058 'PeeringGroupResources.Create', req), 4059 timeout=t) 4060 except Exception as e: 4061 if self.parent.shouldRetry(tries, e, deadline): 4062 tries += 1 4063 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4064 continue 4065 raise plumbing.convert_error_to_porcelain(e) from e 4066 break 4067 4068 resp = models.PeeringGroupResourceCreateResponse() 4069 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4070 plumbing_response.meta) 4071 resp.peering_group_resource = plumbing.convert_peering_group_resource_to_porcelain( 4072 plumbing_response.peering_group_resource) 4073 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4074 plumbing_response.rate_limit) 4075 return resp 4076 4077 def delete(self, id, timeout=None): 4078 ''' 4079 Delete detaches a Resource to a PeeringGroup 4080 ''' 4081 deadline = None if timeout is None else time.time() + timeout 4082 req = PeeringGroupResourceDeleteRequest() 4083 4084 req.id = (id) 4085 tries = 0 4086 plumbing_response = None 4087 while True: 4088 t = None if deadline is None else deadline - time.time() 4089 try: 4090 plumbing_response = self.stub.Delete( 4091 req, 4092 metadata=self.parent.get_metadata( 4093 'PeeringGroupResources.Delete', req), 4094 timeout=t) 4095 except Exception as e: 4096 if self.parent.shouldRetry(tries, e, deadline): 4097 tries += 1 4098 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4099 continue 4100 raise plumbing.convert_error_to_porcelain(e) from e 4101 break 4102 4103 resp = models.PeeringGroupResourceDeleteResponse() 4104 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4105 plumbing_response.meta) 4106 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4107 plumbing_response.rate_limit) 4108 return resp 4109 4110 def get(self, id, timeout=None): 4111 ''' 4112 Get reads the information of one peering group to resource attachment. 4113 ''' 4114 deadline = None if timeout is None else time.time() + timeout 4115 req = PeeringGroupResourceGetRequest() 4116 if self.parent.snapshot_datetime is not None: 4117 req.meta.CopyFrom(GetRequestMetadata()) 4118 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4119 4120 req.id = (id) 4121 tries = 0 4122 plumbing_response = None 4123 while True: 4124 t = None if deadline is None else deadline - time.time() 4125 try: 4126 plumbing_response = self.stub.Get( 4127 req, 4128 metadata=self.parent.get_metadata( 4129 'PeeringGroupResources.Get', req), 4130 timeout=t) 4131 except Exception as e: 4132 if self.parent.shouldRetry(tries, e, deadline): 4133 tries += 1 4134 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4135 continue 4136 raise plumbing.convert_error_to_porcelain(e) from e 4137 break 4138 4139 resp = models.PeeringGroupResourceGetResponse() 4140 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4141 plumbing_response.meta) 4142 resp.peering_group_resource = plumbing.convert_peering_group_resource_to_porcelain( 4143 plumbing_response.peering_group_resource) 4144 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4145 plumbing_response.rate_limit) 4146 return resp 4147 4148 def list(self, filter, *args, timeout=None): 4149 ''' 4150 List gets a list of peering group resource attachments. 4151 ''' 4152 deadline = None if timeout is None else time.time() + timeout 4153 req = PeeringGroupResourceListRequest() 4154 req.meta.CopyFrom(ListRequestMetadata()) 4155 if self.parent.page_limit > 0: 4156 req.meta.limit = self.parent.page_limit 4157 if self.parent.snapshot_datetime is not None: 4158 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4159 4160 req.filter = plumbing.quote_filter_args(filter, *args) 4161 4162 def generator(svc, req): 4163 tries = 0 4164 while True: 4165 t = None if deadline is None else deadline - time.time() 4166 try: 4167 plumbing_response = svc.stub.List( 4168 req, 4169 metadata=svc.parent.get_metadata( 4170 'PeeringGroupResources.List', req), 4171 timeout=t) 4172 except Exception as e: 4173 if self.parent.shouldRetry(tries, e, deadline): 4174 tries += 1 4175 time.sleep( 4176 self.parent.exponentialBackoff(tries, deadline)) 4177 continue 4178 raise plumbing.convert_error_to_porcelain(e) from e 4179 tries = 0 4180 for plumbing_item in plumbing_response.peering_group_resources: 4181 yield plumbing.convert_peering_group_resource_to_porcelain( 4182 plumbing_item) 4183 if plumbing_response.meta.next_cursor == '': 4184 break 4185 req.meta.cursor = plumbing_response.meta.next_cursor 4186 4187 return generator(self, req) 4188 4189 4190class PeeringGroups: 4191 ''' 4192 PeeringGroups provides the building blocks necessary to obtain explicit network topology and routing. 4193 See `strongdm.models.PeeringGroup`. 4194 ''' 4195 def __init__(self, channel, client): 4196 self.parent = client 4197 self.stub = PeeringGroupsStub(channel) 4198 4199 def create(self, peering_group, timeout=None): 4200 ''' 4201 Create registers a new PeeringGroup. 4202 ''' 4203 deadline = None if timeout is None else time.time() + timeout 4204 req = PeeringGroupCreateRequest() 4205 4206 if peering_group is not None: 4207 req.peering_group.CopyFrom( 4208 plumbing.convert_peering_group_to_plumbing(peering_group)) 4209 tries = 0 4210 plumbing_response = None 4211 while True: 4212 t = None if deadline is None else deadline - time.time() 4213 try: 4214 plumbing_response = self.stub.Create( 4215 req, 4216 metadata=self.parent.get_metadata('PeeringGroups.Create', 4217 req), 4218 timeout=t) 4219 except Exception as e: 4220 if self.parent.shouldRetry(tries, e, deadline): 4221 tries += 1 4222 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4223 continue 4224 raise plumbing.convert_error_to_porcelain(e) from e 4225 break 4226 4227 resp = models.PeeringGroupCreateResponse() 4228 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4229 plumbing_response.meta) 4230 resp.peering_group = plumbing.convert_peering_group_to_porcelain( 4231 plumbing_response.peering_group) 4232 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4233 plumbing_response.rate_limit) 4234 return resp 4235 4236 def delete(self, id, timeout=None): 4237 ''' 4238 Delete removes a PeeringGroup by ID. 4239 ''' 4240 deadline = None if timeout is None else time.time() + timeout 4241 req = PeeringGroupDeleteRequest() 4242 4243 req.id = (id) 4244 tries = 0 4245 plumbing_response = None 4246 while True: 4247 t = None if deadline is None else deadline - time.time() 4248 try: 4249 plumbing_response = self.stub.Delete( 4250 req, 4251 metadata=self.parent.get_metadata('PeeringGroups.Delete', 4252 req), 4253 timeout=t) 4254 except Exception as e: 4255 if self.parent.shouldRetry(tries, e, deadline): 4256 tries += 1 4257 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4258 continue 4259 raise plumbing.convert_error_to_porcelain(e) from e 4260 break 4261 4262 resp = models.PeeringGroupDeleteResponse() 4263 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4264 plumbing_response.meta) 4265 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4266 plumbing_response.rate_limit) 4267 return resp 4268 4269 def get(self, id, timeout=None): 4270 ''' 4271 Get reads one PeeringGroup by ID. It will load all its dependencies. 4272 ''' 4273 deadline = None if timeout is None else time.time() + timeout 4274 req = PeeringGroupGetRequest() 4275 if self.parent.snapshot_datetime is not None: 4276 req.meta.CopyFrom(GetRequestMetadata()) 4277 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4278 4279 req.id = (id) 4280 tries = 0 4281 plumbing_response = None 4282 while True: 4283 t = None if deadline is None else deadline - time.time() 4284 try: 4285 plumbing_response = self.stub.Get( 4286 req, 4287 metadata=self.parent.get_metadata('PeeringGroups.Get', 4288 req), 4289 timeout=t) 4290 except Exception as e: 4291 if self.parent.shouldRetry(tries, e, deadline): 4292 tries += 1 4293 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4294 continue 4295 raise plumbing.convert_error_to_porcelain(e) from e 4296 break 4297 4298 resp = models.PeeringGroupGetResponse() 4299 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4300 plumbing_response.meta) 4301 resp.peering_group = plumbing.convert_peering_group_to_porcelain( 4302 plumbing_response.peering_group) 4303 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4304 plumbing_response.rate_limit) 4305 return resp 4306 4307 def list(self, filter, *args, timeout=None): 4308 ''' 4309 List gets a list of Peering Groups. 4310 ''' 4311 deadline = None if timeout is None else time.time() + timeout 4312 req = PeeringGroupListRequest() 4313 req.meta.CopyFrom(ListRequestMetadata()) 4314 if self.parent.page_limit > 0: 4315 req.meta.limit = self.parent.page_limit 4316 if self.parent.snapshot_datetime is not None: 4317 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4318 4319 req.filter = plumbing.quote_filter_args(filter, *args) 4320 4321 def generator(svc, req): 4322 tries = 0 4323 while True: 4324 t = None if deadline is None else deadline - time.time() 4325 try: 4326 plumbing_response = svc.stub.List( 4327 req, 4328 metadata=svc.parent.get_metadata( 4329 'PeeringGroups.List', req), 4330 timeout=t) 4331 except Exception as e: 4332 if self.parent.shouldRetry(tries, e, deadline): 4333 tries += 1 4334 time.sleep( 4335 self.parent.exponentialBackoff(tries, deadline)) 4336 continue 4337 raise plumbing.convert_error_to_porcelain(e) from e 4338 tries = 0 4339 for plumbing_item in plumbing_response.peering_groups: 4340 yield plumbing.convert_peering_group_to_porcelain( 4341 plumbing_item) 4342 if plumbing_response.meta.next_cursor == '': 4343 break 4344 req.meta.cursor = plumbing_response.meta.next_cursor 4345 4346 return generator(self, req) 4347 4348 4349class Policies: 4350 ''' 4351 Policies are the collection of one or more statements that enforce fine-grained access 4352 control for the users of an organization. 4353 See `strongdm.models.Policy`. 4354 ''' 4355 def __init__(self, channel, client): 4356 self.parent = client 4357 self.stub = PoliciesStub(channel) 4358 4359 def create(self, policy, timeout=None): 4360 ''' 4361 Create creates a new Policy. 4362 ''' 4363 deadline = None if timeout is None else time.time() + timeout 4364 req = PolicyCreateRequest() 4365 4366 if policy is not None: 4367 req.policy.CopyFrom(plumbing.convert_policy_to_plumbing(policy)) 4368 tries = 0 4369 plumbing_response = None 4370 while True: 4371 t = None if deadline is None else deadline - time.time() 4372 try: 4373 plumbing_response = self.stub.Create( 4374 req, 4375 metadata=self.parent.get_metadata('Policies.Create', req), 4376 timeout=t) 4377 except Exception as e: 4378 if self.parent.shouldRetry(tries, e, deadline): 4379 tries += 1 4380 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4381 continue 4382 raise plumbing.convert_error_to_porcelain(e) from e 4383 break 4384 4385 resp = models.PolicyCreateResponse() 4386 resp.policy = plumbing.convert_policy_to_porcelain( 4387 plumbing_response.policy) 4388 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4389 plumbing_response.rate_limit) 4390 return resp 4391 4392 def delete(self, id, timeout=None): 4393 ''' 4394 Delete removes a Policy by ID. 4395 ''' 4396 deadline = None if timeout is None else time.time() + timeout 4397 req = PolicyDeleteRequest() 4398 4399 req.id = (id) 4400 tries = 0 4401 plumbing_response = None 4402 while True: 4403 t = None if deadline is None else deadline - time.time() 4404 try: 4405 plumbing_response = self.stub.Delete( 4406 req, 4407 metadata=self.parent.get_metadata('Policies.Delete', req), 4408 timeout=t) 4409 except Exception as e: 4410 if self.parent.shouldRetry(tries, e, deadline): 4411 tries += 1 4412 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4413 continue 4414 raise plumbing.convert_error_to_porcelain(e) from e 4415 break 4416 4417 resp = models.PolicyDeleteResponse() 4418 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4419 plumbing_response.rate_limit) 4420 return resp 4421 4422 def update(self, policy, timeout=None): 4423 ''' 4424 Update replaces all the fields of a Policy by ID. 4425 ''' 4426 deadline = None if timeout is None else time.time() + timeout 4427 req = PolicyUpdateRequest() 4428 4429 if policy is not None: 4430 req.policy.CopyFrom(plumbing.convert_policy_to_plumbing(policy)) 4431 tries = 0 4432 plumbing_response = None 4433 while True: 4434 t = None if deadline is None else deadline - time.time() 4435 try: 4436 plumbing_response = self.stub.Update( 4437 req, 4438 metadata=self.parent.get_metadata('Policies.Update', req), 4439 timeout=t) 4440 except Exception as e: 4441 if self.parent.shouldRetry(tries, e, deadline): 4442 tries += 1 4443 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4444 continue 4445 raise plumbing.convert_error_to_porcelain(e) from e 4446 break 4447 4448 resp = models.PolicyUpdateResponse() 4449 resp.policy = plumbing.convert_policy_to_porcelain( 4450 plumbing_response.policy) 4451 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4452 plumbing_response.rate_limit) 4453 return resp 4454 4455 def get(self, id, timeout=None): 4456 ''' 4457 Get reads one Policy by ID. 4458 ''' 4459 deadline = None if timeout is None else time.time() + timeout 4460 req = PolicyGetRequest() 4461 if self.parent.snapshot_datetime is not None: 4462 req.meta.CopyFrom(GetRequestMetadata()) 4463 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4464 4465 req.id = (id) 4466 tries = 0 4467 plumbing_response = None 4468 while True: 4469 t = None if deadline is None else deadline - time.time() 4470 try: 4471 plumbing_response = self.stub.Get( 4472 req, 4473 metadata=self.parent.get_metadata('Policies.Get', req), 4474 timeout=t) 4475 except Exception as e: 4476 if self.parent.shouldRetry(tries, e, deadline): 4477 tries += 1 4478 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4479 continue 4480 raise plumbing.convert_error_to_porcelain(e) from e 4481 break 4482 4483 resp = models.PolicyGetResponse() 4484 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4485 plumbing_response.meta) 4486 resp.policy = plumbing.convert_policy_to_porcelain( 4487 plumbing_response.policy) 4488 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4489 plumbing_response.rate_limit) 4490 return resp 4491 4492 def list(self, filter, *args, timeout=None): 4493 ''' 4494 List gets a list of Policy matching a given set of criteria 4495 ''' 4496 deadline = None if timeout is None else time.time() + timeout 4497 req = PolicyListRequest() 4498 req.meta.CopyFrom(ListRequestMetadata()) 4499 if self.parent.page_limit > 0: 4500 req.meta.limit = self.parent.page_limit 4501 if self.parent.snapshot_datetime is not None: 4502 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4503 4504 req.filter = plumbing.quote_filter_args(filter, *args) 4505 4506 def generator(svc, req): 4507 tries = 0 4508 while True: 4509 t = None if deadline is None else deadline - time.time() 4510 try: 4511 plumbing_response = svc.stub.List( 4512 req, 4513 metadata=svc.parent.get_metadata('Policies.List', req), 4514 timeout=t) 4515 except Exception as e: 4516 if self.parent.shouldRetry(tries, e, deadline): 4517 tries += 1 4518 time.sleep( 4519 self.parent.exponentialBackoff(tries, deadline)) 4520 continue 4521 raise plumbing.convert_error_to_porcelain(e) from e 4522 tries = 0 4523 for plumbing_item in plumbing_response.policies: 4524 yield plumbing.convert_policy_to_porcelain(plumbing_item) 4525 if plumbing_response.meta.next_cursor == '': 4526 break 4527 req.meta.cursor = plumbing_response.meta.next_cursor 4528 4529 return generator(self, req) 4530 4531 4532class SnapshotPolicies: 4533 ''' 4534 SnapshotPolicies exposes the read only methods of the Policies 4535 service for historical queries. 4536 ''' 4537 def __init__(self, policies): 4538 self.policies = policies 4539 4540 def get(self, id, timeout=None): 4541 ''' 4542 Get reads one Policy by ID. 4543 ''' 4544 return self.policies.get(id, timeout=timeout) 4545 4546 def list(self, filter, *args, timeout=None): 4547 ''' 4548 List gets a list of Policy matching a given set of criteria 4549 ''' 4550 return self.policies.list(filter, *args, timeout=timeout) 4551 4552 4553class PoliciesHistory: 4554 ''' 4555 PoliciesHistory records all changes to the state of a Policy. 4556 See `strongdm.models.PolicyHistory`. 4557 ''' 4558 def __init__(self, channel, client): 4559 self.parent = client 4560 self.stub = PoliciesHistoryStub(channel) 4561 4562 def list(self, filter, *args, timeout=None): 4563 ''' 4564 List gets a list of PolicyHistory records matching a given set of criteria. 4565 ''' 4566 deadline = None if timeout is None else time.time() + timeout 4567 req = PoliciesHistoryListRequest() 4568 req.meta.CopyFrom(ListRequestMetadata()) 4569 if self.parent.page_limit > 0: 4570 req.meta.limit = self.parent.page_limit 4571 if self.parent.snapshot_datetime is not None: 4572 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4573 4574 req.filter = plumbing.quote_filter_args(filter, *args) 4575 4576 def generator(svc, req): 4577 tries = 0 4578 while True: 4579 t = None if deadline is None else deadline - time.time() 4580 try: 4581 plumbing_response = svc.stub.List( 4582 req, 4583 metadata=svc.parent.get_metadata( 4584 'PoliciesHistory.List', req), 4585 timeout=t) 4586 except Exception as e: 4587 if self.parent.shouldRetry(tries, e, deadline): 4588 tries += 1 4589 time.sleep( 4590 self.parent.exponentialBackoff(tries, deadline)) 4591 continue 4592 raise plumbing.convert_error_to_porcelain(e) from e 4593 tries = 0 4594 for plumbing_item in plumbing_response.history: 4595 yield plumbing.convert_policy_history_to_porcelain( 4596 plumbing_item) 4597 if plumbing_response.meta.next_cursor == '': 4598 break 4599 req.meta.cursor = plumbing_response.meta.next_cursor 4600 4601 return generator(self, req) 4602 4603 4604class ProxyClusterKeys: 4605 ''' 4606 Proxy Cluster Keys are authentication keys for all proxies within a cluster. 4607 The proxies within a cluster share the same key. One cluster can have 4608 multiple keys in order to facilitate key rotation. 4609 See `strongdm.models.ProxyClusterKey`. 4610 ''' 4611 def __init__(self, channel, client): 4612 self.parent = client 4613 self.stub = ProxyClusterKeysStub(channel) 4614 4615 def create(self, proxy_cluster_key, timeout=None): 4616 ''' 4617 Create registers a new ProxyClusterKey. 4618 ''' 4619 deadline = None if timeout is None else time.time() + timeout 4620 req = ProxyClusterKeyCreateRequest() 4621 4622 if proxy_cluster_key is not None: 4623 req.proxy_cluster_key.CopyFrom( 4624 plumbing.convert_proxy_cluster_key_to_plumbing( 4625 proxy_cluster_key)) 4626 tries = 0 4627 plumbing_response = None 4628 while True: 4629 t = None if deadline is None else deadline - time.time() 4630 try: 4631 plumbing_response = self.stub.Create( 4632 req, 4633 metadata=self.parent.get_metadata( 4634 'ProxyClusterKeys.Create', req), 4635 timeout=t) 4636 except Exception as e: 4637 if self.parent.shouldRetry(tries, e, deadline): 4638 tries += 1 4639 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4640 continue 4641 raise plumbing.convert_error_to_porcelain(e) from e 4642 break 4643 4644 resp = models.ProxyClusterKeyCreateResponse() 4645 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4646 plumbing_response.meta) 4647 resp.proxy_cluster_key = plumbing.convert_proxy_cluster_key_to_porcelain( 4648 plumbing_response.proxy_cluster_key) 4649 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4650 plumbing_response.rate_limit) 4651 resp.secret_key = (plumbing_response.secret_key) 4652 return resp 4653 4654 def get(self, id, timeout=None): 4655 ''' 4656 Get reads one ProxyClusterKey by ID. 4657 ''' 4658 deadline = None if timeout is None else time.time() + timeout 4659 req = ProxyClusterKeyGetRequest() 4660 if self.parent.snapshot_datetime is not None: 4661 req.meta.CopyFrom(GetRequestMetadata()) 4662 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4663 4664 req.id = (id) 4665 tries = 0 4666 plumbing_response = None 4667 while True: 4668 t = None if deadline is None else deadline - time.time() 4669 try: 4670 plumbing_response = self.stub.Get( 4671 req, 4672 metadata=self.parent.get_metadata('ProxyClusterKeys.Get', 4673 req), 4674 timeout=t) 4675 except Exception as e: 4676 if self.parent.shouldRetry(tries, e, deadline): 4677 tries += 1 4678 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4679 continue 4680 raise plumbing.convert_error_to_porcelain(e) from e 4681 break 4682 4683 resp = models.ProxyClusterKeyGetResponse() 4684 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4685 plumbing_response.meta) 4686 resp.proxy_cluster_key = plumbing.convert_proxy_cluster_key_to_porcelain( 4687 plumbing_response.proxy_cluster_key) 4688 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4689 plumbing_response.rate_limit) 4690 return resp 4691 4692 def delete(self, id, timeout=None): 4693 ''' 4694 Delete removes a ProxyClusterKey by ID. 4695 ''' 4696 deadline = None if timeout is None else time.time() + timeout 4697 req = ProxyClusterKeyDeleteRequest() 4698 4699 req.id = (id) 4700 tries = 0 4701 plumbing_response = None 4702 while True: 4703 t = None if deadline is None else deadline - time.time() 4704 try: 4705 plumbing_response = self.stub.Delete( 4706 req, 4707 metadata=self.parent.get_metadata( 4708 'ProxyClusterKeys.Delete', req), 4709 timeout=t) 4710 except Exception as e: 4711 if self.parent.shouldRetry(tries, e, deadline): 4712 tries += 1 4713 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4714 continue 4715 raise plumbing.convert_error_to_porcelain(e) from e 4716 break 4717 4718 resp = models.ProxyClusterKeyDeleteResponse() 4719 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4720 plumbing_response.meta) 4721 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4722 plumbing_response.rate_limit) 4723 return resp 4724 4725 def list(self, filter, *args, timeout=None): 4726 ''' 4727 List gets a list of ProxyClusterKeys matching a given set of criteria. 4728 ''' 4729 deadline = None if timeout is None else time.time() + timeout 4730 req = ProxyClusterKeyListRequest() 4731 req.meta.CopyFrom(ListRequestMetadata()) 4732 if self.parent.page_limit > 0: 4733 req.meta.limit = self.parent.page_limit 4734 if self.parent.snapshot_datetime is not None: 4735 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4736 4737 req.filter = plumbing.quote_filter_args(filter, *args) 4738 4739 def generator(svc, req): 4740 tries = 0 4741 while True: 4742 t = None if deadline is None else deadline - time.time() 4743 try: 4744 plumbing_response = svc.stub.List( 4745 req, 4746 metadata=svc.parent.get_metadata( 4747 'ProxyClusterKeys.List', req), 4748 timeout=t) 4749 except Exception as e: 4750 if self.parent.shouldRetry(tries, e, deadline): 4751 tries += 1 4752 time.sleep( 4753 self.parent.exponentialBackoff(tries, deadline)) 4754 continue 4755 raise plumbing.convert_error_to_porcelain(e) from e 4756 tries = 0 4757 for plumbing_item in plumbing_response.proxy_cluster_keys: 4758 yield plumbing.convert_proxy_cluster_key_to_porcelain( 4759 plumbing_item) 4760 if plumbing_response.meta.next_cursor == '': 4761 break 4762 req.meta.cursor = plumbing_response.meta.next_cursor 4763 4764 return generator(self, req) 4765 4766 4767class SnapshotProxyClusterKeys: 4768 ''' 4769 SnapshotProxyClusterKeys exposes the read only methods of the ProxyClusterKeys 4770 service for historical queries. 4771 ''' 4772 def __init__(self, proxy_cluster_keys): 4773 self.proxy_cluster_keys = proxy_cluster_keys 4774 4775 def get(self, id, timeout=None): 4776 ''' 4777 Get reads one ProxyClusterKey by ID. 4778 ''' 4779 return self.proxy_cluster_keys.get(id, timeout=timeout) 4780 4781 def list(self, filter, *args, timeout=None): 4782 ''' 4783 List gets a list of ProxyClusterKeys matching a given set of criteria. 4784 ''' 4785 return self.proxy_cluster_keys.list(filter, *args, timeout=timeout) 4786 4787 4788class Queries: 4789 ''' 4790 A Query is a record of a single client request to a resource, such as a SQL query. 4791 Long-running SSH, RDP, or Kubernetes interactive sessions also count as queries. 4792 The Queries service is read-only. 4793 See `strongdm.models.Query`. 4794 ''' 4795 def __init__(self, channel, client): 4796 self.parent = client 4797 self.stub = QueriesStub(channel) 4798 4799 def list(self, filter, *args, timeout=None): 4800 ''' 4801 List gets a list of Queries matching a given set of criteria. 4802 ''' 4803 deadline = None if timeout is None else time.time() + timeout 4804 req = QueryListRequest() 4805 req.meta.CopyFrom(ListRequestMetadata()) 4806 if self.parent.page_limit > 0: 4807 req.meta.limit = self.parent.page_limit 4808 if self.parent.snapshot_datetime is not None: 4809 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4810 4811 req.filter = plumbing.quote_filter_args(filter, *args) 4812 4813 def generator(svc, req): 4814 tries = 0 4815 while True: 4816 t = None if deadline is None else deadline - time.time() 4817 try: 4818 plumbing_response = svc.stub.List( 4819 req, 4820 metadata=svc.parent.get_metadata('Queries.List', req), 4821 timeout=t) 4822 except Exception as e: 4823 if self.parent.shouldRetry(tries, e, deadline): 4824 tries += 1 4825 time.sleep( 4826 self.parent.exponentialBackoff(tries, deadline)) 4827 continue 4828 raise plumbing.convert_error_to_porcelain(e) from e 4829 tries = 0 4830 for plumbing_item in plumbing_response.queries: 4831 yield plumbing.convert_query_to_porcelain(plumbing_item) 4832 if plumbing_response.meta.next_cursor == '': 4833 break 4834 req.meta.cursor = plumbing_response.meta.next_cursor 4835 4836 return generator(self, req) 4837 4838 4839class RemoteIdentities: 4840 ''' 4841 RemoteIdentities assign a resource directly to an account, giving the account the permission to connect to that resource. 4842 See `strongdm.models.RemoteIdentity`. 4843 ''' 4844 def __init__(self, channel, client): 4845 self.parent = client 4846 self.stub = RemoteIdentitiesStub(channel) 4847 4848 def create(self, remote_identity, timeout=None): 4849 ''' 4850 Create registers a new RemoteIdentity. 4851 ''' 4852 deadline = None if timeout is None else time.time() + timeout 4853 req = RemoteIdentityCreateRequest() 4854 4855 if remote_identity is not None: 4856 req.remote_identity.CopyFrom( 4857 plumbing.convert_remote_identity_to_plumbing(remote_identity)) 4858 tries = 0 4859 plumbing_response = None 4860 while True: 4861 t = None if deadline is None else deadline - time.time() 4862 try: 4863 plumbing_response = self.stub.Create( 4864 req, 4865 metadata=self.parent.get_metadata( 4866 'RemoteIdentities.Create', req), 4867 timeout=t) 4868 except Exception as e: 4869 if self.parent.shouldRetry(tries, e, deadline): 4870 tries += 1 4871 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4872 continue 4873 raise plumbing.convert_error_to_porcelain(e) from e 4874 break 4875 4876 resp = models.RemoteIdentityCreateResponse() 4877 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4878 plumbing_response.meta) 4879 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4880 plumbing_response.rate_limit) 4881 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4882 plumbing_response.remote_identity) 4883 return resp 4884 4885 def get(self, id, timeout=None): 4886 ''' 4887 Get reads one RemoteIdentity by ID. 4888 ''' 4889 deadline = None if timeout is None else time.time() + timeout 4890 req = RemoteIdentityGetRequest() 4891 if self.parent.snapshot_datetime is not None: 4892 req.meta.CopyFrom(GetRequestMetadata()) 4893 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4894 4895 req.id = (id) 4896 tries = 0 4897 plumbing_response = None 4898 while True: 4899 t = None if deadline is None else deadline - time.time() 4900 try: 4901 plumbing_response = self.stub.Get( 4902 req, 4903 metadata=self.parent.get_metadata('RemoteIdentities.Get', 4904 req), 4905 timeout=t) 4906 except Exception as e: 4907 if self.parent.shouldRetry(tries, e, deadline): 4908 tries += 1 4909 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4910 continue 4911 raise plumbing.convert_error_to_porcelain(e) from e 4912 break 4913 4914 resp = models.RemoteIdentityGetResponse() 4915 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4916 plumbing_response.meta) 4917 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4918 plumbing_response.rate_limit) 4919 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4920 plumbing_response.remote_identity) 4921 return resp 4922 4923 def update(self, remote_identity, timeout=None): 4924 ''' 4925 Update replaces all the fields of a RemoteIdentity by ID. 4926 ''' 4927 deadline = None if timeout is None else time.time() + timeout 4928 req = RemoteIdentityUpdateRequest() 4929 4930 if remote_identity is not None: 4931 req.remote_identity.CopyFrom( 4932 plumbing.convert_remote_identity_to_plumbing(remote_identity)) 4933 tries = 0 4934 plumbing_response = None 4935 while True: 4936 t = None if deadline is None else deadline - time.time() 4937 try: 4938 plumbing_response = self.stub.Update( 4939 req, 4940 metadata=self.parent.get_metadata( 4941 'RemoteIdentities.Update', req), 4942 timeout=t) 4943 except Exception as e: 4944 if self.parent.shouldRetry(tries, e, deadline): 4945 tries += 1 4946 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4947 continue 4948 raise plumbing.convert_error_to_porcelain(e) from e 4949 break 4950 4951 resp = models.RemoteIdentityUpdateResponse() 4952 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 4953 plumbing_response.meta) 4954 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4955 plumbing_response.rate_limit) 4956 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4957 plumbing_response.remote_identity) 4958 return resp 4959 4960 def delete(self, id, timeout=None): 4961 ''' 4962 Delete removes a RemoteIdentity by ID. 4963 ''' 4964 deadline = None if timeout is None else time.time() + timeout 4965 req = RemoteIdentityDeleteRequest() 4966 4967 req.id = (id) 4968 tries = 0 4969 plumbing_response = None 4970 while True: 4971 t = None if deadline is None else deadline - time.time() 4972 try: 4973 plumbing_response = self.stub.Delete( 4974 req, 4975 metadata=self.parent.get_metadata( 4976 'RemoteIdentities.Delete', req), 4977 timeout=t) 4978 except Exception as e: 4979 if self.parent.shouldRetry(tries, e, deadline): 4980 tries += 1 4981 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4982 continue 4983 raise plumbing.convert_error_to_porcelain(e) from e 4984 break 4985 4986 resp = models.RemoteIdentityDeleteResponse() 4987 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4988 plumbing_response.meta) 4989 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4990 plumbing_response.rate_limit) 4991 return resp 4992 4993 def list(self, filter, *args, timeout=None): 4994 ''' 4995 List gets a list of RemoteIdentities matching a given set of criteria. 4996 ''' 4997 deadline = None if timeout is None else time.time() + timeout 4998 req = RemoteIdentityListRequest() 4999 req.meta.CopyFrom(ListRequestMetadata()) 5000 if self.parent.page_limit > 0: 5001 req.meta.limit = self.parent.page_limit 5002 if self.parent.snapshot_datetime is not None: 5003 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5004 5005 req.filter = plumbing.quote_filter_args(filter, *args) 5006 5007 def generator(svc, req): 5008 tries = 0 5009 while True: 5010 t = None if deadline is None else deadline - time.time() 5011 try: 5012 plumbing_response = svc.stub.List( 5013 req, 5014 metadata=svc.parent.get_metadata( 5015 'RemoteIdentities.List', req), 5016 timeout=t) 5017 except Exception as e: 5018 if self.parent.shouldRetry(tries, e, deadline): 5019 tries += 1 5020 time.sleep( 5021 self.parent.exponentialBackoff(tries, deadline)) 5022 continue 5023 raise plumbing.convert_error_to_porcelain(e) from e 5024 tries = 0 5025 for plumbing_item in plumbing_response.remote_identities: 5026 yield plumbing.convert_remote_identity_to_porcelain( 5027 plumbing_item) 5028 if plumbing_response.meta.next_cursor == '': 5029 break 5030 req.meta.cursor = plumbing_response.meta.next_cursor 5031 5032 return generator(self, req) 5033 5034 5035class SnapshotRemoteIdentities: 5036 ''' 5037 SnapshotRemoteIdentities exposes the read only methods of the RemoteIdentities 5038 service for historical queries. 5039 ''' 5040 def __init__(self, remote_identities): 5041 self.remote_identities = remote_identities 5042 5043 def get(self, id, timeout=None): 5044 ''' 5045 Get reads one RemoteIdentity by ID. 5046 ''' 5047 return self.remote_identities.get(id, timeout=timeout) 5048 5049 def list(self, filter, *args, timeout=None): 5050 ''' 5051 List gets a list of RemoteIdentities matching a given set of criteria. 5052 ''' 5053 return self.remote_identities.list(filter, *args, timeout=timeout) 5054 5055 5056class RemoteIdentitiesHistory: 5057 ''' 5058 RemoteIdentitiesHistory records all changes to the state of a RemoteIdentity. 5059 See `strongdm.models.RemoteIdentityHistory`. 5060 ''' 5061 def __init__(self, channel, client): 5062 self.parent = client 5063 self.stub = RemoteIdentitiesHistoryStub(channel) 5064 5065 def list(self, filter, *args, timeout=None): 5066 ''' 5067 List gets a list of RemoteIdentityHistory records matching a given set of criteria. 5068 ''' 5069 deadline = None if timeout is None else time.time() + timeout 5070 req = RemoteIdentityHistoryListRequest() 5071 req.meta.CopyFrom(ListRequestMetadata()) 5072 if self.parent.page_limit > 0: 5073 req.meta.limit = self.parent.page_limit 5074 if self.parent.snapshot_datetime is not None: 5075 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5076 5077 req.filter = plumbing.quote_filter_args(filter, *args) 5078 5079 def generator(svc, req): 5080 tries = 0 5081 while True: 5082 t = None if deadline is None else deadline - time.time() 5083 try: 5084 plumbing_response = svc.stub.List( 5085 req, 5086 metadata=svc.parent.get_metadata( 5087 'RemoteIdentitiesHistory.List', req), 5088 timeout=t) 5089 except Exception as e: 5090 if self.parent.shouldRetry(tries, e, deadline): 5091 tries += 1 5092 time.sleep( 5093 self.parent.exponentialBackoff(tries, deadline)) 5094 continue 5095 raise plumbing.convert_error_to_porcelain(e) from e 5096 tries = 0 5097 for plumbing_item in plumbing_response.history: 5098 yield plumbing.convert_remote_identity_history_to_porcelain( 5099 plumbing_item) 5100 if plumbing_response.meta.next_cursor == '': 5101 break 5102 req.meta.cursor = plumbing_response.meta.next_cursor 5103 5104 return generator(self, req) 5105 5106 5107class RemoteIdentityGroups: 5108 ''' 5109 A RemoteIdentityGroup is a named grouping of Remote Identities for Accounts. 5110 An Account's relationship to a RemoteIdentityGroup is defined via RemoteIdentity objects. 5111 See `strongdm.models.RemoteIdentityGroup`. 5112 ''' 5113 def __init__(self, channel, client): 5114 self.parent = client 5115 self.stub = RemoteIdentityGroupsStub(channel) 5116 5117 def get(self, id, timeout=None): 5118 ''' 5119 Get reads one RemoteIdentityGroup by ID. 5120 ''' 5121 deadline = None if timeout is None else time.time() + timeout 5122 req = RemoteIdentityGroupGetRequest() 5123 if self.parent.snapshot_datetime is not None: 5124 req.meta.CopyFrom(GetRequestMetadata()) 5125 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5126 5127 req.id = (id) 5128 tries = 0 5129 plumbing_response = None 5130 while True: 5131 t = None if deadline is None else deadline - time.time() 5132 try: 5133 plumbing_response = self.stub.Get( 5134 req, 5135 metadata=self.parent.get_metadata( 5136 'RemoteIdentityGroups.Get', req), 5137 timeout=t) 5138 except Exception as e: 5139 if self.parent.shouldRetry(tries, e, deadline): 5140 tries += 1 5141 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5142 continue 5143 raise plumbing.convert_error_to_porcelain(e) from e 5144 break 5145 5146 resp = models.RemoteIdentityGroupGetResponse() 5147 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 5148 plumbing_response.meta) 5149 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5150 plumbing_response.rate_limit) 5151 resp.remote_identity_group = plumbing.convert_remote_identity_group_to_porcelain( 5152 plumbing_response.remote_identity_group) 5153 return resp 5154 5155 def list(self, filter, *args, timeout=None): 5156 ''' 5157 List gets a list of RemoteIdentityGroups matching a given set of criteria. 5158 ''' 5159 deadline = None if timeout is None else time.time() + timeout 5160 req = RemoteIdentityGroupListRequest() 5161 req.meta.CopyFrom(ListRequestMetadata()) 5162 if self.parent.page_limit > 0: 5163 req.meta.limit = self.parent.page_limit 5164 if self.parent.snapshot_datetime is not None: 5165 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5166 5167 req.filter = plumbing.quote_filter_args(filter, *args) 5168 5169 def generator(svc, req): 5170 tries = 0 5171 while True: 5172 t = None if deadline is None else deadline - time.time() 5173 try: 5174 plumbing_response = svc.stub.List( 5175 req, 5176 metadata=svc.parent.get_metadata( 5177 'RemoteIdentityGroups.List', req), 5178 timeout=t) 5179 except Exception as e: 5180 if self.parent.shouldRetry(tries, e, deadline): 5181 tries += 1 5182 time.sleep( 5183 self.parent.exponentialBackoff(tries, deadline)) 5184 continue 5185 raise plumbing.convert_error_to_porcelain(e) from e 5186 tries = 0 5187 for plumbing_item in plumbing_response.remote_identity_groups: 5188 yield plumbing.convert_remote_identity_group_to_porcelain( 5189 plumbing_item) 5190 if plumbing_response.meta.next_cursor == '': 5191 break 5192 req.meta.cursor = plumbing_response.meta.next_cursor 5193 5194 return generator(self, req) 5195 5196 5197class SnapshotRemoteIdentityGroups: 5198 ''' 5199 SnapshotRemoteIdentityGroups exposes the read only methods of the RemoteIdentityGroups 5200 service for historical queries. 5201 ''' 5202 def __init__(self, remote_identity_groups): 5203 self.remote_identity_groups = remote_identity_groups 5204 5205 def get(self, id, timeout=None): 5206 ''' 5207 Get reads one RemoteIdentityGroup by ID. 5208 ''' 5209 return self.remote_identity_groups.get(id, timeout=timeout) 5210 5211 def list(self, filter, *args, timeout=None): 5212 ''' 5213 List gets a list of RemoteIdentityGroups matching a given set of criteria. 5214 ''' 5215 return self.remote_identity_groups.list(filter, *args, timeout=timeout) 5216 5217 5218class RemoteIdentityGroupsHistory: 5219 ''' 5220 RemoteIdentityGroupsHistory records all changes to the state of a RemoteIdentityGroup. 5221 See `strongdm.models.RemoteIdentityGroupHistory`. 5222 ''' 5223 def __init__(self, channel, client): 5224 self.parent = client 5225 self.stub = RemoteIdentityGroupsHistoryStub(channel) 5226 5227 def list(self, filter, *args, timeout=None): 5228 ''' 5229 List gets a list of RemoteIdentityGroupHistory records matching a given set of criteria. 5230 ''' 5231 deadline = None if timeout is None else time.time() + timeout 5232 req = RemoteIdentityGroupHistoryListRequest() 5233 req.meta.CopyFrom(ListRequestMetadata()) 5234 if self.parent.page_limit > 0: 5235 req.meta.limit = self.parent.page_limit 5236 if self.parent.snapshot_datetime is not None: 5237 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5238 5239 req.filter = plumbing.quote_filter_args(filter, *args) 5240 5241 def generator(svc, req): 5242 tries = 0 5243 while True: 5244 t = None if deadline is None else deadline - time.time() 5245 try: 5246 plumbing_response = svc.stub.List( 5247 req, 5248 metadata=svc.parent.get_metadata( 5249 'RemoteIdentityGroupsHistory.List', req), 5250 timeout=t) 5251 except Exception as e: 5252 if self.parent.shouldRetry(tries, e, deadline): 5253 tries += 1 5254 time.sleep( 5255 self.parent.exponentialBackoff(tries, deadline)) 5256 continue 5257 raise plumbing.convert_error_to_porcelain(e) from e 5258 tries = 0 5259 for plumbing_item in plumbing_response.history: 5260 yield plumbing.convert_remote_identity_group_history_to_porcelain( 5261 plumbing_item) 5262 if plumbing_response.meta.next_cursor == '': 5263 break 5264 req.meta.cursor = plumbing_response.meta.next_cursor 5265 5266 return generator(self, req) 5267 5268 5269class Replays: 5270 ''' 5271 A Replay captures the data transferred over a long-running SSH, RDP, or Kubernetes interactive session 5272 (otherwise referred to as a query). The Replays service is read-only. 5273 See `strongdm.models.ReplayChunk`. 5274 ''' 5275 def __init__(self, channel, client): 5276 self.parent = client 5277 self.stub = ReplaysStub(channel) 5278 5279 def list(self, filter, *args, timeout=None): 5280 ''' 5281 List gets a list of ReplayChunks for the Query ID specified by the filter criteria. 5282 ''' 5283 deadline = None if timeout is None else time.time() + timeout 5284 req = ReplayListRequest() 5285 req.meta.CopyFrom(ListRequestMetadata()) 5286 if self.parent.page_limit > 0: 5287 req.meta.limit = self.parent.page_limit 5288 if self.parent.snapshot_datetime is not None: 5289 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5290 5291 req.filter = plumbing.quote_filter_args(filter, *args) 5292 5293 def generator(svc, req): 5294 tries = 0 5295 while True: 5296 t = None if deadline is None else deadline - time.time() 5297 try: 5298 plumbing_response = svc.stub.List( 5299 req, 5300 metadata=svc.parent.get_metadata('Replays.List', req), 5301 timeout=t) 5302 except Exception as e: 5303 if self.parent.shouldRetry(tries, e, deadline): 5304 tries += 1 5305 time.sleep( 5306 self.parent.exponentialBackoff(tries, deadline)) 5307 continue 5308 raise plumbing.convert_error_to_porcelain(e) from e 5309 tries = 0 5310 for plumbing_item in plumbing_response.chunks: 5311 yield plumbing.convert_replay_chunk_to_porcelain( 5312 plumbing_item) 5313 if plumbing_response.meta.next_cursor == '': 5314 break 5315 req.meta.cursor = plumbing_response.meta.next_cursor 5316 5317 return generator(self, req) 5318 5319 5320class Resources: 5321 ''' 5322 Resources are databases, servers, clusters, websites, or clouds that strongDM 5323 delegates access to. 5324 See: 5325 `strongdm.models.Aerospike` 5326 `strongdm.models.AKS` 5327 `strongdm.models.AKSBasicAuth` 5328 `strongdm.models.AKSServiceAccount` 5329 `strongdm.models.AKSServiceAccountUserImpersonation` 5330 `strongdm.models.AKSUserImpersonation` 5331 `strongdm.models.AmazonEKS` 5332 `strongdm.models.AmazonEKSInstanceProfile` 5333 `strongdm.models.AmazonEKSInstanceProfileUserImpersonation` 5334 `strongdm.models.AmazonEKSUserImpersonation` 5335 `strongdm.models.AmazonES` 5336 `strongdm.models.AmazonESIAM` 5337 `strongdm.models.AmazonMQAMQP091` 5338 `strongdm.models.AMQP` 5339 `strongdm.models.Athena` 5340 `strongdm.models.AthenaIAM` 5341 `strongdm.models.AuroraMysql` 5342 `strongdm.models.AuroraMysqlIAM` 5343 `strongdm.models.AuroraPostgres` 5344 `strongdm.models.AuroraPostgresIAM` 5345 `strongdm.models.AWS` 5346 `strongdm.models.AWSConsole` 5347 `strongdm.models.AWSConsoleStaticKeyPair` 5348 `strongdm.models.AWSInstanceProfile` 5349 `strongdm.models.Azure` 5350 `strongdm.models.AzureCertificate` 5351 `strongdm.models.AzureConsole` 5352 `strongdm.models.AzureMysql` 5353 `strongdm.models.AzureMysqlManagedIdentity` 5354 `strongdm.models.AzurePostgres` 5355 `strongdm.models.AzurePostgresManagedIdentity` 5356 `strongdm.models.BigQuery` 5357 `strongdm.models.Cassandra` 5358 `strongdm.models.Citus` 5359 `strongdm.models.ClickHouseHTTP` 5360 `strongdm.models.ClickHouseMySQL` 5361 `strongdm.models.ClickHouseTCP` 5362 `strongdm.models.Clustrix` 5363 `strongdm.models.Cockroach` 5364 `strongdm.models.CouchbaseDatabase` 5365 `strongdm.models.CouchbaseWebUI` 5366 `strongdm.models.DB2I` 5367 `strongdm.models.DB2LUW` 5368 `strongdm.models.DocumentDBHost` 5369 `strongdm.models.DocumentDBHostIAM` 5370 `strongdm.models.DocumentDBReplicaSet` 5371 `strongdm.models.DocumentDBReplicaSetIAM` 5372 `strongdm.models.Druid` 5373 `strongdm.models.DynamoDB` 5374 `strongdm.models.DynamoDBIAM` 5375 `strongdm.models.Elastic` 5376 `strongdm.models.ElasticacheRedis` 5377 `strongdm.models.GCP` 5378 `strongdm.models.GCPConsole` 5379 `strongdm.models.GCPWIF` 5380 `strongdm.models.GoogleGKE` 5381 `strongdm.models.GoogleGKEUserImpersonation` 5382 `strongdm.models.Greenplum` 5383 `strongdm.models.HTTPAuth` 5384 `strongdm.models.HTTPBasicAuth` 5385 `strongdm.models.HTTPNoAuth` 5386 `strongdm.models.Kubernetes` 5387 `strongdm.models.KubernetesBasicAuth` 5388 `strongdm.models.KubernetesPodIdentity` 5389 `strongdm.models.KubernetesServiceAccount` 5390 `strongdm.models.KubernetesServiceAccountUserImpersonation` 5391 `strongdm.models.KubernetesUserImpersonation` 5392 `strongdm.models.Maria` 5393 `strongdm.models.Memcached` 5394 `strongdm.models.Memsql` 5395 `strongdm.models.MongoHost` 5396 `strongdm.models.MongoLegacyHost` 5397 `strongdm.models.MongoLegacyReplicaset` 5398 `strongdm.models.MongoReplicaSet` 5399 `strongdm.models.MongoShardedCluster` 5400 `strongdm.models.MTLSMysql` 5401 `strongdm.models.MTLSPostgres` 5402 `strongdm.models.Mysql` 5403 `strongdm.models.Neptune` 5404 `strongdm.models.NeptuneIAM` 5405 `strongdm.models.Oracle` 5406 `strongdm.models.OracleNNE` 5407 `strongdm.models.Postgres` 5408 `strongdm.models.Presto` 5409 `strongdm.models.RabbitMQAMQP091` 5410 `strongdm.models.RawTCP` 5411 `strongdm.models.RDP` 5412 `strongdm.models.RDPCert` 5413 `strongdm.models.RDSPostgresIAM` 5414 `strongdm.models.Redis` 5415 `strongdm.models.RedisCluster` 5416 `strongdm.models.Redshift` 5417 `strongdm.models.RedshiftIAM` 5418 `strongdm.models.RedshiftServerlessIAM` 5419 `strongdm.models.SingleStore` 5420 `strongdm.models.Snowflake` 5421 `strongdm.models.Snowsight` 5422 `strongdm.models.SQLServer` 5423 `strongdm.models.SQLServerAzureAD` 5424 `strongdm.models.SQLServerKerberosAD` 5425 `strongdm.models.SSH` 5426 `strongdm.models.SSHCert` 5427 `strongdm.models.SSHCustomerKey` 5428 `strongdm.models.SSHPassword` 5429 `strongdm.models.Sybase` 5430 `strongdm.models.SybaseIQ` 5431 `strongdm.models.Teradata` 5432 `strongdm.models.Trino` 5433 `strongdm.models.Vertica` 5434 ''' 5435 def __init__(self, channel, client): 5436 self.parent = client 5437 self.stub = ResourcesStub(channel) 5438 5439 def enumerate_tags(self, filter, *args, timeout=None): 5440 ''' 5441 EnumerateTags gets a list of the filter matching tags. 5442 ''' 5443 deadline = None if timeout is None else time.time() + timeout 5444 req = EnumerateTagsRequest() 5445 req.meta.CopyFrom(ListRequestMetadata()) 5446 if self.parent.page_limit > 0: 5447 req.meta.limit = self.parent.page_limit 5448 if self.parent.snapshot_datetime is not None: 5449 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5450 5451 req.filter = plumbing.quote_filter_args(filter, *args) 5452 5453 def generator(svc, req): 5454 tries = 0 5455 while True: 5456 t = None if deadline is None else deadline - time.time() 5457 try: 5458 plumbing_response = svc.stub.EnumerateTags( 5459 req, 5460 metadata=svc.parent.get_metadata( 5461 'Resources.EnumerateTags', req), 5462 timeout=t) 5463 except Exception as e: 5464 if self.parent.shouldRetry(tries, e, deadline): 5465 tries += 1 5466 time.sleep( 5467 self.parent.exponentialBackoff(tries, deadline)) 5468 continue 5469 raise plumbing.convert_error_to_porcelain(e) from e 5470 tries = 0 5471 for plumbing_item in plumbing_response.matches: 5472 yield plumbing.convert_tag_to_porcelain(plumbing_item) 5473 if plumbing_response.meta.next_cursor == '': 5474 break 5475 req.meta.cursor = plumbing_response.meta.next_cursor 5476 5477 return generator(self, req) 5478 5479 def create(self, resource, timeout=None): 5480 ''' 5481 Create registers a new Resource. 5482 ''' 5483 deadline = None if timeout is None else time.time() + timeout 5484 req = ResourceCreateRequest() 5485 5486 if resource is not None: 5487 req.resource.CopyFrom( 5488 plumbing.convert_resource_to_plumbing(resource)) 5489 tries = 0 5490 plumbing_response = None 5491 while True: 5492 t = None if deadline is None else deadline - time.time() 5493 try: 5494 plumbing_response = self.stub.Create( 5495 req, 5496 metadata=self.parent.get_metadata('Resources.Create', req), 5497 timeout=t) 5498 except Exception as e: 5499 if self.parent.shouldRetry(tries, e, deadline): 5500 tries += 1 5501 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5502 continue 5503 raise plumbing.convert_error_to_porcelain(e) from e 5504 break 5505 5506 resp = models.ResourceCreateResponse() 5507 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 5508 plumbing_response.meta) 5509 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5510 plumbing_response.rate_limit) 5511 resp.resource = plumbing.convert_resource_to_porcelain( 5512 plumbing_response.resource) 5513 return resp 5514 5515 def get(self, id, timeout=None): 5516 ''' 5517 Get reads one Resource by ID. 5518 ''' 5519 deadline = None if timeout is None else time.time() + timeout 5520 req = ResourceGetRequest() 5521 if self.parent.snapshot_datetime is not None: 5522 req.meta.CopyFrom(GetRequestMetadata()) 5523 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5524 5525 req.id = (id) 5526 tries = 0 5527 plumbing_response = None 5528 while True: 5529 t = None if deadline is None else deadline - time.time() 5530 try: 5531 plumbing_response = self.stub.Get( 5532 req, 5533 metadata=self.parent.get_metadata('Resources.Get', req), 5534 timeout=t) 5535 except Exception as e: 5536 if self.parent.shouldRetry(tries, e, deadline): 5537 tries += 1 5538 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5539 continue 5540 raise plumbing.convert_error_to_porcelain(e) from e 5541 break 5542 5543 resp = models.ResourceGetResponse() 5544 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 5545 plumbing_response.meta) 5546 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5547 plumbing_response.rate_limit) 5548 resp.resource = plumbing.convert_resource_to_porcelain( 5549 plumbing_response.resource) 5550 return resp 5551 5552 def update(self, resource, timeout=None): 5553 ''' 5554 Update replaces all the fields of a Resource by ID. 5555 ''' 5556 deadline = None if timeout is None else time.time() + timeout 5557 req = ResourceUpdateRequest() 5558 5559 if resource is not None: 5560 req.resource.CopyFrom( 5561 plumbing.convert_resource_to_plumbing(resource)) 5562 tries = 0 5563 plumbing_response = None 5564 while True: 5565 t = None if deadline is None else deadline - time.time() 5566 try: 5567 plumbing_response = self.stub.Update( 5568 req, 5569 metadata=self.parent.get_metadata('Resources.Update', req), 5570 timeout=t) 5571 except Exception as e: 5572 if self.parent.shouldRetry(tries, e, deadline): 5573 tries += 1 5574 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5575 continue 5576 raise plumbing.convert_error_to_porcelain(e) from e 5577 break 5578 5579 resp = models.ResourceUpdateResponse() 5580 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 5581 plumbing_response.meta) 5582 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5583 plumbing_response.rate_limit) 5584 resp.resource = plumbing.convert_resource_to_porcelain( 5585 plumbing_response.resource) 5586 return resp 5587 5588 def delete(self, id, timeout=None): 5589 ''' 5590 Delete removes a Resource by ID. 5591 ''' 5592 deadline = None if timeout is None else time.time() + timeout 5593 req = ResourceDeleteRequest() 5594 5595 req.id = (id) 5596 tries = 0 5597 plumbing_response = None 5598 while True: 5599 t = None if deadline is None else deadline - time.time() 5600 try: 5601 plumbing_response = self.stub.Delete( 5602 req, 5603 metadata=self.parent.get_metadata('Resources.Delete', req), 5604 timeout=t) 5605 except Exception as e: 5606 if self.parent.shouldRetry(tries, e, deadline): 5607 tries += 1 5608 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5609 continue 5610 raise plumbing.convert_error_to_porcelain(e) from e 5611 break 5612 5613 resp = models.ResourceDeleteResponse() 5614 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 5615 plumbing_response.meta) 5616 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5617 plumbing_response.rate_limit) 5618 return resp 5619 5620 def list(self, filter, *args, timeout=None): 5621 ''' 5622 List gets a list of Resources matching a given set of criteria. 5623 ''' 5624 deadline = None if timeout is None else time.time() + timeout 5625 req = ResourceListRequest() 5626 req.meta.CopyFrom(ListRequestMetadata()) 5627 if self.parent.page_limit > 0: 5628 req.meta.limit = self.parent.page_limit 5629 if self.parent.snapshot_datetime is not None: 5630 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5631 5632 req.filter = plumbing.quote_filter_args(filter, *args) 5633 5634 def generator(svc, req): 5635 tries = 0 5636 while True: 5637 t = None if deadline is None else deadline - time.time() 5638 try: 5639 plumbing_response = svc.stub.List( 5640 req, 5641 metadata=svc.parent.get_metadata( 5642 'Resources.List', req), 5643 timeout=t) 5644 except Exception as e: 5645 if self.parent.shouldRetry(tries, e, deadline): 5646 tries += 1 5647 time.sleep( 5648 self.parent.exponentialBackoff(tries, deadline)) 5649 continue 5650 raise plumbing.convert_error_to_porcelain(e) from e 5651 tries = 0 5652 for plumbing_item in plumbing_response.resources: 5653 yield plumbing.convert_resource_to_porcelain(plumbing_item) 5654 if plumbing_response.meta.next_cursor == '': 5655 break 5656 req.meta.cursor = plumbing_response.meta.next_cursor 5657 5658 return generator(self, req) 5659 5660 def healthcheck(self, id, timeout=None): 5661 ''' 5662 Healthcheck triggers a remote healthcheck. It may take minutes to propagate across a 5663 large network of Nodes. The call will return immediately, and the updated health of the 5664 Resource can be retrieved via Get or List. 5665 ''' 5666 deadline = None if timeout is None else time.time() + timeout 5667 req = ResourceHealthcheckRequest() 5668 5669 req.id = (id) 5670 tries = 0 5671 plumbing_response = None 5672 while True: 5673 t = None if deadline is None else deadline - time.time() 5674 try: 5675 plumbing_response = self.stub.Healthcheck( 5676 req, 5677 metadata=self.parent.get_metadata('Resources.Healthcheck', 5678 req), 5679 timeout=t) 5680 except Exception as e: 5681 if self.parent.shouldRetry(tries, e, deadline): 5682 tries += 1 5683 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5684 continue 5685 raise plumbing.convert_error_to_porcelain(e) from e 5686 break 5687 5688 resp = models.ResourceHealthcheckResponse() 5689 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 5690 plumbing_response.meta) 5691 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5692 plumbing_response.rate_limit) 5693 return resp 5694 5695 5696class SnapshotResources: 5697 ''' 5698 SnapshotResources exposes the read only methods of the Resources 5699 service for historical queries. 5700 ''' 5701 def __init__(self, resources): 5702 self.resources = resources 5703 5704 def get(self, id, timeout=None): 5705 ''' 5706 Get reads one Resource by ID. 5707 ''' 5708 return self.resources.get(id, timeout=timeout) 5709 5710 def list(self, filter, *args, timeout=None): 5711 ''' 5712 List gets a list of Resources matching a given set of criteria. 5713 ''' 5714 return self.resources.list(filter, *args, timeout=timeout) 5715 5716 5717class ResourcesHistory: 5718 ''' 5719 ResourcesHistory records all changes to the state of a Resource. 5720 See `strongdm.models.ResourceHistory`. 5721 ''' 5722 def __init__(self, channel, client): 5723 self.parent = client 5724 self.stub = ResourcesHistoryStub(channel) 5725 5726 def list(self, filter, *args, timeout=None): 5727 ''' 5728 List gets a list of ResourceHistory records matching a given set of criteria. 5729 ''' 5730 deadline = None if timeout is None else time.time() + timeout 5731 req = ResourceHistoryListRequest() 5732 req.meta.CopyFrom(ListRequestMetadata()) 5733 if self.parent.page_limit > 0: 5734 req.meta.limit = self.parent.page_limit 5735 if self.parent.snapshot_datetime is not None: 5736 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5737 5738 req.filter = plumbing.quote_filter_args(filter, *args) 5739 5740 def generator(svc, req): 5741 tries = 0 5742 while True: 5743 t = None if deadline is None else deadline - time.time() 5744 try: 5745 plumbing_response = svc.stub.List( 5746 req, 5747 metadata=svc.parent.get_metadata( 5748 'ResourcesHistory.List', req), 5749 timeout=t) 5750 except Exception as e: 5751 if self.parent.shouldRetry(tries, e, deadline): 5752 tries += 1 5753 time.sleep( 5754 self.parent.exponentialBackoff(tries, deadline)) 5755 continue 5756 raise plumbing.convert_error_to_porcelain(e) from e 5757 tries = 0 5758 for plumbing_item in plumbing_response.history: 5759 yield plumbing.convert_resource_history_to_porcelain( 5760 plumbing_item) 5761 if plumbing_response.meta.next_cursor == '': 5762 break 5763 req.meta.cursor = plumbing_response.meta.next_cursor 5764 5765 return generator(self, req) 5766 5767 5768class RoleResources: 5769 ''' 5770 RoleResources enumerates the resources to which roles have access. 5771 The RoleResources service is read-only. 5772 See `strongdm.models.RoleResource`. 5773 ''' 5774 def __init__(self, channel, client): 5775 self.parent = client 5776 self.stub = RoleResourcesStub(channel) 5777 5778 def list(self, filter, *args, timeout=None): 5779 ''' 5780 List gets a list of RoleResource records matching a given set of criteria. 5781 ''' 5782 deadline = None if timeout is None else time.time() + timeout 5783 req = RoleResourceListRequest() 5784 req.meta.CopyFrom(ListRequestMetadata()) 5785 if self.parent.page_limit > 0: 5786 req.meta.limit = self.parent.page_limit 5787 if self.parent.snapshot_datetime is not None: 5788 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5789 5790 req.filter = plumbing.quote_filter_args(filter, *args) 5791 5792 def generator(svc, req): 5793 tries = 0 5794 while True: 5795 t = None if deadline is None else deadline - time.time() 5796 try: 5797 plumbing_response = svc.stub.List( 5798 req, 5799 metadata=svc.parent.get_metadata( 5800 'RoleResources.List', req), 5801 timeout=t) 5802 except Exception as e: 5803 if self.parent.shouldRetry(tries, e, deadline): 5804 tries += 1 5805 time.sleep( 5806 self.parent.exponentialBackoff(tries, deadline)) 5807 continue 5808 raise plumbing.convert_error_to_porcelain(e) from e 5809 tries = 0 5810 for plumbing_item in plumbing_response.role_resources: 5811 yield plumbing.convert_role_resource_to_porcelain( 5812 plumbing_item) 5813 if plumbing_response.meta.next_cursor == '': 5814 break 5815 req.meta.cursor = plumbing_response.meta.next_cursor 5816 5817 return generator(self, req) 5818 5819 5820class SnapshotRoleResources: 5821 ''' 5822 SnapshotRoleResources exposes the read only methods of the RoleResources 5823 service for historical queries. 5824 ''' 5825 def __init__(self, role_resources): 5826 self.role_resources = role_resources 5827 5828 def list(self, filter, *args, timeout=None): 5829 ''' 5830 List gets a list of RoleResource records matching a given set of criteria. 5831 ''' 5832 return self.role_resources.list(filter, *args, timeout=timeout) 5833 5834 5835class RoleResourcesHistory: 5836 ''' 5837 RoleResourcesHistory records all changes to the state of a RoleResource. 5838 See `strongdm.models.RoleResourceHistory`. 5839 ''' 5840 def __init__(self, channel, client): 5841 self.parent = client 5842 self.stub = RoleResourcesHistoryStub(channel) 5843 5844 def list(self, filter, *args, timeout=None): 5845 ''' 5846 List gets a list of RoleResourceHistory records matching a given set of criteria. 5847 ''' 5848 deadline = None if timeout is None else time.time() + timeout 5849 req = RoleResourceHistoryListRequest() 5850 req.meta.CopyFrom(ListRequestMetadata()) 5851 if self.parent.page_limit > 0: 5852 req.meta.limit = self.parent.page_limit 5853 if self.parent.snapshot_datetime is not None: 5854 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5855 5856 req.filter = plumbing.quote_filter_args(filter, *args) 5857 5858 def generator(svc, req): 5859 tries = 0 5860 while True: 5861 t = None if deadline is None else deadline - time.time() 5862 try: 5863 plumbing_response = svc.stub.List( 5864 req, 5865 metadata=svc.parent.get_metadata( 5866 'RoleResourcesHistory.List', req), 5867 timeout=t) 5868 except Exception as e: 5869 if self.parent.shouldRetry(tries, e, deadline): 5870 tries += 1 5871 time.sleep( 5872 self.parent.exponentialBackoff(tries, deadline)) 5873 continue 5874 raise plumbing.convert_error_to_porcelain(e) from e 5875 tries = 0 5876 for plumbing_item in plumbing_response.history: 5877 yield plumbing.convert_role_resource_history_to_porcelain( 5878 plumbing_item) 5879 if plumbing_response.meta.next_cursor == '': 5880 break 5881 req.meta.cursor = plumbing_response.meta.next_cursor 5882 5883 return generator(self, req) 5884 5885 5886class RolesHistory: 5887 ''' 5888 RolesHistory records all changes to the state of a Role. 5889 See `strongdm.models.RoleHistory`. 5890 ''' 5891 def __init__(self, channel, client): 5892 self.parent = client 5893 self.stub = RolesHistoryStub(channel) 5894 5895 def list(self, filter, *args, timeout=None): 5896 ''' 5897 List gets a list of RoleHistory records matching a given set of criteria. 5898 ''' 5899 deadline = None if timeout is None else time.time() + timeout 5900 req = RoleHistoryListRequest() 5901 req.meta.CopyFrom(ListRequestMetadata()) 5902 if self.parent.page_limit > 0: 5903 req.meta.limit = self.parent.page_limit 5904 if self.parent.snapshot_datetime is not None: 5905 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5906 5907 req.filter = plumbing.quote_filter_args(filter, *args) 5908 5909 def generator(svc, req): 5910 tries = 0 5911 while True: 5912 t = None if deadline is None else deadline - time.time() 5913 try: 5914 plumbing_response = svc.stub.List( 5915 req, 5916 metadata=svc.parent.get_metadata( 5917 'RolesHistory.List', req), 5918 timeout=t) 5919 except Exception as e: 5920 if self.parent.shouldRetry(tries, e, deadline): 5921 tries += 1 5922 time.sleep( 5923 self.parent.exponentialBackoff(tries, deadline)) 5924 continue 5925 raise plumbing.convert_error_to_porcelain(e) from e 5926 tries = 0 5927 for plumbing_item in plumbing_response.history: 5928 yield plumbing.convert_role_history_to_porcelain( 5929 plumbing_item) 5930 if plumbing_response.meta.next_cursor == '': 5931 break 5932 req.meta.cursor = plumbing_response.meta.next_cursor 5933 5934 return generator(self, req) 5935 5936 5937class SecretStores: 5938 ''' 5939 SecretStores are servers where resource secrets (passwords, keys) are stored. 5940 See: 5941 `strongdm.models.ActiveDirectoryStore` 5942 `strongdm.models.AWSStore` 5943 `strongdm.models.AWSCertX509Store` 5944 `strongdm.models.AzureStore` 5945 `strongdm.models.CyberarkConjurStore` 5946 `strongdm.models.CyberarkPAMStore` 5947 `strongdm.models.CyberarkPAMExperimentalStore` 5948 `strongdm.models.DelineaStore` 5949 `strongdm.models.GCPStore` 5950 `strongdm.models.GCPCertX509Store` 5951 `strongdm.models.KeyfactorSSHStore` 5952 `strongdm.models.KeyfactorX509Store` 5953 `strongdm.models.VaultAppRoleStore` 5954 `strongdm.models.VaultAppRoleCertSSHStore` 5955 `strongdm.models.VaultAppRoleCertX509Store` 5956 `strongdm.models.VaultAWSEC2Store` 5957 `strongdm.models.VaultAWSIAMStore` 5958 `strongdm.models.VaultTLSStore` 5959 `strongdm.models.VaultTLSCertSSHStore` 5960 `strongdm.models.VaultTLSCertX509Store` 5961 `strongdm.models.VaultTokenStore` 5962 `strongdm.models.VaultTokenCertSSHStore` 5963 `strongdm.models.VaultTokenCertX509Store` 5964 ''' 5965 def __init__(self, channel, client): 5966 self.parent = client 5967 self.stub = SecretStoresStub(channel) 5968 5969 def create(self, secret_store, timeout=None): 5970 deadline = None if timeout is None else time.time() + timeout 5971 req = SecretStoreCreateRequest() 5972 5973 if secret_store is not None: 5974 req.secret_store.CopyFrom( 5975 plumbing.convert_secret_store_to_plumbing(secret_store)) 5976 tries = 0 5977 plumbing_response = None 5978 while True: 5979 t = None if deadline is None else deadline - time.time() 5980 try: 5981 plumbing_response = self.stub.Create( 5982 req, 5983 metadata=self.parent.get_metadata('SecretStores.Create', 5984 req), 5985 timeout=t) 5986 except Exception as e: 5987 if self.parent.shouldRetry(tries, e, deadline): 5988 tries += 1 5989 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5990 continue 5991 raise plumbing.convert_error_to_porcelain(e) from e 5992 break 5993 5994 resp = models.SecretStoreCreateResponse() 5995 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 5996 plumbing_response.meta) 5997 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5998 plumbing_response.rate_limit) 5999 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6000 plumbing_response.secret_store) 6001 return resp 6002 6003 def get(self, id, timeout=None): 6004 ''' 6005 Get reads one SecretStore by ID. 6006 ''' 6007 deadline = None if timeout is None else time.time() + timeout 6008 req = SecretStoreGetRequest() 6009 if self.parent.snapshot_datetime is not None: 6010 req.meta.CopyFrom(GetRequestMetadata()) 6011 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6012 6013 req.id = (id) 6014 tries = 0 6015 plumbing_response = None 6016 while True: 6017 t = None if deadline is None else deadline - time.time() 6018 try: 6019 plumbing_response = self.stub.Get( 6020 req, 6021 metadata=self.parent.get_metadata('SecretStores.Get', req), 6022 timeout=t) 6023 except Exception as e: 6024 if self.parent.shouldRetry(tries, e, deadline): 6025 tries += 1 6026 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6027 continue 6028 raise plumbing.convert_error_to_porcelain(e) from e 6029 break 6030 6031 resp = models.SecretStoreGetResponse() 6032 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6033 plumbing_response.meta) 6034 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6035 plumbing_response.rate_limit) 6036 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6037 plumbing_response.secret_store) 6038 return resp 6039 6040 def update(self, secret_store, timeout=None): 6041 ''' 6042 Update replaces all the fields of a SecretStore by ID. 6043 ''' 6044 deadline = None if timeout is None else time.time() + timeout 6045 req = SecretStoreUpdateRequest() 6046 6047 if secret_store is not None: 6048 req.secret_store.CopyFrom( 6049 plumbing.convert_secret_store_to_plumbing(secret_store)) 6050 tries = 0 6051 plumbing_response = None 6052 while True: 6053 t = None if deadline is None else deadline - time.time() 6054 try: 6055 plumbing_response = self.stub.Update( 6056 req, 6057 metadata=self.parent.get_metadata('SecretStores.Update', 6058 req), 6059 timeout=t) 6060 except Exception as e: 6061 if self.parent.shouldRetry(tries, e, deadline): 6062 tries += 1 6063 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6064 continue 6065 raise plumbing.convert_error_to_porcelain(e) from e 6066 break 6067 6068 resp = models.SecretStoreUpdateResponse() 6069 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 6070 plumbing_response.meta) 6071 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6072 plumbing_response.rate_limit) 6073 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6074 plumbing_response.secret_store) 6075 return resp 6076 6077 def delete(self, id, timeout=None): 6078 ''' 6079 Delete removes a SecretStore by ID. 6080 ''' 6081 deadline = None if timeout is None else time.time() + timeout 6082 req = SecretStoreDeleteRequest() 6083 6084 req.id = (id) 6085 tries = 0 6086 plumbing_response = None 6087 while True: 6088 t = None if deadline is None else deadline - time.time() 6089 try: 6090 plumbing_response = self.stub.Delete( 6091 req, 6092 metadata=self.parent.get_metadata('SecretStores.Delete', 6093 req), 6094 timeout=t) 6095 except Exception as e: 6096 if self.parent.shouldRetry(tries, e, deadline): 6097 tries += 1 6098 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6099 continue 6100 raise plumbing.convert_error_to_porcelain(e) from e 6101 break 6102 6103 resp = models.SecretStoreDeleteResponse() 6104 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 6105 plumbing_response.meta) 6106 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6107 plumbing_response.rate_limit) 6108 return resp 6109 6110 def list(self, filter, *args, timeout=None): 6111 ''' 6112 List gets a list of SecretStores matching a given set of criteria. 6113 ''' 6114 deadline = None if timeout is None else time.time() + timeout 6115 req = SecretStoreListRequest() 6116 req.meta.CopyFrom(ListRequestMetadata()) 6117 if self.parent.page_limit > 0: 6118 req.meta.limit = self.parent.page_limit 6119 if self.parent.snapshot_datetime is not None: 6120 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6121 6122 req.filter = plumbing.quote_filter_args(filter, *args) 6123 6124 def generator(svc, req): 6125 tries = 0 6126 while True: 6127 t = None if deadline is None else deadline - time.time() 6128 try: 6129 plumbing_response = svc.stub.List( 6130 req, 6131 metadata=svc.parent.get_metadata( 6132 'SecretStores.List', req), 6133 timeout=t) 6134 except Exception as e: 6135 if self.parent.shouldRetry(tries, e, deadline): 6136 tries += 1 6137 time.sleep( 6138 self.parent.exponentialBackoff(tries, deadline)) 6139 continue 6140 raise plumbing.convert_error_to_porcelain(e) from e 6141 tries = 0 6142 for plumbing_item in plumbing_response.secret_stores: 6143 yield plumbing.convert_secret_store_to_porcelain( 6144 plumbing_item) 6145 if plumbing_response.meta.next_cursor == '': 6146 break 6147 req.meta.cursor = plumbing_response.meta.next_cursor 6148 6149 return generator(self, req) 6150 6151 6152class SnapshotSecretStores: 6153 ''' 6154 SnapshotSecretStores exposes the read only methods of the SecretStores 6155 service for historical queries. 6156 ''' 6157 def __init__(self, secret_stores): 6158 self.secret_stores = secret_stores 6159 6160 def get(self, id, timeout=None): 6161 ''' 6162 Get reads one SecretStore by ID. 6163 ''' 6164 return self.secret_stores.get(id, timeout=timeout) 6165 6166 def list(self, filter, *args, timeout=None): 6167 ''' 6168 List gets a list of SecretStores matching a given set of criteria. 6169 ''' 6170 return self.secret_stores.list(filter, *args, timeout=timeout) 6171 6172 6173class SecretEngines: 6174 ''' 6175 6176 See: 6177 `strongdm.models.ActiveDirectoryEngine` 6178 `strongdm.models.KeyValueEngine` 6179 ''' 6180 def __init__(self, channel, client): 6181 self.parent = client 6182 self.stub = SecretEnginesStub(channel) 6183 6184 def list(self, filter, *args, timeout=None): 6185 ''' 6186 List returns a list of Secret Engines 6187 ''' 6188 deadline = None if timeout is None else time.time() + timeout 6189 req = SecretEngineListRequest() 6190 req.meta.CopyFrom(ListRequestMetadata()) 6191 if self.parent.page_limit > 0: 6192 req.meta.limit = self.parent.page_limit 6193 if self.parent.snapshot_datetime is not None: 6194 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6195 6196 req.filter = plumbing.quote_filter_args(filter, *args) 6197 6198 def generator(svc, req): 6199 tries = 0 6200 while True: 6201 t = None if deadline is None else deadline - time.time() 6202 try: 6203 plumbing_response = svc.stub.List( 6204 req, 6205 metadata=svc.parent.get_metadata( 6206 'SecretEngines.List', req), 6207 timeout=t) 6208 except Exception as e: 6209 if self.parent.shouldRetry(tries, e, deadline): 6210 tries += 1 6211 time.sleep( 6212 self.parent.exponentialBackoff(tries, deadline)) 6213 continue 6214 raise plumbing.convert_error_to_porcelain(e) from e 6215 tries = 0 6216 for plumbing_item in plumbing_response.secret_engines: 6217 yield plumbing.convert_secret_engine_to_porcelain( 6218 plumbing_item) 6219 if plumbing_response.meta.next_cursor == '': 6220 break 6221 req.meta.cursor = plumbing_response.meta.next_cursor 6222 6223 return generator(self, req) 6224 6225 def get(self, id, timeout=None): 6226 ''' 6227 Get returns a secret engine details 6228 ''' 6229 deadline = None if timeout is None else time.time() + timeout 6230 req = SecretEngineGetRequest() 6231 if self.parent.snapshot_datetime is not None: 6232 req.meta.CopyFrom(GetRequestMetadata()) 6233 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6234 6235 req.id = (id) 6236 tries = 0 6237 plumbing_response = None 6238 while True: 6239 t = None if deadline is None else deadline - time.time() 6240 try: 6241 plumbing_response = self.stub.Get( 6242 req, 6243 metadata=self.parent.get_metadata('SecretEngines.Get', 6244 req), 6245 timeout=t) 6246 except Exception as e: 6247 if self.parent.shouldRetry(tries, e, deadline): 6248 tries += 1 6249 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6250 continue 6251 raise plumbing.convert_error_to_porcelain(e) from e 6252 break 6253 6254 resp = models.SecretEngineGetResponse() 6255 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6256 plumbing_response.meta) 6257 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6258 plumbing_response.rate_limit) 6259 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6260 plumbing_response.secret_engine) 6261 return resp 6262 6263 def create(self, secret_engine, timeout=None): 6264 ''' 6265 Create creates a secret engine 6266 ''' 6267 deadline = None if timeout is None else time.time() + timeout 6268 req = SecretEngineCreateRequest() 6269 6270 if secret_engine is not None: 6271 req.secret_engine.CopyFrom( 6272 plumbing.convert_secret_engine_to_plumbing(secret_engine)) 6273 tries = 0 6274 plumbing_response = None 6275 while True: 6276 t = None if deadline is None else deadline - time.time() 6277 try: 6278 plumbing_response = self.stub.Create( 6279 req, 6280 metadata=self.parent.get_metadata('SecretEngines.Create', 6281 req), 6282 timeout=t) 6283 except Exception as e: 6284 if self.parent.shouldRetry(tries, e, deadline): 6285 tries += 1 6286 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6287 continue 6288 raise plumbing.convert_error_to_porcelain(e) from e 6289 break 6290 6291 resp = models.SecretEngineCreateResponse() 6292 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 6293 plumbing_response.meta) 6294 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6295 plumbing_response.rate_limit) 6296 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6297 plumbing_response.secret_engine) 6298 return resp 6299 6300 def update(self, secret_engine, timeout=None): 6301 ''' 6302 Update updates a secret engine 6303 ''' 6304 deadline = None if timeout is None else time.time() + timeout 6305 req = SecretEngineUpdateRequest() 6306 6307 if secret_engine is not None: 6308 req.secret_engine.CopyFrom( 6309 plumbing.convert_secret_engine_to_plumbing(secret_engine)) 6310 tries = 0 6311 plumbing_response = None 6312 while True: 6313 t = None if deadline is None else deadline - time.time() 6314 try: 6315 plumbing_response = self.stub.Update( 6316 req, 6317 metadata=self.parent.get_metadata('SecretEngines.Update', 6318 req), 6319 timeout=t) 6320 except Exception as e: 6321 if self.parent.shouldRetry(tries, e, deadline): 6322 tries += 1 6323 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6324 continue 6325 raise plumbing.convert_error_to_porcelain(e) from e 6326 break 6327 6328 resp = models.SecretEngineUpdateResponse() 6329 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 6330 plumbing_response.meta) 6331 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6332 plumbing_response.rate_limit) 6333 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6334 plumbing_response.secret_engine) 6335 return resp 6336 6337 def delete(self, id, timeout=None): 6338 ''' 6339 Delete deletes a secret engine 6340 ''' 6341 deadline = None if timeout is None else time.time() + timeout 6342 req = SecretEngineDeleteRequest() 6343 6344 req.id = (id) 6345 tries = 0 6346 plumbing_response = None 6347 while True: 6348 t = None if deadline is None else deadline - time.time() 6349 try: 6350 plumbing_response = self.stub.Delete( 6351 req, 6352 metadata=self.parent.get_metadata('SecretEngines.Delete', 6353 req), 6354 timeout=t) 6355 except Exception as e: 6356 if self.parent.shouldRetry(tries, e, deadline): 6357 tries += 1 6358 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6359 continue 6360 raise plumbing.convert_error_to_porcelain(e) from e 6361 break 6362 6363 resp = models.SecretEngineDeleteResponse() 6364 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6365 plumbing_response.rate_limit) 6366 return resp 6367 6368 def list_secret_stores(self, filter, *args, timeout=None): 6369 ''' 6370 ListSecretStores returns a list of Secret Stores that can be used as a backing store 6371 for Secret Engine 6372 ''' 6373 deadline = None if timeout is None else time.time() + timeout 6374 req = SecretStoreListRequest() 6375 req.meta.CopyFrom(ListRequestMetadata()) 6376 if self.parent.page_limit > 0: 6377 req.meta.limit = self.parent.page_limit 6378 if self.parent.snapshot_datetime is not None: 6379 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6380 6381 req.filter = plumbing.quote_filter_args(filter, *args) 6382 6383 def generator(svc, req): 6384 tries = 0 6385 while True: 6386 t = None if deadline is None else deadline - time.time() 6387 try: 6388 plumbing_response = svc.stub.ListSecretStores( 6389 req, 6390 metadata=svc.parent.get_metadata( 6391 'SecretEngines.ListSecretStores', req), 6392 timeout=t) 6393 except Exception as e: 6394 if self.parent.shouldRetry(tries, e, deadline): 6395 tries += 1 6396 time.sleep( 6397 self.parent.exponentialBackoff(tries, deadline)) 6398 continue 6399 raise plumbing.convert_error_to_porcelain(e) from e 6400 tries = 0 6401 for plumbing_item in plumbing_response.secret_stores: 6402 yield plumbing.convert_secret_store_to_porcelain( 6403 plumbing_item) 6404 if plumbing_response.meta.next_cursor == '': 6405 break 6406 req.meta.cursor = plumbing_response.meta.next_cursor 6407 6408 return generator(self, req) 6409 6410 def generate_keys(self, secret_engine_id, timeout=None): 6411 ''' 6412 GenerateKeys generates a private key, stores it in a secret store and stores a public key in a secret engine 6413 ''' 6414 deadline = None if timeout is None else time.time() + timeout 6415 req = GenerateKeysRequest() 6416 6417 req.secret_engine_id = (secret_engine_id) 6418 tries = 0 6419 plumbing_response = None 6420 while True: 6421 t = None if deadline is None else deadline - time.time() 6422 try: 6423 plumbing_response = self.stub.GenerateKeys( 6424 req, 6425 metadata=self.parent.get_metadata( 6426 'SecretEngines.GenerateKeys', req), 6427 timeout=t) 6428 except Exception as e: 6429 if self.parent.shouldRetry(tries, e, deadline): 6430 tries += 1 6431 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6432 continue 6433 raise plumbing.convert_error_to_porcelain(e) from e 6434 break 6435 6436 resp = models.GenerateKeysResponse() 6437 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6438 plumbing_response.rate_limit) 6439 return resp 6440 6441 def healthcheck(self, secret_engine_id, timeout=None): 6442 ''' 6443 Healthcheck triggers a healthcheck for all nodes serving a secret engine 6444 ''' 6445 deadline = None if timeout is None else time.time() + timeout 6446 req = HealthcheckRequest() 6447 6448 req.secret_engine_id = (secret_engine_id) 6449 tries = 0 6450 plumbing_response = None 6451 while True: 6452 t = None if deadline is None else deadline - time.time() 6453 try: 6454 plumbing_response = self.stub.Healthcheck( 6455 req, 6456 metadata=self.parent.get_metadata( 6457 'SecretEngines.Healthcheck', req), 6458 timeout=t) 6459 except Exception as e: 6460 if self.parent.shouldRetry(tries, e, deadline): 6461 tries += 1 6462 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6463 continue 6464 raise plumbing.convert_error_to_porcelain(e) from e 6465 break 6466 6467 resp = models.HealthcheckResponse() 6468 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6469 plumbing_response.rate_limit) 6470 resp.status = plumbing.convert_repeated_healthcheck_status_to_porcelain( 6471 plumbing_response.status) 6472 return resp 6473 6474 def rotate(self, id, password_policy, timeout=None): 6475 ''' 6476 Rotate rotates secret engine's credentials 6477 ''' 6478 deadline = None if timeout is None else time.time() + timeout 6479 req = SecretEngineRotateRequest() 6480 6481 req.id = (id) 6482 if password_policy is not None: 6483 req.password_policy.CopyFrom( 6484 plumbing.convert_secret_engine_password_policy_to_plumbing( 6485 password_policy)) 6486 tries = 0 6487 plumbing_response = None 6488 while True: 6489 t = None if deadline is None else deadline - time.time() 6490 try: 6491 plumbing_response = self.stub.Rotate( 6492 req, 6493 metadata=self.parent.get_metadata('SecretEngines.Rotate', 6494 req), 6495 timeout=t) 6496 except Exception as e: 6497 if self.parent.shouldRetry(tries, e, deadline): 6498 tries += 1 6499 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6500 continue 6501 raise plumbing.convert_error_to_porcelain(e) from e 6502 break 6503 6504 resp = models.SecretEngineRotateResponse() 6505 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6506 plumbing_response.rate_limit) 6507 return resp 6508 6509 6510class SecretStoreHealths: 6511 ''' 6512 SecretStoreHealths exposes health states for secret stores. 6513 See `strongdm.models.SecretStoreHealth`. 6514 ''' 6515 def __init__(self, channel, client): 6516 self.parent = client 6517 self.stub = SecretStoreHealthsStub(channel) 6518 6519 def list(self, filter, *args, timeout=None): 6520 ''' 6521 List reports the health status of node to secret store pairs. 6522 ''' 6523 deadline = None if timeout is None else time.time() + timeout 6524 req = SecretStoreHealthListRequest() 6525 req.meta.CopyFrom(ListRequestMetadata()) 6526 if self.parent.page_limit > 0: 6527 req.meta.limit = self.parent.page_limit 6528 if self.parent.snapshot_datetime is not None: 6529 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6530 6531 req.filter = plumbing.quote_filter_args(filter, *args) 6532 6533 def generator(svc, req): 6534 tries = 0 6535 while True: 6536 t = None if deadline is None else deadline - time.time() 6537 try: 6538 plumbing_response = svc.stub.List( 6539 req, 6540 metadata=svc.parent.get_metadata( 6541 'SecretStoreHealths.List', req), 6542 timeout=t) 6543 except Exception as e: 6544 if self.parent.shouldRetry(tries, e, deadline): 6545 tries += 1 6546 time.sleep( 6547 self.parent.exponentialBackoff(tries, deadline)) 6548 continue 6549 raise plumbing.convert_error_to_porcelain(e) from e 6550 tries = 0 6551 for plumbing_item in plumbing_response.secret_store_healths: 6552 yield plumbing.convert_secret_store_health_to_porcelain( 6553 plumbing_item) 6554 if plumbing_response.meta.next_cursor == '': 6555 break 6556 req.meta.cursor = plumbing_response.meta.next_cursor 6557 6558 return generator(self, req) 6559 6560 def healthcheck(self, secret_store_id, timeout=None): 6561 ''' 6562 Healthcheck triggers a remote healthcheck request for a secret store. It may take minutes 6563 to propagate across a large network of Nodes. The call will return immediately, and the 6564 updated health of the Secret Store can be retrieved via List. 6565 ''' 6566 deadline = None if timeout is None else time.time() + timeout 6567 req = SecretStoreHealthcheckRequest() 6568 6569 req.secret_store_id = (secret_store_id) 6570 tries = 0 6571 plumbing_response = None 6572 while True: 6573 t = None if deadline is None else deadline - time.time() 6574 try: 6575 plumbing_response = self.stub.Healthcheck( 6576 req, 6577 metadata=self.parent.get_metadata( 6578 'SecretStoreHealths.Healthcheck', req), 6579 timeout=t) 6580 except Exception as e: 6581 if self.parent.shouldRetry(tries, e, deadline): 6582 tries += 1 6583 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6584 continue 6585 raise plumbing.convert_error_to_porcelain(e) from e 6586 break 6587 6588 resp = models.SecretStoreHealthcheckResponse() 6589 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6590 plumbing_response.rate_limit) 6591 return resp 6592 6593 6594class SecretStoresHistory: 6595 ''' 6596 SecretStoresHistory records all changes to the state of a SecretStore. 6597 See `strongdm.models.SecretStoreHistory`. 6598 ''' 6599 def __init__(self, channel, client): 6600 self.parent = client 6601 self.stub = SecretStoresHistoryStub(channel) 6602 6603 def list(self, filter, *args, timeout=None): 6604 ''' 6605 List gets a list of SecretStoreHistory records matching a given set of criteria. 6606 ''' 6607 deadline = None if timeout is None else time.time() + timeout 6608 req = SecretStoreHistoryListRequest() 6609 req.meta.CopyFrom(ListRequestMetadata()) 6610 if self.parent.page_limit > 0: 6611 req.meta.limit = self.parent.page_limit 6612 if self.parent.snapshot_datetime is not None: 6613 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6614 6615 req.filter = plumbing.quote_filter_args(filter, *args) 6616 6617 def generator(svc, req): 6618 tries = 0 6619 while True: 6620 t = None if deadline is None else deadline - time.time() 6621 try: 6622 plumbing_response = svc.stub.List( 6623 req, 6624 metadata=svc.parent.get_metadata( 6625 'SecretStoresHistory.List', req), 6626 timeout=t) 6627 except Exception as e: 6628 if self.parent.shouldRetry(tries, e, deadline): 6629 tries += 1 6630 time.sleep( 6631 self.parent.exponentialBackoff(tries, deadline)) 6632 continue 6633 raise plumbing.convert_error_to_porcelain(e) from e 6634 tries = 0 6635 for plumbing_item in plumbing_response.history: 6636 yield plumbing.convert_secret_store_history_to_porcelain( 6637 plumbing_item) 6638 if plumbing_response.meta.next_cursor == '': 6639 break 6640 req.meta.cursor = plumbing_response.meta.next_cursor 6641 6642 return generator(self, req) 6643 6644 6645class WorkflowApprovers: 6646 ''' 6647 WorkflowApprovers is an account or a role with the ability to approve requests bound to a workflow. 6648 See `strongdm.models.WorkflowApprover`. 6649 ''' 6650 def __init__(self, channel, client): 6651 self.parent = client 6652 self.stub = WorkflowApproversStub(channel) 6653 6654 def create(self, workflow_approver, timeout=None): 6655 ''' 6656 Create creates a new workflow approver 6657 ''' 6658 deadline = None if timeout is None else time.time() + timeout 6659 req = WorkflowApproversCreateRequest() 6660 6661 if workflow_approver is not None: 6662 req.workflow_approver.CopyFrom( 6663 plumbing.convert_workflow_approver_to_plumbing( 6664 workflow_approver)) 6665 tries = 0 6666 plumbing_response = None 6667 while True: 6668 t = None if deadline is None else deadline - time.time() 6669 try: 6670 plumbing_response = self.stub.Create( 6671 req, 6672 metadata=self.parent.get_metadata( 6673 'WorkflowApprovers.Create', req), 6674 timeout=t) 6675 except Exception as e: 6676 if self.parent.shouldRetry(tries, e, deadline): 6677 tries += 1 6678 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6679 continue 6680 raise plumbing.convert_error_to_porcelain(e) from e 6681 break 6682 6683 resp = models.WorkflowApproversCreateResponse() 6684 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6685 plumbing_response.rate_limit) 6686 resp.workflow_approver = plumbing.convert_workflow_approver_to_porcelain( 6687 plumbing_response.workflow_approver) 6688 return resp 6689 6690 def get(self, id, timeout=None): 6691 ''' 6692 Get reads one workflow approver by ID. 6693 ''' 6694 deadline = None if timeout is None else time.time() + timeout 6695 req = WorkflowApproverGetRequest() 6696 if self.parent.snapshot_datetime is not None: 6697 req.meta.CopyFrom(GetRequestMetadata()) 6698 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6699 6700 req.id = (id) 6701 tries = 0 6702 plumbing_response = None 6703 while True: 6704 t = None if deadline is None else deadline - time.time() 6705 try: 6706 plumbing_response = self.stub.Get( 6707 req, 6708 metadata=self.parent.get_metadata('WorkflowApprovers.Get', 6709 req), 6710 timeout=t) 6711 except Exception as e: 6712 if self.parent.shouldRetry(tries, e, deadline): 6713 tries += 1 6714 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6715 continue 6716 raise plumbing.convert_error_to_porcelain(e) from e 6717 break 6718 6719 resp = models.WorkflowApproverGetResponse() 6720 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6721 plumbing_response.meta) 6722 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6723 plumbing_response.rate_limit) 6724 resp.workflow_approver = plumbing.convert_workflow_approver_to_porcelain( 6725 plumbing_response.workflow_approver) 6726 return resp 6727 6728 def delete(self, id, timeout=None): 6729 ''' 6730 Delete deletes a workflow approver 6731 ''' 6732 deadline = None if timeout is None else time.time() + timeout 6733 req = WorkflowApproversDeleteRequest() 6734 6735 req.id = (id) 6736 tries = 0 6737 plumbing_response = None 6738 while True: 6739 t = None if deadline is None else deadline - time.time() 6740 try: 6741 plumbing_response = self.stub.Delete( 6742 req, 6743 metadata=self.parent.get_metadata( 6744 'WorkflowApprovers.Delete', req), 6745 timeout=t) 6746 except Exception as e: 6747 if self.parent.shouldRetry(tries, e, deadline): 6748 tries += 1 6749 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6750 continue 6751 raise plumbing.convert_error_to_porcelain(e) from e 6752 break 6753 6754 resp = models.WorkflowApproversDeleteResponse() 6755 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6756 plumbing_response.rate_limit) 6757 return resp 6758 6759 def list(self, filter, *args, timeout=None): 6760 ''' 6761 Lists existing workflow approvers. 6762 ''' 6763 deadline = None if timeout is None else time.time() + timeout 6764 req = WorkflowApproversListRequest() 6765 req.meta.CopyFrom(ListRequestMetadata()) 6766 if self.parent.page_limit > 0: 6767 req.meta.limit = self.parent.page_limit 6768 if self.parent.snapshot_datetime is not None: 6769 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6770 6771 req.filter = plumbing.quote_filter_args(filter, *args) 6772 6773 def generator(svc, req): 6774 tries = 0 6775 while True: 6776 t = None if deadline is None else deadline - time.time() 6777 try: 6778 plumbing_response = svc.stub.List( 6779 req, 6780 metadata=svc.parent.get_metadata( 6781 'WorkflowApprovers.List', req), 6782 timeout=t) 6783 except Exception as e: 6784 if self.parent.shouldRetry(tries, e, deadline): 6785 tries += 1 6786 time.sleep( 6787 self.parent.exponentialBackoff(tries, deadline)) 6788 continue 6789 raise plumbing.convert_error_to_porcelain(e) from e 6790 tries = 0 6791 for plumbing_item in plumbing_response.workflow_approvers: 6792 yield plumbing.convert_workflow_approver_to_porcelain( 6793 plumbing_item) 6794 if plumbing_response.meta.next_cursor == '': 6795 break 6796 req.meta.cursor = plumbing_response.meta.next_cursor 6797 6798 return generator(self, req) 6799 6800 6801class SnapshotWorkflowApprovers: 6802 ''' 6803 SnapshotWorkflowApprovers exposes the read only methods of the WorkflowApprovers 6804 service for historical queries. 6805 ''' 6806 def __init__(self, workflow_approvers): 6807 self.workflow_approvers = workflow_approvers 6808 6809 def get(self, id, timeout=None): 6810 ''' 6811 Get reads one workflow approver by ID. 6812 ''' 6813 return self.workflow_approvers.get(id, timeout=timeout) 6814 6815 def list(self, filter, *args, timeout=None): 6816 ''' 6817 Lists existing workflow approvers. 6818 ''' 6819 return self.workflow_approvers.list(filter, *args, timeout=timeout) 6820 6821 6822class WorkflowApproversHistory: 6823 ''' 6824 WorkflowApproversHistory provides records of all changes to the state of a WorkflowApprover. 6825 See `strongdm.models.WorkflowApproverHistory`. 6826 ''' 6827 def __init__(self, channel, client): 6828 self.parent = client 6829 self.stub = WorkflowApproversHistoryStub(channel) 6830 6831 def list(self, filter, *args, timeout=None): 6832 ''' 6833 List gets a list of WorkflowApproversHistory records matching a given set of criteria. 6834 ''' 6835 deadline = None if timeout is None else time.time() + timeout 6836 req = WorkflowApproversHistoryListRequest() 6837 req.meta.CopyFrom(ListRequestMetadata()) 6838 if self.parent.page_limit > 0: 6839 req.meta.limit = self.parent.page_limit 6840 if self.parent.snapshot_datetime is not None: 6841 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6842 6843 req.filter = plumbing.quote_filter_args(filter, *args) 6844 6845 def generator(svc, req): 6846 tries = 0 6847 while True: 6848 t = None if deadline is None else deadline - time.time() 6849 try: 6850 plumbing_response = svc.stub.List( 6851 req, 6852 metadata=svc.parent.get_metadata( 6853 'WorkflowApproversHistory.List', req), 6854 timeout=t) 6855 except Exception as e: 6856 if self.parent.shouldRetry(tries, e, deadline): 6857 tries += 1 6858 time.sleep( 6859 self.parent.exponentialBackoff(tries, deadline)) 6860 continue 6861 raise plumbing.convert_error_to_porcelain(e) from e 6862 tries = 0 6863 for plumbing_item in plumbing_response.history: 6864 yield plumbing.convert_workflow_approver_history_to_porcelain( 6865 plumbing_item) 6866 if plumbing_response.meta.next_cursor == '': 6867 break 6868 req.meta.cursor = plumbing_response.meta.next_cursor 6869 6870 return generator(self, req) 6871 6872 6873class WorkflowRoles: 6874 ''' 6875 WorkflowRole links a role to a workflow. The linked roles indicate which roles a user must be a part of 6876 to request access to a resource via the workflow. 6877 See `strongdm.models.WorkflowRole`. 6878 ''' 6879 def __init__(self, channel, client): 6880 self.parent = client 6881 self.stub = WorkflowRolesStub(channel) 6882 6883 def create(self, workflow_role, timeout=None): 6884 ''' 6885 Create creates a new workflow role 6886 ''' 6887 deadline = None if timeout is None else time.time() + timeout 6888 req = WorkflowRolesCreateRequest() 6889 6890 if workflow_role is not None: 6891 req.workflow_role.CopyFrom( 6892 plumbing.convert_workflow_role_to_plumbing(workflow_role)) 6893 tries = 0 6894 plumbing_response = None 6895 while True: 6896 t = None if deadline is None else deadline - time.time() 6897 try: 6898 plumbing_response = self.stub.Create( 6899 req, 6900 metadata=self.parent.get_metadata('WorkflowRoles.Create', 6901 req), 6902 timeout=t) 6903 except Exception as e: 6904 if self.parent.shouldRetry(tries, e, deadline): 6905 tries += 1 6906 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6907 continue 6908 raise plumbing.convert_error_to_porcelain(e) from e 6909 break 6910 6911 resp = models.WorkflowRolesCreateResponse() 6912 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6913 plumbing_response.rate_limit) 6914 resp.workflow_role = plumbing.convert_workflow_role_to_porcelain( 6915 plumbing_response.workflow_role) 6916 return resp 6917 6918 def get(self, id, timeout=None): 6919 ''' 6920 Get reads one workflow role by ID. 6921 ''' 6922 deadline = None if timeout is None else time.time() + timeout 6923 req = WorkflowRoleGetRequest() 6924 if self.parent.snapshot_datetime is not None: 6925 req.meta.CopyFrom(GetRequestMetadata()) 6926 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6927 6928 req.id = (id) 6929 tries = 0 6930 plumbing_response = None 6931 while True: 6932 t = None if deadline is None else deadline - time.time() 6933 try: 6934 plumbing_response = self.stub.Get( 6935 req, 6936 metadata=self.parent.get_metadata('WorkflowRoles.Get', 6937 req), 6938 timeout=t) 6939 except Exception as e: 6940 if self.parent.shouldRetry(tries, e, deadline): 6941 tries += 1 6942 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6943 continue 6944 raise plumbing.convert_error_to_porcelain(e) from e 6945 break 6946 6947 resp = models.WorkflowRoleGetResponse() 6948 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6949 plumbing_response.meta) 6950 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6951 plumbing_response.rate_limit) 6952 resp.workflow_role = plumbing.convert_workflow_role_to_porcelain( 6953 plumbing_response.workflow_role) 6954 return resp 6955 6956 def delete(self, id, timeout=None): 6957 ''' 6958 Delete deletes a workflow role 6959 ''' 6960 deadline = None if timeout is None else time.time() + timeout 6961 req = WorkflowRolesDeleteRequest() 6962 6963 req.id = (id) 6964 tries = 0 6965 plumbing_response = None 6966 while True: 6967 t = None if deadline is None else deadline - time.time() 6968 try: 6969 plumbing_response = self.stub.Delete( 6970 req, 6971 metadata=self.parent.get_metadata('WorkflowRoles.Delete', 6972 req), 6973 timeout=t) 6974 except Exception as e: 6975 if self.parent.shouldRetry(tries, e, deadline): 6976 tries += 1 6977 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6978 continue 6979 raise plumbing.convert_error_to_porcelain(e) from e 6980 break 6981 6982 resp = models.WorkflowRolesDeleteResponse() 6983 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6984 plumbing_response.rate_limit) 6985 return resp 6986 6987 def list(self, filter, *args, timeout=None): 6988 ''' 6989 Lists existing workflow roles. 6990 ''' 6991 deadline = None if timeout is None else time.time() + timeout 6992 req = WorkflowRolesListRequest() 6993 req.meta.CopyFrom(ListRequestMetadata()) 6994 if self.parent.page_limit > 0: 6995 req.meta.limit = self.parent.page_limit 6996 if self.parent.snapshot_datetime is not None: 6997 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6998 6999 req.filter = plumbing.quote_filter_args(filter, *args) 7000 7001 def generator(svc, req): 7002 tries = 0 7003 while True: 7004 t = None if deadline is None else deadline - time.time() 7005 try: 7006 plumbing_response = svc.stub.List( 7007 req, 7008 metadata=svc.parent.get_metadata( 7009 'WorkflowRoles.List', req), 7010 timeout=t) 7011 except Exception as e: 7012 if self.parent.shouldRetry(tries, e, deadline): 7013 tries += 1 7014 time.sleep( 7015 self.parent.exponentialBackoff(tries, deadline)) 7016 continue 7017 raise plumbing.convert_error_to_porcelain(e) from e 7018 tries = 0 7019 for plumbing_item in plumbing_response.workflow_role: 7020 yield plumbing.convert_workflow_role_to_porcelain( 7021 plumbing_item) 7022 if plumbing_response.meta.next_cursor == '': 7023 break 7024 req.meta.cursor = plumbing_response.meta.next_cursor 7025 7026 return generator(self, req) 7027 7028 7029class SnapshotWorkflowRoles: 7030 ''' 7031 SnapshotWorkflowRoles exposes the read only methods of the WorkflowRoles 7032 service for historical queries. 7033 ''' 7034 def __init__(self, workflow_roles): 7035 self.workflow_roles = workflow_roles 7036 7037 def get(self, id, timeout=None): 7038 ''' 7039 Get reads one workflow role by ID. 7040 ''' 7041 return self.workflow_roles.get(id, timeout=timeout) 7042 7043 def list(self, filter, *args, timeout=None): 7044 ''' 7045 Lists existing workflow roles. 7046 ''' 7047 return self.workflow_roles.list(filter, *args, timeout=timeout) 7048 7049 7050class WorkflowRolesHistory: 7051 ''' 7052 WorkflowRolesHistory provides records of all changes to the state of a WorkflowRole 7053 See `strongdm.models.WorkflowRoleHistory`. 7054 ''' 7055 def __init__(self, channel, client): 7056 self.parent = client 7057 self.stub = WorkflowRolesHistoryStub(channel) 7058 7059 def list(self, filter, *args, timeout=None): 7060 ''' 7061 List gets a list of WorkflowRolesHistory records matching a given set of criteria. 7062 ''' 7063 deadline = None if timeout is None else time.time() + timeout 7064 req = WorkflowRolesHistoryListRequest() 7065 req.meta.CopyFrom(ListRequestMetadata()) 7066 if self.parent.page_limit > 0: 7067 req.meta.limit = self.parent.page_limit 7068 if self.parent.snapshot_datetime is not None: 7069 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7070 7071 req.filter = plumbing.quote_filter_args(filter, *args) 7072 7073 def generator(svc, req): 7074 tries = 0 7075 while True: 7076 t = None if deadline is None else deadline - time.time() 7077 try: 7078 plumbing_response = svc.stub.List( 7079 req, 7080 metadata=svc.parent.get_metadata( 7081 'WorkflowRolesHistory.List', req), 7082 timeout=t) 7083 except Exception as e: 7084 if self.parent.shouldRetry(tries, e, deadline): 7085 tries += 1 7086 time.sleep( 7087 self.parent.exponentialBackoff(tries, deadline)) 7088 continue 7089 raise plumbing.convert_error_to_porcelain(e) from e 7090 tries = 0 7091 for plumbing_item in plumbing_response.history: 7092 yield plumbing.convert_workflow_role_history_to_porcelain( 7093 plumbing_item) 7094 if plumbing_response.meta.next_cursor == '': 7095 break 7096 req.meta.cursor = plumbing_response.meta.next_cursor 7097 7098 return generator(self, req) 7099 7100 7101class Workflows: 7102 ''' 7103 Workflows are the collection of rules that define the resources to which access can be requested, 7104 the users that can request that access, and the mechanism for approving those requests which can either 7105 be automatic approval or a set of users authorized to approve the requests. 7106 See `strongdm.models.Workflow`. 7107 ''' 7108 def __init__(self, channel, client): 7109 self.parent = client 7110 self.stub = WorkflowsStub(channel) 7111 7112 def create(self, workflow, timeout=None): 7113 ''' 7114 Create creates a new workflow and requires a name for the workflow. 7115 ''' 7116 deadline = None if timeout is None else time.time() + timeout 7117 req = WorkflowCreateRequest() 7118 7119 if workflow is not None: 7120 req.workflow.CopyFrom( 7121 plumbing.convert_workflow_to_plumbing(workflow)) 7122 tries = 0 7123 plumbing_response = None 7124 while True: 7125 t = None if deadline is None else deadline - time.time() 7126 try: 7127 plumbing_response = self.stub.Create( 7128 req, 7129 metadata=self.parent.get_metadata('Workflows.Create', req), 7130 timeout=t) 7131 except Exception as e: 7132 if self.parent.shouldRetry(tries, e, deadline): 7133 tries += 1 7134 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7135 continue 7136 raise plumbing.convert_error_to_porcelain(e) from e 7137 break 7138 7139 resp = models.WorkflowCreateResponse() 7140 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7141 plumbing_response.rate_limit) 7142 resp.workflow = plumbing.convert_workflow_to_porcelain( 7143 plumbing_response.workflow) 7144 return resp 7145 7146 def get(self, id, timeout=None): 7147 ''' 7148 Get reads one workflow by ID. 7149 ''' 7150 deadline = None if timeout is None else time.time() + timeout 7151 req = WorkflowGetRequest() 7152 if self.parent.snapshot_datetime is not None: 7153 req.meta.CopyFrom(GetRequestMetadata()) 7154 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7155 7156 req.id = (id) 7157 tries = 0 7158 plumbing_response = None 7159 while True: 7160 t = None if deadline is None else deadline - time.time() 7161 try: 7162 plumbing_response = self.stub.Get( 7163 req, 7164 metadata=self.parent.get_metadata('Workflows.Get', req), 7165 timeout=t) 7166 except Exception as e: 7167 if self.parent.shouldRetry(tries, e, deadline): 7168 tries += 1 7169 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7170 continue 7171 raise plumbing.convert_error_to_porcelain(e) from e 7172 break 7173 7174 resp = models.WorkflowGetResponse() 7175 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 7176 plumbing_response.meta) 7177 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7178 plumbing_response.rate_limit) 7179 resp.workflow = plumbing.convert_workflow_to_porcelain( 7180 plumbing_response.workflow) 7181 return resp 7182 7183 def delete(self, id, timeout=None): 7184 ''' 7185 Delete deletes an existing workflow. 7186 ''' 7187 deadline = None if timeout is None else time.time() + timeout 7188 req = WorkflowDeleteRequest() 7189 7190 req.id = (id) 7191 tries = 0 7192 plumbing_response = None 7193 while True: 7194 t = None if deadline is None else deadline - time.time() 7195 try: 7196 plumbing_response = self.stub.Delete( 7197 req, 7198 metadata=self.parent.get_metadata('Workflows.Delete', req), 7199 timeout=t) 7200 except Exception as e: 7201 if self.parent.shouldRetry(tries, e, deadline): 7202 tries += 1 7203 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7204 continue 7205 raise plumbing.convert_error_to_porcelain(e) from e 7206 break 7207 7208 resp = models.WorkflowDeleteResponse() 7209 resp.id = (plumbing_response.id) 7210 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7211 plumbing_response.rate_limit) 7212 return resp 7213 7214 def update(self, workflow, timeout=None): 7215 ''' 7216 Update updates an existing workflow. 7217 ''' 7218 deadline = None if timeout is None else time.time() + timeout 7219 req = WorkflowUpdateRequest() 7220 7221 if workflow is not None: 7222 req.workflow.CopyFrom( 7223 plumbing.convert_workflow_to_plumbing(workflow)) 7224 tries = 0 7225 plumbing_response = None 7226 while True: 7227 t = None if deadline is None else deadline - time.time() 7228 try: 7229 plumbing_response = self.stub.Update( 7230 req, 7231 metadata=self.parent.get_metadata('Workflows.Update', req), 7232 timeout=t) 7233 except Exception as e: 7234 if self.parent.shouldRetry(tries, e, deadline): 7235 tries += 1 7236 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7237 continue 7238 raise plumbing.convert_error_to_porcelain(e) from e 7239 break 7240 7241 resp = models.WorkflowUpdateResponse() 7242 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7243 plumbing_response.rate_limit) 7244 resp.workflow = plumbing.convert_workflow_to_porcelain( 7245 plumbing_response.workflow) 7246 return resp 7247 7248 def list(self, filter, *args, timeout=None): 7249 ''' 7250 Lists existing workflows. 7251 ''' 7252 deadline = None if timeout is None else time.time() + timeout 7253 req = WorkflowListRequest() 7254 req.meta.CopyFrom(ListRequestMetadata()) 7255 if self.parent.page_limit > 0: 7256 req.meta.limit = self.parent.page_limit 7257 if self.parent.snapshot_datetime is not None: 7258 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7259 7260 req.filter = plumbing.quote_filter_args(filter, *args) 7261 7262 def generator(svc, req): 7263 tries = 0 7264 while True: 7265 t = None if deadline is None else deadline - time.time() 7266 try: 7267 plumbing_response = svc.stub.List( 7268 req, 7269 metadata=svc.parent.get_metadata( 7270 'Workflows.List', req), 7271 timeout=t) 7272 except Exception as e: 7273 if self.parent.shouldRetry(tries, e, deadline): 7274 tries += 1 7275 time.sleep( 7276 self.parent.exponentialBackoff(tries, deadline)) 7277 continue 7278 raise plumbing.convert_error_to_porcelain(e) from e 7279 tries = 0 7280 for plumbing_item in plumbing_response.workflows: 7281 yield plumbing.convert_workflow_to_porcelain(plumbing_item) 7282 if plumbing_response.meta.next_cursor == '': 7283 break 7284 req.meta.cursor = plumbing_response.meta.next_cursor 7285 7286 return generator(self, req) 7287 7288 7289class SnapshotWorkflows: 7290 ''' 7291 SnapshotWorkflows exposes the read only methods of the Workflows 7292 service for historical queries. 7293 ''' 7294 def __init__(self, workflows): 7295 self.workflows = workflows 7296 7297 def get(self, id, timeout=None): 7298 ''' 7299 Get reads one workflow by ID. 7300 ''' 7301 return self.workflows.get(id, timeout=timeout) 7302 7303 def list(self, filter, *args, timeout=None): 7304 ''' 7305 Lists existing workflows. 7306 ''' 7307 return self.workflows.list(filter, *args, timeout=timeout) 7308 7309 7310class WorkflowsHistory: 7311 ''' 7312 WorkflowsHistory provides records of all changes to the state of a Workflow. 7313 See `strongdm.models.WorkflowHistory`. 7314 ''' 7315 def __init__(self, channel, client): 7316 self.parent = client 7317 self.stub = WorkflowsHistoryStub(channel) 7318 7319 def list(self, filter, *args, timeout=None): 7320 ''' 7321 List gets a list of WorkflowHistory records matching a given set of criteria. 7322 ''' 7323 deadline = None if timeout is None else time.time() + timeout 7324 req = WorkflowHistoryListRequest() 7325 req.meta.CopyFrom(ListRequestMetadata()) 7326 if self.parent.page_limit > 0: 7327 req.meta.limit = self.parent.page_limit 7328 if self.parent.snapshot_datetime is not None: 7329 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7330 7331 req.filter = plumbing.quote_filter_args(filter, *args) 7332 7333 def generator(svc, req): 7334 tries = 0 7335 while True: 7336 t = None if deadline is None else deadline - time.time() 7337 try: 7338 plumbing_response = svc.stub.List( 7339 req, 7340 metadata=svc.parent.get_metadata( 7341 'WorkflowsHistory.List', req), 7342 timeout=t) 7343 except Exception as e: 7344 if self.parent.shouldRetry(tries, e, deadline): 7345 tries += 1 7346 time.sleep( 7347 self.parent.exponentialBackoff(tries, deadline)) 7348 continue 7349 raise plumbing.convert_error_to_porcelain(e) from e 7350 tries = 0 7351 for plumbing_item in plumbing_response.history: 7352 yield plumbing.convert_workflow_history_to_porcelain( 7353 plumbing_item) 7354 if plumbing_response.meta.next_cursor == '': 7355 break 7356 req.meta.cursor = plumbing_response.meta.next_cursor 7357 7358 return generator(self, req)
157def deprecated(func): 158 """This is a decorator which can be used to mark functions 159 as deprecated. It will result in a warning being emitted 160 when the function is used.""" 161 @functools.wraps(func) 162 def new_func(*args, **kwargs): 163 warnings.warn("Call to deprecated function {}.".format(func.__name__), 164 category=DeprecationWarning, 165 stacklevel=2) 166 return func(*args, **kwargs) 167 168 return new_func
This is a decorator which can be used to mark functions as deprecated. It will result in a warning being emitted when the function is used.
171class AccessRequests: 172 ''' 173 AccessRequests are requests for access to a resource that may match a Workflow. 174 See `strongdm.models.AccessRequest`. 175 ''' 176 def __init__(self, channel, client): 177 self.parent = client 178 self.stub = AccessRequestsStub(channel) 179 180 def list(self, filter, *args, timeout=None): 181 ''' 182 Lists existing access requests. 183 ''' 184 deadline = None if timeout is None else time.time() + timeout 185 req = AccessRequestListRequest() 186 req.meta.CopyFrom(ListRequestMetadata()) 187 if self.parent.page_limit > 0: 188 req.meta.limit = self.parent.page_limit 189 if self.parent.snapshot_datetime is not None: 190 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 191 192 req.filter = plumbing.quote_filter_args(filter, *args) 193 194 def generator(svc, req): 195 tries = 0 196 while True: 197 t = None if deadline is None else deadline - time.time() 198 try: 199 plumbing_response = svc.stub.List( 200 req, 201 metadata=svc.parent.get_metadata( 202 'AccessRequests.List', req), 203 timeout=t) 204 except Exception as e: 205 if self.parent.shouldRetry(tries, e, deadline): 206 tries += 1 207 time.sleep( 208 self.parent.exponentialBackoff(tries, deadline)) 209 continue 210 raise plumbing.convert_error_to_porcelain(e) from e 211 tries = 0 212 for plumbing_item in plumbing_response.access_requests: 213 yield plumbing.convert_access_request_to_porcelain( 214 plumbing_item) 215 if plumbing_response.meta.next_cursor == '': 216 break 217 req.meta.cursor = plumbing_response.meta.next_cursor 218 219 return generator(self, req)
AccessRequests are requests for access to a resource that may match a Workflow.
See strongdm.models.AccessRequest
.
180 def list(self, filter, *args, timeout=None): 181 ''' 182 Lists existing access requests. 183 ''' 184 deadline = None if timeout is None else time.time() + timeout 185 req = AccessRequestListRequest() 186 req.meta.CopyFrom(ListRequestMetadata()) 187 if self.parent.page_limit > 0: 188 req.meta.limit = self.parent.page_limit 189 if self.parent.snapshot_datetime is not None: 190 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 191 192 req.filter = plumbing.quote_filter_args(filter, *args) 193 194 def generator(svc, req): 195 tries = 0 196 while True: 197 t = None if deadline is None else deadline - time.time() 198 try: 199 plumbing_response = svc.stub.List( 200 req, 201 metadata=svc.parent.get_metadata( 202 'AccessRequests.List', req), 203 timeout=t) 204 except Exception as e: 205 if self.parent.shouldRetry(tries, e, deadline): 206 tries += 1 207 time.sleep( 208 self.parent.exponentialBackoff(tries, deadline)) 209 continue 210 raise plumbing.convert_error_to_porcelain(e) from e 211 tries = 0 212 for plumbing_item in plumbing_response.access_requests: 213 yield plumbing.convert_access_request_to_porcelain( 214 plumbing_item) 215 if plumbing_response.meta.next_cursor == '': 216 break 217 req.meta.cursor = plumbing_response.meta.next_cursor 218 219 return generator(self, req)
Lists existing access requests.
222class SnapshotAccessRequests: 223 ''' 224 SnapshotAccessRequests exposes the read only methods of the AccessRequests 225 service for historical queries. 226 ''' 227 def __init__(self, access_requests): 228 self.access_requests = access_requests 229 230 def list(self, filter, *args, timeout=None): 231 ''' 232 Lists existing access requests. 233 ''' 234 return self.access_requests.list(filter, *args, timeout=timeout)
SnapshotAccessRequests exposes the read only methods of the AccessRequests service for historical queries.
237class AccessRequestEventsHistory: 238 ''' 239 AccessRequestEventsHistory provides records of all changes to the state of an AccessRequest. 240 See `strongdm.models.AccessRequestEventHistory`. 241 ''' 242 def __init__(self, channel, client): 243 self.parent = client 244 self.stub = AccessRequestEventsHistoryStub(channel) 245 246 def list(self, filter, *args, timeout=None): 247 ''' 248 List gets a list of AccessRequestEventHistory records matching a given set of criteria. 249 ''' 250 deadline = None if timeout is None else time.time() + timeout 251 req = AccessRequestEventHistoryListRequest() 252 req.meta.CopyFrom(ListRequestMetadata()) 253 if self.parent.page_limit > 0: 254 req.meta.limit = self.parent.page_limit 255 if self.parent.snapshot_datetime is not None: 256 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 257 258 req.filter = plumbing.quote_filter_args(filter, *args) 259 260 def generator(svc, req): 261 tries = 0 262 while True: 263 t = None if deadline is None else deadline - time.time() 264 try: 265 plumbing_response = svc.stub.List( 266 req, 267 metadata=svc.parent.get_metadata( 268 'AccessRequestEventsHistory.List', req), 269 timeout=t) 270 except Exception as e: 271 if self.parent.shouldRetry(tries, e, deadline): 272 tries += 1 273 time.sleep( 274 self.parent.exponentialBackoff(tries, deadline)) 275 continue 276 raise plumbing.convert_error_to_porcelain(e) from e 277 tries = 0 278 for plumbing_item in plumbing_response.history: 279 yield plumbing.convert_access_request_event_history_to_porcelain( 280 plumbing_item) 281 if plumbing_response.meta.next_cursor == '': 282 break 283 req.meta.cursor = plumbing_response.meta.next_cursor 284 285 return generator(self, req)
AccessRequestEventsHistory provides records of all changes to the state of an AccessRequest.
See strongdm.models.AccessRequestEventHistory
.
246 def list(self, filter, *args, timeout=None): 247 ''' 248 List gets a list of AccessRequestEventHistory records matching a given set of criteria. 249 ''' 250 deadline = None if timeout is None else time.time() + timeout 251 req = AccessRequestEventHistoryListRequest() 252 req.meta.CopyFrom(ListRequestMetadata()) 253 if self.parent.page_limit > 0: 254 req.meta.limit = self.parent.page_limit 255 if self.parent.snapshot_datetime is not None: 256 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 257 258 req.filter = plumbing.quote_filter_args(filter, *args) 259 260 def generator(svc, req): 261 tries = 0 262 while True: 263 t = None if deadline is None else deadline - time.time() 264 try: 265 plumbing_response = svc.stub.List( 266 req, 267 metadata=svc.parent.get_metadata( 268 'AccessRequestEventsHistory.List', req), 269 timeout=t) 270 except Exception as e: 271 if self.parent.shouldRetry(tries, e, deadline): 272 tries += 1 273 time.sleep( 274 self.parent.exponentialBackoff(tries, deadline)) 275 continue 276 raise plumbing.convert_error_to_porcelain(e) from e 277 tries = 0 278 for plumbing_item in plumbing_response.history: 279 yield plumbing.convert_access_request_event_history_to_porcelain( 280 plumbing_item) 281 if plumbing_response.meta.next_cursor == '': 282 break 283 req.meta.cursor = plumbing_response.meta.next_cursor 284 285 return generator(self, req)
List gets a list of AccessRequestEventHistory records matching a given set of criteria.
288class AccessRequestsHistory: 289 ''' 290 AccessRequestsHistory provides records of all changes to the state of an AccessRequest. 291 See `strongdm.models.AccessRequestHistory`. 292 ''' 293 def __init__(self, channel, client): 294 self.parent = client 295 self.stub = AccessRequestsHistoryStub(channel) 296 297 def list(self, filter, *args, timeout=None): 298 ''' 299 List gets a list of AccessRequestHistory records matching a given set of criteria. 300 ''' 301 deadline = None if timeout is None else time.time() + timeout 302 req = AccessRequestHistoryListRequest() 303 req.meta.CopyFrom(ListRequestMetadata()) 304 if self.parent.page_limit > 0: 305 req.meta.limit = self.parent.page_limit 306 if self.parent.snapshot_datetime is not None: 307 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 308 309 req.filter = plumbing.quote_filter_args(filter, *args) 310 311 def generator(svc, req): 312 tries = 0 313 while True: 314 t = None if deadline is None else deadline - time.time() 315 try: 316 plumbing_response = svc.stub.List( 317 req, 318 metadata=svc.parent.get_metadata( 319 'AccessRequestsHistory.List', req), 320 timeout=t) 321 except Exception as e: 322 if self.parent.shouldRetry(tries, e, deadline): 323 tries += 1 324 time.sleep( 325 self.parent.exponentialBackoff(tries, deadline)) 326 continue 327 raise plumbing.convert_error_to_porcelain(e) from e 328 tries = 0 329 for plumbing_item in plumbing_response.history: 330 yield plumbing.convert_access_request_history_to_porcelain( 331 plumbing_item) 332 if plumbing_response.meta.next_cursor == '': 333 break 334 req.meta.cursor = plumbing_response.meta.next_cursor 335 336 return generator(self, req)
AccessRequestsHistory provides records of all changes to the state of an AccessRequest.
See strongdm.models.AccessRequestHistory
.
297 def list(self, filter, *args, timeout=None): 298 ''' 299 List gets a list of AccessRequestHistory records matching a given set of criteria. 300 ''' 301 deadline = None if timeout is None else time.time() + timeout 302 req = AccessRequestHistoryListRequest() 303 req.meta.CopyFrom(ListRequestMetadata()) 304 if self.parent.page_limit > 0: 305 req.meta.limit = self.parent.page_limit 306 if self.parent.snapshot_datetime is not None: 307 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 308 309 req.filter = plumbing.quote_filter_args(filter, *args) 310 311 def generator(svc, req): 312 tries = 0 313 while True: 314 t = None if deadline is None else deadline - time.time() 315 try: 316 plumbing_response = svc.stub.List( 317 req, 318 metadata=svc.parent.get_metadata( 319 'AccessRequestsHistory.List', req), 320 timeout=t) 321 except Exception as e: 322 if self.parent.shouldRetry(tries, e, deadline): 323 tries += 1 324 time.sleep( 325 self.parent.exponentialBackoff(tries, deadline)) 326 continue 327 raise plumbing.convert_error_to_porcelain(e) from e 328 tries = 0 329 for plumbing_item in plumbing_response.history: 330 yield plumbing.convert_access_request_history_to_porcelain( 331 plumbing_item) 332 if plumbing_response.meta.next_cursor == '': 333 break 334 req.meta.cursor = plumbing_response.meta.next_cursor 335 336 return generator(self, req)
List gets a list of AccessRequestHistory records matching a given set of criteria.
339class AccountAttachments: 340 ''' 341 AccountAttachments assign an account to a role. 342 See `strongdm.models.AccountAttachment`. 343 ''' 344 def __init__(self, channel, client): 345 self.parent = client 346 self.stub = AccountAttachmentsStub(channel) 347 348 def create(self, account_attachment, timeout=None): 349 ''' 350 Create registers a new AccountAttachment. 351 ''' 352 deadline = None if timeout is None else time.time() + timeout 353 req = AccountAttachmentCreateRequest() 354 355 if account_attachment is not None: 356 req.account_attachment.CopyFrom( 357 plumbing.convert_account_attachment_to_plumbing( 358 account_attachment)) 359 tries = 0 360 plumbing_response = None 361 while True: 362 t = None if deadline is None else deadline - time.time() 363 try: 364 plumbing_response = self.stub.Create( 365 req, 366 metadata=self.parent.get_metadata( 367 'AccountAttachments.Create', req), 368 timeout=t) 369 except Exception as e: 370 if self.parent.shouldRetry(tries, e, deadline): 371 tries += 1 372 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 373 continue 374 raise plumbing.convert_error_to_porcelain(e) from e 375 break 376 377 resp = models.AccountAttachmentCreateResponse() 378 resp.account_attachment = plumbing.convert_account_attachment_to_porcelain( 379 plumbing_response.account_attachment) 380 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 381 plumbing_response.meta) 382 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 383 plumbing_response.rate_limit) 384 return resp 385 386 def get(self, id, timeout=None): 387 ''' 388 Get reads one AccountAttachment by ID. 389 ''' 390 deadline = None if timeout is None else time.time() + timeout 391 req = AccountAttachmentGetRequest() 392 if self.parent.snapshot_datetime is not None: 393 req.meta.CopyFrom(GetRequestMetadata()) 394 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 395 396 req.id = (id) 397 tries = 0 398 plumbing_response = None 399 while True: 400 t = None if deadline is None else deadline - time.time() 401 try: 402 plumbing_response = self.stub.Get( 403 req, 404 metadata=self.parent.get_metadata('AccountAttachments.Get', 405 req), 406 timeout=t) 407 except Exception as e: 408 if self.parent.shouldRetry(tries, e, deadline): 409 tries += 1 410 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 411 continue 412 raise plumbing.convert_error_to_porcelain(e) from e 413 break 414 415 resp = models.AccountAttachmentGetResponse() 416 resp.account_attachment = plumbing.convert_account_attachment_to_porcelain( 417 plumbing_response.account_attachment) 418 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 419 plumbing_response.meta) 420 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 421 plumbing_response.rate_limit) 422 return resp 423 424 def delete(self, id, timeout=None): 425 ''' 426 Delete removes a AccountAttachment by ID. 427 ''' 428 deadline = None if timeout is None else time.time() + timeout 429 req = AccountAttachmentDeleteRequest() 430 431 req.id = (id) 432 tries = 0 433 plumbing_response = None 434 while True: 435 t = None if deadline is None else deadline - time.time() 436 try: 437 plumbing_response = self.stub.Delete( 438 req, 439 metadata=self.parent.get_metadata( 440 'AccountAttachments.Delete', req), 441 timeout=t) 442 except Exception as e: 443 if self.parent.shouldRetry(tries, e, deadline): 444 tries += 1 445 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 446 continue 447 raise plumbing.convert_error_to_porcelain(e) from e 448 break 449 450 resp = models.AccountAttachmentDeleteResponse() 451 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 452 plumbing_response.meta) 453 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 454 plumbing_response.rate_limit) 455 return resp 456 457 def list(self, filter, *args, timeout=None): 458 ''' 459 List gets a list of AccountAttachments matching a given set of criteria. 460 ''' 461 deadline = None if timeout is None else time.time() + timeout 462 req = AccountAttachmentListRequest() 463 req.meta.CopyFrom(ListRequestMetadata()) 464 if self.parent.page_limit > 0: 465 req.meta.limit = self.parent.page_limit 466 if self.parent.snapshot_datetime is not None: 467 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 468 469 req.filter = plumbing.quote_filter_args(filter, *args) 470 471 def generator(svc, req): 472 tries = 0 473 while True: 474 t = None if deadline is None else deadline - time.time() 475 try: 476 plumbing_response = svc.stub.List( 477 req, 478 metadata=svc.parent.get_metadata( 479 'AccountAttachments.List', req), 480 timeout=t) 481 except Exception as e: 482 if self.parent.shouldRetry(tries, e, deadline): 483 tries += 1 484 time.sleep( 485 self.parent.exponentialBackoff(tries, deadline)) 486 continue 487 raise plumbing.convert_error_to_porcelain(e) from e 488 tries = 0 489 for plumbing_item in plumbing_response.account_attachments: 490 yield plumbing.convert_account_attachment_to_porcelain( 491 plumbing_item) 492 if plumbing_response.meta.next_cursor == '': 493 break 494 req.meta.cursor = plumbing_response.meta.next_cursor 495 496 return generator(self, req)
AccountAttachments assign an account to a role.
See strongdm.models.AccountAttachment
.
348 def create(self, account_attachment, timeout=None): 349 ''' 350 Create registers a new AccountAttachment. 351 ''' 352 deadline = None if timeout is None else time.time() + timeout 353 req = AccountAttachmentCreateRequest() 354 355 if account_attachment is not None: 356 req.account_attachment.CopyFrom( 357 plumbing.convert_account_attachment_to_plumbing( 358 account_attachment)) 359 tries = 0 360 plumbing_response = None 361 while True: 362 t = None if deadline is None else deadline - time.time() 363 try: 364 plumbing_response = self.stub.Create( 365 req, 366 metadata=self.parent.get_metadata( 367 'AccountAttachments.Create', req), 368 timeout=t) 369 except Exception as e: 370 if self.parent.shouldRetry(tries, e, deadline): 371 tries += 1 372 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 373 continue 374 raise plumbing.convert_error_to_porcelain(e) from e 375 break 376 377 resp = models.AccountAttachmentCreateResponse() 378 resp.account_attachment = plumbing.convert_account_attachment_to_porcelain( 379 plumbing_response.account_attachment) 380 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 381 plumbing_response.meta) 382 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 383 plumbing_response.rate_limit) 384 return resp
Create registers a new AccountAttachment.
386 def get(self, id, timeout=None): 387 ''' 388 Get reads one AccountAttachment by ID. 389 ''' 390 deadline = None if timeout is None else time.time() + timeout 391 req = AccountAttachmentGetRequest() 392 if self.parent.snapshot_datetime is not None: 393 req.meta.CopyFrom(GetRequestMetadata()) 394 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 395 396 req.id = (id) 397 tries = 0 398 plumbing_response = None 399 while True: 400 t = None if deadline is None else deadline - time.time() 401 try: 402 plumbing_response = self.stub.Get( 403 req, 404 metadata=self.parent.get_metadata('AccountAttachments.Get', 405 req), 406 timeout=t) 407 except Exception as e: 408 if self.parent.shouldRetry(tries, e, deadline): 409 tries += 1 410 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 411 continue 412 raise plumbing.convert_error_to_porcelain(e) from e 413 break 414 415 resp = models.AccountAttachmentGetResponse() 416 resp.account_attachment = plumbing.convert_account_attachment_to_porcelain( 417 plumbing_response.account_attachment) 418 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 419 plumbing_response.meta) 420 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 421 plumbing_response.rate_limit) 422 return resp
Get reads one AccountAttachment by ID.
424 def delete(self, id, timeout=None): 425 ''' 426 Delete removes a AccountAttachment by ID. 427 ''' 428 deadline = None if timeout is None else time.time() + timeout 429 req = AccountAttachmentDeleteRequest() 430 431 req.id = (id) 432 tries = 0 433 plumbing_response = None 434 while True: 435 t = None if deadline is None else deadline - time.time() 436 try: 437 plumbing_response = self.stub.Delete( 438 req, 439 metadata=self.parent.get_metadata( 440 'AccountAttachments.Delete', req), 441 timeout=t) 442 except Exception as e: 443 if self.parent.shouldRetry(tries, e, deadline): 444 tries += 1 445 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 446 continue 447 raise plumbing.convert_error_to_porcelain(e) from e 448 break 449 450 resp = models.AccountAttachmentDeleteResponse() 451 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 452 plumbing_response.meta) 453 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 454 plumbing_response.rate_limit) 455 return resp
Delete removes a AccountAttachment by ID.
457 def list(self, filter, *args, timeout=None): 458 ''' 459 List gets a list of AccountAttachments matching a given set of criteria. 460 ''' 461 deadline = None if timeout is None else time.time() + timeout 462 req = AccountAttachmentListRequest() 463 req.meta.CopyFrom(ListRequestMetadata()) 464 if self.parent.page_limit > 0: 465 req.meta.limit = self.parent.page_limit 466 if self.parent.snapshot_datetime is not None: 467 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 468 469 req.filter = plumbing.quote_filter_args(filter, *args) 470 471 def generator(svc, req): 472 tries = 0 473 while True: 474 t = None if deadline is None else deadline - time.time() 475 try: 476 plumbing_response = svc.stub.List( 477 req, 478 metadata=svc.parent.get_metadata( 479 'AccountAttachments.List', req), 480 timeout=t) 481 except Exception as e: 482 if self.parent.shouldRetry(tries, e, deadline): 483 tries += 1 484 time.sleep( 485 self.parent.exponentialBackoff(tries, deadline)) 486 continue 487 raise plumbing.convert_error_to_porcelain(e) from e 488 tries = 0 489 for plumbing_item in plumbing_response.account_attachments: 490 yield plumbing.convert_account_attachment_to_porcelain( 491 plumbing_item) 492 if plumbing_response.meta.next_cursor == '': 493 break 494 req.meta.cursor = plumbing_response.meta.next_cursor 495 496 return generator(self, req)
List gets a list of AccountAttachments matching a given set of criteria.
499class SnapshotAccountAttachments: 500 ''' 501 SnapshotAccountAttachments exposes the read only methods of the AccountAttachments 502 service for historical queries. 503 ''' 504 def __init__(self, account_attachments): 505 self.account_attachments = account_attachments 506 507 def get(self, id, timeout=None): 508 ''' 509 Get reads one AccountAttachment by ID. 510 ''' 511 return self.account_attachments.get(id, timeout=timeout) 512 513 def list(self, filter, *args, timeout=None): 514 ''' 515 List gets a list of AccountAttachments matching a given set of criteria. 516 ''' 517 return self.account_attachments.list(filter, *args, timeout=timeout)
SnapshotAccountAttachments exposes the read only methods of the AccountAttachments service for historical queries.
507 def get(self, id, timeout=None): 508 ''' 509 Get reads one AccountAttachment by ID. 510 ''' 511 return self.account_attachments.get(id, timeout=timeout)
Get reads one AccountAttachment by ID.
513 def list(self, filter, *args, timeout=None): 514 ''' 515 List gets a list of AccountAttachments matching a given set of criteria. 516 ''' 517 return self.account_attachments.list(filter, *args, timeout=timeout)
List gets a list of AccountAttachments matching a given set of criteria.
520class AccountAttachmentsHistory: 521 ''' 522 AccountAttachmentsHistory records all changes to the state of an AccountAttachment. 523 See `strongdm.models.AccountAttachmentHistory`. 524 ''' 525 def __init__(self, channel, client): 526 self.parent = client 527 self.stub = AccountAttachmentsHistoryStub(channel) 528 529 def list(self, filter, *args, timeout=None): 530 ''' 531 List gets a list of AccountAttachmentHistory records matching a given set of criteria. 532 ''' 533 deadline = None if timeout is None else time.time() + timeout 534 req = AccountAttachmentHistoryListRequest() 535 req.meta.CopyFrom(ListRequestMetadata()) 536 if self.parent.page_limit > 0: 537 req.meta.limit = self.parent.page_limit 538 if self.parent.snapshot_datetime is not None: 539 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 540 541 req.filter = plumbing.quote_filter_args(filter, *args) 542 543 def generator(svc, req): 544 tries = 0 545 while True: 546 t = None if deadline is None else deadline - time.time() 547 try: 548 plumbing_response = svc.stub.List( 549 req, 550 metadata=svc.parent.get_metadata( 551 'AccountAttachmentsHistory.List', req), 552 timeout=t) 553 except Exception as e: 554 if self.parent.shouldRetry(tries, e, deadline): 555 tries += 1 556 time.sleep( 557 self.parent.exponentialBackoff(tries, deadline)) 558 continue 559 raise plumbing.convert_error_to_porcelain(e) from e 560 tries = 0 561 for plumbing_item in plumbing_response.history: 562 yield plumbing.convert_account_attachment_history_to_porcelain( 563 plumbing_item) 564 if plumbing_response.meta.next_cursor == '': 565 break 566 req.meta.cursor = plumbing_response.meta.next_cursor 567 568 return generator(self, req)
AccountAttachmentsHistory records all changes to the state of an AccountAttachment.
See strongdm.models.AccountAttachmentHistory
.
529 def list(self, filter, *args, timeout=None): 530 ''' 531 List gets a list of AccountAttachmentHistory records matching a given set of criteria. 532 ''' 533 deadline = None if timeout is None else time.time() + timeout 534 req = AccountAttachmentHistoryListRequest() 535 req.meta.CopyFrom(ListRequestMetadata()) 536 if self.parent.page_limit > 0: 537 req.meta.limit = self.parent.page_limit 538 if self.parent.snapshot_datetime is not None: 539 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 540 541 req.filter = plumbing.quote_filter_args(filter, *args) 542 543 def generator(svc, req): 544 tries = 0 545 while True: 546 t = None if deadline is None else deadline - time.time() 547 try: 548 plumbing_response = svc.stub.List( 549 req, 550 metadata=svc.parent.get_metadata( 551 'AccountAttachmentsHistory.List', req), 552 timeout=t) 553 except Exception as e: 554 if self.parent.shouldRetry(tries, e, deadline): 555 tries += 1 556 time.sleep( 557 self.parent.exponentialBackoff(tries, deadline)) 558 continue 559 raise plumbing.convert_error_to_porcelain(e) from e 560 tries = 0 561 for plumbing_item in plumbing_response.history: 562 yield plumbing.convert_account_attachment_history_to_porcelain( 563 plumbing_item) 564 if plumbing_response.meta.next_cursor == '': 565 break 566 req.meta.cursor = plumbing_response.meta.next_cursor 567 568 return generator(self, req)
List gets a list of AccountAttachmentHistory records matching a given set of criteria.
571class AccountGrants: 572 ''' 573 AccountGrants assign a resource directly to an account, giving the account the permission to connect to that resource. 574 See `strongdm.models.AccountGrant`. 575 ''' 576 def __init__(self, channel, client): 577 self.parent = client 578 self.stub = AccountGrantsStub(channel) 579 580 def create(self, account_grant, timeout=None): 581 ''' 582 Create registers a new AccountGrant. 583 ''' 584 deadline = None if timeout is None else time.time() + timeout 585 req = AccountGrantCreateRequest() 586 587 if account_grant is not None: 588 req.account_grant.CopyFrom( 589 plumbing.convert_account_grant_to_plumbing(account_grant)) 590 tries = 0 591 plumbing_response = None 592 while True: 593 t = None if deadline is None else deadline - time.time() 594 try: 595 plumbing_response = self.stub.Create( 596 req, 597 metadata=self.parent.get_metadata('AccountGrants.Create', 598 req), 599 timeout=t) 600 except Exception as e: 601 if self.parent.shouldRetry(tries, e, deadline): 602 tries += 1 603 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 604 continue 605 raise plumbing.convert_error_to_porcelain(e) from e 606 break 607 608 resp = models.AccountGrantCreateResponse() 609 resp.account_grant = plumbing.convert_account_grant_to_porcelain( 610 plumbing_response.account_grant) 611 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 612 plumbing_response.meta) 613 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 614 plumbing_response.rate_limit) 615 return resp 616 617 def get(self, id, timeout=None): 618 ''' 619 Get reads one AccountGrant by ID. 620 ''' 621 deadline = None if timeout is None else time.time() + timeout 622 req = AccountGrantGetRequest() 623 if self.parent.snapshot_datetime is not None: 624 req.meta.CopyFrom(GetRequestMetadata()) 625 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 626 627 req.id = (id) 628 tries = 0 629 plumbing_response = None 630 while True: 631 t = None if deadline is None else deadline - time.time() 632 try: 633 plumbing_response = self.stub.Get( 634 req, 635 metadata=self.parent.get_metadata('AccountGrants.Get', 636 req), 637 timeout=t) 638 except Exception as e: 639 if self.parent.shouldRetry(tries, e, deadline): 640 tries += 1 641 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 642 continue 643 raise plumbing.convert_error_to_porcelain(e) from e 644 break 645 646 resp = models.AccountGrantGetResponse() 647 resp.account_grant = plumbing.convert_account_grant_to_porcelain( 648 plumbing_response.account_grant) 649 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 650 plumbing_response.meta) 651 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 652 plumbing_response.rate_limit) 653 return resp 654 655 def delete(self, id, timeout=None): 656 ''' 657 Delete removes a AccountGrant by ID. 658 ''' 659 deadline = None if timeout is None else time.time() + timeout 660 req = AccountGrantDeleteRequest() 661 662 req.id = (id) 663 tries = 0 664 plumbing_response = None 665 while True: 666 t = None if deadline is None else deadline - time.time() 667 try: 668 plumbing_response = self.stub.Delete( 669 req, 670 metadata=self.parent.get_metadata('AccountGrants.Delete', 671 req), 672 timeout=t) 673 except Exception as e: 674 if self.parent.shouldRetry(tries, e, deadline): 675 tries += 1 676 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 677 continue 678 raise plumbing.convert_error_to_porcelain(e) from e 679 break 680 681 resp = models.AccountGrantDeleteResponse() 682 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 683 plumbing_response.meta) 684 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 685 plumbing_response.rate_limit) 686 return resp 687 688 def list(self, filter, *args, timeout=None): 689 ''' 690 List gets a list of AccountGrants matching a given set of criteria. 691 ''' 692 deadline = None if timeout is None else time.time() + timeout 693 req = AccountGrantListRequest() 694 req.meta.CopyFrom(ListRequestMetadata()) 695 if self.parent.page_limit > 0: 696 req.meta.limit = self.parent.page_limit 697 if self.parent.snapshot_datetime is not None: 698 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 699 700 req.filter = plumbing.quote_filter_args(filter, *args) 701 702 def generator(svc, req): 703 tries = 0 704 while True: 705 t = None if deadline is None else deadline - time.time() 706 try: 707 plumbing_response = svc.stub.List( 708 req, 709 metadata=svc.parent.get_metadata( 710 'AccountGrants.List', req), 711 timeout=t) 712 except Exception as e: 713 if self.parent.shouldRetry(tries, e, deadline): 714 tries += 1 715 time.sleep( 716 self.parent.exponentialBackoff(tries, deadline)) 717 continue 718 raise plumbing.convert_error_to_porcelain(e) from e 719 tries = 0 720 for plumbing_item in plumbing_response.account_grants: 721 yield plumbing.convert_account_grant_to_porcelain( 722 plumbing_item) 723 if plumbing_response.meta.next_cursor == '': 724 break 725 req.meta.cursor = plumbing_response.meta.next_cursor 726 727 return generator(self, req)
AccountGrants assign a resource directly to an account, giving the account the permission to connect to that resource.
See strongdm.models.AccountGrant
.
580 def create(self, account_grant, timeout=None): 581 ''' 582 Create registers a new AccountGrant. 583 ''' 584 deadline = None if timeout is None else time.time() + timeout 585 req = AccountGrantCreateRequest() 586 587 if account_grant is not None: 588 req.account_grant.CopyFrom( 589 plumbing.convert_account_grant_to_plumbing(account_grant)) 590 tries = 0 591 plumbing_response = None 592 while True: 593 t = None if deadline is None else deadline - time.time() 594 try: 595 plumbing_response = self.stub.Create( 596 req, 597 metadata=self.parent.get_metadata('AccountGrants.Create', 598 req), 599 timeout=t) 600 except Exception as e: 601 if self.parent.shouldRetry(tries, e, deadline): 602 tries += 1 603 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 604 continue 605 raise plumbing.convert_error_to_porcelain(e) from e 606 break 607 608 resp = models.AccountGrantCreateResponse() 609 resp.account_grant = plumbing.convert_account_grant_to_porcelain( 610 plumbing_response.account_grant) 611 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 612 plumbing_response.meta) 613 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 614 plumbing_response.rate_limit) 615 return resp
Create registers a new AccountGrant.
617 def get(self, id, timeout=None): 618 ''' 619 Get reads one AccountGrant by ID. 620 ''' 621 deadline = None if timeout is None else time.time() + timeout 622 req = AccountGrantGetRequest() 623 if self.parent.snapshot_datetime is not None: 624 req.meta.CopyFrom(GetRequestMetadata()) 625 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 626 627 req.id = (id) 628 tries = 0 629 plumbing_response = None 630 while True: 631 t = None if deadline is None else deadline - time.time() 632 try: 633 plumbing_response = self.stub.Get( 634 req, 635 metadata=self.parent.get_metadata('AccountGrants.Get', 636 req), 637 timeout=t) 638 except Exception as e: 639 if self.parent.shouldRetry(tries, e, deadline): 640 tries += 1 641 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 642 continue 643 raise plumbing.convert_error_to_porcelain(e) from e 644 break 645 646 resp = models.AccountGrantGetResponse() 647 resp.account_grant = plumbing.convert_account_grant_to_porcelain( 648 plumbing_response.account_grant) 649 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 650 plumbing_response.meta) 651 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 652 plumbing_response.rate_limit) 653 return resp
Get reads one AccountGrant by ID.
655 def delete(self, id, timeout=None): 656 ''' 657 Delete removes a AccountGrant by ID. 658 ''' 659 deadline = None if timeout is None else time.time() + timeout 660 req = AccountGrantDeleteRequest() 661 662 req.id = (id) 663 tries = 0 664 plumbing_response = None 665 while True: 666 t = None if deadline is None else deadline - time.time() 667 try: 668 plumbing_response = self.stub.Delete( 669 req, 670 metadata=self.parent.get_metadata('AccountGrants.Delete', 671 req), 672 timeout=t) 673 except Exception as e: 674 if self.parent.shouldRetry(tries, e, deadline): 675 tries += 1 676 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 677 continue 678 raise plumbing.convert_error_to_porcelain(e) from e 679 break 680 681 resp = models.AccountGrantDeleteResponse() 682 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 683 plumbing_response.meta) 684 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 685 plumbing_response.rate_limit) 686 return resp
Delete removes a AccountGrant by ID.
688 def list(self, filter, *args, timeout=None): 689 ''' 690 List gets a list of AccountGrants matching a given set of criteria. 691 ''' 692 deadline = None if timeout is None else time.time() + timeout 693 req = AccountGrantListRequest() 694 req.meta.CopyFrom(ListRequestMetadata()) 695 if self.parent.page_limit > 0: 696 req.meta.limit = self.parent.page_limit 697 if self.parent.snapshot_datetime is not None: 698 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 699 700 req.filter = plumbing.quote_filter_args(filter, *args) 701 702 def generator(svc, req): 703 tries = 0 704 while True: 705 t = None if deadline is None else deadline - time.time() 706 try: 707 plumbing_response = svc.stub.List( 708 req, 709 metadata=svc.parent.get_metadata( 710 'AccountGrants.List', req), 711 timeout=t) 712 except Exception as e: 713 if self.parent.shouldRetry(tries, e, deadline): 714 tries += 1 715 time.sleep( 716 self.parent.exponentialBackoff(tries, deadline)) 717 continue 718 raise plumbing.convert_error_to_porcelain(e) from e 719 tries = 0 720 for plumbing_item in plumbing_response.account_grants: 721 yield plumbing.convert_account_grant_to_porcelain( 722 plumbing_item) 723 if plumbing_response.meta.next_cursor == '': 724 break 725 req.meta.cursor = plumbing_response.meta.next_cursor 726 727 return generator(self, req)
List gets a list of AccountGrants matching a given set of criteria.
730class SnapshotAccountGrants: 731 ''' 732 SnapshotAccountGrants exposes the read only methods of the AccountGrants 733 service for historical queries. 734 ''' 735 def __init__(self, account_grants): 736 self.account_grants = account_grants 737 738 def get(self, id, timeout=None): 739 ''' 740 Get reads one AccountGrant by ID. 741 ''' 742 return self.account_grants.get(id, timeout=timeout) 743 744 def list(self, filter, *args, timeout=None): 745 ''' 746 List gets a list of AccountGrants matching a given set of criteria. 747 ''' 748 return self.account_grants.list(filter, *args, timeout=timeout)
SnapshotAccountGrants exposes the read only methods of the AccountGrants service for historical queries.
738 def get(self, id, timeout=None): 739 ''' 740 Get reads one AccountGrant by ID. 741 ''' 742 return self.account_grants.get(id, timeout=timeout)
Get reads one AccountGrant by ID.
744 def list(self, filter, *args, timeout=None): 745 ''' 746 List gets a list of AccountGrants matching a given set of criteria. 747 ''' 748 return self.account_grants.list(filter, *args, timeout=timeout)
List gets a list of AccountGrants matching a given set of criteria.
751class AccountGrantsHistory: 752 ''' 753 AccountGrantsHistory records all changes to the state of an AccountGrant. 754 See `strongdm.models.AccountGrantHistory`. 755 ''' 756 def __init__(self, channel, client): 757 self.parent = client 758 self.stub = AccountGrantsHistoryStub(channel) 759 760 def list(self, filter, *args, timeout=None): 761 ''' 762 List gets a list of AccountGrantHistory records matching a given set of criteria. 763 ''' 764 deadline = None if timeout is None else time.time() + timeout 765 req = AccountGrantHistoryListRequest() 766 req.meta.CopyFrom(ListRequestMetadata()) 767 if self.parent.page_limit > 0: 768 req.meta.limit = self.parent.page_limit 769 if self.parent.snapshot_datetime is not None: 770 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 771 772 req.filter = plumbing.quote_filter_args(filter, *args) 773 774 def generator(svc, req): 775 tries = 0 776 while True: 777 t = None if deadline is None else deadline - time.time() 778 try: 779 plumbing_response = svc.stub.List( 780 req, 781 metadata=svc.parent.get_metadata( 782 'AccountGrantsHistory.List', req), 783 timeout=t) 784 except Exception as e: 785 if self.parent.shouldRetry(tries, e, deadline): 786 tries += 1 787 time.sleep( 788 self.parent.exponentialBackoff(tries, deadline)) 789 continue 790 raise plumbing.convert_error_to_porcelain(e) from e 791 tries = 0 792 for plumbing_item in plumbing_response.history: 793 yield plumbing.convert_account_grant_history_to_porcelain( 794 plumbing_item) 795 if plumbing_response.meta.next_cursor == '': 796 break 797 req.meta.cursor = plumbing_response.meta.next_cursor 798 799 return generator(self, req)
AccountGrantsHistory records all changes to the state of an AccountGrant.
See strongdm.models.AccountGrantHistory
.
760 def list(self, filter, *args, timeout=None): 761 ''' 762 List gets a list of AccountGrantHistory records matching a given set of criteria. 763 ''' 764 deadline = None if timeout is None else time.time() + timeout 765 req = AccountGrantHistoryListRequest() 766 req.meta.CopyFrom(ListRequestMetadata()) 767 if self.parent.page_limit > 0: 768 req.meta.limit = self.parent.page_limit 769 if self.parent.snapshot_datetime is not None: 770 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 771 772 req.filter = plumbing.quote_filter_args(filter, *args) 773 774 def generator(svc, req): 775 tries = 0 776 while True: 777 t = None if deadline is None else deadline - time.time() 778 try: 779 plumbing_response = svc.stub.List( 780 req, 781 metadata=svc.parent.get_metadata( 782 'AccountGrantsHistory.List', req), 783 timeout=t) 784 except Exception as e: 785 if self.parent.shouldRetry(tries, e, deadline): 786 tries += 1 787 time.sleep( 788 self.parent.exponentialBackoff(tries, deadline)) 789 continue 790 raise plumbing.convert_error_to_porcelain(e) from e 791 tries = 0 792 for plumbing_item in plumbing_response.history: 793 yield plumbing.convert_account_grant_history_to_porcelain( 794 plumbing_item) 795 if plumbing_response.meta.next_cursor == '': 796 break 797 req.meta.cursor = plumbing_response.meta.next_cursor 798 799 return generator(self, req)
List gets a list of AccountGrantHistory records matching a given set of criteria.
802class AccountPermissions: 803 ''' 804 AccountPermissions records the granular permissions accounts have, allowing them to execute 805 relevant commands via StrongDM's APIs. 806 See `strongdm.models.AccountPermission`. 807 ''' 808 def __init__(self, channel, client): 809 self.parent = client 810 self.stub = AccountPermissionsStub(channel) 811 812 def list(self, filter, *args, timeout=None): 813 ''' 814 List gets a list of Permission records matching a given set of criteria. 815 ''' 816 deadline = None if timeout is None else time.time() + timeout 817 req = AccountPermissionListRequest() 818 req.meta.CopyFrom(ListRequestMetadata()) 819 if self.parent.page_limit > 0: 820 req.meta.limit = self.parent.page_limit 821 if self.parent.snapshot_datetime is not None: 822 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 823 824 req.filter = plumbing.quote_filter_args(filter, *args) 825 826 def generator(svc, req): 827 tries = 0 828 while True: 829 t = None if deadline is None else deadline - time.time() 830 try: 831 plumbing_response = svc.stub.List( 832 req, 833 metadata=svc.parent.get_metadata( 834 'AccountPermissions.List', req), 835 timeout=t) 836 except Exception as e: 837 if self.parent.shouldRetry(tries, e, deadline): 838 tries += 1 839 time.sleep( 840 self.parent.exponentialBackoff(tries, deadline)) 841 continue 842 raise plumbing.convert_error_to_porcelain(e) from e 843 tries = 0 844 for plumbing_item in plumbing_response.permissions: 845 yield plumbing.convert_account_permission_to_porcelain( 846 plumbing_item) 847 if plumbing_response.meta.next_cursor == '': 848 break 849 req.meta.cursor = plumbing_response.meta.next_cursor 850 851 return generator(self, req)
AccountPermissions records the granular permissions accounts have, allowing them to execute
relevant commands via StrongDM's APIs.
See strongdm.models.AccountPermission
.
812 def list(self, filter, *args, timeout=None): 813 ''' 814 List gets a list of Permission records matching a given set of criteria. 815 ''' 816 deadline = None if timeout is None else time.time() + timeout 817 req = AccountPermissionListRequest() 818 req.meta.CopyFrom(ListRequestMetadata()) 819 if self.parent.page_limit > 0: 820 req.meta.limit = self.parent.page_limit 821 if self.parent.snapshot_datetime is not None: 822 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 823 824 req.filter = plumbing.quote_filter_args(filter, *args) 825 826 def generator(svc, req): 827 tries = 0 828 while True: 829 t = None if deadline is None else deadline - time.time() 830 try: 831 plumbing_response = svc.stub.List( 832 req, 833 metadata=svc.parent.get_metadata( 834 'AccountPermissions.List', req), 835 timeout=t) 836 except Exception as e: 837 if self.parent.shouldRetry(tries, e, deadline): 838 tries += 1 839 time.sleep( 840 self.parent.exponentialBackoff(tries, deadline)) 841 continue 842 raise plumbing.convert_error_to_porcelain(e) from e 843 tries = 0 844 for plumbing_item in plumbing_response.permissions: 845 yield plumbing.convert_account_permission_to_porcelain( 846 plumbing_item) 847 if plumbing_response.meta.next_cursor == '': 848 break 849 req.meta.cursor = plumbing_response.meta.next_cursor 850 851 return generator(self, req)
List gets a list of Permission records matching a given set of criteria.
854class SnapshotAccountPermissions: 855 ''' 856 SnapshotAccountPermissions exposes the read only methods of the AccountPermissions 857 service for historical queries. 858 ''' 859 def __init__(self, account_permissions): 860 self.account_permissions = account_permissions 861 862 def list(self, filter, *args, timeout=None): 863 ''' 864 List gets a list of Permission records matching a given set of criteria. 865 ''' 866 return self.account_permissions.list(filter, *args, timeout=timeout)
SnapshotAccountPermissions exposes the read only methods of the AccountPermissions service for historical queries.
862 def list(self, filter, *args, timeout=None): 863 ''' 864 List gets a list of Permission records matching a given set of criteria. 865 ''' 866 return self.account_permissions.list(filter, *args, timeout=timeout)
List gets a list of Permission records matching a given set of criteria.
869class AccountResources: 870 ''' 871 AccountResources enumerates the resources to which accounts have access. 872 The AccountResources service is read-only. 873 See `strongdm.models.AccountResource`. 874 ''' 875 def __init__(self, channel, client): 876 self.parent = client 877 self.stub = AccountResourcesStub(channel) 878 879 def list(self, filter, *args, timeout=None): 880 ''' 881 List gets a list of AccountResource records matching a given set of criteria. 882 ''' 883 deadline = None if timeout is None else time.time() + timeout 884 req = AccountResourceListRequest() 885 req.meta.CopyFrom(ListRequestMetadata()) 886 if self.parent.page_limit > 0: 887 req.meta.limit = self.parent.page_limit 888 if self.parent.snapshot_datetime is not None: 889 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 890 891 req.filter = plumbing.quote_filter_args(filter, *args) 892 893 def generator(svc, req): 894 tries = 0 895 while True: 896 t = None if deadline is None else deadline - time.time() 897 try: 898 plumbing_response = svc.stub.List( 899 req, 900 metadata=svc.parent.get_metadata( 901 'AccountResources.List', req), 902 timeout=t) 903 except Exception as e: 904 if self.parent.shouldRetry(tries, e, deadline): 905 tries += 1 906 time.sleep( 907 self.parent.exponentialBackoff(tries, deadline)) 908 continue 909 raise plumbing.convert_error_to_porcelain(e) from e 910 tries = 0 911 for plumbing_item in plumbing_response.account_resources: 912 yield plumbing.convert_account_resource_to_porcelain( 913 plumbing_item) 914 if plumbing_response.meta.next_cursor == '': 915 break 916 req.meta.cursor = plumbing_response.meta.next_cursor 917 918 return generator(self, req)
AccountResources enumerates the resources to which accounts have access.
The AccountResources service is read-only.
See strongdm.models.AccountResource
.
879 def list(self, filter, *args, timeout=None): 880 ''' 881 List gets a list of AccountResource records matching a given set of criteria. 882 ''' 883 deadline = None if timeout is None else time.time() + timeout 884 req = AccountResourceListRequest() 885 req.meta.CopyFrom(ListRequestMetadata()) 886 if self.parent.page_limit > 0: 887 req.meta.limit = self.parent.page_limit 888 if self.parent.snapshot_datetime is not None: 889 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 890 891 req.filter = plumbing.quote_filter_args(filter, *args) 892 893 def generator(svc, req): 894 tries = 0 895 while True: 896 t = None if deadline is None else deadline - time.time() 897 try: 898 plumbing_response = svc.stub.List( 899 req, 900 metadata=svc.parent.get_metadata( 901 'AccountResources.List', req), 902 timeout=t) 903 except Exception as e: 904 if self.parent.shouldRetry(tries, e, deadline): 905 tries += 1 906 time.sleep( 907 self.parent.exponentialBackoff(tries, deadline)) 908 continue 909 raise plumbing.convert_error_to_porcelain(e) from e 910 tries = 0 911 for plumbing_item in plumbing_response.account_resources: 912 yield plumbing.convert_account_resource_to_porcelain( 913 plumbing_item) 914 if plumbing_response.meta.next_cursor == '': 915 break 916 req.meta.cursor = plumbing_response.meta.next_cursor 917 918 return generator(self, req)
List gets a list of AccountResource records matching a given set of criteria.
921class SnapshotAccountResources: 922 ''' 923 SnapshotAccountResources exposes the read only methods of the AccountResources 924 service for historical queries. 925 ''' 926 def __init__(self, account_resources): 927 self.account_resources = account_resources 928 929 def list(self, filter, *args, timeout=None): 930 ''' 931 List gets a list of AccountResource records matching a given set of criteria. 932 ''' 933 return self.account_resources.list(filter, *args, timeout=timeout)
SnapshotAccountResources exposes the read only methods of the AccountResources service for historical queries.
929 def list(self, filter, *args, timeout=None): 930 ''' 931 List gets a list of AccountResource records matching a given set of criteria. 932 ''' 933 return self.account_resources.list(filter, *args, timeout=timeout)
List gets a list of AccountResource records matching a given set of criteria.
936class AccountResourcesHistory: 937 ''' 938 AccountResourcesHistory records all changes to the state of a AccountResource. 939 See `strongdm.models.AccountResourceHistory`. 940 ''' 941 def __init__(self, channel, client): 942 self.parent = client 943 self.stub = AccountResourcesHistoryStub(channel) 944 945 def list(self, filter, *args, timeout=None): 946 ''' 947 List gets a list of AccountResourceHistory records matching a given set of criteria. 948 ''' 949 deadline = None if timeout is None else time.time() + timeout 950 req = AccountResourceHistoryListRequest() 951 req.meta.CopyFrom(ListRequestMetadata()) 952 if self.parent.page_limit > 0: 953 req.meta.limit = self.parent.page_limit 954 if self.parent.snapshot_datetime is not None: 955 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 956 957 req.filter = plumbing.quote_filter_args(filter, *args) 958 959 def generator(svc, req): 960 tries = 0 961 while True: 962 t = None if deadline is None else deadline - time.time() 963 try: 964 plumbing_response = svc.stub.List( 965 req, 966 metadata=svc.parent.get_metadata( 967 'AccountResourcesHistory.List', req), 968 timeout=t) 969 except Exception as e: 970 if self.parent.shouldRetry(tries, e, deadline): 971 tries += 1 972 time.sleep( 973 self.parent.exponentialBackoff(tries, deadline)) 974 continue 975 raise plumbing.convert_error_to_porcelain(e) from e 976 tries = 0 977 for plumbing_item in plumbing_response.history: 978 yield plumbing.convert_account_resource_history_to_porcelain( 979 plumbing_item) 980 if plumbing_response.meta.next_cursor == '': 981 break 982 req.meta.cursor = plumbing_response.meta.next_cursor 983 984 return generator(self, req)
AccountResourcesHistory records all changes to the state of a AccountResource.
See strongdm.models.AccountResourceHistory
.
945 def list(self, filter, *args, timeout=None): 946 ''' 947 List gets a list of AccountResourceHistory records matching a given set of criteria. 948 ''' 949 deadline = None if timeout is None else time.time() + timeout 950 req = AccountResourceHistoryListRequest() 951 req.meta.CopyFrom(ListRequestMetadata()) 952 if self.parent.page_limit > 0: 953 req.meta.limit = self.parent.page_limit 954 if self.parent.snapshot_datetime is not None: 955 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 956 957 req.filter = plumbing.quote_filter_args(filter, *args) 958 959 def generator(svc, req): 960 tries = 0 961 while True: 962 t = None if deadline is None else deadline - time.time() 963 try: 964 plumbing_response = svc.stub.List( 965 req, 966 metadata=svc.parent.get_metadata( 967 'AccountResourcesHistory.List', req), 968 timeout=t) 969 except Exception as e: 970 if self.parent.shouldRetry(tries, e, deadline): 971 tries += 1 972 time.sleep( 973 self.parent.exponentialBackoff(tries, deadline)) 974 continue 975 raise plumbing.convert_error_to_porcelain(e) from e 976 tries = 0 977 for plumbing_item in plumbing_response.history: 978 yield plumbing.convert_account_resource_history_to_porcelain( 979 plumbing_item) 980 if plumbing_response.meta.next_cursor == '': 981 break 982 req.meta.cursor = plumbing_response.meta.next_cursor 983 984 return generator(self, req)
List gets a list of AccountResourceHistory records matching a given set of criteria.
987class Accounts: 988 ''' 989 Accounts are users that have access to strongDM. There are two types of accounts: 990 1. **Users:** humans who are authenticated through username and password or SSO. 991 2. **Service Accounts:** machines that are authenticated using a service token. 992 3. **Tokens** are access keys with permissions that can be used for authentication. 993 See: 994 `strongdm.models.Service` 995 `strongdm.models.Token` 996 `strongdm.models.User` 997 ''' 998 def __init__(self, channel, client): 999 self.parent = client 1000 self.stub = AccountsStub(channel) 1001 1002 def create(self, account, timeout=None): 1003 ''' 1004 Create registers a new Account. 1005 ''' 1006 deadline = None if timeout is None else time.time() + timeout 1007 req = AccountCreateRequest() 1008 1009 if account is not None: 1010 req.account.CopyFrom(plumbing.convert_account_to_plumbing(account)) 1011 tries = 0 1012 plumbing_response = None 1013 while True: 1014 t = None if deadline is None else deadline - time.time() 1015 try: 1016 plumbing_response = self.stub.Create( 1017 req, 1018 metadata=self.parent.get_metadata('Accounts.Create', req), 1019 timeout=t) 1020 except Exception as e: 1021 if self.parent.shouldRetry(tries, e, deadline): 1022 tries += 1 1023 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1024 continue 1025 raise plumbing.convert_error_to_porcelain(e) from e 1026 break 1027 1028 resp = models.AccountCreateResponse() 1029 resp.access_key = (plumbing_response.access_key) 1030 resp.account = plumbing.convert_account_to_porcelain( 1031 plumbing_response.account) 1032 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 1033 plumbing_response.meta) 1034 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1035 plumbing_response.rate_limit) 1036 resp.secret_key = (plumbing_response.secret_key) 1037 resp.token = (plumbing_response.token) 1038 return resp 1039 1040 def get(self, id, timeout=None): 1041 ''' 1042 Get reads one Account by ID. 1043 ''' 1044 deadline = None if timeout is None else time.time() + timeout 1045 req = AccountGetRequest() 1046 if self.parent.snapshot_datetime is not None: 1047 req.meta.CopyFrom(GetRequestMetadata()) 1048 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1049 1050 req.id = (id) 1051 tries = 0 1052 plumbing_response = None 1053 while True: 1054 t = None if deadline is None else deadline - time.time() 1055 try: 1056 plumbing_response = self.stub.Get( 1057 req, 1058 metadata=self.parent.get_metadata('Accounts.Get', req), 1059 timeout=t) 1060 except Exception as e: 1061 if self.parent.shouldRetry(tries, e, deadline): 1062 tries += 1 1063 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1064 continue 1065 raise plumbing.convert_error_to_porcelain(e) from e 1066 break 1067 1068 resp = models.AccountGetResponse() 1069 resp.account = plumbing.convert_account_to_porcelain( 1070 plumbing_response.account) 1071 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1072 plumbing_response.meta) 1073 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1074 plumbing_response.rate_limit) 1075 return resp 1076 1077 def update(self, account, timeout=None): 1078 ''' 1079 Update replaces all the fields of an Account by ID. 1080 ''' 1081 deadline = None if timeout is None else time.time() + timeout 1082 req = AccountUpdateRequest() 1083 1084 if account is not None: 1085 req.account.CopyFrom(plumbing.convert_account_to_plumbing(account)) 1086 tries = 0 1087 plumbing_response = None 1088 while True: 1089 t = None if deadline is None else deadline - time.time() 1090 try: 1091 plumbing_response = self.stub.Update( 1092 req, 1093 metadata=self.parent.get_metadata('Accounts.Update', req), 1094 timeout=t) 1095 except Exception as e: 1096 if self.parent.shouldRetry(tries, e, deadline): 1097 tries += 1 1098 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1099 continue 1100 raise plumbing.convert_error_to_porcelain(e) from e 1101 break 1102 1103 resp = models.AccountUpdateResponse() 1104 resp.account = plumbing.convert_account_to_porcelain( 1105 plumbing_response.account) 1106 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 1107 plumbing_response.meta) 1108 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1109 plumbing_response.rate_limit) 1110 return resp 1111 1112 def delete(self, id, timeout=None): 1113 ''' 1114 Delete removes an Account by ID. 1115 ''' 1116 deadline = None if timeout is None else time.time() + timeout 1117 req = AccountDeleteRequest() 1118 1119 req.id = (id) 1120 tries = 0 1121 plumbing_response = None 1122 while True: 1123 t = None if deadline is None else deadline - time.time() 1124 try: 1125 plumbing_response = self.stub.Delete( 1126 req, 1127 metadata=self.parent.get_metadata('Accounts.Delete', req), 1128 timeout=t) 1129 except Exception as e: 1130 if self.parent.shouldRetry(tries, e, deadline): 1131 tries += 1 1132 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1133 continue 1134 raise plumbing.convert_error_to_porcelain(e) from e 1135 break 1136 1137 resp = models.AccountDeleteResponse() 1138 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 1139 plumbing_response.meta) 1140 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1141 plumbing_response.rate_limit) 1142 return resp 1143 1144 def list(self, filter, *args, timeout=None): 1145 ''' 1146 List gets a list of Accounts matching a given set of criteria. 1147 ''' 1148 deadline = None if timeout is None else time.time() + timeout 1149 req = AccountListRequest() 1150 req.meta.CopyFrom(ListRequestMetadata()) 1151 if self.parent.page_limit > 0: 1152 req.meta.limit = self.parent.page_limit 1153 if self.parent.snapshot_datetime is not None: 1154 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1155 1156 req.filter = plumbing.quote_filter_args(filter, *args) 1157 1158 def generator(svc, req): 1159 tries = 0 1160 while True: 1161 t = None if deadline is None else deadline - time.time() 1162 try: 1163 plumbing_response = svc.stub.List( 1164 req, 1165 metadata=svc.parent.get_metadata('Accounts.List', req), 1166 timeout=t) 1167 except Exception as e: 1168 if self.parent.shouldRetry(tries, e, deadline): 1169 tries += 1 1170 time.sleep( 1171 self.parent.exponentialBackoff(tries, deadline)) 1172 continue 1173 raise plumbing.convert_error_to_porcelain(e) from e 1174 tries = 0 1175 for plumbing_item in plumbing_response.accounts: 1176 yield plumbing.convert_account_to_porcelain(plumbing_item) 1177 if plumbing_response.meta.next_cursor == '': 1178 break 1179 req.meta.cursor = plumbing_response.meta.next_cursor 1180 1181 return generator(self, req)
Accounts are users that have access to strongDM. There are two types of accounts:
- Users: humans who are authenticated through username and password or SSO.
- Service Accounts: machines that are authenticated using a service token.
- Tokens are access keys with permissions that can be used for authentication.
See:
strongdm.models.Service
strongdm.models.Token
strongdm.models.User
1002 def create(self, account, timeout=None): 1003 ''' 1004 Create registers a new Account. 1005 ''' 1006 deadline = None if timeout is None else time.time() + timeout 1007 req = AccountCreateRequest() 1008 1009 if account is not None: 1010 req.account.CopyFrom(plumbing.convert_account_to_plumbing(account)) 1011 tries = 0 1012 plumbing_response = None 1013 while True: 1014 t = None if deadline is None else deadline - time.time() 1015 try: 1016 plumbing_response = self.stub.Create( 1017 req, 1018 metadata=self.parent.get_metadata('Accounts.Create', req), 1019 timeout=t) 1020 except Exception as e: 1021 if self.parent.shouldRetry(tries, e, deadline): 1022 tries += 1 1023 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1024 continue 1025 raise plumbing.convert_error_to_porcelain(e) from e 1026 break 1027 1028 resp = models.AccountCreateResponse() 1029 resp.access_key = (plumbing_response.access_key) 1030 resp.account = plumbing.convert_account_to_porcelain( 1031 plumbing_response.account) 1032 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 1033 plumbing_response.meta) 1034 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1035 plumbing_response.rate_limit) 1036 resp.secret_key = (plumbing_response.secret_key) 1037 resp.token = (plumbing_response.token) 1038 return resp
Create registers a new Account.
1040 def get(self, id, timeout=None): 1041 ''' 1042 Get reads one Account by ID. 1043 ''' 1044 deadline = None if timeout is None else time.time() + timeout 1045 req = AccountGetRequest() 1046 if self.parent.snapshot_datetime is not None: 1047 req.meta.CopyFrom(GetRequestMetadata()) 1048 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1049 1050 req.id = (id) 1051 tries = 0 1052 plumbing_response = None 1053 while True: 1054 t = None if deadline is None else deadline - time.time() 1055 try: 1056 plumbing_response = self.stub.Get( 1057 req, 1058 metadata=self.parent.get_metadata('Accounts.Get', req), 1059 timeout=t) 1060 except Exception as e: 1061 if self.parent.shouldRetry(tries, e, deadline): 1062 tries += 1 1063 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1064 continue 1065 raise plumbing.convert_error_to_porcelain(e) from e 1066 break 1067 1068 resp = models.AccountGetResponse() 1069 resp.account = plumbing.convert_account_to_porcelain( 1070 plumbing_response.account) 1071 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1072 plumbing_response.meta) 1073 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1074 plumbing_response.rate_limit) 1075 return resp
Get reads one Account by ID.
1077 def update(self, account, timeout=None): 1078 ''' 1079 Update replaces all the fields of an Account by ID. 1080 ''' 1081 deadline = None if timeout is None else time.time() + timeout 1082 req = AccountUpdateRequest() 1083 1084 if account is not None: 1085 req.account.CopyFrom(plumbing.convert_account_to_plumbing(account)) 1086 tries = 0 1087 plumbing_response = None 1088 while True: 1089 t = None if deadline is None else deadline - time.time() 1090 try: 1091 plumbing_response = self.stub.Update( 1092 req, 1093 metadata=self.parent.get_metadata('Accounts.Update', req), 1094 timeout=t) 1095 except Exception as e: 1096 if self.parent.shouldRetry(tries, e, deadline): 1097 tries += 1 1098 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1099 continue 1100 raise plumbing.convert_error_to_porcelain(e) from e 1101 break 1102 1103 resp = models.AccountUpdateResponse() 1104 resp.account = plumbing.convert_account_to_porcelain( 1105 plumbing_response.account) 1106 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 1107 plumbing_response.meta) 1108 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1109 plumbing_response.rate_limit) 1110 return resp
Update replaces all the fields of an Account by ID.
1112 def delete(self, id, timeout=None): 1113 ''' 1114 Delete removes an Account by ID. 1115 ''' 1116 deadline = None if timeout is None else time.time() + timeout 1117 req = AccountDeleteRequest() 1118 1119 req.id = (id) 1120 tries = 0 1121 plumbing_response = None 1122 while True: 1123 t = None if deadline is None else deadline - time.time() 1124 try: 1125 plumbing_response = self.stub.Delete( 1126 req, 1127 metadata=self.parent.get_metadata('Accounts.Delete', req), 1128 timeout=t) 1129 except Exception as e: 1130 if self.parent.shouldRetry(tries, e, deadline): 1131 tries += 1 1132 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1133 continue 1134 raise plumbing.convert_error_to_porcelain(e) from e 1135 break 1136 1137 resp = models.AccountDeleteResponse() 1138 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 1139 plumbing_response.meta) 1140 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1141 plumbing_response.rate_limit) 1142 return resp
Delete removes an Account by ID.
1144 def list(self, filter, *args, timeout=None): 1145 ''' 1146 List gets a list of Accounts matching a given set of criteria. 1147 ''' 1148 deadline = None if timeout is None else time.time() + timeout 1149 req = AccountListRequest() 1150 req.meta.CopyFrom(ListRequestMetadata()) 1151 if self.parent.page_limit > 0: 1152 req.meta.limit = self.parent.page_limit 1153 if self.parent.snapshot_datetime is not None: 1154 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1155 1156 req.filter = plumbing.quote_filter_args(filter, *args) 1157 1158 def generator(svc, req): 1159 tries = 0 1160 while True: 1161 t = None if deadline is None else deadline - time.time() 1162 try: 1163 plumbing_response = svc.stub.List( 1164 req, 1165 metadata=svc.parent.get_metadata('Accounts.List', req), 1166 timeout=t) 1167 except Exception as e: 1168 if self.parent.shouldRetry(tries, e, deadline): 1169 tries += 1 1170 time.sleep( 1171 self.parent.exponentialBackoff(tries, deadline)) 1172 continue 1173 raise plumbing.convert_error_to_porcelain(e) from e 1174 tries = 0 1175 for plumbing_item in plumbing_response.accounts: 1176 yield plumbing.convert_account_to_porcelain(plumbing_item) 1177 if plumbing_response.meta.next_cursor == '': 1178 break 1179 req.meta.cursor = plumbing_response.meta.next_cursor 1180 1181 return generator(self, req)
List gets a list of Accounts matching a given set of criteria.
1184class SnapshotAccounts: 1185 ''' 1186 SnapshotAccounts exposes the read only methods of the Accounts 1187 service for historical queries. 1188 ''' 1189 def __init__(self, accounts): 1190 self.accounts = accounts 1191 1192 def get(self, id, timeout=None): 1193 ''' 1194 Get reads one Account by ID. 1195 ''' 1196 return self.accounts.get(id, timeout=timeout) 1197 1198 def list(self, filter, *args, timeout=None): 1199 ''' 1200 List gets a list of Accounts matching a given set of criteria. 1201 ''' 1202 return self.accounts.list(filter, *args, timeout=timeout)
SnapshotAccounts exposes the read only methods of the Accounts service for historical queries.
1192 def get(self, id, timeout=None): 1193 ''' 1194 Get reads one Account by ID. 1195 ''' 1196 return self.accounts.get(id, timeout=timeout)
Get reads one Account by ID.
1198 def list(self, filter, *args, timeout=None): 1199 ''' 1200 List gets a list of Accounts matching a given set of criteria. 1201 ''' 1202 return self.accounts.list(filter, *args, timeout=timeout)
List gets a list of Accounts matching a given set of criteria.
1205class AccountsHistory: 1206 ''' 1207 AccountsHistory records all changes to the state of an Account. 1208 See `strongdm.models.AccountHistory`. 1209 ''' 1210 def __init__(self, channel, client): 1211 self.parent = client 1212 self.stub = AccountsHistoryStub(channel) 1213 1214 def list(self, filter, *args, timeout=None): 1215 ''' 1216 List gets a list of AccountHistory records matching a given set of criteria. 1217 ''' 1218 deadline = None if timeout is None else time.time() + timeout 1219 req = AccountHistoryListRequest() 1220 req.meta.CopyFrom(ListRequestMetadata()) 1221 if self.parent.page_limit > 0: 1222 req.meta.limit = self.parent.page_limit 1223 if self.parent.snapshot_datetime is not None: 1224 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1225 1226 req.filter = plumbing.quote_filter_args(filter, *args) 1227 1228 def generator(svc, req): 1229 tries = 0 1230 while True: 1231 t = None if deadline is None else deadline - time.time() 1232 try: 1233 plumbing_response = svc.stub.List( 1234 req, 1235 metadata=svc.parent.get_metadata( 1236 'AccountsHistory.List', req), 1237 timeout=t) 1238 except Exception as e: 1239 if self.parent.shouldRetry(tries, e, deadline): 1240 tries += 1 1241 time.sleep( 1242 self.parent.exponentialBackoff(tries, deadline)) 1243 continue 1244 raise plumbing.convert_error_to_porcelain(e) from e 1245 tries = 0 1246 for plumbing_item in plumbing_response.history: 1247 yield plumbing.convert_account_history_to_porcelain( 1248 plumbing_item) 1249 if plumbing_response.meta.next_cursor == '': 1250 break 1251 req.meta.cursor = plumbing_response.meta.next_cursor 1252 1253 return generator(self, req)
AccountsHistory records all changes to the state of an Account.
See strongdm.models.AccountHistory
.
1214 def list(self, filter, *args, timeout=None): 1215 ''' 1216 List gets a list of AccountHistory records matching a given set of criteria. 1217 ''' 1218 deadline = None if timeout is None else time.time() + timeout 1219 req = AccountHistoryListRequest() 1220 req.meta.CopyFrom(ListRequestMetadata()) 1221 if self.parent.page_limit > 0: 1222 req.meta.limit = self.parent.page_limit 1223 if self.parent.snapshot_datetime is not None: 1224 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1225 1226 req.filter = plumbing.quote_filter_args(filter, *args) 1227 1228 def generator(svc, req): 1229 tries = 0 1230 while True: 1231 t = None if deadline is None else deadline - time.time() 1232 try: 1233 plumbing_response = svc.stub.List( 1234 req, 1235 metadata=svc.parent.get_metadata( 1236 'AccountsHistory.List', req), 1237 timeout=t) 1238 except Exception as e: 1239 if self.parent.shouldRetry(tries, e, deadline): 1240 tries += 1 1241 time.sleep( 1242 self.parent.exponentialBackoff(tries, deadline)) 1243 continue 1244 raise plumbing.convert_error_to_porcelain(e) from e 1245 tries = 0 1246 for plumbing_item in plumbing_response.history: 1247 yield plumbing.convert_account_history_to_porcelain( 1248 plumbing_item) 1249 if plumbing_response.meta.next_cursor == '': 1250 break 1251 req.meta.cursor = plumbing_response.meta.next_cursor 1252 1253 return generator(self, req)
List gets a list of AccountHistory records matching a given set of criteria.
1256class Activities: 1257 ''' 1258 An Activity is a record of an action taken against a strongDM deployment, e.g. 1259 a user creation, resource deletion, sso configuration change, etc. The Activities 1260 service is read-only. 1261 See `strongdm.models.Activity`. 1262 ''' 1263 def __init__(self, channel, client): 1264 self.parent = client 1265 self.stub = ActivitiesStub(channel) 1266 1267 def get(self, id, timeout=None): 1268 ''' 1269 Get reads one Activity by ID. 1270 ''' 1271 deadline = None if timeout is None else time.time() + timeout 1272 req = ActivityGetRequest() 1273 if self.parent.snapshot_datetime is not None: 1274 req.meta.CopyFrom(GetRequestMetadata()) 1275 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1276 1277 req.id = (id) 1278 tries = 0 1279 plumbing_response = None 1280 while True: 1281 t = None if deadline is None else deadline - time.time() 1282 try: 1283 plumbing_response = self.stub.Get( 1284 req, 1285 metadata=self.parent.get_metadata('Activities.Get', req), 1286 timeout=t) 1287 except Exception as e: 1288 if self.parent.shouldRetry(tries, e, deadline): 1289 tries += 1 1290 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1291 continue 1292 raise plumbing.convert_error_to_porcelain(e) from e 1293 break 1294 1295 resp = models.ActivityGetResponse() 1296 resp.activity = plumbing.convert_activity_to_porcelain( 1297 plumbing_response.activity) 1298 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1299 plumbing_response.meta) 1300 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1301 plumbing_response.rate_limit) 1302 return resp 1303 1304 def list(self, filter, *args, timeout=None): 1305 ''' 1306 List gets a list of Activities matching a given set of criteria. 1307 The 'before' and 'after' filters can be used to control the time 1308 range of the output activities. If not provided, one week of back 1309 of activities will be returned. 1310 ''' 1311 deadline = None if timeout is None else time.time() + timeout 1312 req = ActivityListRequest() 1313 req.meta.CopyFrom(ListRequestMetadata()) 1314 if self.parent.page_limit > 0: 1315 req.meta.limit = self.parent.page_limit 1316 if self.parent.snapshot_datetime is not None: 1317 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1318 1319 req.filter = plumbing.quote_filter_args(filter, *args) 1320 1321 def generator(svc, req): 1322 tries = 0 1323 while True: 1324 t = None if deadline is None else deadline - time.time() 1325 try: 1326 plumbing_response = svc.stub.List( 1327 req, 1328 metadata=svc.parent.get_metadata( 1329 'Activities.List', req), 1330 timeout=t) 1331 except Exception as e: 1332 if self.parent.shouldRetry(tries, e, deadline): 1333 tries += 1 1334 time.sleep( 1335 self.parent.exponentialBackoff(tries, deadline)) 1336 continue 1337 raise plumbing.convert_error_to_porcelain(e) from e 1338 tries = 0 1339 for plumbing_item in plumbing_response.activities: 1340 yield plumbing.convert_activity_to_porcelain(plumbing_item) 1341 if plumbing_response.meta.next_cursor == '': 1342 break 1343 req.meta.cursor = plumbing_response.meta.next_cursor 1344 1345 return generator(self, req)
An Activity is a record of an action taken against a strongDM deployment, e.g.
a user creation, resource deletion, sso configuration change, etc. The Activities
service is read-only.
See strongdm.models.Activity
.
1267 def get(self, id, timeout=None): 1268 ''' 1269 Get reads one Activity by ID. 1270 ''' 1271 deadline = None if timeout is None else time.time() + timeout 1272 req = ActivityGetRequest() 1273 if self.parent.snapshot_datetime is not None: 1274 req.meta.CopyFrom(GetRequestMetadata()) 1275 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1276 1277 req.id = (id) 1278 tries = 0 1279 plumbing_response = None 1280 while True: 1281 t = None if deadline is None else deadline - time.time() 1282 try: 1283 plumbing_response = self.stub.Get( 1284 req, 1285 metadata=self.parent.get_metadata('Activities.Get', req), 1286 timeout=t) 1287 except Exception as e: 1288 if self.parent.shouldRetry(tries, e, deadline): 1289 tries += 1 1290 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1291 continue 1292 raise plumbing.convert_error_to_porcelain(e) from e 1293 break 1294 1295 resp = models.ActivityGetResponse() 1296 resp.activity = plumbing.convert_activity_to_porcelain( 1297 plumbing_response.activity) 1298 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1299 plumbing_response.meta) 1300 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1301 plumbing_response.rate_limit) 1302 return resp
Get reads one Activity by ID.
1304 def list(self, filter, *args, timeout=None): 1305 ''' 1306 List gets a list of Activities matching a given set of criteria. 1307 The 'before' and 'after' filters can be used to control the time 1308 range of the output activities. If not provided, one week of back 1309 of activities will be returned. 1310 ''' 1311 deadline = None if timeout is None else time.time() + timeout 1312 req = ActivityListRequest() 1313 req.meta.CopyFrom(ListRequestMetadata()) 1314 if self.parent.page_limit > 0: 1315 req.meta.limit = self.parent.page_limit 1316 if self.parent.snapshot_datetime is not None: 1317 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1318 1319 req.filter = plumbing.quote_filter_args(filter, *args) 1320 1321 def generator(svc, req): 1322 tries = 0 1323 while True: 1324 t = None if deadline is None else deadline - time.time() 1325 try: 1326 plumbing_response = svc.stub.List( 1327 req, 1328 metadata=svc.parent.get_metadata( 1329 'Activities.List', req), 1330 timeout=t) 1331 except Exception as e: 1332 if self.parent.shouldRetry(tries, e, deadline): 1333 tries += 1 1334 time.sleep( 1335 self.parent.exponentialBackoff(tries, deadline)) 1336 continue 1337 raise plumbing.convert_error_to_porcelain(e) from e 1338 tries = 0 1339 for plumbing_item in plumbing_response.activities: 1340 yield plumbing.convert_activity_to_porcelain(plumbing_item) 1341 if plumbing_response.meta.next_cursor == '': 1342 break 1343 req.meta.cursor = plumbing_response.meta.next_cursor 1344 1345 return generator(self, req)
List gets a list of Activities matching a given set of criteria. The 'before' and 'after' filters can be used to control the time range of the output activities. If not provided, one week of back of activities will be returned.
1348class ApprovalWorkflowApprovers: 1349 ''' 1350 ApprovalWorkflowApprovers link approval workflow approvers to an ApprovalWorkflowStep 1351 See `strongdm.models.ApprovalWorkflowApprover`. 1352 ''' 1353 def __init__(self, channel, client): 1354 self.parent = client 1355 self.stub = ApprovalWorkflowApproversStub(channel) 1356 1357 def create(self, approval_workflow_approver, timeout=None): 1358 ''' 1359 Deprecated: Create creates a new approval workflow approver. 1360 ''' 1361 deadline = None if timeout is None else time.time() + timeout 1362 req = ApprovalWorkflowApproverCreateRequest() 1363 1364 if approval_workflow_approver is not None: 1365 req.approval_workflow_approver.CopyFrom( 1366 plumbing.convert_approval_workflow_approver_to_plumbing( 1367 approval_workflow_approver)) 1368 tries = 0 1369 plumbing_response = None 1370 while True: 1371 t = None if deadline is None else deadline - time.time() 1372 try: 1373 plumbing_response = self.stub.Create( 1374 req, 1375 metadata=self.parent.get_metadata( 1376 'ApprovalWorkflowApprovers.Create', req), 1377 timeout=t) 1378 except Exception as e: 1379 if self.parent.shouldRetry(tries, e, deadline): 1380 tries += 1 1381 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1382 continue 1383 raise plumbing.convert_error_to_porcelain(e) from e 1384 break 1385 1386 resp = models.ApprovalWorkflowApproverCreateResponse() 1387 resp.approval_workflow_approver = plumbing.convert_approval_workflow_approver_to_porcelain( 1388 plumbing_response.approval_workflow_approver) 1389 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1390 plumbing_response.rate_limit) 1391 return resp 1392 1393 def get(self, id, timeout=None): 1394 ''' 1395 Deprecated: Get reads one approval workflow approver by ID. 1396 ''' 1397 deadline = None if timeout is None else time.time() + timeout 1398 req = ApprovalWorkflowApproverGetRequest() 1399 if self.parent.snapshot_datetime is not None: 1400 req.meta.CopyFrom(GetRequestMetadata()) 1401 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1402 1403 req.id = (id) 1404 tries = 0 1405 plumbing_response = None 1406 while True: 1407 t = None if deadline is None else deadline - time.time() 1408 try: 1409 plumbing_response = self.stub.Get( 1410 req, 1411 metadata=self.parent.get_metadata( 1412 'ApprovalWorkflowApprovers.Get', req), 1413 timeout=t) 1414 except Exception as e: 1415 if self.parent.shouldRetry(tries, e, deadline): 1416 tries += 1 1417 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1418 continue 1419 raise plumbing.convert_error_to_porcelain(e) from e 1420 break 1421 1422 resp = models.ApprovalWorkflowApproverGetResponse() 1423 resp.approval_workflow_approver = plumbing.convert_approval_workflow_approver_to_porcelain( 1424 plumbing_response.approval_workflow_approver) 1425 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1426 plumbing_response.meta) 1427 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1428 plumbing_response.rate_limit) 1429 return resp 1430 1431 def delete(self, id, timeout=None): 1432 ''' 1433 Deprecated: Delete deletes an existing approval workflow approver. 1434 ''' 1435 deadline = None if timeout is None else time.time() + timeout 1436 req = ApprovalWorkflowApproverDeleteRequest() 1437 1438 req.id = (id) 1439 tries = 0 1440 plumbing_response = None 1441 while True: 1442 t = None if deadline is None else deadline - time.time() 1443 try: 1444 plumbing_response = self.stub.Delete( 1445 req, 1446 metadata=self.parent.get_metadata( 1447 'ApprovalWorkflowApprovers.Delete', req), 1448 timeout=t) 1449 except Exception as e: 1450 if self.parent.shouldRetry(tries, e, deadline): 1451 tries += 1 1452 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1453 continue 1454 raise plumbing.convert_error_to_porcelain(e) from e 1455 break 1456 1457 resp = models.ApprovalWorkflowApproverDeleteResponse() 1458 resp.id = (plumbing_response.id) 1459 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1460 plumbing_response.rate_limit) 1461 return resp 1462 1463 def list(self, filter, *args, timeout=None): 1464 ''' 1465 Deprecated: Lists existing approval workflow approvers. 1466 ''' 1467 deadline = None if timeout is None else time.time() + timeout 1468 req = ApprovalWorkflowApproverListRequest() 1469 req.meta.CopyFrom(ListRequestMetadata()) 1470 if self.parent.page_limit > 0: 1471 req.meta.limit = self.parent.page_limit 1472 if self.parent.snapshot_datetime is not None: 1473 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1474 1475 req.filter = plumbing.quote_filter_args(filter, *args) 1476 1477 def generator(svc, req): 1478 tries = 0 1479 while True: 1480 t = None if deadline is None else deadline - time.time() 1481 try: 1482 plumbing_response = svc.stub.List( 1483 req, 1484 metadata=svc.parent.get_metadata( 1485 'ApprovalWorkflowApprovers.List', req), 1486 timeout=t) 1487 except Exception as e: 1488 if self.parent.shouldRetry(tries, e, deadline): 1489 tries += 1 1490 time.sleep( 1491 self.parent.exponentialBackoff(tries, deadline)) 1492 continue 1493 raise plumbing.convert_error_to_porcelain(e) from e 1494 tries = 0 1495 for plumbing_item in plumbing_response.approval_workflow_approvers: 1496 yield plumbing.convert_approval_workflow_approver_to_porcelain( 1497 plumbing_item) 1498 if plumbing_response.meta.next_cursor == '': 1499 break 1500 req.meta.cursor = plumbing_response.meta.next_cursor 1501 1502 return generator(self, req)
ApprovalWorkflowApprovers link approval workflow approvers to an ApprovalWorkflowStep
See strongdm.models.ApprovalWorkflowApprover
.
1357 def create(self, approval_workflow_approver, timeout=None): 1358 ''' 1359 Deprecated: Create creates a new approval workflow approver. 1360 ''' 1361 deadline = None if timeout is None else time.time() + timeout 1362 req = ApprovalWorkflowApproverCreateRequest() 1363 1364 if approval_workflow_approver is not None: 1365 req.approval_workflow_approver.CopyFrom( 1366 plumbing.convert_approval_workflow_approver_to_plumbing( 1367 approval_workflow_approver)) 1368 tries = 0 1369 plumbing_response = None 1370 while True: 1371 t = None if deadline is None else deadline - time.time() 1372 try: 1373 plumbing_response = self.stub.Create( 1374 req, 1375 metadata=self.parent.get_metadata( 1376 'ApprovalWorkflowApprovers.Create', req), 1377 timeout=t) 1378 except Exception as e: 1379 if self.parent.shouldRetry(tries, e, deadline): 1380 tries += 1 1381 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1382 continue 1383 raise plumbing.convert_error_to_porcelain(e) from e 1384 break 1385 1386 resp = models.ApprovalWorkflowApproverCreateResponse() 1387 resp.approval_workflow_approver = plumbing.convert_approval_workflow_approver_to_porcelain( 1388 plumbing_response.approval_workflow_approver) 1389 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1390 plumbing_response.rate_limit) 1391 return resp
Deprecated: Create creates a new approval workflow approver.
1393 def get(self, id, timeout=None): 1394 ''' 1395 Deprecated: Get reads one approval workflow approver by ID. 1396 ''' 1397 deadline = None if timeout is None else time.time() + timeout 1398 req = ApprovalWorkflowApproverGetRequest() 1399 if self.parent.snapshot_datetime is not None: 1400 req.meta.CopyFrom(GetRequestMetadata()) 1401 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1402 1403 req.id = (id) 1404 tries = 0 1405 plumbing_response = None 1406 while True: 1407 t = None if deadline is None else deadline - time.time() 1408 try: 1409 plumbing_response = self.stub.Get( 1410 req, 1411 metadata=self.parent.get_metadata( 1412 'ApprovalWorkflowApprovers.Get', req), 1413 timeout=t) 1414 except Exception as e: 1415 if self.parent.shouldRetry(tries, e, deadline): 1416 tries += 1 1417 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1418 continue 1419 raise plumbing.convert_error_to_porcelain(e) from e 1420 break 1421 1422 resp = models.ApprovalWorkflowApproverGetResponse() 1423 resp.approval_workflow_approver = plumbing.convert_approval_workflow_approver_to_porcelain( 1424 plumbing_response.approval_workflow_approver) 1425 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1426 plumbing_response.meta) 1427 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1428 plumbing_response.rate_limit) 1429 return resp
Deprecated: Get reads one approval workflow approver by ID.
1431 def delete(self, id, timeout=None): 1432 ''' 1433 Deprecated: Delete deletes an existing approval workflow approver. 1434 ''' 1435 deadline = None if timeout is None else time.time() + timeout 1436 req = ApprovalWorkflowApproverDeleteRequest() 1437 1438 req.id = (id) 1439 tries = 0 1440 plumbing_response = None 1441 while True: 1442 t = None if deadline is None else deadline - time.time() 1443 try: 1444 plumbing_response = self.stub.Delete( 1445 req, 1446 metadata=self.parent.get_metadata( 1447 'ApprovalWorkflowApprovers.Delete', req), 1448 timeout=t) 1449 except Exception as e: 1450 if self.parent.shouldRetry(tries, e, deadline): 1451 tries += 1 1452 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1453 continue 1454 raise plumbing.convert_error_to_porcelain(e) from e 1455 break 1456 1457 resp = models.ApprovalWorkflowApproverDeleteResponse() 1458 resp.id = (plumbing_response.id) 1459 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1460 plumbing_response.rate_limit) 1461 return resp
Deprecated: Delete deletes an existing approval workflow approver.
1463 def list(self, filter, *args, timeout=None): 1464 ''' 1465 Deprecated: Lists existing approval workflow approvers. 1466 ''' 1467 deadline = None if timeout is None else time.time() + timeout 1468 req = ApprovalWorkflowApproverListRequest() 1469 req.meta.CopyFrom(ListRequestMetadata()) 1470 if self.parent.page_limit > 0: 1471 req.meta.limit = self.parent.page_limit 1472 if self.parent.snapshot_datetime is not None: 1473 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1474 1475 req.filter = plumbing.quote_filter_args(filter, *args) 1476 1477 def generator(svc, req): 1478 tries = 0 1479 while True: 1480 t = None if deadline is None else deadline - time.time() 1481 try: 1482 plumbing_response = svc.stub.List( 1483 req, 1484 metadata=svc.parent.get_metadata( 1485 'ApprovalWorkflowApprovers.List', req), 1486 timeout=t) 1487 except Exception as e: 1488 if self.parent.shouldRetry(tries, e, deadline): 1489 tries += 1 1490 time.sleep( 1491 self.parent.exponentialBackoff(tries, deadline)) 1492 continue 1493 raise plumbing.convert_error_to_porcelain(e) from e 1494 tries = 0 1495 for plumbing_item in plumbing_response.approval_workflow_approvers: 1496 yield plumbing.convert_approval_workflow_approver_to_porcelain( 1497 plumbing_item) 1498 if plumbing_response.meta.next_cursor == '': 1499 break 1500 req.meta.cursor = plumbing_response.meta.next_cursor 1501 1502 return generator(self, req)
Deprecated: Lists existing approval workflow approvers.
1505class SnapshotApprovalWorkflowApprovers: 1506 ''' 1507 SnapshotApprovalWorkflowApprovers exposes the read only methods of the ApprovalWorkflowApprovers 1508 service for historical queries. 1509 ''' 1510 def __init__(self, approval_workflow_approvers): 1511 self.approval_workflow_approvers = approval_workflow_approvers 1512 1513 def get(self, id, timeout=None): 1514 ''' 1515 Deprecated: Get reads one approval workflow approver by ID. 1516 ''' 1517 return self.approval_workflow_approvers.get(id, timeout=timeout) 1518 1519 def list(self, filter, *args, timeout=None): 1520 ''' 1521 Deprecated: Lists existing approval workflow approvers. 1522 ''' 1523 return self.approval_workflow_approvers.list(filter, 1524 *args, 1525 timeout=timeout)
SnapshotApprovalWorkflowApprovers exposes the read only methods of the ApprovalWorkflowApprovers service for historical queries.
1513 def get(self, id, timeout=None): 1514 ''' 1515 Deprecated: Get reads one approval workflow approver by ID. 1516 ''' 1517 return self.approval_workflow_approvers.get(id, timeout=timeout)
Deprecated: Get reads one approval workflow approver by ID.
1519 def list(self, filter, *args, timeout=None): 1520 ''' 1521 Deprecated: Lists existing approval workflow approvers. 1522 ''' 1523 return self.approval_workflow_approvers.list(filter, 1524 *args, 1525 timeout=timeout)
Deprecated: Lists existing approval workflow approvers.
1528class ApprovalWorkflowApproversHistory: 1529 ''' 1530 ApprovalWorkflowApproversHistory records all changes to the state of an ApprovalWorkflowApprover. 1531 See `strongdm.models.ApprovalWorkflowApproverHistory`. 1532 ''' 1533 def __init__(self, channel, client): 1534 self.parent = client 1535 self.stub = ApprovalWorkflowApproversHistoryStub(channel) 1536 1537 def list(self, filter, *args, timeout=None): 1538 ''' 1539 List gets a list of ApprovalWorkflowApproverHistory records matching a given set of criteria. 1540 ''' 1541 deadline = None if timeout is None else time.time() + timeout 1542 req = ApprovalWorkflowApproverHistoryListRequest() 1543 req.meta.CopyFrom(ListRequestMetadata()) 1544 if self.parent.page_limit > 0: 1545 req.meta.limit = self.parent.page_limit 1546 if self.parent.snapshot_datetime is not None: 1547 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1548 1549 req.filter = plumbing.quote_filter_args(filter, *args) 1550 1551 def generator(svc, req): 1552 tries = 0 1553 while True: 1554 t = None if deadline is None else deadline - time.time() 1555 try: 1556 plumbing_response = svc.stub.List( 1557 req, 1558 metadata=svc.parent.get_metadata( 1559 'ApprovalWorkflowApproversHistory.List', req), 1560 timeout=t) 1561 except Exception as e: 1562 if self.parent.shouldRetry(tries, e, deadline): 1563 tries += 1 1564 time.sleep( 1565 self.parent.exponentialBackoff(tries, deadline)) 1566 continue 1567 raise plumbing.convert_error_to_porcelain(e) from e 1568 tries = 0 1569 for plumbing_item in plumbing_response.history: 1570 yield plumbing.convert_approval_workflow_approver_history_to_porcelain( 1571 plumbing_item) 1572 if plumbing_response.meta.next_cursor == '': 1573 break 1574 req.meta.cursor = plumbing_response.meta.next_cursor 1575 1576 return generator(self, req)
ApprovalWorkflowApproversHistory records all changes to the state of an ApprovalWorkflowApprover.
See strongdm.models.ApprovalWorkflowApproverHistory
.
1537 def list(self, filter, *args, timeout=None): 1538 ''' 1539 List gets a list of ApprovalWorkflowApproverHistory records matching a given set of criteria. 1540 ''' 1541 deadline = None if timeout is None else time.time() + timeout 1542 req = ApprovalWorkflowApproverHistoryListRequest() 1543 req.meta.CopyFrom(ListRequestMetadata()) 1544 if self.parent.page_limit > 0: 1545 req.meta.limit = self.parent.page_limit 1546 if self.parent.snapshot_datetime is not None: 1547 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1548 1549 req.filter = plumbing.quote_filter_args(filter, *args) 1550 1551 def generator(svc, req): 1552 tries = 0 1553 while True: 1554 t = None if deadline is None else deadline - time.time() 1555 try: 1556 plumbing_response = svc.stub.List( 1557 req, 1558 metadata=svc.parent.get_metadata( 1559 'ApprovalWorkflowApproversHistory.List', req), 1560 timeout=t) 1561 except Exception as e: 1562 if self.parent.shouldRetry(tries, e, deadline): 1563 tries += 1 1564 time.sleep( 1565 self.parent.exponentialBackoff(tries, deadline)) 1566 continue 1567 raise plumbing.convert_error_to_porcelain(e) from e 1568 tries = 0 1569 for plumbing_item in plumbing_response.history: 1570 yield plumbing.convert_approval_workflow_approver_history_to_porcelain( 1571 plumbing_item) 1572 if plumbing_response.meta.next_cursor == '': 1573 break 1574 req.meta.cursor = plumbing_response.meta.next_cursor 1575 1576 return generator(self, req)
List gets a list of ApprovalWorkflowApproverHistory records matching a given set of criteria.
1579class ApprovalWorkflowSteps: 1580 ''' 1581 ApprovalWorkflowSteps link approval workflow steps to an ApprovalWorkflow 1582 See `strongdm.models.ApprovalWorkflowStep`. 1583 ''' 1584 def __init__(self, channel, client): 1585 self.parent = client 1586 self.stub = ApprovalWorkflowStepsStub(channel) 1587 1588 def create(self, approval_workflow_step, timeout=None): 1589 ''' 1590 Deprecated: Create creates a new approval workflow step. 1591 ''' 1592 deadline = None if timeout is None else time.time() + timeout 1593 req = ApprovalWorkflowStepCreateRequest() 1594 1595 if approval_workflow_step is not None: 1596 req.approval_workflow_step.CopyFrom( 1597 plumbing.convert_approval_workflow_step_to_plumbing( 1598 approval_workflow_step)) 1599 tries = 0 1600 plumbing_response = None 1601 while True: 1602 t = None if deadline is None else deadline - time.time() 1603 try: 1604 plumbing_response = self.stub.Create( 1605 req, 1606 metadata=self.parent.get_metadata( 1607 'ApprovalWorkflowSteps.Create', req), 1608 timeout=t) 1609 except Exception as e: 1610 if self.parent.shouldRetry(tries, e, deadline): 1611 tries += 1 1612 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1613 continue 1614 raise plumbing.convert_error_to_porcelain(e) from e 1615 break 1616 1617 resp = models.ApprovalWorkflowStepCreateResponse() 1618 resp.approval_workflow_step = plumbing.convert_approval_workflow_step_to_porcelain( 1619 plumbing_response.approval_workflow_step) 1620 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1621 plumbing_response.rate_limit) 1622 return resp 1623 1624 def get(self, id, timeout=None): 1625 ''' 1626 Deprecated: Get reads one approval workflow step by ID. 1627 ''' 1628 deadline = None if timeout is None else time.time() + timeout 1629 req = ApprovalWorkflowStepGetRequest() 1630 if self.parent.snapshot_datetime is not None: 1631 req.meta.CopyFrom(GetRequestMetadata()) 1632 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1633 1634 req.id = (id) 1635 tries = 0 1636 plumbing_response = None 1637 while True: 1638 t = None if deadline is None else deadline - time.time() 1639 try: 1640 plumbing_response = self.stub.Get( 1641 req, 1642 metadata=self.parent.get_metadata( 1643 'ApprovalWorkflowSteps.Get', req), 1644 timeout=t) 1645 except Exception as e: 1646 if self.parent.shouldRetry(tries, e, deadline): 1647 tries += 1 1648 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1649 continue 1650 raise plumbing.convert_error_to_porcelain(e) from e 1651 break 1652 1653 resp = models.ApprovalWorkflowStepGetResponse() 1654 resp.approval_workflow_step = plumbing.convert_approval_workflow_step_to_porcelain( 1655 plumbing_response.approval_workflow_step) 1656 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1657 plumbing_response.meta) 1658 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1659 plumbing_response.rate_limit) 1660 return resp 1661 1662 def delete(self, id, timeout=None): 1663 ''' 1664 Deprecated: Delete deletes an existing approval workflow step. 1665 ''' 1666 deadline = None if timeout is None else time.time() + timeout 1667 req = ApprovalWorkflowStepDeleteRequest() 1668 1669 req.id = (id) 1670 tries = 0 1671 plumbing_response = None 1672 while True: 1673 t = None if deadline is None else deadline - time.time() 1674 try: 1675 plumbing_response = self.stub.Delete( 1676 req, 1677 metadata=self.parent.get_metadata( 1678 'ApprovalWorkflowSteps.Delete', req), 1679 timeout=t) 1680 except Exception as e: 1681 if self.parent.shouldRetry(tries, e, deadline): 1682 tries += 1 1683 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1684 continue 1685 raise plumbing.convert_error_to_porcelain(e) from e 1686 break 1687 1688 resp = models.ApprovalWorkflowStepDeleteResponse() 1689 resp.id = (plumbing_response.id) 1690 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1691 plumbing_response.rate_limit) 1692 return resp 1693 1694 def list(self, filter, *args, timeout=None): 1695 ''' 1696 Deprecated: Lists existing approval workflow steps. 1697 ''' 1698 deadline = None if timeout is None else time.time() + timeout 1699 req = ApprovalWorkflowStepListRequest() 1700 req.meta.CopyFrom(ListRequestMetadata()) 1701 if self.parent.page_limit > 0: 1702 req.meta.limit = self.parent.page_limit 1703 if self.parent.snapshot_datetime is not None: 1704 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1705 1706 req.filter = plumbing.quote_filter_args(filter, *args) 1707 1708 def generator(svc, req): 1709 tries = 0 1710 while True: 1711 t = None if deadline is None else deadline - time.time() 1712 try: 1713 plumbing_response = svc.stub.List( 1714 req, 1715 metadata=svc.parent.get_metadata( 1716 'ApprovalWorkflowSteps.List', req), 1717 timeout=t) 1718 except Exception as e: 1719 if self.parent.shouldRetry(tries, e, deadline): 1720 tries += 1 1721 time.sleep( 1722 self.parent.exponentialBackoff(tries, deadline)) 1723 continue 1724 raise plumbing.convert_error_to_porcelain(e) from e 1725 tries = 0 1726 for plumbing_item in plumbing_response.approval_workflow_steps: 1727 yield plumbing.convert_approval_workflow_step_to_porcelain( 1728 plumbing_item) 1729 if plumbing_response.meta.next_cursor == '': 1730 break 1731 req.meta.cursor = plumbing_response.meta.next_cursor 1732 1733 return generator(self, req)
ApprovalWorkflowSteps link approval workflow steps to an ApprovalWorkflow
See strongdm.models.ApprovalWorkflowStep
.
1588 def create(self, approval_workflow_step, timeout=None): 1589 ''' 1590 Deprecated: Create creates a new approval workflow step. 1591 ''' 1592 deadline = None if timeout is None else time.time() + timeout 1593 req = ApprovalWorkflowStepCreateRequest() 1594 1595 if approval_workflow_step is not None: 1596 req.approval_workflow_step.CopyFrom( 1597 plumbing.convert_approval_workflow_step_to_plumbing( 1598 approval_workflow_step)) 1599 tries = 0 1600 plumbing_response = None 1601 while True: 1602 t = None if deadline is None else deadline - time.time() 1603 try: 1604 plumbing_response = self.stub.Create( 1605 req, 1606 metadata=self.parent.get_metadata( 1607 'ApprovalWorkflowSteps.Create', req), 1608 timeout=t) 1609 except Exception as e: 1610 if self.parent.shouldRetry(tries, e, deadline): 1611 tries += 1 1612 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1613 continue 1614 raise plumbing.convert_error_to_porcelain(e) from e 1615 break 1616 1617 resp = models.ApprovalWorkflowStepCreateResponse() 1618 resp.approval_workflow_step = plumbing.convert_approval_workflow_step_to_porcelain( 1619 plumbing_response.approval_workflow_step) 1620 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1621 plumbing_response.rate_limit) 1622 return resp
Deprecated: Create creates a new approval workflow step.
1624 def get(self, id, timeout=None): 1625 ''' 1626 Deprecated: Get reads one approval workflow step by ID. 1627 ''' 1628 deadline = None if timeout is None else time.time() + timeout 1629 req = ApprovalWorkflowStepGetRequest() 1630 if self.parent.snapshot_datetime is not None: 1631 req.meta.CopyFrom(GetRequestMetadata()) 1632 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1633 1634 req.id = (id) 1635 tries = 0 1636 plumbing_response = None 1637 while True: 1638 t = None if deadline is None else deadline - time.time() 1639 try: 1640 plumbing_response = self.stub.Get( 1641 req, 1642 metadata=self.parent.get_metadata( 1643 'ApprovalWorkflowSteps.Get', req), 1644 timeout=t) 1645 except Exception as e: 1646 if self.parent.shouldRetry(tries, e, deadline): 1647 tries += 1 1648 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1649 continue 1650 raise plumbing.convert_error_to_porcelain(e) from e 1651 break 1652 1653 resp = models.ApprovalWorkflowStepGetResponse() 1654 resp.approval_workflow_step = plumbing.convert_approval_workflow_step_to_porcelain( 1655 plumbing_response.approval_workflow_step) 1656 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1657 plumbing_response.meta) 1658 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1659 plumbing_response.rate_limit) 1660 return resp
Deprecated: Get reads one approval workflow step by ID.
1662 def delete(self, id, timeout=None): 1663 ''' 1664 Deprecated: Delete deletes an existing approval workflow step. 1665 ''' 1666 deadline = None if timeout is None else time.time() + timeout 1667 req = ApprovalWorkflowStepDeleteRequest() 1668 1669 req.id = (id) 1670 tries = 0 1671 plumbing_response = None 1672 while True: 1673 t = None if deadline is None else deadline - time.time() 1674 try: 1675 plumbing_response = self.stub.Delete( 1676 req, 1677 metadata=self.parent.get_metadata( 1678 'ApprovalWorkflowSteps.Delete', req), 1679 timeout=t) 1680 except Exception as e: 1681 if self.parent.shouldRetry(tries, e, deadline): 1682 tries += 1 1683 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1684 continue 1685 raise plumbing.convert_error_to_porcelain(e) from e 1686 break 1687 1688 resp = models.ApprovalWorkflowStepDeleteResponse() 1689 resp.id = (plumbing_response.id) 1690 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1691 plumbing_response.rate_limit) 1692 return resp
Deprecated: Delete deletes an existing approval workflow step.
1694 def list(self, filter, *args, timeout=None): 1695 ''' 1696 Deprecated: Lists existing approval workflow steps. 1697 ''' 1698 deadline = None if timeout is None else time.time() + timeout 1699 req = ApprovalWorkflowStepListRequest() 1700 req.meta.CopyFrom(ListRequestMetadata()) 1701 if self.parent.page_limit > 0: 1702 req.meta.limit = self.parent.page_limit 1703 if self.parent.snapshot_datetime is not None: 1704 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1705 1706 req.filter = plumbing.quote_filter_args(filter, *args) 1707 1708 def generator(svc, req): 1709 tries = 0 1710 while True: 1711 t = None if deadline is None else deadline - time.time() 1712 try: 1713 plumbing_response = svc.stub.List( 1714 req, 1715 metadata=svc.parent.get_metadata( 1716 'ApprovalWorkflowSteps.List', req), 1717 timeout=t) 1718 except Exception as e: 1719 if self.parent.shouldRetry(tries, e, deadline): 1720 tries += 1 1721 time.sleep( 1722 self.parent.exponentialBackoff(tries, deadline)) 1723 continue 1724 raise plumbing.convert_error_to_porcelain(e) from e 1725 tries = 0 1726 for plumbing_item in plumbing_response.approval_workflow_steps: 1727 yield plumbing.convert_approval_workflow_step_to_porcelain( 1728 plumbing_item) 1729 if plumbing_response.meta.next_cursor == '': 1730 break 1731 req.meta.cursor = plumbing_response.meta.next_cursor 1732 1733 return generator(self, req)
Deprecated: Lists existing approval workflow steps.
1736class SnapshotApprovalWorkflowSteps: 1737 ''' 1738 SnapshotApprovalWorkflowSteps exposes the read only methods of the ApprovalWorkflowSteps 1739 service for historical queries. 1740 ''' 1741 def __init__(self, approval_workflow_steps): 1742 self.approval_workflow_steps = approval_workflow_steps 1743 1744 def get(self, id, timeout=None): 1745 ''' 1746 Deprecated: Get reads one approval workflow step by ID. 1747 ''' 1748 return self.approval_workflow_steps.get(id, timeout=timeout) 1749 1750 def list(self, filter, *args, timeout=None): 1751 ''' 1752 Deprecated: Lists existing approval workflow steps. 1753 ''' 1754 return self.approval_workflow_steps.list(filter, 1755 *args, 1756 timeout=timeout)
SnapshotApprovalWorkflowSteps exposes the read only methods of the ApprovalWorkflowSteps service for historical queries.
1744 def get(self, id, timeout=None): 1745 ''' 1746 Deprecated: Get reads one approval workflow step by ID. 1747 ''' 1748 return self.approval_workflow_steps.get(id, timeout=timeout)
Deprecated: Get reads one approval workflow step by ID.
1750 def list(self, filter, *args, timeout=None): 1751 ''' 1752 Deprecated: Lists existing approval workflow steps. 1753 ''' 1754 return self.approval_workflow_steps.list(filter, 1755 *args, 1756 timeout=timeout)
Deprecated: Lists existing approval workflow steps.
1759class ApprovalWorkflowStepsHistory: 1760 ''' 1761 ApprovalWorkflowStepsHistory records all changes to the state of an ApprovalWorkflowStep. 1762 See `strongdm.models.ApprovalWorkflowStepHistory`. 1763 ''' 1764 def __init__(self, channel, client): 1765 self.parent = client 1766 self.stub = ApprovalWorkflowStepsHistoryStub(channel) 1767 1768 def list(self, filter, *args, timeout=None): 1769 ''' 1770 List gets a list of ApprovalWorkflowStepHistory records matching a given set of criteria. 1771 ''' 1772 deadline = None if timeout is None else time.time() + timeout 1773 req = ApprovalWorkflowStepHistoryListRequest() 1774 req.meta.CopyFrom(ListRequestMetadata()) 1775 if self.parent.page_limit > 0: 1776 req.meta.limit = self.parent.page_limit 1777 if self.parent.snapshot_datetime is not None: 1778 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1779 1780 req.filter = plumbing.quote_filter_args(filter, *args) 1781 1782 def generator(svc, req): 1783 tries = 0 1784 while True: 1785 t = None if deadline is None else deadline - time.time() 1786 try: 1787 plumbing_response = svc.stub.List( 1788 req, 1789 metadata=svc.parent.get_metadata( 1790 'ApprovalWorkflowStepsHistory.List', req), 1791 timeout=t) 1792 except Exception as e: 1793 if self.parent.shouldRetry(tries, e, deadline): 1794 tries += 1 1795 time.sleep( 1796 self.parent.exponentialBackoff(tries, deadline)) 1797 continue 1798 raise plumbing.convert_error_to_porcelain(e) from e 1799 tries = 0 1800 for plumbing_item in plumbing_response.history: 1801 yield plumbing.convert_approval_workflow_step_history_to_porcelain( 1802 plumbing_item) 1803 if plumbing_response.meta.next_cursor == '': 1804 break 1805 req.meta.cursor = plumbing_response.meta.next_cursor 1806 1807 return generator(self, req)
ApprovalWorkflowStepsHistory records all changes to the state of an ApprovalWorkflowStep.
See strongdm.models.ApprovalWorkflowStepHistory
.
1768 def list(self, filter, *args, timeout=None): 1769 ''' 1770 List gets a list of ApprovalWorkflowStepHistory records matching a given set of criteria. 1771 ''' 1772 deadline = None if timeout is None else time.time() + timeout 1773 req = ApprovalWorkflowStepHistoryListRequest() 1774 req.meta.CopyFrom(ListRequestMetadata()) 1775 if self.parent.page_limit > 0: 1776 req.meta.limit = self.parent.page_limit 1777 if self.parent.snapshot_datetime is not None: 1778 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1779 1780 req.filter = plumbing.quote_filter_args(filter, *args) 1781 1782 def generator(svc, req): 1783 tries = 0 1784 while True: 1785 t = None if deadline is None else deadline - time.time() 1786 try: 1787 plumbing_response = svc.stub.List( 1788 req, 1789 metadata=svc.parent.get_metadata( 1790 'ApprovalWorkflowStepsHistory.List', req), 1791 timeout=t) 1792 except Exception as e: 1793 if self.parent.shouldRetry(tries, e, deadline): 1794 tries += 1 1795 time.sleep( 1796 self.parent.exponentialBackoff(tries, deadline)) 1797 continue 1798 raise plumbing.convert_error_to_porcelain(e) from e 1799 tries = 0 1800 for plumbing_item in plumbing_response.history: 1801 yield plumbing.convert_approval_workflow_step_history_to_porcelain( 1802 plumbing_item) 1803 if plumbing_response.meta.next_cursor == '': 1804 break 1805 req.meta.cursor = plumbing_response.meta.next_cursor 1806 1807 return generator(self, req)
List gets a list of ApprovalWorkflowStepHistory records matching a given set of criteria.
1810class ApprovalWorkflows: 1811 ''' 1812 ApprovalWorkflows are the mechanism by which requests for access can be viewed by authorized 1813 approvers and be approved or denied. 1814 See `strongdm.models.ApprovalWorkflow`. 1815 ''' 1816 def __init__(self, channel, client): 1817 self.parent = client 1818 self.stub = ApprovalWorkflowsStub(channel) 1819 1820 def create(self, approval_workflow, timeout=None): 1821 ''' 1822 Create creates a new approval workflow and requires a name and approval mode for the approval workflow. 1823 ''' 1824 deadline = None if timeout is None else time.time() + timeout 1825 req = ApprovalWorkflowCreateRequest() 1826 1827 if approval_workflow is not None: 1828 req.approval_workflow.CopyFrom( 1829 plumbing.convert_approval_workflow_to_plumbing( 1830 approval_workflow)) 1831 tries = 0 1832 plumbing_response = None 1833 while True: 1834 t = None if deadline is None else deadline - time.time() 1835 try: 1836 plumbing_response = self.stub.Create( 1837 req, 1838 metadata=self.parent.get_metadata( 1839 'ApprovalWorkflows.Create', req), 1840 timeout=t) 1841 except Exception as e: 1842 if self.parent.shouldRetry(tries, e, deadline): 1843 tries += 1 1844 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1845 continue 1846 raise plumbing.convert_error_to_porcelain(e) from e 1847 break 1848 1849 resp = models.ApprovalWorkflowCreateResponse() 1850 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1851 plumbing_response.approval_workflow) 1852 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1853 plumbing_response.rate_limit) 1854 return resp 1855 1856 def get(self, id, timeout=None): 1857 ''' 1858 Get reads one approval workflow by ID. 1859 ''' 1860 deadline = None if timeout is None else time.time() + timeout 1861 req = ApprovalWorkflowGetRequest() 1862 if self.parent.snapshot_datetime is not None: 1863 req.meta.CopyFrom(GetRequestMetadata()) 1864 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1865 1866 req.id = (id) 1867 tries = 0 1868 plumbing_response = None 1869 while True: 1870 t = None if deadline is None else deadline - time.time() 1871 try: 1872 plumbing_response = self.stub.Get( 1873 req, 1874 metadata=self.parent.get_metadata('ApprovalWorkflows.Get', 1875 req), 1876 timeout=t) 1877 except Exception as e: 1878 if self.parent.shouldRetry(tries, e, deadline): 1879 tries += 1 1880 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1881 continue 1882 raise plumbing.convert_error_to_porcelain(e) from e 1883 break 1884 1885 resp = models.ApprovalWorkflowGetResponse() 1886 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1887 plumbing_response.approval_workflow) 1888 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1889 plumbing_response.meta) 1890 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1891 plumbing_response.rate_limit) 1892 return resp 1893 1894 def delete(self, id, timeout=None): 1895 ''' 1896 Delete deletes an existing approval workflow. 1897 ''' 1898 deadline = None if timeout is None else time.time() + timeout 1899 req = ApprovalWorkflowDeleteRequest() 1900 1901 req.id = (id) 1902 tries = 0 1903 plumbing_response = None 1904 while True: 1905 t = None if deadline is None else deadline - time.time() 1906 try: 1907 plumbing_response = self.stub.Delete( 1908 req, 1909 metadata=self.parent.get_metadata( 1910 'ApprovalWorkflows.Delete', req), 1911 timeout=t) 1912 except Exception as e: 1913 if self.parent.shouldRetry(tries, e, deadline): 1914 tries += 1 1915 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1916 continue 1917 raise plumbing.convert_error_to_porcelain(e) from e 1918 break 1919 1920 resp = models.ApprovalWorkflowDeleteResponse() 1921 resp.id = (plumbing_response.id) 1922 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1923 plumbing_response.rate_limit) 1924 return resp 1925 1926 def update(self, approval_workflow, timeout=None): 1927 ''' 1928 Update updates an existing approval workflow. 1929 ''' 1930 deadline = None if timeout is None else time.time() + timeout 1931 req = ApprovalWorkflowUpdateRequest() 1932 1933 if approval_workflow is not None: 1934 req.approval_workflow.CopyFrom( 1935 plumbing.convert_approval_workflow_to_plumbing( 1936 approval_workflow)) 1937 tries = 0 1938 plumbing_response = None 1939 while True: 1940 t = None if deadline is None else deadline - time.time() 1941 try: 1942 plumbing_response = self.stub.Update( 1943 req, 1944 metadata=self.parent.get_metadata( 1945 'ApprovalWorkflows.Update', req), 1946 timeout=t) 1947 except Exception as e: 1948 if self.parent.shouldRetry(tries, e, deadline): 1949 tries += 1 1950 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1951 continue 1952 raise plumbing.convert_error_to_porcelain(e) from e 1953 break 1954 1955 resp = models.ApprovalWorkflowUpdateResponse() 1956 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1957 plumbing_response.approval_workflow) 1958 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1959 plumbing_response.rate_limit) 1960 return resp 1961 1962 def list(self, filter, *args, timeout=None): 1963 ''' 1964 Lists existing approval workflows. 1965 ''' 1966 deadline = None if timeout is None else time.time() + timeout 1967 req = ApprovalWorkflowListRequest() 1968 req.meta.CopyFrom(ListRequestMetadata()) 1969 if self.parent.page_limit > 0: 1970 req.meta.limit = self.parent.page_limit 1971 if self.parent.snapshot_datetime is not None: 1972 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1973 1974 req.filter = plumbing.quote_filter_args(filter, *args) 1975 1976 def generator(svc, req): 1977 tries = 0 1978 while True: 1979 t = None if deadline is None else deadline - time.time() 1980 try: 1981 plumbing_response = svc.stub.List( 1982 req, 1983 metadata=svc.parent.get_metadata( 1984 'ApprovalWorkflows.List', req), 1985 timeout=t) 1986 except Exception as e: 1987 if self.parent.shouldRetry(tries, e, deadline): 1988 tries += 1 1989 time.sleep( 1990 self.parent.exponentialBackoff(tries, deadline)) 1991 continue 1992 raise plumbing.convert_error_to_porcelain(e) from e 1993 tries = 0 1994 for plumbing_item in plumbing_response.approval_workflows: 1995 yield plumbing.convert_approval_workflow_to_porcelain( 1996 plumbing_item) 1997 if plumbing_response.meta.next_cursor == '': 1998 break 1999 req.meta.cursor = plumbing_response.meta.next_cursor 2000 2001 return generator(self, req)
ApprovalWorkflows are the mechanism by which requests for access can be viewed by authorized
approvers and be approved or denied.
See strongdm.models.ApprovalWorkflow
.
1820 def create(self, approval_workflow, timeout=None): 1821 ''' 1822 Create creates a new approval workflow and requires a name and approval mode for the approval workflow. 1823 ''' 1824 deadline = None if timeout is None else time.time() + timeout 1825 req = ApprovalWorkflowCreateRequest() 1826 1827 if approval_workflow is not None: 1828 req.approval_workflow.CopyFrom( 1829 plumbing.convert_approval_workflow_to_plumbing( 1830 approval_workflow)) 1831 tries = 0 1832 plumbing_response = None 1833 while True: 1834 t = None if deadline is None else deadline - time.time() 1835 try: 1836 plumbing_response = self.stub.Create( 1837 req, 1838 metadata=self.parent.get_metadata( 1839 'ApprovalWorkflows.Create', req), 1840 timeout=t) 1841 except Exception as e: 1842 if self.parent.shouldRetry(tries, e, deadline): 1843 tries += 1 1844 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1845 continue 1846 raise plumbing.convert_error_to_porcelain(e) from e 1847 break 1848 1849 resp = models.ApprovalWorkflowCreateResponse() 1850 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1851 plumbing_response.approval_workflow) 1852 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1853 plumbing_response.rate_limit) 1854 return resp
Create creates a new approval workflow and requires a name and approval mode for the approval workflow.
1856 def get(self, id, timeout=None): 1857 ''' 1858 Get reads one approval workflow by ID. 1859 ''' 1860 deadline = None if timeout is None else time.time() + timeout 1861 req = ApprovalWorkflowGetRequest() 1862 if self.parent.snapshot_datetime is not None: 1863 req.meta.CopyFrom(GetRequestMetadata()) 1864 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1865 1866 req.id = (id) 1867 tries = 0 1868 plumbing_response = None 1869 while True: 1870 t = None if deadline is None else deadline - time.time() 1871 try: 1872 plumbing_response = self.stub.Get( 1873 req, 1874 metadata=self.parent.get_metadata('ApprovalWorkflows.Get', 1875 req), 1876 timeout=t) 1877 except Exception as e: 1878 if self.parent.shouldRetry(tries, e, deadline): 1879 tries += 1 1880 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1881 continue 1882 raise plumbing.convert_error_to_porcelain(e) from e 1883 break 1884 1885 resp = models.ApprovalWorkflowGetResponse() 1886 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1887 plumbing_response.approval_workflow) 1888 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 1889 plumbing_response.meta) 1890 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1891 plumbing_response.rate_limit) 1892 return resp
Get reads one approval workflow by ID.
1894 def delete(self, id, timeout=None): 1895 ''' 1896 Delete deletes an existing approval workflow. 1897 ''' 1898 deadline = None if timeout is None else time.time() + timeout 1899 req = ApprovalWorkflowDeleteRequest() 1900 1901 req.id = (id) 1902 tries = 0 1903 plumbing_response = None 1904 while True: 1905 t = None if deadline is None else deadline - time.time() 1906 try: 1907 plumbing_response = self.stub.Delete( 1908 req, 1909 metadata=self.parent.get_metadata( 1910 'ApprovalWorkflows.Delete', req), 1911 timeout=t) 1912 except Exception as e: 1913 if self.parent.shouldRetry(tries, e, deadline): 1914 tries += 1 1915 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1916 continue 1917 raise plumbing.convert_error_to_porcelain(e) from e 1918 break 1919 1920 resp = models.ApprovalWorkflowDeleteResponse() 1921 resp.id = (plumbing_response.id) 1922 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1923 plumbing_response.rate_limit) 1924 return resp
Delete deletes an existing approval workflow.
1926 def update(self, approval_workflow, timeout=None): 1927 ''' 1928 Update updates an existing approval workflow. 1929 ''' 1930 deadline = None if timeout is None else time.time() + timeout 1931 req = ApprovalWorkflowUpdateRequest() 1932 1933 if approval_workflow is not None: 1934 req.approval_workflow.CopyFrom( 1935 plumbing.convert_approval_workflow_to_plumbing( 1936 approval_workflow)) 1937 tries = 0 1938 plumbing_response = None 1939 while True: 1940 t = None if deadline is None else deadline - time.time() 1941 try: 1942 plumbing_response = self.stub.Update( 1943 req, 1944 metadata=self.parent.get_metadata( 1945 'ApprovalWorkflows.Update', req), 1946 timeout=t) 1947 except Exception as e: 1948 if self.parent.shouldRetry(tries, e, deadline): 1949 tries += 1 1950 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 1951 continue 1952 raise plumbing.convert_error_to_porcelain(e) from e 1953 break 1954 1955 resp = models.ApprovalWorkflowUpdateResponse() 1956 resp.approval_workflow = plumbing.convert_approval_workflow_to_porcelain( 1957 plumbing_response.approval_workflow) 1958 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 1959 plumbing_response.rate_limit) 1960 return resp
Update updates an existing approval workflow.
1962 def list(self, filter, *args, timeout=None): 1963 ''' 1964 Lists existing approval workflows. 1965 ''' 1966 deadline = None if timeout is None else time.time() + timeout 1967 req = ApprovalWorkflowListRequest() 1968 req.meta.CopyFrom(ListRequestMetadata()) 1969 if self.parent.page_limit > 0: 1970 req.meta.limit = self.parent.page_limit 1971 if self.parent.snapshot_datetime is not None: 1972 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 1973 1974 req.filter = plumbing.quote_filter_args(filter, *args) 1975 1976 def generator(svc, req): 1977 tries = 0 1978 while True: 1979 t = None if deadline is None else deadline - time.time() 1980 try: 1981 plumbing_response = svc.stub.List( 1982 req, 1983 metadata=svc.parent.get_metadata( 1984 'ApprovalWorkflows.List', req), 1985 timeout=t) 1986 except Exception as e: 1987 if self.parent.shouldRetry(tries, e, deadline): 1988 tries += 1 1989 time.sleep( 1990 self.parent.exponentialBackoff(tries, deadline)) 1991 continue 1992 raise plumbing.convert_error_to_porcelain(e) from e 1993 tries = 0 1994 for plumbing_item in plumbing_response.approval_workflows: 1995 yield plumbing.convert_approval_workflow_to_porcelain( 1996 plumbing_item) 1997 if plumbing_response.meta.next_cursor == '': 1998 break 1999 req.meta.cursor = plumbing_response.meta.next_cursor 2000 2001 return generator(self, req)
Lists existing approval workflows.
2004class SnapshotApprovalWorkflows: 2005 ''' 2006 SnapshotApprovalWorkflows exposes the read only methods of the ApprovalWorkflows 2007 service for historical queries. 2008 ''' 2009 def __init__(self, approval_workflows): 2010 self.approval_workflows = approval_workflows 2011 2012 def get(self, id, timeout=None): 2013 ''' 2014 Get reads one approval workflow by ID. 2015 ''' 2016 return self.approval_workflows.get(id, timeout=timeout) 2017 2018 def list(self, filter, *args, timeout=None): 2019 ''' 2020 Lists existing approval workflows. 2021 ''' 2022 return self.approval_workflows.list(filter, *args, timeout=timeout)
SnapshotApprovalWorkflows exposes the read only methods of the ApprovalWorkflows service for historical queries.
2025class ApprovalWorkflowsHistory: 2026 ''' 2027 ApprovalWorkflowsHistory records all changes to the state of an ApprovalWorkflow. 2028 See `strongdm.models.ApprovalWorkflowHistory`. 2029 ''' 2030 def __init__(self, channel, client): 2031 self.parent = client 2032 self.stub = ApprovalWorkflowsHistoryStub(channel) 2033 2034 def list(self, filter, *args, timeout=None): 2035 ''' 2036 List gets a list of ApprovalWorkflowHistory records matching a given set of criteria. 2037 ''' 2038 deadline = None if timeout is None else time.time() + timeout 2039 req = ApprovalWorkflowHistoryListRequest() 2040 req.meta.CopyFrom(ListRequestMetadata()) 2041 if self.parent.page_limit > 0: 2042 req.meta.limit = self.parent.page_limit 2043 if self.parent.snapshot_datetime is not None: 2044 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2045 2046 req.filter = plumbing.quote_filter_args(filter, *args) 2047 2048 def generator(svc, req): 2049 tries = 0 2050 while True: 2051 t = None if deadline is None else deadline - time.time() 2052 try: 2053 plumbing_response = svc.stub.List( 2054 req, 2055 metadata=svc.parent.get_metadata( 2056 'ApprovalWorkflowsHistory.List', req), 2057 timeout=t) 2058 except Exception as e: 2059 if self.parent.shouldRetry(tries, e, deadline): 2060 tries += 1 2061 time.sleep( 2062 self.parent.exponentialBackoff(tries, deadline)) 2063 continue 2064 raise plumbing.convert_error_to_porcelain(e) from e 2065 tries = 0 2066 for plumbing_item in plumbing_response.history: 2067 yield plumbing.convert_approval_workflow_history_to_porcelain( 2068 plumbing_item) 2069 if plumbing_response.meta.next_cursor == '': 2070 break 2071 req.meta.cursor = plumbing_response.meta.next_cursor 2072 2073 return generator(self, req)
ApprovalWorkflowsHistory records all changes to the state of an ApprovalWorkflow.
See strongdm.models.ApprovalWorkflowHistory
.
2034 def list(self, filter, *args, timeout=None): 2035 ''' 2036 List gets a list of ApprovalWorkflowHistory records matching a given set of criteria. 2037 ''' 2038 deadline = None if timeout is None else time.time() + timeout 2039 req = ApprovalWorkflowHistoryListRequest() 2040 req.meta.CopyFrom(ListRequestMetadata()) 2041 if self.parent.page_limit > 0: 2042 req.meta.limit = self.parent.page_limit 2043 if self.parent.snapshot_datetime is not None: 2044 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2045 2046 req.filter = plumbing.quote_filter_args(filter, *args) 2047 2048 def generator(svc, req): 2049 tries = 0 2050 while True: 2051 t = None if deadline is None else deadline - time.time() 2052 try: 2053 plumbing_response = svc.stub.List( 2054 req, 2055 metadata=svc.parent.get_metadata( 2056 'ApprovalWorkflowsHistory.List', req), 2057 timeout=t) 2058 except Exception as e: 2059 if self.parent.shouldRetry(tries, e, deadline): 2060 tries += 1 2061 time.sleep( 2062 self.parent.exponentialBackoff(tries, deadline)) 2063 continue 2064 raise plumbing.convert_error_to_porcelain(e) from e 2065 tries = 0 2066 for plumbing_item in plumbing_response.history: 2067 yield plumbing.convert_approval_workflow_history_to_porcelain( 2068 plumbing_item) 2069 if plumbing_response.meta.next_cursor == '': 2070 break 2071 req.meta.cursor = plumbing_response.meta.next_cursor 2072 2073 return generator(self, req)
List gets a list of ApprovalWorkflowHistory records matching a given set of criteria.
2076class ControlPanel: 2077 ''' 2078 ControlPanel contains all administrative controls. 2079 ''' 2080 def __init__(self, channel, client): 2081 self.parent = client 2082 self.stub = ControlPanelStub(channel) 2083 2084 def get_sshca_public_key(self, timeout=None): 2085 ''' 2086 GetSSHCAPublicKey retrieves the SSH CA public key. 2087 ''' 2088 deadline = None if timeout is None else time.time() + timeout 2089 req = ControlPanelGetSSHCAPublicKeyRequest() 2090 2091 tries = 0 2092 plumbing_response = None 2093 while True: 2094 t = None if deadline is None else deadline - time.time() 2095 try: 2096 plumbing_response = self.stub.GetSSHCAPublicKey( 2097 req, 2098 metadata=self.parent.get_metadata( 2099 'ControlPanel.GetSSHCAPublicKey', req), 2100 timeout=t) 2101 except Exception as e: 2102 if self.parent.shouldRetry(tries, e, deadline): 2103 tries += 1 2104 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2105 continue 2106 raise plumbing.convert_error_to_porcelain(e) from e 2107 break 2108 2109 resp = models.ControlPanelGetSSHCAPublicKeyResponse() 2110 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2111 plumbing_response.meta) 2112 resp.public_key = (plumbing_response.public_key) 2113 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2114 plumbing_response.rate_limit) 2115 return resp 2116 2117 def get_rdpca_public_key(self, timeout=None): 2118 ''' 2119 GetRDPCAPublicKey retrieves the RDP CA public key. 2120 ''' 2121 deadline = None if timeout is None else time.time() + timeout 2122 req = ControlPanelGetRDPCAPublicKeyRequest() 2123 2124 tries = 0 2125 plumbing_response = None 2126 while True: 2127 t = None if deadline is None else deadline - time.time() 2128 try: 2129 plumbing_response = self.stub.GetRDPCAPublicKey( 2130 req, 2131 metadata=self.parent.get_metadata( 2132 'ControlPanel.GetRDPCAPublicKey', req), 2133 timeout=t) 2134 except Exception as e: 2135 if self.parent.shouldRetry(tries, e, deadline): 2136 tries += 1 2137 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2138 continue 2139 raise plumbing.convert_error_to_porcelain(e) from e 2140 break 2141 2142 resp = models.ControlPanelGetRDPCAPublicKeyResponse() 2143 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2144 plumbing_response.meta) 2145 resp.public_key = (plumbing_response.public_key) 2146 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2147 plumbing_response.rate_limit) 2148 return resp 2149 2150 def verify_jwt(self, token, timeout=None): 2151 ''' 2152 VerifyJWT reports whether the given JWT token (x-sdm-token) is valid. 2153 ''' 2154 deadline = None if timeout is None else time.time() + timeout 2155 req = ControlPanelVerifyJWTRequest() 2156 2157 req.token = (token) 2158 tries = 0 2159 plumbing_response = None 2160 while True: 2161 t = None if deadline is None else deadline - time.time() 2162 try: 2163 plumbing_response = self.stub.VerifyJWT( 2164 req, 2165 metadata=self.parent.get_metadata('ControlPanel.VerifyJWT', 2166 req), 2167 timeout=t) 2168 except Exception as e: 2169 if self.parent.shouldRetry(tries, e, deadline): 2170 tries += 1 2171 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2172 continue 2173 raise plumbing.convert_error_to_porcelain(e) from e 2174 break 2175 2176 resp = models.ControlPanelVerifyJWTResponse() 2177 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2178 plumbing_response.meta) 2179 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2180 plumbing_response.rate_limit) 2181 resp.valid = (plumbing_response.valid) 2182 return resp
ControlPanel contains all administrative controls.
2084 def get_sshca_public_key(self, timeout=None): 2085 ''' 2086 GetSSHCAPublicKey retrieves the SSH CA public key. 2087 ''' 2088 deadline = None if timeout is None else time.time() + timeout 2089 req = ControlPanelGetSSHCAPublicKeyRequest() 2090 2091 tries = 0 2092 plumbing_response = None 2093 while True: 2094 t = None if deadline is None else deadline - time.time() 2095 try: 2096 plumbing_response = self.stub.GetSSHCAPublicKey( 2097 req, 2098 metadata=self.parent.get_metadata( 2099 'ControlPanel.GetSSHCAPublicKey', req), 2100 timeout=t) 2101 except Exception as e: 2102 if self.parent.shouldRetry(tries, e, deadline): 2103 tries += 1 2104 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2105 continue 2106 raise plumbing.convert_error_to_porcelain(e) from e 2107 break 2108 2109 resp = models.ControlPanelGetSSHCAPublicKeyResponse() 2110 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2111 plumbing_response.meta) 2112 resp.public_key = (plumbing_response.public_key) 2113 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2114 plumbing_response.rate_limit) 2115 return resp
GetSSHCAPublicKey retrieves the SSH CA public key.
2117 def get_rdpca_public_key(self, timeout=None): 2118 ''' 2119 GetRDPCAPublicKey retrieves the RDP CA public key. 2120 ''' 2121 deadline = None if timeout is None else time.time() + timeout 2122 req = ControlPanelGetRDPCAPublicKeyRequest() 2123 2124 tries = 0 2125 plumbing_response = None 2126 while True: 2127 t = None if deadline is None else deadline - time.time() 2128 try: 2129 plumbing_response = self.stub.GetRDPCAPublicKey( 2130 req, 2131 metadata=self.parent.get_metadata( 2132 'ControlPanel.GetRDPCAPublicKey', req), 2133 timeout=t) 2134 except Exception as e: 2135 if self.parent.shouldRetry(tries, e, deadline): 2136 tries += 1 2137 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2138 continue 2139 raise plumbing.convert_error_to_porcelain(e) from e 2140 break 2141 2142 resp = models.ControlPanelGetRDPCAPublicKeyResponse() 2143 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2144 plumbing_response.meta) 2145 resp.public_key = (plumbing_response.public_key) 2146 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2147 plumbing_response.rate_limit) 2148 return resp
GetRDPCAPublicKey retrieves the RDP CA public key.
2150 def verify_jwt(self, token, timeout=None): 2151 ''' 2152 VerifyJWT reports whether the given JWT token (x-sdm-token) is valid. 2153 ''' 2154 deadline = None if timeout is None else time.time() + timeout 2155 req = ControlPanelVerifyJWTRequest() 2156 2157 req.token = (token) 2158 tries = 0 2159 plumbing_response = None 2160 while True: 2161 t = None if deadline is None else deadline - time.time() 2162 try: 2163 plumbing_response = self.stub.VerifyJWT( 2164 req, 2165 metadata=self.parent.get_metadata('ControlPanel.VerifyJWT', 2166 req), 2167 timeout=t) 2168 except Exception as e: 2169 if self.parent.shouldRetry(tries, e, deadline): 2170 tries += 1 2171 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2172 continue 2173 raise plumbing.convert_error_to_porcelain(e) from e 2174 break 2175 2176 resp = models.ControlPanelVerifyJWTResponse() 2177 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2178 plumbing_response.meta) 2179 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2180 plumbing_response.rate_limit) 2181 resp.valid = (plumbing_response.valid) 2182 return resp
VerifyJWT reports whether the given JWT token (x-sdm-token) is valid.
2185class Roles: 2186 ''' 2187 A Role has a list of access rules which determine which Resources the members 2188 of the Role have access to. An Account can be a member of multiple Roles via 2189 AccountAttachments. 2190 See `strongdm.models.Role`. 2191 ''' 2192 def __init__(self, channel, client): 2193 self.parent = client 2194 self.stub = RolesStub(channel) 2195 2196 def create(self, role, timeout=None): 2197 ''' 2198 Create registers a new Role. 2199 ''' 2200 deadline = None if timeout is None else time.time() + timeout 2201 req = RoleCreateRequest() 2202 2203 if role is not None: 2204 req.role.CopyFrom(plumbing.convert_role_to_plumbing(role)) 2205 tries = 0 2206 plumbing_response = None 2207 while True: 2208 t = None if deadline is None else deadline - time.time() 2209 try: 2210 plumbing_response = self.stub.Create( 2211 req, 2212 metadata=self.parent.get_metadata('Roles.Create', req), 2213 timeout=t) 2214 except Exception as e: 2215 if self.parent.shouldRetry(tries, e, deadline): 2216 tries += 1 2217 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2218 continue 2219 raise plumbing.convert_error_to_porcelain(e) from e 2220 break 2221 2222 resp = models.RoleCreateResponse() 2223 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2224 plumbing_response.meta) 2225 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2226 plumbing_response.rate_limit) 2227 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2228 return resp 2229 2230 def get(self, id, timeout=None): 2231 ''' 2232 Get reads one Role by ID. 2233 ''' 2234 deadline = None if timeout is None else time.time() + timeout 2235 req = RoleGetRequest() 2236 if self.parent.snapshot_datetime is not None: 2237 req.meta.CopyFrom(GetRequestMetadata()) 2238 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2239 2240 req.id = (id) 2241 tries = 0 2242 plumbing_response = None 2243 while True: 2244 t = None if deadline is None else deadline - time.time() 2245 try: 2246 plumbing_response = self.stub.Get( 2247 req, 2248 metadata=self.parent.get_metadata('Roles.Get', req), 2249 timeout=t) 2250 except Exception as e: 2251 if self.parent.shouldRetry(tries, e, deadline): 2252 tries += 1 2253 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2254 continue 2255 raise plumbing.convert_error_to_porcelain(e) from e 2256 break 2257 2258 resp = models.RoleGetResponse() 2259 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2260 plumbing_response.meta) 2261 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2262 plumbing_response.rate_limit) 2263 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2264 return resp 2265 2266 def update(self, role, timeout=None): 2267 ''' 2268 Update replaces all the fields of a Role by ID. 2269 ''' 2270 deadline = None if timeout is None else time.time() + timeout 2271 req = RoleUpdateRequest() 2272 2273 if role is not None: 2274 req.role.CopyFrom(plumbing.convert_role_to_plumbing(role)) 2275 tries = 0 2276 plumbing_response = None 2277 while True: 2278 t = None if deadline is None else deadline - time.time() 2279 try: 2280 plumbing_response = self.stub.Update( 2281 req, 2282 metadata=self.parent.get_metadata('Roles.Update', req), 2283 timeout=t) 2284 except Exception as e: 2285 if self.parent.shouldRetry(tries, e, deadline): 2286 tries += 1 2287 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2288 continue 2289 raise plumbing.convert_error_to_porcelain(e) from e 2290 break 2291 2292 resp = models.RoleUpdateResponse() 2293 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2294 plumbing_response.meta) 2295 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2296 plumbing_response.rate_limit) 2297 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2298 return resp 2299 2300 def delete(self, id, timeout=None): 2301 ''' 2302 Delete removes a Role by ID. 2303 ''' 2304 deadline = None if timeout is None else time.time() + timeout 2305 req = RoleDeleteRequest() 2306 2307 req.id = (id) 2308 tries = 0 2309 plumbing_response = None 2310 while True: 2311 t = None if deadline is None else deadline - time.time() 2312 try: 2313 plumbing_response = self.stub.Delete( 2314 req, 2315 metadata=self.parent.get_metadata('Roles.Delete', req), 2316 timeout=t) 2317 except Exception as e: 2318 if self.parent.shouldRetry(tries, e, deadline): 2319 tries += 1 2320 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2321 continue 2322 raise plumbing.convert_error_to_porcelain(e) from e 2323 break 2324 2325 resp = models.RoleDeleteResponse() 2326 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2327 plumbing_response.meta) 2328 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2329 plumbing_response.rate_limit) 2330 return resp 2331 2332 def list(self, filter, *args, timeout=None): 2333 ''' 2334 List gets a list of Roles matching a given set of criteria. 2335 ''' 2336 deadline = None if timeout is None else time.time() + timeout 2337 req = RoleListRequest() 2338 req.meta.CopyFrom(ListRequestMetadata()) 2339 if self.parent.page_limit > 0: 2340 req.meta.limit = self.parent.page_limit 2341 if self.parent.snapshot_datetime is not None: 2342 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2343 2344 req.filter = plumbing.quote_filter_args(filter, *args) 2345 2346 def generator(svc, req): 2347 tries = 0 2348 while True: 2349 t = None if deadline is None else deadline - time.time() 2350 try: 2351 plumbing_response = svc.stub.List( 2352 req, 2353 metadata=svc.parent.get_metadata('Roles.List', req), 2354 timeout=t) 2355 except Exception as e: 2356 if self.parent.shouldRetry(tries, e, deadline): 2357 tries += 1 2358 time.sleep( 2359 self.parent.exponentialBackoff(tries, deadline)) 2360 continue 2361 raise plumbing.convert_error_to_porcelain(e) from e 2362 tries = 0 2363 for plumbing_item in plumbing_response.roles: 2364 yield plumbing.convert_role_to_porcelain(plumbing_item) 2365 if plumbing_response.meta.next_cursor == '': 2366 break 2367 req.meta.cursor = plumbing_response.meta.next_cursor 2368 2369 return generator(self, req)
A Role has a list of access rules which determine which Resources the members
of the Role have access to. An Account can be a member of multiple Roles via
AccountAttachments.
See strongdm.models.Role
.
2196 def create(self, role, timeout=None): 2197 ''' 2198 Create registers a new Role. 2199 ''' 2200 deadline = None if timeout is None else time.time() + timeout 2201 req = RoleCreateRequest() 2202 2203 if role is not None: 2204 req.role.CopyFrom(plumbing.convert_role_to_plumbing(role)) 2205 tries = 0 2206 plumbing_response = None 2207 while True: 2208 t = None if deadline is None else deadline - time.time() 2209 try: 2210 plumbing_response = self.stub.Create( 2211 req, 2212 metadata=self.parent.get_metadata('Roles.Create', req), 2213 timeout=t) 2214 except Exception as e: 2215 if self.parent.shouldRetry(tries, e, deadline): 2216 tries += 1 2217 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2218 continue 2219 raise plumbing.convert_error_to_porcelain(e) from e 2220 break 2221 2222 resp = models.RoleCreateResponse() 2223 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2224 plumbing_response.meta) 2225 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2226 plumbing_response.rate_limit) 2227 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2228 return resp
Create registers a new Role.
2230 def get(self, id, timeout=None): 2231 ''' 2232 Get reads one Role by ID. 2233 ''' 2234 deadline = None if timeout is None else time.time() + timeout 2235 req = RoleGetRequest() 2236 if self.parent.snapshot_datetime is not None: 2237 req.meta.CopyFrom(GetRequestMetadata()) 2238 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2239 2240 req.id = (id) 2241 tries = 0 2242 plumbing_response = None 2243 while True: 2244 t = None if deadline is None else deadline - time.time() 2245 try: 2246 plumbing_response = self.stub.Get( 2247 req, 2248 metadata=self.parent.get_metadata('Roles.Get', req), 2249 timeout=t) 2250 except Exception as e: 2251 if self.parent.shouldRetry(tries, e, deadline): 2252 tries += 1 2253 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2254 continue 2255 raise plumbing.convert_error_to_porcelain(e) from e 2256 break 2257 2258 resp = models.RoleGetResponse() 2259 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2260 plumbing_response.meta) 2261 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2262 plumbing_response.rate_limit) 2263 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2264 return resp
Get reads one Role by ID.
2266 def update(self, role, timeout=None): 2267 ''' 2268 Update replaces all the fields of a Role by ID. 2269 ''' 2270 deadline = None if timeout is None else time.time() + timeout 2271 req = RoleUpdateRequest() 2272 2273 if role is not None: 2274 req.role.CopyFrom(plumbing.convert_role_to_plumbing(role)) 2275 tries = 0 2276 plumbing_response = None 2277 while True: 2278 t = None if deadline is None else deadline - time.time() 2279 try: 2280 plumbing_response = self.stub.Update( 2281 req, 2282 metadata=self.parent.get_metadata('Roles.Update', req), 2283 timeout=t) 2284 except Exception as e: 2285 if self.parent.shouldRetry(tries, e, deadline): 2286 tries += 1 2287 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2288 continue 2289 raise plumbing.convert_error_to_porcelain(e) from e 2290 break 2291 2292 resp = models.RoleUpdateResponse() 2293 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2294 plumbing_response.meta) 2295 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2296 plumbing_response.rate_limit) 2297 resp.role = plumbing.convert_role_to_porcelain(plumbing_response.role) 2298 return resp
Update replaces all the fields of a Role by ID.
2300 def delete(self, id, timeout=None): 2301 ''' 2302 Delete removes a Role by ID. 2303 ''' 2304 deadline = None if timeout is None else time.time() + timeout 2305 req = RoleDeleteRequest() 2306 2307 req.id = (id) 2308 tries = 0 2309 plumbing_response = None 2310 while True: 2311 t = None if deadline is None else deadline - time.time() 2312 try: 2313 plumbing_response = self.stub.Delete( 2314 req, 2315 metadata=self.parent.get_metadata('Roles.Delete', req), 2316 timeout=t) 2317 except Exception as e: 2318 if self.parent.shouldRetry(tries, e, deadline): 2319 tries += 1 2320 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2321 continue 2322 raise plumbing.convert_error_to_porcelain(e) from e 2323 break 2324 2325 resp = models.RoleDeleteResponse() 2326 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2327 plumbing_response.meta) 2328 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2329 plumbing_response.rate_limit) 2330 return resp
Delete removes a Role by ID.
2332 def list(self, filter, *args, timeout=None): 2333 ''' 2334 List gets a list of Roles matching a given set of criteria. 2335 ''' 2336 deadline = None if timeout is None else time.time() + timeout 2337 req = RoleListRequest() 2338 req.meta.CopyFrom(ListRequestMetadata()) 2339 if self.parent.page_limit > 0: 2340 req.meta.limit = self.parent.page_limit 2341 if self.parent.snapshot_datetime is not None: 2342 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2343 2344 req.filter = plumbing.quote_filter_args(filter, *args) 2345 2346 def generator(svc, req): 2347 tries = 0 2348 while True: 2349 t = None if deadline is None else deadline - time.time() 2350 try: 2351 plumbing_response = svc.stub.List( 2352 req, 2353 metadata=svc.parent.get_metadata('Roles.List', req), 2354 timeout=t) 2355 except Exception as e: 2356 if self.parent.shouldRetry(tries, e, deadline): 2357 tries += 1 2358 time.sleep( 2359 self.parent.exponentialBackoff(tries, deadline)) 2360 continue 2361 raise plumbing.convert_error_to_porcelain(e) from e 2362 tries = 0 2363 for plumbing_item in plumbing_response.roles: 2364 yield plumbing.convert_role_to_porcelain(plumbing_item) 2365 if plumbing_response.meta.next_cursor == '': 2366 break 2367 req.meta.cursor = plumbing_response.meta.next_cursor 2368 2369 return generator(self, req)
List gets a list of Roles matching a given set of criteria.
2372class SnapshotRoles: 2373 ''' 2374 SnapshotRoles exposes the read only methods of the Roles 2375 service for historical queries. 2376 ''' 2377 def __init__(self, roles): 2378 self.roles = roles 2379 2380 def get(self, id, timeout=None): 2381 ''' 2382 Get reads one Role by ID. 2383 ''' 2384 return self.roles.get(id, timeout=timeout) 2385 2386 def list(self, filter, *args, timeout=None): 2387 ''' 2388 List gets a list of Roles matching a given set of criteria. 2389 ''' 2390 return self.roles.list(filter, *args, timeout=timeout)
SnapshotRoles exposes the read only methods of the Roles service for historical queries.
2393class HealthChecks: 2394 ''' 2395 HealthChecks lists the last healthcheck between each node and resource. 2396 Note the unconventional capitalization here is to prevent having a collision with GRPC 2397 See `strongdm.models.Healthcheck`. 2398 ''' 2399 def __init__(self, channel, client): 2400 self.parent = client 2401 self.stub = HealthChecksStub(channel) 2402 2403 def list(self, filter, *args, timeout=None): 2404 ''' 2405 List gets a list of Healthchecks matching a given set of criteria. 2406 ''' 2407 deadline = None if timeout is None else time.time() + timeout 2408 req = HealthcheckListRequest() 2409 req.meta.CopyFrom(ListRequestMetadata()) 2410 if self.parent.page_limit > 0: 2411 req.meta.limit = self.parent.page_limit 2412 if self.parent.snapshot_datetime is not None: 2413 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2414 2415 req.filter = plumbing.quote_filter_args(filter, *args) 2416 2417 def generator(svc, req): 2418 tries = 0 2419 while True: 2420 t = None if deadline is None else deadline - time.time() 2421 try: 2422 plumbing_response = svc.stub.List( 2423 req, 2424 metadata=svc.parent.get_metadata( 2425 'HealthChecks.List', req), 2426 timeout=t) 2427 except Exception as e: 2428 if self.parent.shouldRetry(tries, e, deadline): 2429 tries += 1 2430 time.sleep( 2431 self.parent.exponentialBackoff(tries, deadline)) 2432 continue 2433 raise plumbing.convert_error_to_porcelain(e) from e 2434 tries = 0 2435 for plumbing_item in plumbing_response.healthchecks: 2436 yield plumbing.convert_healthcheck_to_porcelain( 2437 plumbing_item) 2438 if plumbing_response.meta.next_cursor == '': 2439 break 2440 req.meta.cursor = plumbing_response.meta.next_cursor 2441 2442 return generator(self, req)
HealthChecks lists the last healthcheck between each node and resource.
Note the unconventional capitalization here is to prevent having a collision with GRPC
See strongdm.models.Healthcheck
.
2403 def list(self, filter, *args, timeout=None): 2404 ''' 2405 List gets a list of Healthchecks matching a given set of criteria. 2406 ''' 2407 deadline = None if timeout is None else time.time() + timeout 2408 req = HealthcheckListRequest() 2409 req.meta.CopyFrom(ListRequestMetadata()) 2410 if self.parent.page_limit > 0: 2411 req.meta.limit = self.parent.page_limit 2412 if self.parent.snapshot_datetime is not None: 2413 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2414 2415 req.filter = plumbing.quote_filter_args(filter, *args) 2416 2417 def generator(svc, req): 2418 tries = 0 2419 while True: 2420 t = None if deadline is None else deadline - time.time() 2421 try: 2422 plumbing_response = svc.stub.List( 2423 req, 2424 metadata=svc.parent.get_metadata( 2425 'HealthChecks.List', req), 2426 timeout=t) 2427 except Exception as e: 2428 if self.parent.shouldRetry(tries, e, deadline): 2429 tries += 1 2430 time.sleep( 2431 self.parent.exponentialBackoff(tries, deadline)) 2432 continue 2433 raise plumbing.convert_error_to_porcelain(e) from e 2434 tries = 0 2435 for plumbing_item in plumbing_response.healthchecks: 2436 yield plumbing.convert_healthcheck_to_porcelain( 2437 plumbing_item) 2438 if plumbing_response.meta.next_cursor == '': 2439 break 2440 req.meta.cursor = plumbing_response.meta.next_cursor 2441 2442 return generator(self, req)
List gets a list of Healthchecks matching a given set of criteria.
2445class IdentityAliases: 2446 ''' 2447 IdentityAliases assign an alias to an account within an IdentitySet. 2448 The alias is used as the username when connecting to a identity supported resource. 2449 See `strongdm.models.IdentityAlias`. 2450 ''' 2451 def __init__(self, channel, client): 2452 self.parent = client 2453 self.stub = IdentityAliasesStub(channel) 2454 2455 def create(self, identity_alias, timeout=None): 2456 ''' 2457 Create registers a new IdentityAlias. 2458 ''' 2459 deadline = None if timeout is None else time.time() + timeout 2460 req = IdentityAliasCreateRequest() 2461 2462 if identity_alias is not None: 2463 req.identity_alias.CopyFrom( 2464 plumbing.convert_identity_alias_to_plumbing(identity_alias)) 2465 tries = 0 2466 plumbing_response = None 2467 while True: 2468 t = None if deadline is None else deadline - time.time() 2469 try: 2470 plumbing_response = self.stub.Create( 2471 req, 2472 metadata=self.parent.get_metadata('IdentityAliases.Create', 2473 req), 2474 timeout=t) 2475 except Exception as e: 2476 if self.parent.shouldRetry(tries, e, deadline): 2477 tries += 1 2478 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2479 continue 2480 raise plumbing.convert_error_to_porcelain(e) from e 2481 break 2482 2483 resp = models.IdentityAliasCreateResponse() 2484 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2485 plumbing_response.identity_alias) 2486 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2487 plumbing_response.meta) 2488 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2489 plumbing_response.rate_limit) 2490 return resp 2491 2492 def get(self, id, timeout=None): 2493 ''' 2494 Get reads one IdentityAlias by ID. 2495 ''' 2496 deadline = None if timeout is None else time.time() + timeout 2497 req = IdentityAliasGetRequest() 2498 if self.parent.snapshot_datetime is not None: 2499 req.meta.CopyFrom(GetRequestMetadata()) 2500 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2501 2502 req.id = (id) 2503 tries = 0 2504 plumbing_response = None 2505 while True: 2506 t = None if deadline is None else deadline - time.time() 2507 try: 2508 plumbing_response = self.stub.Get( 2509 req, 2510 metadata=self.parent.get_metadata('IdentityAliases.Get', 2511 req), 2512 timeout=t) 2513 except Exception as e: 2514 if self.parent.shouldRetry(tries, e, deadline): 2515 tries += 1 2516 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2517 continue 2518 raise plumbing.convert_error_to_porcelain(e) from e 2519 break 2520 2521 resp = models.IdentityAliasGetResponse() 2522 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2523 plumbing_response.identity_alias) 2524 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2525 plumbing_response.meta) 2526 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2527 plumbing_response.rate_limit) 2528 return resp 2529 2530 def update(self, identity_alias, timeout=None): 2531 ''' 2532 Update replaces all the fields of a IdentityAlias by ID. 2533 ''' 2534 deadline = None if timeout is None else time.time() + timeout 2535 req = IdentityAliasUpdateRequest() 2536 2537 if identity_alias is not None: 2538 req.identity_alias.CopyFrom( 2539 plumbing.convert_identity_alias_to_plumbing(identity_alias)) 2540 tries = 0 2541 plumbing_response = None 2542 while True: 2543 t = None if deadline is None else deadline - time.time() 2544 try: 2545 plumbing_response = self.stub.Update( 2546 req, 2547 metadata=self.parent.get_metadata('IdentityAliases.Update', 2548 req), 2549 timeout=t) 2550 except Exception as e: 2551 if self.parent.shouldRetry(tries, e, deadline): 2552 tries += 1 2553 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2554 continue 2555 raise plumbing.convert_error_to_porcelain(e) from e 2556 break 2557 2558 resp = models.IdentityAliasUpdateResponse() 2559 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2560 plumbing_response.identity_alias) 2561 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2562 plumbing_response.meta) 2563 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2564 plumbing_response.rate_limit) 2565 return resp 2566 2567 def delete(self, id, timeout=None): 2568 ''' 2569 Delete removes a IdentityAlias by ID. 2570 ''' 2571 deadline = None if timeout is None else time.time() + timeout 2572 req = IdentityAliasDeleteRequest() 2573 2574 req.id = (id) 2575 tries = 0 2576 plumbing_response = None 2577 while True: 2578 t = None if deadline is None else deadline - time.time() 2579 try: 2580 plumbing_response = self.stub.Delete( 2581 req, 2582 metadata=self.parent.get_metadata('IdentityAliases.Delete', 2583 req), 2584 timeout=t) 2585 except Exception as e: 2586 if self.parent.shouldRetry(tries, e, deadline): 2587 tries += 1 2588 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2589 continue 2590 raise plumbing.convert_error_to_porcelain(e) from e 2591 break 2592 2593 resp = models.IdentityAliasDeleteResponse() 2594 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2595 plumbing_response.meta) 2596 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2597 plumbing_response.rate_limit) 2598 return resp 2599 2600 def list(self, filter, *args, timeout=None): 2601 ''' 2602 List gets a list of IdentityAliases matching a given set of criteria. 2603 ''' 2604 deadline = None if timeout is None else time.time() + timeout 2605 req = IdentityAliasListRequest() 2606 req.meta.CopyFrom(ListRequestMetadata()) 2607 if self.parent.page_limit > 0: 2608 req.meta.limit = self.parent.page_limit 2609 if self.parent.snapshot_datetime is not None: 2610 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2611 2612 req.filter = plumbing.quote_filter_args(filter, *args) 2613 2614 def generator(svc, req): 2615 tries = 0 2616 while True: 2617 t = None if deadline is None else deadline - time.time() 2618 try: 2619 plumbing_response = svc.stub.List( 2620 req, 2621 metadata=svc.parent.get_metadata( 2622 'IdentityAliases.List', req), 2623 timeout=t) 2624 except Exception as e: 2625 if self.parent.shouldRetry(tries, e, deadline): 2626 tries += 1 2627 time.sleep( 2628 self.parent.exponentialBackoff(tries, deadline)) 2629 continue 2630 raise plumbing.convert_error_to_porcelain(e) from e 2631 tries = 0 2632 for plumbing_item in plumbing_response.identity_aliases: 2633 yield plumbing.convert_identity_alias_to_porcelain( 2634 plumbing_item) 2635 if plumbing_response.meta.next_cursor == '': 2636 break 2637 req.meta.cursor = plumbing_response.meta.next_cursor 2638 2639 return generator(self, req)
IdentityAliases assign an alias to an account within an IdentitySet.
The alias is used as the username when connecting to a identity supported resource.
See strongdm.models.IdentityAlias
.
2455 def create(self, identity_alias, timeout=None): 2456 ''' 2457 Create registers a new IdentityAlias. 2458 ''' 2459 deadline = None if timeout is None else time.time() + timeout 2460 req = IdentityAliasCreateRequest() 2461 2462 if identity_alias is not None: 2463 req.identity_alias.CopyFrom( 2464 plumbing.convert_identity_alias_to_plumbing(identity_alias)) 2465 tries = 0 2466 plumbing_response = None 2467 while True: 2468 t = None if deadline is None else deadline - time.time() 2469 try: 2470 plumbing_response = self.stub.Create( 2471 req, 2472 metadata=self.parent.get_metadata('IdentityAliases.Create', 2473 req), 2474 timeout=t) 2475 except Exception as e: 2476 if self.parent.shouldRetry(tries, e, deadline): 2477 tries += 1 2478 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2479 continue 2480 raise plumbing.convert_error_to_porcelain(e) from e 2481 break 2482 2483 resp = models.IdentityAliasCreateResponse() 2484 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2485 plumbing_response.identity_alias) 2486 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2487 plumbing_response.meta) 2488 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2489 plumbing_response.rate_limit) 2490 return resp
Create registers a new IdentityAlias.
2492 def get(self, id, timeout=None): 2493 ''' 2494 Get reads one IdentityAlias by ID. 2495 ''' 2496 deadline = None if timeout is None else time.time() + timeout 2497 req = IdentityAliasGetRequest() 2498 if self.parent.snapshot_datetime is not None: 2499 req.meta.CopyFrom(GetRequestMetadata()) 2500 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2501 2502 req.id = (id) 2503 tries = 0 2504 plumbing_response = None 2505 while True: 2506 t = None if deadline is None else deadline - time.time() 2507 try: 2508 plumbing_response = self.stub.Get( 2509 req, 2510 metadata=self.parent.get_metadata('IdentityAliases.Get', 2511 req), 2512 timeout=t) 2513 except Exception as e: 2514 if self.parent.shouldRetry(tries, e, deadline): 2515 tries += 1 2516 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2517 continue 2518 raise plumbing.convert_error_to_porcelain(e) from e 2519 break 2520 2521 resp = models.IdentityAliasGetResponse() 2522 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2523 plumbing_response.identity_alias) 2524 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2525 plumbing_response.meta) 2526 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2527 plumbing_response.rate_limit) 2528 return resp
Get reads one IdentityAlias by ID.
2530 def update(self, identity_alias, timeout=None): 2531 ''' 2532 Update replaces all the fields of a IdentityAlias by ID. 2533 ''' 2534 deadline = None if timeout is None else time.time() + timeout 2535 req = IdentityAliasUpdateRequest() 2536 2537 if identity_alias is not None: 2538 req.identity_alias.CopyFrom( 2539 plumbing.convert_identity_alias_to_plumbing(identity_alias)) 2540 tries = 0 2541 plumbing_response = None 2542 while True: 2543 t = None if deadline is None else deadline - time.time() 2544 try: 2545 plumbing_response = self.stub.Update( 2546 req, 2547 metadata=self.parent.get_metadata('IdentityAliases.Update', 2548 req), 2549 timeout=t) 2550 except Exception as e: 2551 if self.parent.shouldRetry(tries, e, deadline): 2552 tries += 1 2553 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2554 continue 2555 raise plumbing.convert_error_to_porcelain(e) from e 2556 break 2557 2558 resp = models.IdentityAliasUpdateResponse() 2559 resp.identity_alias = plumbing.convert_identity_alias_to_porcelain( 2560 plumbing_response.identity_alias) 2561 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2562 plumbing_response.meta) 2563 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2564 plumbing_response.rate_limit) 2565 return resp
Update replaces all the fields of a IdentityAlias by ID.
2567 def delete(self, id, timeout=None): 2568 ''' 2569 Delete removes a IdentityAlias by ID. 2570 ''' 2571 deadline = None if timeout is None else time.time() + timeout 2572 req = IdentityAliasDeleteRequest() 2573 2574 req.id = (id) 2575 tries = 0 2576 plumbing_response = None 2577 while True: 2578 t = None if deadline is None else deadline - time.time() 2579 try: 2580 plumbing_response = self.stub.Delete( 2581 req, 2582 metadata=self.parent.get_metadata('IdentityAliases.Delete', 2583 req), 2584 timeout=t) 2585 except Exception as e: 2586 if self.parent.shouldRetry(tries, e, deadline): 2587 tries += 1 2588 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2589 continue 2590 raise plumbing.convert_error_to_porcelain(e) from e 2591 break 2592 2593 resp = models.IdentityAliasDeleteResponse() 2594 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2595 plumbing_response.meta) 2596 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2597 plumbing_response.rate_limit) 2598 return resp
Delete removes a IdentityAlias by ID.
2600 def list(self, filter, *args, timeout=None): 2601 ''' 2602 List gets a list of IdentityAliases matching a given set of criteria. 2603 ''' 2604 deadline = None if timeout is None else time.time() + timeout 2605 req = IdentityAliasListRequest() 2606 req.meta.CopyFrom(ListRequestMetadata()) 2607 if self.parent.page_limit > 0: 2608 req.meta.limit = self.parent.page_limit 2609 if self.parent.snapshot_datetime is not None: 2610 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2611 2612 req.filter = plumbing.quote_filter_args(filter, *args) 2613 2614 def generator(svc, req): 2615 tries = 0 2616 while True: 2617 t = None if deadline is None else deadline - time.time() 2618 try: 2619 plumbing_response = svc.stub.List( 2620 req, 2621 metadata=svc.parent.get_metadata( 2622 'IdentityAliases.List', req), 2623 timeout=t) 2624 except Exception as e: 2625 if self.parent.shouldRetry(tries, e, deadline): 2626 tries += 1 2627 time.sleep( 2628 self.parent.exponentialBackoff(tries, deadline)) 2629 continue 2630 raise plumbing.convert_error_to_porcelain(e) from e 2631 tries = 0 2632 for plumbing_item in plumbing_response.identity_aliases: 2633 yield plumbing.convert_identity_alias_to_porcelain( 2634 plumbing_item) 2635 if plumbing_response.meta.next_cursor == '': 2636 break 2637 req.meta.cursor = plumbing_response.meta.next_cursor 2638 2639 return generator(self, req)
List gets a list of IdentityAliases matching a given set of criteria.
2642class SnapshotIdentityAliases: 2643 ''' 2644 SnapshotIdentityAliases exposes the read only methods of the IdentityAliases 2645 service for historical queries. 2646 ''' 2647 def __init__(self, identity_aliases): 2648 self.identity_aliases = identity_aliases 2649 2650 def get(self, id, timeout=None): 2651 ''' 2652 Get reads one IdentityAlias by ID. 2653 ''' 2654 return self.identity_aliases.get(id, timeout=timeout) 2655 2656 def list(self, filter, *args, timeout=None): 2657 ''' 2658 List gets a list of IdentityAliases matching a given set of criteria. 2659 ''' 2660 return self.identity_aliases.list(filter, *args, timeout=timeout)
SnapshotIdentityAliases exposes the read only methods of the IdentityAliases service for historical queries.
2650 def get(self, id, timeout=None): 2651 ''' 2652 Get reads one IdentityAlias by ID. 2653 ''' 2654 return self.identity_aliases.get(id, timeout=timeout)
Get reads one IdentityAlias by ID.
2656 def list(self, filter, *args, timeout=None): 2657 ''' 2658 List gets a list of IdentityAliases matching a given set of criteria. 2659 ''' 2660 return self.identity_aliases.list(filter, *args, timeout=timeout)
List gets a list of IdentityAliases matching a given set of criteria.
2663class IdentityAliasesHistory: 2664 ''' 2665 IdentityAliasesHistory records all changes to the state of a IdentityAlias. 2666 See `strongdm.models.IdentityAliasHistory`. 2667 ''' 2668 def __init__(self, channel, client): 2669 self.parent = client 2670 self.stub = IdentityAliasesHistoryStub(channel) 2671 2672 def list(self, filter, *args, timeout=None): 2673 ''' 2674 List gets a list of IdentityAliasHistory records matching a given set of criteria. 2675 ''' 2676 deadline = None if timeout is None else time.time() + timeout 2677 req = IdentityAliasHistoryListRequest() 2678 req.meta.CopyFrom(ListRequestMetadata()) 2679 if self.parent.page_limit > 0: 2680 req.meta.limit = self.parent.page_limit 2681 if self.parent.snapshot_datetime is not None: 2682 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2683 2684 req.filter = plumbing.quote_filter_args(filter, *args) 2685 2686 def generator(svc, req): 2687 tries = 0 2688 while True: 2689 t = None if deadline is None else deadline - time.time() 2690 try: 2691 plumbing_response = svc.stub.List( 2692 req, 2693 metadata=svc.parent.get_metadata( 2694 'IdentityAliasesHistory.List', req), 2695 timeout=t) 2696 except Exception as e: 2697 if self.parent.shouldRetry(tries, e, deadline): 2698 tries += 1 2699 time.sleep( 2700 self.parent.exponentialBackoff(tries, deadline)) 2701 continue 2702 raise plumbing.convert_error_to_porcelain(e) from e 2703 tries = 0 2704 for plumbing_item in plumbing_response.history: 2705 yield plumbing.convert_identity_alias_history_to_porcelain( 2706 plumbing_item) 2707 if plumbing_response.meta.next_cursor == '': 2708 break 2709 req.meta.cursor = plumbing_response.meta.next_cursor 2710 2711 return generator(self, req)
IdentityAliasesHistory records all changes to the state of a IdentityAlias.
See strongdm.models.IdentityAliasHistory
.
2672 def list(self, filter, *args, timeout=None): 2673 ''' 2674 List gets a list of IdentityAliasHistory records matching a given set of criteria. 2675 ''' 2676 deadline = None if timeout is None else time.time() + timeout 2677 req = IdentityAliasHistoryListRequest() 2678 req.meta.CopyFrom(ListRequestMetadata()) 2679 if self.parent.page_limit > 0: 2680 req.meta.limit = self.parent.page_limit 2681 if self.parent.snapshot_datetime is not None: 2682 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2683 2684 req.filter = plumbing.quote_filter_args(filter, *args) 2685 2686 def generator(svc, req): 2687 tries = 0 2688 while True: 2689 t = None if deadline is None else deadline - time.time() 2690 try: 2691 plumbing_response = svc.stub.List( 2692 req, 2693 metadata=svc.parent.get_metadata( 2694 'IdentityAliasesHistory.List', req), 2695 timeout=t) 2696 except Exception as e: 2697 if self.parent.shouldRetry(tries, e, deadline): 2698 tries += 1 2699 time.sleep( 2700 self.parent.exponentialBackoff(tries, deadline)) 2701 continue 2702 raise plumbing.convert_error_to_porcelain(e) from e 2703 tries = 0 2704 for plumbing_item in plumbing_response.history: 2705 yield plumbing.convert_identity_alias_history_to_porcelain( 2706 plumbing_item) 2707 if plumbing_response.meta.next_cursor == '': 2708 break 2709 req.meta.cursor = plumbing_response.meta.next_cursor 2710 2711 return generator(self, req)
List gets a list of IdentityAliasHistory records matching a given set of criteria.
2714class IdentitySets: 2715 ''' 2716 A IdentitySet is a named grouping of Identity Aliases for Accounts. 2717 An Account's relationship to a IdentitySet is defined via IdentityAlias objects. 2718 See `strongdm.models.IdentitySet`. 2719 ''' 2720 def __init__(self, channel, client): 2721 self.parent = client 2722 self.stub = IdentitySetsStub(channel) 2723 2724 def create(self, identity_set, timeout=None): 2725 ''' 2726 Create registers a new IdentitySet. 2727 ''' 2728 deadline = None if timeout is None else time.time() + timeout 2729 req = IdentitySetCreateRequest() 2730 2731 if identity_set is not None: 2732 req.identity_set.CopyFrom( 2733 plumbing.convert_identity_set_to_plumbing(identity_set)) 2734 tries = 0 2735 plumbing_response = None 2736 while True: 2737 t = None if deadline is None else deadline - time.time() 2738 try: 2739 plumbing_response = self.stub.Create( 2740 req, 2741 metadata=self.parent.get_metadata('IdentitySets.Create', 2742 req), 2743 timeout=t) 2744 except Exception as e: 2745 if self.parent.shouldRetry(tries, e, deadline): 2746 tries += 1 2747 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2748 continue 2749 raise plumbing.convert_error_to_porcelain(e) from e 2750 break 2751 2752 resp = models.IdentitySetCreateResponse() 2753 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2754 plumbing_response.identity_set) 2755 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2756 plumbing_response.meta) 2757 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2758 plumbing_response.rate_limit) 2759 return resp 2760 2761 def get(self, id, timeout=None): 2762 ''' 2763 Get reads one IdentitySet by ID. 2764 ''' 2765 deadline = None if timeout is None else time.time() + timeout 2766 req = IdentitySetGetRequest() 2767 if self.parent.snapshot_datetime is not None: 2768 req.meta.CopyFrom(GetRequestMetadata()) 2769 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2770 2771 req.id = (id) 2772 tries = 0 2773 plumbing_response = None 2774 while True: 2775 t = None if deadline is None else deadline - time.time() 2776 try: 2777 plumbing_response = self.stub.Get( 2778 req, 2779 metadata=self.parent.get_metadata('IdentitySets.Get', req), 2780 timeout=t) 2781 except Exception as e: 2782 if self.parent.shouldRetry(tries, e, deadline): 2783 tries += 1 2784 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2785 continue 2786 raise plumbing.convert_error_to_porcelain(e) from e 2787 break 2788 2789 resp = models.IdentitySetGetResponse() 2790 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2791 plumbing_response.identity_set) 2792 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2793 plumbing_response.meta) 2794 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2795 plumbing_response.rate_limit) 2796 return resp 2797 2798 def update(self, identity_set, timeout=None): 2799 ''' 2800 Update replaces all the fields of a IdentitySet by ID. 2801 ''' 2802 deadline = None if timeout is None else time.time() + timeout 2803 req = IdentitySetUpdateRequest() 2804 2805 if identity_set is not None: 2806 req.identity_set.CopyFrom( 2807 plumbing.convert_identity_set_to_plumbing(identity_set)) 2808 tries = 0 2809 plumbing_response = None 2810 while True: 2811 t = None if deadline is None else deadline - time.time() 2812 try: 2813 plumbing_response = self.stub.Update( 2814 req, 2815 metadata=self.parent.get_metadata('IdentitySets.Update', 2816 req), 2817 timeout=t) 2818 except Exception as e: 2819 if self.parent.shouldRetry(tries, e, deadline): 2820 tries += 1 2821 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2822 continue 2823 raise plumbing.convert_error_to_porcelain(e) from e 2824 break 2825 2826 resp = models.IdentitySetUpdateResponse() 2827 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2828 plumbing_response.identity_set) 2829 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2830 plumbing_response.meta) 2831 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2832 plumbing_response.rate_limit) 2833 return resp 2834 2835 def delete(self, id, timeout=None): 2836 ''' 2837 Delete removes a IdentitySet by ID. 2838 ''' 2839 deadline = None if timeout is None else time.time() + timeout 2840 req = IdentitySetDeleteRequest() 2841 2842 req.id = (id) 2843 tries = 0 2844 plumbing_response = None 2845 while True: 2846 t = None if deadline is None else deadline - time.time() 2847 try: 2848 plumbing_response = self.stub.Delete( 2849 req, 2850 metadata=self.parent.get_metadata('IdentitySets.Delete', 2851 req), 2852 timeout=t) 2853 except Exception as e: 2854 if self.parent.shouldRetry(tries, e, deadline): 2855 tries += 1 2856 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2857 continue 2858 raise plumbing.convert_error_to_porcelain(e) from e 2859 break 2860 2861 resp = models.IdentitySetDeleteResponse() 2862 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2863 plumbing_response.meta) 2864 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2865 plumbing_response.rate_limit) 2866 return resp 2867 2868 def list(self, filter, *args, timeout=None): 2869 ''' 2870 List gets a list of IdentitySets matching a given set of criteria. 2871 ''' 2872 deadline = None if timeout is None else time.time() + timeout 2873 req = IdentitySetListRequest() 2874 req.meta.CopyFrom(ListRequestMetadata()) 2875 if self.parent.page_limit > 0: 2876 req.meta.limit = self.parent.page_limit 2877 if self.parent.snapshot_datetime is not None: 2878 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2879 2880 req.filter = plumbing.quote_filter_args(filter, *args) 2881 2882 def generator(svc, req): 2883 tries = 0 2884 while True: 2885 t = None if deadline is None else deadline - time.time() 2886 try: 2887 plumbing_response = svc.stub.List( 2888 req, 2889 metadata=svc.parent.get_metadata( 2890 'IdentitySets.List', req), 2891 timeout=t) 2892 except Exception as e: 2893 if self.parent.shouldRetry(tries, e, deadline): 2894 tries += 1 2895 time.sleep( 2896 self.parent.exponentialBackoff(tries, deadline)) 2897 continue 2898 raise plumbing.convert_error_to_porcelain(e) from e 2899 tries = 0 2900 for plumbing_item in plumbing_response.identity_sets: 2901 yield plumbing.convert_identity_set_to_porcelain( 2902 plumbing_item) 2903 if plumbing_response.meta.next_cursor == '': 2904 break 2905 req.meta.cursor = plumbing_response.meta.next_cursor 2906 2907 return generator(self, req)
A IdentitySet is a named grouping of Identity Aliases for Accounts.
An Account's relationship to a IdentitySet is defined via IdentityAlias objects.
See strongdm.models.IdentitySet
.
2724 def create(self, identity_set, timeout=None): 2725 ''' 2726 Create registers a new IdentitySet. 2727 ''' 2728 deadline = None if timeout is None else time.time() + timeout 2729 req = IdentitySetCreateRequest() 2730 2731 if identity_set is not None: 2732 req.identity_set.CopyFrom( 2733 plumbing.convert_identity_set_to_plumbing(identity_set)) 2734 tries = 0 2735 plumbing_response = None 2736 while True: 2737 t = None if deadline is None else deadline - time.time() 2738 try: 2739 plumbing_response = self.stub.Create( 2740 req, 2741 metadata=self.parent.get_metadata('IdentitySets.Create', 2742 req), 2743 timeout=t) 2744 except Exception as e: 2745 if self.parent.shouldRetry(tries, e, deadline): 2746 tries += 1 2747 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2748 continue 2749 raise plumbing.convert_error_to_porcelain(e) from e 2750 break 2751 2752 resp = models.IdentitySetCreateResponse() 2753 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2754 plumbing_response.identity_set) 2755 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 2756 plumbing_response.meta) 2757 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2758 plumbing_response.rate_limit) 2759 return resp
Create registers a new IdentitySet.
2761 def get(self, id, timeout=None): 2762 ''' 2763 Get reads one IdentitySet by ID. 2764 ''' 2765 deadline = None if timeout is None else time.time() + timeout 2766 req = IdentitySetGetRequest() 2767 if self.parent.snapshot_datetime is not None: 2768 req.meta.CopyFrom(GetRequestMetadata()) 2769 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2770 2771 req.id = (id) 2772 tries = 0 2773 plumbing_response = None 2774 while True: 2775 t = None if deadline is None else deadline - time.time() 2776 try: 2777 plumbing_response = self.stub.Get( 2778 req, 2779 metadata=self.parent.get_metadata('IdentitySets.Get', req), 2780 timeout=t) 2781 except Exception as e: 2782 if self.parent.shouldRetry(tries, e, deadline): 2783 tries += 1 2784 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2785 continue 2786 raise plumbing.convert_error_to_porcelain(e) from e 2787 break 2788 2789 resp = models.IdentitySetGetResponse() 2790 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2791 plumbing_response.identity_set) 2792 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 2793 plumbing_response.meta) 2794 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2795 plumbing_response.rate_limit) 2796 return resp
Get reads one IdentitySet by ID.
2798 def update(self, identity_set, timeout=None): 2799 ''' 2800 Update replaces all the fields of a IdentitySet by ID. 2801 ''' 2802 deadline = None if timeout is None else time.time() + timeout 2803 req = IdentitySetUpdateRequest() 2804 2805 if identity_set is not None: 2806 req.identity_set.CopyFrom( 2807 plumbing.convert_identity_set_to_plumbing(identity_set)) 2808 tries = 0 2809 plumbing_response = None 2810 while True: 2811 t = None if deadline is None else deadline - time.time() 2812 try: 2813 plumbing_response = self.stub.Update( 2814 req, 2815 metadata=self.parent.get_metadata('IdentitySets.Update', 2816 req), 2817 timeout=t) 2818 except Exception as e: 2819 if self.parent.shouldRetry(tries, e, deadline): 2820 tries += 1 2821 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2822 continue 2823 raise plumbing.convert_error_to_porcelain(e) from e 2824 break 2825 2826 resp = models.IdentitySetUpdateResponse() 2827 resp.identity_set = plumbing.convert_identity_set_to_porcelain( 2828 plumbing_response.identity_set) 2829 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 2830 plumbing_response.meta) 2831 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2832 plumbing_response.rate_limit) 2833 return resp
Update replaces all the fields of a IdentitySet by ID.
2835 def delete(self, id, timeout=None): 2836 ''' 2837 Delete removes a IdentitySet by ID. 2838 ''' 2839 deadline = None if timeout is None else time.time() + timeout 2840 req = IdentitySetDeleteRequest() 2841 2842 req.id = (id) 2843 tries = 0 2844 plumbing_response = None 2845 while True: 2846 t = None if deadline is None else deadline - time.time() 2847 try: 2848 plumbing_response = self.stub.Delete( 2849 req, 2850 metadata=self.parent.get_metadata('IdentitySets.Delete', 2851 req), 2852 timeout=t) 2853 except Exception as e: 2854 if self.parent.shouldRetry(tries, e, deadline): 2855 tries += 1 2856 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 2857 continue 2858 raise plumbing.convert_error_to_porcelain(e) from e 2859 break 2860 2861 resp = models.IdentitySetDeleteResponse() 2862 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 2863 plumbing_response.meta) 2864 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 2865 plumbing_response.rate_limit) 2866 return resp
Delete removes a IdentitySet by ID.
2868 def list(self, filter, *args, timeout=None): 2869 ''' 2870 List gets a list of IdentitySets matching a given set of criteria. 2871 ''' 2872 deadline = None if timeout is None else time.time() + timeout 2873 req = IdentitySetListRequest() 2874 req.meta.CopyFrom(ListRequestMetadata()) 2875 if self.parent.page_limit > 0: 2876 req.meta.limit = self.parent.page_limit 2877 if self.parent.snapshot_datetime is not None: 2878 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2879 2880 req.filter = plumbing.quote_filter_args(filter, *args) 2881 2882 def generator(svc, req): 2883 tries = 0 2884 while True: 2885 t = None if deadline is None else deadline - time.time() 2886 try: 2887 plumbing_response = svc.stub.List( 2888 req, 2889 metadata=svc.parent.get_metadata( 2890 'IdentitySets.List', req), 2891 timeout=t) 2892 except Exception as e: 2893 if self.parent.shouldRetry(tries, e, deadline): 2894 tries += 1 2895 time.sleep( 2896 self.parent.exponentialBackoff(tries, deadline)) 2897 continue 2898 raise plumbing.convert_error_to_porcelain(e) from e 2899 tries = 0 2900 for plumbing_item in plumbing_response.identity_sets: 2901 yield plumbing.convert_identity_set_to_porcelain( 2902 plumbing_item) 2903 if plumbing_response.meta.next_cursor == '': 2904 break 2905 req.meta.cursor = plumbing_response.meta.next_cursor 2906 2907 return generator(self, req)
List gets a list of IdentitySets matching a given set of criteria.
2910class SnapshotIdentitySets: 2911 ''' 2912 SnapshotIdentitySets exposes the read only methods of the IdentitySets 2913 service for historical queries. 2914 ''' 2915 def __init__(self, identity_sets): 2916 self.identity_sets = identity_sets 2917 2918 def get(self, id, timeout=None): 2919 ''' 2920 Get reads one IdentitySet by ID. 2921 ''' 2922 return self.identity_sets.get(id, timeout=timeout) 2923 2924 def list(self, filter, *args, timeout=None): 2925 ''' 2926 List gets a list of IdentitySets matching a given set of criteria. 2927 ''' 2928 return self.identity_sets.list(filter, *args, timeout=timeout)
SnapshotIdentitySets exposes the read only methods of the IdentitySets service for historical queries.
2918 def get(self, id, timeout=None): 2919 ''' 2920 Get reads one IdentitySet by ID. 2921 ''' 2922 return self.identity_sets.get(id, timeout=timeout)
Get reads one IdentitySet by ID.
2924 def list(self, filter, *args, timeout=None): 2925 ''' 2926 List gets a list of IdentitySets matching a given set of criteria. 2927 ''' 2928 return self.identity_sets.list(filter, *args, timeout=timeout)
List gets a list of IdentitySets matching a given set of criteria.
2931class IdentitySetsHistory: 2932 ''' 2933 IdentitySetsHistory records all changes to the state of a IdentitySet. 2934 See `strongdm.models.IdentitySetHistory`. 2935 ''' 2936 def __init__(self, channel, client): 2937 self.parent = client 2938 self.stub = IdentitySetsHistoryStub(channel) 2939 2940 def list(self, filter, *args, timeout=None): 2941 ''' 2942 List gets a list of IdentitySetHistory records matching a given set of criteria. 2943 ''' 2944 deadline = None if timeout is None else time.time() + timeout 2945 req = IdentitySetHistoryListRequest() 2946 req.meta.CopyFrom(ListRequestMetadata()) 2947 if self.parent.page_limit > 0: 2948 req.meta.limit = self.parent.page_limit 2949 if self.parent.snapshot_datetime is not None: 2950 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2951 2952 req.filter = plumbing.quote_filter_args(filter, *args) 2953 2954 def generator(svc, req): 2955 tries = 0 2956 while True: 2957 t = None if deadline is None else deadline - time.time() 2958 try: 2959 plumbing_response = svc.stub.List( 2960 req, 2961 metadata=svc.parent.get_metadata( 2962 'IdentitySetsHistory.List', req), 2963 timeout=t) 2964 except Exception as e: 2965 if self.parent.shouldRetry(tries, e, deadline): 2966 tries += 1 2967 time.sleep( 2968 self.parent.exponentialBackoff(tries, deadline)) 2969 continue 2970 raise plumbing.convert_error_to_porcelain(e) from e 2971 tries = 0 2972 for plumbing_item in plumbing_response.history: 2973 yield plumbing.convert_identity_set_history_to_porcelain( 2974 plumbing_item) 2975 if plumbing_response.meta.next_cursor == '': 2976 break 2977 req.meta.cursor = plumbing_response.meta.next_cursor 2978 2979 return generator(self, req)
IdentitySetsHistory records all changes to the state of a IdentitySet.
See strongdm.models.IdentitySetHistory
.
2940 def list(self, filter, *args, timeout=None): 2941 ''' 2942 List gets a list of IdentitySetHistory records matching a given set of criteria. 2943 ''' 2944 deadline = None if timeout is None else time.time() + timeout 2945 req = IdentitySetHistoryListRequest() 2946 req.meta.CopyFrom(ListRequestMetadata()) 2947 if self.parent.page_limit > 0: 2948 req.meta.limit = self.parent.page_limit 2949 if self.parent.snapshot_datetime is not None: 2950 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 2951 2952 req.filter = plumbing.quote_filter_args(filter, *args) 2953 2954 def generator(svc, req): 2955 tries = 0 2956 while True: 2957 t = None if deadline is None else deadline - time.time() 2958 try: 2959 plumbing_response = svc.stub.List( 2960 req, 2961 metadata=svc.parent.get_metadata( 2962 'IdentitySetsHistory.List', req), 2963 timeout=t) 2964 except Exception as e: 2965 if self.parent.shouldRetry(tries, e, deadline): 2966 tries += 1 2967 time.sleep( 2968 self.parent.exponentialBackoff(tries, deadline)) 2969 continue 2970 raise plumbing.convert_error_to_porcelain(e) from e 2971 tries = 0 2972 for plumbing_item in plumbing_response.history: 2973 yield plumbing.convert_identity_set_history_to_porcelain( 2974 plumbing_item) 2975 if plumbing_response.meta.next_cursor == '': 2976 break 2977 req.meta.cursor = plumbing_response.meta.next_cursor 2978 2979 return generator(self, req)
List gets a list of IdentitySetHistory records matching a given set of criteria.
2982class ManagedSecrets: 2983 ''' 2984 ManagedSecret is a private vertical for creating, reading, updating, 2985 deleting, listing and rotating the managed secrets in the secrets engines as 2986 an authenticated user. 2987 See `strongdm.models.ManagedSecret`. 2988 ''' 2989 def __init__(self, channel, client): 2990 self.parent = client 2991 self.stub = ManagedSecretsStub(channel) 2992 2993 def list(self, filter, *args, timeout=None): 2994 ''' 2995 List returns Managed Secrets from a Secret Engine. 2996 ''' 2997 deadline = None if timeout is None else time.time() + timeout 2998 req = ManagedSecretListRequest() 2999 req.meta.CopyFrom(ListRequestMetadata()) 3000 if self.parent.page_limit > 0: 3001 req.meta.limit = self.parent.page_limit 3002 if self.parent.snapshot_datetime is not None: 3003 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3004 3005 req.filter = plumbing.quote_filter_args(filter, *args) 3006 3007 def generator(svc, req): 3008 tries = 0 3009 while True: 3010 t = None if deadline is None else deadline - time.time() 3011 try: 3012 plumbing_response = svc.stub.List( 3013 req, 3014 metadata=svc.parent.get_metadata( 3015 'ManagedSecrets.List', req), 3016 timeout=t) 3017 except Exception as e: 3018 if self.parent.shouldRetry(tries, e, deadline): 3019 tries += 1 3020 time.sleep( 3021 self.parent.exponentialBackoff(tries, deadline)) 3022 continue 3023 raise plumbing.convert_error_to_porcelain(e) from e 3024 tries = 0 3025 for plumbing_item in plumbing_response.managed_secrets: 3026 yield plumbing.convert_managed_secret_to_porcelain( 3027 plumbing_item) 3028 if plumbing_response.meta.next_cursor == '': 3029 break 3030 req.meta.cursor = plumbing_response.meta.next_cursor 3031 3032 return generator(self, req) 3033 3034 def list_by_actor(self, filter, *args, timeout=None): 3035 ''' 3036 List returns Managed Secrets for an Actor from a Secret Engine. 3037 ''' 3038 deadline = None if timeout is None else time.time() + timeout 3039 req = ManagedSecretListRequest() 3040 req.meta.CopyFrom(ListRequestMetadata()) 3041 if self.parent.page_limit > 0: 3042 req.meta.limit = self.parent.page_limit 3043 if self.parent.snapshot_datetime is not None: 3044 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3045 3046 req.filter = plumbing.quote_filter_args(filter, *args) 3047 3048 def generator(svc, req): 3049 tries = 0 3050 while True: 3051 t = None if deadline is None else deadline - time.time() 3052 try: 3053 plumbing_response = svc.stub.ListByActor( 3054 req, 3055 metadata=svc.parent.get_metadata( 3056 'ManagedSecrets.ListByActor', req), 3057 timeout=t) 3058 except Exception as e: 3059 if self.parent.shouldRetry(tries, e, deadline): 3060 tries += 1 3061 time.sleep( 3062 self.parent.exponentialBackoff(tries, deadline)) 3063 continue 3064 raise plumbing.convert_error_to_porcelain(e) from e 3065 tries = 0 3066 for plumbing_item in plumbing_response.managed_secrets: 3067 yield plumbing.convert_managed_secret_to_porcelain( 3068 plumbing_item) 3069 if plumbing_response.meta.next_cursor == '': 3070 break 3071 req.meta.cursor = plumbing_response.meta.next_cursor 3072 3073 return generator(self, req) 3074 3075 def create(self, managed_secret, timeout=None): 3076 ''' 3077 Create creates a Managed Secret 3078 ''' 3079 deadline = None if timeout is None else time.time() + timeout 3080 req = ManagedSecretCreateRequest() 3081 3082 if managed_secret is not None: 3083 req.managed_secret.CopyFrom( 3084 plumbing.convert_managed_secret_to_plumbing(managed_secret)) 3085 tries = 0 3086 plumbing_response = None 3087 while True: 3088 t = None if deadline is None else deadline - time.time() 3089 try: 3090 plumbing_response = self.stub.Create( 3091 req, 3092 metadata=self.parent.get_metadata('ManagedSecrets.Create', 3093 req), 3094 timeout=t) 3095 except Exception as e: 3096 if self.parent.shouldRetry(tries, e, deadline): 3097 tries += 1 3098 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3099 continue 3100 raise plumbing.convert_error_to_porcelain(e) from e 3101 break 3102 3103 resp = models.ManagedSecretCreateResponse() 3104 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3105 plumbing_response.managed_secret) 3106 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3107 plumbing_response.meta) 3108 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3109 plumbing_response.rate_limit) 3110 return resp 3111 3112 def update(self, managed_secret, timeout=None): 3113 ''' 3114 Update updates a Managed Secret 3115 ''' 3116 deadline = None if timeout is None else time.time() + timeout 3117 req = ManagedSecretUpdateRequest() 3118 3119 if managed_secret is not None: 3120 req.managed_secret.CopyFrom( 3121 plumbing.convert_managed_secret_to_plumbing(managed_secret)) 3122 tries = 0 3123 plumbing_response = None 3124 while True: 3125 t = None if deadline is None else deadline - time.time() 3126 try: 3127 plumbing_response = self.stub.Update( 3128 req, 3129 metadata=self.parent.get_metadata('ManagedSecrets.Update', 3130 req), 3131 timeout=t) 3132 except Exception as e: 3133 if self.parent.shouldRetry(tries, e, deadline): 3134 tries += 1 3135 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3136 continue 3137 raise plumbing.convert_error_to_porcelain(e) from e 3138 break 3139 3140 resp = models.ManagedSecretUpdateResponse() 3141 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3142 plumbing_response.managed_secret) 3143 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 3144 plumbing_response.meta) 3145 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3146 plumbing_response.rate_limit) 3147 return resp 3148 3149 def rotate(self, id, timeout=None): 3150 ''' 3151 Rotate forces rotation of Managed Secret 3152 ''' 3153 deadline = None if timeout is None else time.time() + timeout 3154 req = ManagedSecretRotateRequest() 3155 3156 req.id = (id) 3157 tries = 0 3158 plumbing_response = None 3159 while True: 3160 t = None if deadline is None else deadline - time.time() 3161 try: 3162 plumbing_response = self.stub.Rotate( 3163 req, 3164 metadata=self.parent.get_metadata('ManagedSecrets.Rotate', 3165 req), 3166 timeout=t) 3167 except Exception as e: 3168 if self.parent.shouldRetry(tries, e, deadline): 3169 tries += 1 3170 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3171 continue 3172 raise plumbing.convert_error_to_porcelain(e) from e 3173 break 3174 3175 resp = models.ManagedSecretRotateResponse() 3176 resp.meta = plumbing.convert_generic_response_metadata_to_porcelain( 3177 plumbing_response.meta) 3178 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3179 plumbing_response.rate_limit) 3180 return resp 3181 3182 def delete(self, id, timeout=None): 3183 ''' 3184 Delete deletes a Managed Secret 3185 ''' 3186 deadline = None if timeout is None else time.time() + timeout 3187 req = ManagedSecretDeleteRequest() 3188 3189 req.id = (id) 3190 tries = 0 3191 plumbing_response = None 3192 while True: 3193 t = None if deadline is None else deadline - time.time() 3194 try: 3195 plumbing_response = self.stub.Delete( 3196 req, 3197 metadata=self.parent.get_metadata('ManagedSecrets.Delete', 3198 req), 3199 timeout=t) 3200 except Exception as e: 3201 if self.parent.shouldRetry(tries, e, deadline): 3202 tries += 1 3203 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3204 continue 3205 raise plumbing.convert_error_to_porcelain(e) from e 3206 break 3207 3208 resp = models.ManagedSecretDeleteResponse() 3209 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3210 plumbing_response.rate_limit) 3211 return resp 3212 3213 def force_delete(self, id, timeout=None): 3214 ''' 3215 ForceDelete deletes a Managed Secret regardless of errors on external system 3216 ''' 3217 deadline = None if timeout is None else time.time() + timeout 3218 req = ManagedSecretDeleteRequest() 3219 3220 req.id = (id) 3221 tries = 0 3222 plumbing_response = None 3223 while True: 3224 t = None if deadline is None else deadline - time.time() 3225 try: 3226 plumbing_response = self.stub.ForceDelete( 3227 req, 3228 metadata=self.parent.get_metadata( 3229 'ManagedSecrets.ForceDelete', req), 3230 timeout=t) 3231 except Exception as e: 3232 if self.parent.shouldRetry(tries, e, deadline): 3233 tries += 1 3234 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3235 continue 3236 raise plumbing.convert_error_to_porcelain(e) from e 3237 break 3238 3239 resp = models.ManagedSecretDeleteResponse() 3240 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3241 plumbing_response.rate_limit) 3242 return resp 3243 3244 def get(self, id, timeout=None): 3245 ''' 3246 Get gets details of a Managed Secret without sensitive data 3247 ''' 3248 deadline = None if timeout is None else time.time() + timeout 3249 req = ManagedSecretGetRequest() 3250 if self.parent.snapshot_datetime is not None: 3251 req.meta.CopyFrom(GetRequestMetadata()) 3252 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3253 3254 req.id = (id) 3255 tries = 0 3256 plumbing_response = None 3257 while True: 3258 t = None if deadline is None else deadline - time.time() 3259 try: 3260 plumbing_response = self.stub.Get( 3261 req, 3262 metadata=self.parent.get_metadata('ManagedSecrets.Get', 3263 req), 3264 timeout=t) 3265 except Exception as e: 3266 if self.parent.shouldRetry(tries, e, deadline): 3267 tries += 1 3268 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3269 continue 3270 raise plumbing.convert_error_to_porcelain(e) from e 3271 break 3272 3273 resp = models.ManagedSecretGetResponse() 3274 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3275 plumbing_response.managed_secret) 3276 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3277 plumbing_response.meta) 3278 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3279 plumbing_response.rate_limit) 3280 return resp 3281 3282 def retrieve(self, id, public_key, timeout=None): 3283 ''' 3284 Retrieve returns Managed Secret with sensitive data 3285 ''' 3286 deadline = None if timeout is None else time.time() + timeout 3287 req = ManagedSecretRetrieveRequest() 3288 3289 req.id = (id) 3290 req.public_key = (public_key) 3291 tries = 0 3292 plumbing_response = None 3293 while True: 3294 t = None if deadline is None else deadline - time.time() 3295 try: 3296 plumbing_response = self.stub.Retrieve( 3297 req, 3298 metadata=self.parent.get_metadata( 3299 'ManagedSecrets.Retrieve', req), 3300 timeout=t) 3301 except Exception as e: 3302 if self.parent.shouldRetry(tries, e, deadline): 3303 tries += 1 3304 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3305 continue 3306 raise plumbing.convert_error_to_porcelain(e) from e 3307 break 3308 3309 resp = models.ManagedSecretRetrieveResponse() 3310 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3311 plumbing_response.managed_secret) 3312 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3313 plumbing_response.meta) 3314 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3315 plumbing_response.rate_limit) 3316 return resp 3317 3318 def validate(self, id, timeout=None): 3319 ''' 3320 Validate returns the result of testing the stored credential against the 3321 secret engine. 3322 ''' 3323 deadline = None if timeout is None else time.time() + timeout 3324 req = ManagedSecretValidateRequest() 3325 3326 req.id = (id) 3327 tries = 0 3328 plumbing_response = None 3329 while True: 3330 t = None if deadline is None else deadline - time.time() 3331 try: 3332 plumbing_response = self.stub.Validate( 3333 req, 3334 metadata=self.parent.get_metadata( 3335 'ManagedSecrets.Validate', req), 3336 timeout=t) 3337 except Exception as e: 3338 if self.parent.shouldRetry(tries, e, deadline): 3339 tries += 1 3340 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3341 continue 3342 raise plumbing.convert_error_to_porcelain(e) from e 3343 break 3344 3345 resp = models.ManagedSecretValidateResponse() 3346 resp.invalid_info = (plumbing_response.invalid_info) 3347 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3348 plumbing_response.meta) 3349 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3350 plumbing_response.rate_limit) 3351 resp.valid = (plumbing_response.valid) 3352 return resp 3353 3354 def logs(self, filter, *args, timeout=None): 3355 ''' 3356 Logs returns the audit records for the managed secret. This may be replaced 3357 in the future. 3358 ''' 3359 deadline = None if timeout is None else time.time() + timeout 3360 req = ManagedSecretLogsRequest() 3361 req.meta.CopyFrom(ListRequestMetadata()) 3362 if self.parent.page_limit > 0: 3363 req.meta.limit = self.parent.page_limit 3364 if self.parent.snapshot_datetime is not None: 3365 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3366 3367 req.filter = plumbing.quote_filter_args(filter, *args) 3368 3369 def generator(svc, req): 3370 tries = 0 3371 while True: 3372 t = None if deadline is None else deadline - time.time() 3373 try: 3374 plumbing_response = svc.stub.Logs( 3375 req, 3376 metadata=svc.parent.get_metadata( 3377 'ManagedSecrets.Logs', req), 3378 timeout=t) 3379 except Exception as e: 3380 if self.parent.shouldRetry(tries, e, deadline): 3381 tries += 1 3382 time.sleep( 3383 self.parent.exponentialBackoff(tries, deadline)) 3384 continue 3385 raise plumbing.convert_error_to_porcelain(e) from e 3386 tries = 0 3387 for plumbing_item in plumbing_response.managed_secret_logs: 3388 yield plumbing.convert_managed_secret_log_to_porcelain( 3389 plumbing_item) 3390 if plumbing_response.meta.next_cursor == '': 3391 break 3392 req.meta.cursor = plumbing_response.meta.next_cursor 3393 3394 return generator(self, req)
ManagedSecret is a private vertical for creating, reading, updating,
deleting, listing and rotating the managed secrets in the secrets engines as
an authenticated user.
See strongdm.models.ManagedSecret
.
2993 def list(self, filter, *args, timeout=None): 2994 ''' 2995 List returns Managed Secrets from a Secret Engine. 2996 ''' 2997 deadline = None if timeout is None else time.time() + timeout 2998 req = ManagedSecretListRequest() 2999 req.meta.CopyFrom(ListRequestMetadata()) 3000 if self.parent.page_limit > 0: 3001 req.meta.limit = self.parent.page_limit 3002 if self.parent.snapshot_datetime is not None: 3003 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3004 3005 req.filter = plumbing.quote_filter_args(filter, *args) 3006 3007 def generator(svc, req): 3008 tries = 0 3009 while True: 3010 t = None if deadline is None else deadline - time.time() 3011 try: 3012 plumbing_response = svc.stub.List( 3013 req, 3014 metadata=svc.parent.get_metadata( 3015 'ManagedSecrets.List', req), 3016 timeout=t) 3017 except Exception as e: 3018 if self.parent.shouldRetry(tries, e, deadline): 3019 tries += 1 3020 time.sleep( 3021 self.parent.exponentialBackoff(tries, deadline)) 3022 continue 3023 raise plumbing.convert_error_to_porcelain(e) from e 3024 tries = 0 3025 for plumbing_item in plumbing_response.managed_secrets: 3026 yield plumbing.convert_managed_secret_to_porcelain( 3027 plumbing_item) 3028 if plumbing_response.meta.next_cursor == '': 3029 break 3030 req.meta.cursor = plumbing_response.meta.next_cursor 3031 3032 return generator(self, req)
List returns Managed Secrets from a Secret Engine.
3034 def list_by_actor(self, filter, *args, timeout=None): 3035 ''' 3036 List returns Managed Secrets for an Actor from a Secret Engine. 3037 ''' 3038 deadline = None if timeout is None else time.time() + timeout 3039 req = ManagedSecretListRequest() 3040 req.meta.CopyFrom(ListRequestMetadata()) 3041 if self.parent.page_limit > 0: 3042 req.meta.limit = self.parent.page_limit 3043 if self.parent.snapshot_datetime is not None: 3044 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3045 3046 req.filter = plumbing.quote_filter_args(filter, *args) 3047 3048 def generator(svc, req): 3049 tries = 0 3050 while True: 3051 t = None if deadline is None else deadline - time.time() 3052 try: 3053 plumbing_response = svc.stub.ListByActor( 3054 req, 3055 metadata=svc.parent.get_metadata( 3056 'ManagedSecrets.ListByActor', req), 3057 timeout=t) 3058 except Exception as e: 3059 if self.parent.shouldRetry(tries, e, deadline): 3060 tries += 1 3061 time.sleep( 3062 self.parent.exponentialBackoff(tries, deadline)) 3063 continue 3064 raise plumbing.convert_error_to_porcelain(e) from e 3065 tries = 0 3066 for plumbing_item in plumbing_response.managed_secrets: 3067 yield plumbing.convert_managed_secret_to_porcelain( 3068 plumbing_item) 3069 if plumbing_response.meta.next_cursor == '': 3070 break 3071 req.meta.cursor = plumbing_response.meta.next_cursor 3072 3073 return generator(self, req)
List returns Managed Secrets for an Actor from a Secret Engine.
3075 def create(self, managed_secret, timeout=None): 3076 ''' 3077 Create creates a Managed Secret 3078 ''' 3079 deadline = None if timeout is None else time.time() + timeout 3080 req = ManagedSecretCreateRequest() 3081 3082 if managed_secret is not None: 3083 req.managed_secret.CopyFrom( 3084 plumbing.convert_managed_secret_to_plumbing(managed_secret)) 3085 tries = 0 3086 plumbing_response = None 3087 while True: 3088 t = None if deadline is None else deadline - time.time() 3089 try: 3090 plumbing_response = self.stub.Create( 3091 req, 3092 metadata=self.parent.get_metadata('ManagedSecrets.Create', 3093 req), 3094 timeout=t) 3095 except Exception as e: 3096 if self.parent.shouldRetry(tries, e, deadline): 3097 tries += 1 3098 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3099 continue 3100 raise plumbing.convert_error_to_porcelain(e) from e 3101 break 3102 3103 resp = models.ManagedSecretCreateResponse() 3104 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3105 plumbing_response.managed_secret) 3106 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3107 plumbing_response.meta) 3108 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3109 plumbing_response.rate_limit) 3110 return resp
Create creates a Managed Secret
3112 def update(self, managed_secret, timeout=None): 3113 ''' 3114 Update updates a Managed Secret 3115 ''' 3116 deadline = None if timeout is None else time.time() + timeout 3117 req = ManagedSecretUpdateRequest() 3118 3119 if managed_secret is not None: 3120 req.managed_secret.CopyFrom( 3121 plumbing.convert_managed_secret_to_plumbing(managed_secret)) 3122 tries = 0 3123 plumbing_response = None 3124 while True: 3125 t = None if deadline is None else deadline - time.time() 3126 try: 3127 plumbing_response = self.stub.Update( 3128 req, 3129 metadata=self.parent.get_metadata('ManagedSecrets.Update', 3130 req), 3131 timeout=t) 3132 except Exception as e: 3133 if self.parent.shouldRetry(tries, e, deadline): 3134 tries += 1 3135 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3136 continue 3137 raise plumbing.convert_error_to_porcelain(e) from e 3138 break 3139 3140 resp = models.ManagedSecretUpdateResponse() 3141 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3142 plumbing_response.managed_secret) 3143 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 3144 plumbing_response.meta) 3145 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3146 plumbing_response.rate_limit) 3147 return resp
Update updates a Managed Secret
3149 def rotate(self, id, timeout=None): 3150 ''' 3151 Rotate forces rotation of Managed Secret 3152 ''' 3153 deadline = None if timeout is None else time.time() + timeout 3154 req = ManagedSecretRotateRequest() 3155 3156 req.id = (id) 3157 tries = 0 3158 plumbing_response = None 3159 while True: 3160 t = None if deadline is None else deadline - time.time() 3161 try: 3162 plumbing_response = self.stub.Rotate( 3163 req, 3164 metadata=self.parent.get_metadata('ManagedSecrets.Rotate', 3165 req), 3166 timeout=t) 3167 except Exception as e: 3168 if self.parent.shouldRetry(tries, e, deadline): 3169 tries += 1 3170 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3171 continue 3172 raise plumbing.convert_error_to_porcelain(e) from e 3173 break 3174 3175 resp = models.ManagedSecretRotateResponse() 3176 resp.meta = plumbing.convert_generic_response_metadata_to_porcelain( 3177 plumbing_response.meta) 3178 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3179 plumbing_response.rate_limit) 3180 return resp
Rotate forces rotation of Managed Secret
3182 def delete(self, id, timeout=None): 3183 ''' 3184 Delete deletes a Managed Secret 3185 ''' 3186 deadline = None if timeout is None else time.time() + timeout 3187 req = ManagedSecretDeleteRequest() 3188 3189 req.id = (id) 3190 tries = 0 3191 plumbing_response = None 3192 while True: 3193 t = None if deadline is None else deadline - time.time() 3194 try: 3195 plumbing_response = self.stub.Delete( 3196 req, 3197 metadata=self.parent.get_metadata('ManagedSecrets.Delete', 3198 req), 3199 timeout=t) 3200 except Exception as e: 3201 if self.parent.shouldRetry(tries, e, deadline): 3202 tries += 1 3203 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3204 continue 3205 raise plumbing.convert_error_to_porcelain(e) from e 3206 break 3207 3208 resp = models.ManagedSecretDeleteResponse() 3209 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3210 plumbing_response.rate_limit) 3211 return resp
Delete deletes a Managed Secret
3213 def force_delete(self, id, timeout=None): 3214 ''' 3215 ForceDelete deletes a Managed Secret regardless of errors on external system 3216 ''' 3217 deadline = None if timeout is None else time.time() + timeout 3218 req = ManagedSecretDeleteRequest() 3219 3220 req.id = (id) 3221 tries = 0 3222 plumbing_response = None 3223 while True: 3224 t = None if deadline is None else deadline - time.time() 3225 try: 3226 plumbing_response = self.stub.ForceDelete( 3227 req, 3228 metadata=self.parent.get_metadata( 3229 'ManagedSecrets.ForceDelete', req), 3230 timeout=t) 3231 except Exception as e: 3232 if self.parent.shouldRetry(tries, e, deadline): 3233 tries += 1 3234 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3235 continue 3236 raise plumbing.convert_error_to_porcelain(e) from e 3237 break 3238 3239 resp = models.ManagedSecretDeleteResponse() 3240 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3241 plumbing_response.rate_limit) 3242 return resp
ForceDelete deletes a Managed Secret regardless of errors on external system
3244 def get(self, id, timeout=None): 3245 ''' 3246 Get gets details of a Managed Secret without sensitive data 3247 ''' 3248 deadline = None if timeout is None else time.time() + timeout 3249 req = ManagedSecretGetRequest() 3250 if self.parent.snapshot_datetime is not None: 3251 req.meta.CopyFrom(GetRequestMetadata()) 3252 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3253 3254 req.id = (id) 3255 tries = 0 3256 plumbing_response = None 3257 while True: 3258 t = None if deadline is None else deadline - time.time() 3259 try: 3260 plumbing_response = self.stub.Get( 3261 req, 3262 metadata=self.parent.get_metadata('ManagedSecrets.Get', 3263 req), 3264 timeout=t) 3265 except Exception as e: 3266 if self.parent.shouldRetry(tries, e, deadline): 3267 tries += 1 3268 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3269 continue 3270 raise plumbing.convert_error_to_porcelain(e) from e 3271 break 3272 3273 resp = models.ManagedSecretGetResponse() 3274 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3275 plumbing_response.managed_secret) 3276 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3277 plumbing_response.meta) 3278 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3279 plumbing_response.rate_limit) 3280 return resp
Get gets details of a Managed Secret without sensitive data
3282 def retrieve(self, id, public_key, timeout=None): 3283 ''' 3284 Retrieve returns Managed Secret with sensitive data 3285 ''' 3286 deadline = None if timeout is None else time.time() + timeout 3287 req = ManagedSecretRetrieveRequest() 3288 3289 req.id = (id) 3290 req.public_key = (public_key) 3291 tries = 0 3292 plumbing_response = None 3293 while True: 3294 t = None if deadline is None else deadline - time.time() 3295 try: 3296 plumbing_response = self.stub.Retrieve( 3297 req, 3298 metadata=self.parent.get_metadata( 3299 'ManagedSecrets.Retrieve', req), 3300 timeout=t) 3301 except Exception as e: 3302 if self.parent.shouldRetry(tries, e, deadline): 3303 tries += 1 3304 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3305 continue 3306 raise plumbing.convert_error_to_porcelain(e) from e 3307 break 3308 3309 resp = models.ManagedSecretRetrieveResponse() 3310 resp.managed_secret = plumbing.convert_managed_secret_to_porcelain( 3311 plumbing_response.managed_secret) 3312 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3313 plumbing_response.meta) 3314 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3315 plumbing_response.rate_limit) 3316 return resp
Retrieve returns Managed Secret with sensitive data
3318 def validate(self, id, timeout=None): 3319 ''' 3320 Validate returns the result of testing the stored credential against the 3321 secret engine. 3322 ''' 3323 deadline = None if timeout is None else time.time() + timeout 3324 req = ManagedSecretValidateRequest() 3325 3326 req.id = (id) 3327 tries = 0 3328 plumbing_response = None 3329 while True: 3330 t = None if deadline is None else deadline - time.time() 3331 try: 3332 plumbing_response = self.stub.Validate( 3333 req, 3334 metadata=self.parent.get_metadata( 3335 'ManagedSecrets.Validate', req), 3336 timeout=t) 3337 except Exception as e: 3338 if self.parent.shouldRetry(tries, e, deadline): 3339 tries += 1 3340 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3341 continue 3342 raise plumbing.convert_error_to_porcelain(e) from e 3343 break 3344 3345 resp = models.ManagedSecretValidateResponse() 3346 resp.invalid_info = (plumbing_response.invalid_info) 3347 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3348 plumbing_response.meta) 3349 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3350 plumbing_response.rate_limit) 3351 resp.valid = (plumbing_response.valid) 3352 return resp
Validate returns the result of testing the stored credential against the secret engine.
3354 def logs(self, filter, *args, timeout=None): 3355 ''' 3356 Logs returns the audit records for the managed secret. This may be replaced 3357 in the future. 3358 ''' 3359 deadline = None if timeout is None else time.time() + timeout 3360 req = ManagedSecretLogsRequest() 3361 req.meta.CopyFrom(ListRequestMetadata()) 3362 if self.parent.page_limit > 0: 3363 req.meta.limit = self.parent.page_limit 3364 if self.parent.snapshot_datetime is not None: 3365 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3366 3367 req.filter = plumbing.quote_filter_args(filter, *args) 3368 3369 def generator(svc, req): 3370 tries = 0 3371 while True: 3372 t = None if deadline is None else deadline - time.time() 3373 try: 3374 plumbing_response = svc.stub.Logs( 3375 req, 3376 metadata=svc.parent.get_metadata( 3377 'ManagedSecrets.Logs', req), 3378 timeout=t) 3379 except Exception as e: 3380 if self.parent.shouldRetry(tries, e, deadline): 3381 tries += 1 3382 time.sleep( 3383 self.parent.exponentialBackoff(tries, deadline)) 3384 continue 3385 raise plumbing.convert_error_to_porcelain(e) from e 3386 tries = 0 3387 for plumbing_item in plumbing_response.managed_secret_logs: 3388 yield plumbing.convert_managed_secret_log_to_porcelain( 3389 plumbing_item) 3390 if plumbing_response.meta.next_cursor == '': 3391 break 3392 req.meta.cursor = plumbing_response.meta.next_cursor 3393 3394 return generator(self, req)
Logs returns the audit records for the managed secret. This may be replaced in the future.
3397class Nodes: 3398 ''' 3399 Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes: 3400 - **Gateways** are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers. 3401 - **Relays** are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections. 3402 See: 3403 `strongdm.models.Gateway` 3404 `strongdm.models.ProxyCluster` 3405 `strongdm.models.Relay` 3406 ''' 3407 def __init__(self, channel, client): 3408 self.parent = client 3409 self.stub = NodesStub(channel) 3410 3411 def create(self, node, timeout=None): 3412 ''' 3413 Create registers a new Node. 3414 ''' 3415 deadline = None if timeout is None else time.time() + timeout 3416 req = NodeCreateRequest() 3417 3418 if node is not None: 3419 req.node.CopyFrom(plumbing.convert_node_to_plumbing(node)) 3420 tries = 0 3421 plumbing_response = None 3422 while True: 3423 t = None if deadline is None else deadline - time.time() 3424 try: 3425 plumbing_response = self.stub.Create( 3426 req, 3427 metadata=self.parent.get_metadata('Nodes.Create', req), 3428 timeout=t) 3429 except Exception as e: 3430 if self.parent.shouldRetry(tries, e, deadline): 3431 tries += 1 3432 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3433 continue 3434 raise plumbing.convert_error_to_porcelain(e) from e 3435 break 3436 3437 resp = models.NodeCreateResponse() 3438 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3439 plumbing_response.meta) 3440 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3441 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3442 plumbing_response.rate_limit) 3443 resp.token = (plumbing_response.token) 3444 return resp 3445 3446 def get(self, id, timeout=None): 3447 ''' 3448 Get reads one Node by ID. 3449 ''' 3450 deadline = None if timeout is None else time.time() + timeout 3451 req = NodeGetRequest() 3452 if self.parent.snapshot_datetime is not None: 3453 req.meta.CopyFrom(GetRequestMetadata()) 3454 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3455 3456 req.id = (id) 3457 tries = 0 3458 plumbing_response = None 3459 while True: 3460 t = None if deadline is None else deadline - time.time() 3461 try: 3462 plumbing_response = self.stub.Get( 3463 req, 3464 metadata=self.parent.get_metadata('Nodes.Get', req), 3465 timeout=t) 3466 except Exception as e: 3467 if self.parent.shouldRetry(tries, e, deadline): 3468 tries += 1 3469 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3470 continue 3471 raise plumbing.convert_error_to_porcelain(e) from e 3472 break 3473 3474 resp = models.NodeGetResponse() 3475 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3476 plumbing_response.meta) 3477 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3478 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3479 plumbing_response.rate_limit) 3480 return resp 3481 3482 def update(self, node, timeout=None): 3483 ''' 3484 Update replaces all the fields of a Node by ID. 3485 ''' 3486 deadline = None if timeout is None else time.time() + timeout 3487 req = NodeUpdateRequest() 3488 3489 if node is not None: 3490 req.node.CopyFrom(plumbing.convert_node_to_plumbing(node)) 3491 tries = 0 3492 plumbing_response = None 3493 while True: 3494 t = None if deadline is None else deadline - time.time() 3495 try: 3496 plumbing_response = self.stub.Update( 3497 req, 3498 metadata=self.parent.get_metadata('Nodes.Update', req), 3499 timeout=t) 3500 except Exception as e: 3501 if self.parent.shouldRetry(tries, e, deadline): 3502 tries += 1 3503 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3504 continue 3505 raise plumbing.convert_error_to_porcelain(e) from e 3506 break 3507 3508 resp = models.NodeUpdateResponse() 3509 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 3510 plumbing_response.meta) 3511 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3512 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3513 plumbing_response.rate_limit) 3514 return resp 3515 3516 def delete(self, id, timeout=None): 3517 ''' 3518 Delete removes a Node by ID. 3519 ''' 3520 deadline = None if timeout is None else time.time() + timeout 3521 req = NodeDeleteRequest() 3522 3523 req.id = (id) 3524 tries = 0 3525 plumbing_response = None 3526 while True: 3527 t = None if deadline is None else deadline - time.time() 3528 try: 3529 plumbing_response = self.stub.Delete( 3530 req, 3531 metadata=self.parent.get_metadata('Nodes.Delete', req), 3532 timeout=t) 3533 except Exception as e: 3534 if self.parent.shouldRetry(tries, e, deadline): 3535 tries += 1 3536 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3537 continue 3538 raise plumbing.convert_error_to_porcelain(e) from e 3539 break 3540 3541 resp = models.NodeDeleteResponse() 3542 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3543 plumbing_response.meta) 3544 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3545 plumbing_response.rate_limit) 3546 return resp 3547 3548 def list(self, filter, *args, timeout=None): 3549 ''' 3550 List gets a list of Nodes matching a given set of criteria. 3551 ''' 3552 deadline = None if timeout is None else time.time() + timeout 3553 req = NodeListRequest() 3554 req.meta.CopyFrom(ListRequestMetadata()) 3555 if self.parent.page_limit > 0: 3556 req.meta.limit = self.parent.page_limit 3557 if self.parent.snapshot_datetime is not None: 3558 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3559 3560 req.filter = plumbing.quote_filter_args(filter, *args) 3561 3562 def generator(svc, req): 3563 tries = 0 3564 while True: 3565 t = None if deadline is None else deadline - time.time() 3566 try: 3567 plumbing_response = svc.stub.List( 3568 req, 3569 metadata=svc.parent.get_metadata('Nodes.List', req), 3570 timeout=t) 3571 except Exception as e: 3572 if self.parent.shouldRetry(tries, e, deadline): 3573 tries += 1 3574 time.sleep( 3575 self.parent.exponentialBackoff(tries, deadline)) 3576 continue 3577 raise plumbing.convert_error_to_porcelain(e) from e 3578 tries = 0 3579 for plumbing_item in plumbing_response.nodes: 3580 yield plumbing.convert_node_to_porcelain(plumbing_item) 3581 if plumbing_response.meta.next_cursor == '': 3582 break 3583 req.meta.cursor = plumbing_response.meta.next_cursor 3584 3585 return generator(self, req)
Nodes make up the strongDM network, and allow your users to connect securely to your resources. There are two types of nodes:
- Gateways are the entry points into network. They listen for connection from the strongDM client, and provide access to databases and servers.
- Relays are used to extend the strongDM network into segmented subnets. They provide access to databases and servers but do not listen for incoming connections.
See:
strongdm.models.Gateway
strongdm.models.ProxyCluster
strongdm.models.Relay
3411 def create(self, node, timeout=None): 3412 ''' 3413 Create registers a new Node. 3414 ''' 3415 deadline = None if timeout is None else time.time() + timeout 3416 req = NodeCreateRequest() 3417 3418 if node is not None: 3419 req.node.CopyFrom(plumbing.convert_node_to_plumbing(node)) 3420 tries = 0 3421 plumbing_response = None 3422 while True: 3423 t = None if deadline is None else deadline - time.time() 3424 try: 3425 plumbing_response = self.stub.Create( 3426 req, 3427 metadata=self.parent.get_metadata('Nodes.Create', req), 3428 timeout=t) 3429 except Exception as e: 3430 if self.parent.shouldRetry(tries, e, deadline): 3431 tries += 1 3432 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3433 continue 3434 raise plumbing.convert_error_to_porcelain(e) from e 3435 break 3436 3437 resp = models.NodeCreateResponse() 3438 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3439 plumbing_response.meta) 3440 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3441 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3442 plumbing_response.rate_limit) 3443 resp.token = (plumbing_response.token) 3444 return resp
Create registers a new Node.
3446 def get(self, id, timeout=None): 3447 ''' 3448 Get reads one Node by ID. 3449 ''' 3450 deadline = None if timeout is None else time.time() + timeout 3451 req = NodeGetRequest() 3452 if self.parent.snapshot_datetime is not None: 3453 req.meta.CopyFrom(GetRequestMetadata()) 3454 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3455 3456 req.id = (id) 3457 tries = 0 3458 plumbing_response = None 3459 while True: 3460 t = None if deadline is None else deadline - time.time() 3461 try: 3462 plumbing_response = self.stub.Get( 3463 req, 3464 metadata=self.parent.get_metadata('Nodes.Get', req), 3465 timeout=t) 3466 except Exception as e: 3467 if self.parent.shouldRetry(tries, e, deadline): 3468 tries += 1 3469 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3470 continue 3471 raise plumbing.convert_error_to_porcelain(e) from e 3472 break 3473 3474 resp = models.NodeGetResponse() 3475 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3476 plumbing_response.meta) 3477 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3478 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3479 plumbing_response.rate_limit) 3480 return resp
Get reads one Node by ID.
3482 def update(self, node, timeout=None): 3483 ''' 3484 Update replaces all the fields of a Node by ID. 3485 ''' 3486 deadline = None if timeout is None else time.time() + timeout 3487 req = NodeUpdateRequest() 3488 3489 if node is not None: 3490 req.node.CopyFrom(plumbing.convert_node_to_plumbing(node)) 3491 tries = 0 3492 plumbing_response = None 3493 while True: 3494 t = None if deadline is None else deadline - time.time() 3495 try: 3496 plumbing_response = self.stub.Update( 3497 req, 3498 metadata=self.parent.get_metadata('Nodes.Update', req), 3499 timeout=t) 3500 except Exception as e: 3501 if self.parent.shouldRetry(tries, e, deadline): 3502 tries += 1 3503 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3504 continue 3505 raise plumbing.convert_error_to_porcelain(e) from e 3506 break 3507 3508 resp = models.NodeUpdateResponse() 3509 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 3510 plumbing_response.meta) 3511 resp.node = plumbing.convert_node_to_porcelain(plumbing_response.node) 3512 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3513 plumbing_response.rate_limit) 3514 return resp
Update replaces all the fields of a Node by ID.
3516 def delete(self, id, timeout=None): 3517 ''' 3518 Delete removes a Node by ID. 3519 ''' 3520 deadline = None if timeout is None else time.time() + timeout 3521 req = NodeDeleteRequest() 3522 3523 req.id = (id) 3524 tries = 0 3525 plumbing_response = None 3526 while True: 3527 t = None if deadline is None else deadline - time.time() 3528 try: 3529 plumbing_response = self.stub.Delete( 3530 req, 3531 metadata=self.parent.get_metadata('Nodes.Delete', req), 3532 timeout=t) 3533 except Exception as e: 3534 if self.parent.shouldRetry(tries, e, deadline): 3535 tries += 1 3536 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3537 continue 3538 raise plumbing.convert_error_to_porcelain(e) from e 3539 break 3540 3541 resp = models.NodeDeleteResponse() 3542 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3543 plumbing_response.meta) 3544 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3545 plumbing_response.rate_limit) 3546 return resp
Delete removes a Node by ID.
3548 def list(self, filter, *args, timeout=None): 3549 ''' 3550 List gets a list of Nodes matching a given set of criteria. 3551 ''' 3552 deadline = None if timeout is None else time.time() + timeout 3553 req = NodeListRequest() 3554 req.meta.CopyFrom(ListRequestMetadata()) 3555 if self.parent.page_limit > 0: 3556 req.meta.limit = self.parent.page_limit 3557 if self.parent.snapshot_datetime is not None: 3558 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3559 3560 req.filter = plumbing.quote_filter_args(filter, *args) 3561 3562 def generator(svc, req): 3563 tries = 0 3564 while True: 3565 t = None if deadline is None else deadline - time.time() 3566 try: 3567 plumbing_response = svc.stub.List( 3568 req, 3569 metadata=svc.parent.get_metadata('Nodes.List', req), 3570 timeout=t) 3571 except Exception as e: 3572 if self.parent.shouldRetry(tries, e, deadline): 3573 tries += 1 3574 time.sleep( 3575 self.parent.exponentialBackoff(tries, deadline)) 3576 continue 3577 raise plumbing.convert_error_to_porcelain(e) from e 3578 tries = 0 3579 for plumbing_item in plumbing_response.nodes: 3580 yield plumbing.convert_node_to_porcelain(plumbing_item) 3581 if plumbing_response.meta.next_cursor == '': 3582 break 3583 req.meta.cursor = plumbing_response.meta.next_cursor 3584 3585 return generator(self, req)
List gets a list of Nodes matching a given set of criteria.
3588class SnapshotNodes: 3589 ''' 3590 SnapshotNodes exposes the read only methods of the Nodes 3591 service for historical queries. 3592 ''' 3593 def __init__(self, nodes): 3594 self.nodes = nodes 3595 3596 def get(self, id, timeout=None): 3597 ''' 3598 Get reads one Node by ID. 3599 ''' 3600 return self.nodes.get(id, timeout=timeout) 3601 3602 def list(self, filter, *args, timeout=None): 3603 ''' 3604 List gets a list of Nodes matching a given set of criteria. 3605 ''' 3606 return self.nodes.list(filter, *args, timeout=timeout)
SnapshotNodes exposes the read only methods of the Nodes service for historical queries.
3609class NodesHistory: 3610 ''' 3611 NodesHistory records all changes to the state of a Node. 3612 See `strongdm.models.NodeHistory`. 3613 ''' 3614 def __init__(self, channel, client): 3615 self.parent = client 3616 self.stub = NodesHistoryStub(channel) 3617 3618 def list(self, filter, *args, timeout=None): 3619 ''' 3620 List gets a list of NodeHistory records matching a given set of criteria. 3621 ''' 3622 deadline = None if timeout is None else time.time() + timeout 3623 req = NodeHistoryListRequest() 3624 req.meta.CopyFrom(ListRequestMetadata()) 3625 if self.parent.page_limit > 0: 3626 req.meta.limit = self.parent.page_limit 3627 if self.parent.snapshot_datetime is not None: 3628 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3629 3630 req.filter = plumbing.quote_filter_args(filter, *args) 3631 3632 def generator(svc, req): 3633 tries = 0 3634 while True: 3635 t = None if deadline is None else deadline - time.time() 3636 try: 3637 plumbing_response = svc.stub.List( 3638 req, 3639 metadata=svc.parent.get_metadata( 3640 'NodesHistory.List', req), 3641 timeout=t) 3642 except Exception as e: 3643 if self.parent.shouldRetry(tries, e, deadline): 3644 tries += 1 3645 time.sleep( 3646 self.parent.exponentialBackoff(tries, deadline)) 3647 continue 3648 raise plumbing.convert_error_to_porcelain(e) from e 3649 tries = 0 3650 for plumbing_item in plumbing_response.history: 3651 yield plumbing.convert_node_history_to_porcelain( 3652 plumbing_item) 3653 if plumbing_response.meta.next_cursor == '': 3654 break 3655 req.meta.cursor = plumbing_response.meta.next_cursor 3656 3657 return generator(self, req)
NodesHistory records all changes to the state of a Node.
See strongdm.models.NodeHistory
.
3618 def list(self, filter, *args, timeout=None): 3619 ''' 3620 List gets a list of NodeHistory records matching a given set of criteria. 3621 ''' 3622 deadline = None if timeout is None else time.time() + timeout 3623 req = NodeHistoryListRequest() 3624 req.meta.CopyFrom(ListRequestMetadata()) 3625 if self.parent.page_limit > 0: 3626 req.meta.limit = self.parent.page_limit 3627 if self.parent.snapshot_datetime is not None: 3628 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3629 3630 req.filter = plumbing.quote_filter_args(filter, *args) 3631 3632 def generator(svc, req): 3633 tries = 0 3634 while True: 3635 t = None if deadline is None else deadline - time.time() 3636 try: 3637 plumbing_response = svc.stub.List( 3638 req, 3639 metadata=svc.parent.get_metadata( 3640 'NodesHistory.List', req), 3641 timeout=t) 3642 except Exception as e: 3643 if self.parent.shouldRetry(tries, e, deadline): 3644 tries += 1 3645 time.sleep( 3646 self.parent.exponentialBackoff(tries, deadline)) 3647 continue 3648 raise plumbing.convert_error_to_porcelain(e) from e 3649 tries = 0 3650 for plumbing_item in plumbing_response.history: 3651 yield plumbing.convert_node_history_to_porcelain( 3652 plumbing_item) 3653 if plumbing_response.meta.next_cursor == '': 3654 break 3655 req.meta.cursor = plumbing_response.meta.next_cursor 3656 3657 return generator(self, req)
List gets a list of NodeHistory records matching a given set of criteria.
3660class OrganizationHistory: 3661 ''' 3662 OrganizationHistory records all changes to the state of an Organization. 3663 See `strongdm.models.OrganizationHistoryRecord`. 3664 ''' 3665 def __init__(self, channel, client): 3666 self.parent = client 3667 self.stub = OrganizationHistoryStub(channel) 3668 3669 def list(self, filter, *args, timeout=None): 3670 ''' 3671 List gets a list of OrganizationHistory records matching a given set of criteria. 3672 ''' 3673 deadline = None if timeout is None else time.time() + timeout 3674 req = OrganizationHistoryListRequest() 3675 req.meta.CopyFrom(ListRequestMetadata()) 3676 if self.parent.page_limit > 0: 3677 req.meta.limit = self.parent.page_limit 3678 if self.parent.snapshot_datetime is not None: 3679 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3680 3681 req.filter = plumbing.quote_filter_args(filter, *args) 3682 3683 def generator(svc, req): 3684 tries = 0 3685 while True: 3686 t = None if deadline is None else deadline - time.time() 3687 try: 3688 plumbing_response = svc.stub.List( 3689 req, 3690 metadata=svc.parent.get_metadata( 3691 'OrganizationHistory.List', req), 3692 timeout=t) 3693 except Exception as e: 3694 if self.parent.shouldRetry(tries, e, deadline): 3695 tries += 1 3696 time.sleep( 3697 self.parent.exponentialBackoff(tries, deadline)) 3698 continue 3699 raise plumbing.convert_error_to_porcelain(e) from e 3700 tries = 0 3701 for plumbing_item in plumbing_response.history: 3702 yield plumbing.convert_organization_history_record_to_porcelain( 3703 plumbing_item) 3704 if plumbing_response.meta.next_cursor == '': 3705 break 3706 req.meta.cursor = plumbing_response.meta.next_cursor 3707 3708 return generator(self, req)
OrganizationHistory records all changes to the state of an Organization.
See strongdm.models.OrganizationHistoryRecord
.
3669 def list(self, filter, *args, timeout=None): 3670 ''' 3671 List gets a list of OrganizationHistory records matching a given set of criteria. 3672 ''' 3673 deadline = None if timeout is None else time.time() + timeout 3674 req = OrganizationHistoryListRequest() 3675 req.meta.CopyFrom(ListRequestMetadata()) 3676 if self.parent.page_limit > 0: 3677 req.meta.limit = self.parent.page_limit 3678 if self.parent.snapshot_datetime is not None: 3679 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3680 3681 req.filter = plumbing.quote_filter_args(filter, *args) 3682 3683 def generator(svc, req): 3684 tries = 0 3685 while True: 3686 t = None if deadline is None else deadline - time.time() 3687 try: 3688 plumbing_response = svc.stub.List( 3689 req, 3690 metadata=svc.parent.get_metadata( 3691 'OrganizationHistory.List', req), 3692 timeout=t) 3693 except Exception as e: 3694 if self.parent.shouldRetry(tries, e, deadline): 3695 tries += 1 3696 time.sleep( 3697 self.parent.exponentialBackoff(tries, deadline)) 3698 continue 3699 raise plumbing.convert_error_to_porcelain(e) from e 3700 tries = 0 3701 for plumbing_item in plumbing_response.history: 3702 yield plumbing.convert_organization_history_record_to_porcelain( 3703 plumbing_item) 3704 if plumbing_response.meta.next_cursor == '': 3705 break 3706 req.meta.cursor = plumbing_response.meta.next_cursor 3707 3708 return generator(self, req)
List gets a list of OrganizationHistory records matching a given set of criteria.
3711class PeeringGroupNodes: 3712 ''' 3713 PeeringGroupNodes provides the building blocks necessary to obtain attach a node to a peering group. 3714 See `strongdm.models.PeeringGroupNode`. 3715 ''' 3716 def __init__(self, channel, client): 3717 self.parent = client 3718 self.stub = PeeringGroupNodesStub(channel) 3719 3720 def create(self, peering_group_node, timeout=None): 3721 ''' 3722 Create attaches a Node to a PeeringGroup 3723 ''' 3724 deadline = None if timeout is None else time.time() + timeout 3725 req = PeeringGroupNodeCreateRequest() 3726 3727 if peering_group_node is not None: 3728 req.peering_group_node.CopyFrom( 3729 plumbing.convert_peering_group_node_to_plumbing( 3730 peering_group_node)) 3731 tries = 0 3732 plumbing_response = None 3733 while True: 3734 t = None if deadline is None else deadline - time.time() 3735 try: 3736 plumbing_response = self.stub.Create( 3737 req, 3738 metadata=self.parent.get_metadata( 3739 'PeeringGroupNodes.Create', req), 3740 timeout=t) 3741 except Exception as e: 3742 if self.parent.shouldRetry(tries, e, deadline): 3743 tries += 1 3744 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3745 continue 3746 raise plumbing.convert_error_to_porcelain(e) from e 3747 break 3748 3749 resp = models.PeeringGroupNodeCreateResponse() 3750 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3751 plumbing_response.meta) 3752 resp.peering_group_node = plumbing.convert_peering_group_node_to_porcelain( 3753 plumbing_response.peering_group_node) 3754 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3755 plumbing_response.rate_limit) 3756 return resp 3757 3758 def delete(self, id, timeout=None): 3759 ''' 3760 Delete detaches a Node to a PeeringGroup. 3761 ''' 3762 deadline = None if timeout is None else time.time() + timeout 3763 req = PeeringGroupNodeDeleteRequest() 3764 3765 req.id = (id) 3766 tries = 0 3767 plumbing_response = None 3768 while True: 3769 t = None if deadline is None else deadline - time.time() 3770 try: 3771 plumbing_response = self.stub.Delete( 3772 req, 3773 metadata=self.parent.get_metadata( 3774 'PeeringGroupNodes.Delete', req), 3775 timeout=t) 3776 except Exception as e: 3777 if self.parent.shouldRetry(tries, e, deadline): 3778 tries += 1 3779 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3780 continue 3781 raise plumbing.convert_error_to_porcelain(e) from e 3782 break 3783 3784 resp = models.PeeringGroupNodeDeleteResponse() 3785 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3786 plumbing_response.meta) 3787 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3788 plumbing_response.rate_limit) 3789 return resp 3790 3791 def get(self, id, timeout=None): 3792 ''' 3793 Get reads the information of one peering group to node attachment. 3794 ''' 3795 deadline = None if timeout is None else time.time() + timeout 3796 req = PeeringGroupNodeGetRequest() 3797 if self.parent.snapshot_datetime is not None: 3798 req.meta.CopyFrom(GetRequestMetadata()) 3799 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3800 3801 req.id = (id) 3802 tries = 0 3803 plumbing_response = None 3804 while True: 3805 t = None if deadline is None else deadline - time.time() 3806 try: 3807 plumbing_response = self.stub.Get( 3808 req, 3809 metadata=self.parent.get_metadata('PeeringGroupNodes.Get', 3810 req), 3811 timeout=t) 3812 except Exception as e: 3813 if self.parent.shouldRetry(tries, e, deadline): 3814 tries += 1 3815 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3816 continue 3817 raise plumbing.convert_error_to_porcelain(e) from e 3818 break 3819 3820 resp = models.PeeringGroupNodeGetResponse() 3821 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3822 plumbing_response.meta) 3823 resp.peering_group_node = plumbing.convert_peering_group_node_to_porcelain( 3824 plumbing_response.peering_group_node) 3825 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3826 plumbing_response.rate_limit) 3827 return resp 3828 3829 def list(self, filter, *args, timeout=None): 3830 ''' 3831 List gets a list of peering group node attachments. 3832 ''' 3833 deadline = None if timeout is None else time.time() + timeout 3834 req = PeeringGroupNodeListRequest() 3835 req.meta.CopyFrom(ListRequestMetadata()) 3836 if self.parent.page_limit > 0: 3837 req.meta.limit = self.parent.page_limit 3838 if self.parent.snapshot_datetime is not None: 3839 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3840 3841 req.filter = plumbing.quote_filter_args(filter, *args) 3842 3843 def generator(svc, req): 3844 tries = 0 3845 while True: 3846 t = None if deadline is None else deadline - time.time() 3847 try: 3848 plumbing_response = svc.stub.List( 3849 req, 3850 metadata=svc.parent.get_metadata( 3851 'PeeringGroupNodes.List', req), 3852 timeout=t) 3853 except Exception as e: 3854 if self.parent.shouldRetry(tries, e, deadline): 3855 tries += 1 3856 time.sleep( 3857 self.parent.exponentialBackoff(tries, deadline)) 3858 continue 3859 raise plumbing.convert_error_to_porcelain(e) from e 3860 tries = 0 3861 for plumbing_item in plumbing_response.peering_group_nodes: 3862 yield plumbing.convert_peering_group_node_to_porcelain( 3863 plumbing_item) 3864 if plumbing_response.meta.next_cursor == '': 3865 break 3866 req.meta.cursor = plumbing_response.meta.next_cursor 3867 3868 return generator(self, req)
PeeringGroupNodes provides the building blocks necessary to obtain attach a node to a peering group.
See strongdm.models.PeeringGroupNode
.
3720 def create(self, peering_group_node, timeout=None): 3721 ''' 3722 Create attaches a Node to a PeeringGroup 3723 ''' 3724 deadline = None if timeout is None else time.time() + timeout 3725 req = PeeringGroupNodeCreateRequest() 3726 3727 if peering_group_node is not None: 3728 req.peering_group_node.CopyFrom( 3729 plumbing.convert_peering_group_node_to_plumbing( 3730 peering_group_node)) 3731 tries = 0 3732 plumbing_response = None 3733 while True: 3734 t = None if deadline is None else deadline - time.time() 3735 try: 3736 plumbing_response = self.stub.Create( 3737 req, 3738 metadata=self.parent.get_metadata( 3739 'PeeringGroupNodes.Create', req), 3740 timeout=t) 3741 except Exception as e: 3742 if self.parent.shouldRetry(tries, e, deadline): 3743 tries += 1 3744 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3745 continue 3746 raise plumbing.convert_error_to_porcelain(e) from e 3747 break 3748 3749 resp = models.PeeringGroupNodeCreateResponse() 3750 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3751 plumbing_response.meta) 3752 resp.peering_group_node = plumbing.convert_peering_group_node_to_porcelain( 3753 plumbing_response.peering_group_node) 3754 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3755 plumbing_response.rate_limit) 3756 return resp
Create attaches a Node to a PeeringGroup
3758 def delete(self, id, timeout=None): 3759 ''' 3760 Delete detaches a Node to a PeeringGroup. 3761 ''' 3762 deadline = None if timeout is None else time.time() + timeout 3763 req = PeeringGroupNodeDeleteRequest() 3764 3765 req.id = (id) 3766 tries = 0 3767 plumbing_response = None 3768 while True: 3769 t = None if deadline is None else deadline - time.time() 3770 try: 3771 plumbing_response = self.stub.Delete( 3772 req, 3773 metadata=self.parent.get_metadata( 3774 'PeeringGroupNodes.Delete', req), 3775 timeout=t) 3776 except Exception as e: 3777 if self.parent.shouldRetry(tries, e, deadline): 3778 tries += 1 3779 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3780 continue 3781 raise plumbing.convert_error_to_porcelain(e) from e 3782 break 3783 3784 resp = models.PeeringGroupNodeDeleteResponse() 3785 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3786 plumbing_response.meta) 3787 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3788 plumbing_response.rate_limit) 3789 return resp
Delete detaches a Node to a PeeringGroup.
3791 def get(self, id, timeout=None): 3792 ''' 3793 Get reads the information of one peering group to node attachment. 3794 ''' 3795 deadline = None if timeout is None else time.time() + timeout 3796 req = PeeringGroupNodeGetRequest() 3797 if self.parent.snapshot_datetime is not None: 3798 req.meta.CopyFrom(GetRequestMetadata()) 3799 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3800 3801 req.id = (id) 3802 tries = 0 3803 plumbing_response = None 3804 while True: 3805 t = None if deadline is None else deadline - time.time() 3806 try: 3807 plumbing_response = self.stub.Get( 3808 req, 3809 metadata=self.parent.get_metadata('PeeringGroupNodes.Get', 3810 req), 3811 timeout=t) 3812 except Exception as e: 3813 if self.parent.shouldRetry(tries, e, deadline): 3814 tries += 1 3815 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3816 continue 3817 raise plumbing.convert_error_to_porcelain(e) from e 3818 break 3819 3820 resp = models.PeeringGroupNodeGetResponse() 3821 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3822 plumbing_response.meta) 3823 resp.peering_group_node = plumbing.convert_peering_group_node_to_porcelain( 3824 plumbing_response.peering_group_node) 3825 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3826 plumbing_response.rate_limit) 3827 return resp
Get reads the information of one peering group to node attachment.
3829 def list(self, filter, *args, timeout=None): 3830 ''' 3831 List gets a list of peering group node attachments. 3832 ''' 3833 deadline = None if timeout is None else time.time() + timeout 3834 req = PeeringGroupNodeListRequest() 3835 req.meta.CopyFrom(ListRequestMetadata()) 3836 if self.parent.page_limit > 0: 3837 req.meta.limit = self.parent.page_limit 3838 if self.parent.snapshot_datetime is not None: 3839 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3840 3841 req.filter = plumbing.quote_filter_args(filter, *args) 3842 3843 def generator(svc, req): 3844 tries = 0 3845 while True: 3846 t = None if deadline is None else deadline - time.time() 3847 try: 3848 plumbing_response = svc.stub.List( 3849 req, 3850 metadata=svc.parent.get_metadata( 3851 'PeeringGroupNodes.List', req), 3852 timeout=t) 3853 except Exception as e: 3854 if self.parent.shouldRetry(tries, e, deadline): 3855 tries += 1 3856 time.sleep( 3857 self.parent.exponentialBackoff(tries, deadline)) 3858 continue 3859 raise plumbing.convert_error_to_porcelain(e) from e 3860 tries = 0 3861 for plumbing_item in plumbing_response.peering_group_nodes: 3862 yield plumbing.convert_peering_group_node_to_porcelain( 3863 plumbing_item) 3864 if plumbing_response.meta.next_cursor == '': 3865 break 3866 req.meta.cursor = plumbing_response.meta.next_cursor 3867 3868 return generator(self, req)
List gets a list of peering group node attachments.
3871class PeeringGroupPeers: 3872 ''' 3873 PeeringGroupPeers provides the building blocks necessary to link two peering groups. 3874 See `strongdm.models.PeeringGroupPeer`. 3875 ''' 3876 def __init__(self, channel, client): 3877 self.parent = client 3878 self.stub = PeeringGroupPeersStub(channel) 3879 3880 def create(self, peering_group_peer, timeout=None): 3881 ''' 3882 Create links two peering groups. 3883 ''' 3884 deadline = None if timeout is None else time.time() + timeout 3885 req = PeeringGroupPeerCreateRequest() 3886 3887 if peering_group_peer is not None: 3888 req.peering_group_peer.CopyFrom( 3889 plumbing.convert_peering_group_peer_to_plumbing( 3890 peering_group_peer)) 3891 tries = 0 3892 plumbing_response = None 3893 while True: 3894 t = None if deadline is None else deadline - time.time() 3895 try: 3896 plumbing_response = self.stub.Create( 3897 req, 3898 metadata=self.parent.get_metadata( 3899 'PeeringGroupPeers.Create', req), 3900 timeout=t) 3901 except Exception as e: 3902 if self.parent.shouldRetry(tries, e, deadline): 3903 tries += 1 3904 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3905 continue 3906 raise plumbing.convert_error_to_porcelain(e) from e 3907 break 3908 3909 resp = models.PeeringGroupPeerCreateResponse() 3910 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3911 plumbing_response.meta) 3912 resp.peering_group_peer = plumbing.convert_peering_group_peer_to_porcelain( 3913 plumbing_response.peering_group_peer) 3914 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3915 plumbing_response.rate_limit) 3916 return resp 3917 3918 def delete(self, id, timeout=None): 3919 ''' 3920 Delete unlinks two peering groups. 3921 ''' 3922 deadline = None if timeout is None else time.time() + timeout 3923 req = PeeringGroupPeerDeleteRequest() 3924 3925 req.id = (id) 3926 tries = 0 3927 plumbing_response = None 3928 while True: 3929 t = None if deadline is None else deadline - time.time() 3930 try: 3931 plumbing_response = self.stub.Delete( 3932 req, 3933 metadata=self.parent.get_metadata( 3934 'PeeringGroupPeers.Delete', req), 3935 timeout=t) 3936 except Exception as e: 3937 if self.parent.shouldRetry(tries, e, deadline): 3938 tries += 1 3939 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3940 continue 3941 raise plumbing.convert_error_to_porcelain(e) from e 3942 break 3943 3944 resp = models.PeeringGroupPeerDeleteResponse() 3945 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3946 plumbing_response.meta) 3947 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3948 plumbing_response.rate_limit) 3949 return resp 3950 3951 def get(self, id, timeout=None): 3952 ''' 3953 Get reads the information of one peering group link. 3954 ''' 3955 deadline = None if timeout is None else time.time() + timeout 3956 req = PeeringGroupPeerGetRequest() 3957 if self.parent.snapshot_datetime is not None: 3958 req.meta.CopyFrom(GetRequestMetadata()) 3959 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3960 3961 req.id = (id) 3962 tries = 0 3963 plumbing_response = None 3964 while True: 3965 t = None if deadline is None else deadline - time.time() 3966 try: 3967 plumbing_response = self.stub.Get( 3968 req, 3969 metadata=self.parent.get_metadata('PeeringGroupPeers.Get', 3970 req), 3971 timeout=t) 3972 except Exception as e: 3973 if self.parent.shouldRetry(tries, e, deadline): 3974 tries += 1 3975 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3976 continue 3977 raise plumbing.convert_error_to_porcelain(e) from e 3978 break 3979 3980 resp = models.PeeringGroupPeerGetResponse() 3981 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3982 plumbing_response.meta) 3983 resp.peering_group_peer = plumbing.convert_peering_group_peer_to_porcelain( 3984 plumbing_response.peering_group_peer) 3985 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3986 plumbing_response.rate_limit) 3987 return resp 3988 3989 def list(self, filter, *args, timeout=None): 3990 ''' 3991 List gets a list of peering group links. 3992 ''' 3993 deadline = None if timeout is None else time.time() + timeout 3994 req = PeeringGroupPeerListRequest() 3995 req.meta.CopyFrom(ListRequestMetadata()) 3996 if self.parent.page_limit > 0: 3997 req.meta.limit = self.parent.page_limit 3998 if self.parent.snapshot_datetime is not None: 3999 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4000 4001 req.filter = plumbing.quote_filter_args(filter, *args) 4002 4003 def generator(svc, req): 4004 tries = 0 4005 while True: 4006 t = None if deadline is None else deadline - time.time() 4007 try: 4008 plumbing_response = svc.stub.List( 4009 req, 4010 metadata=svc.parent.get_metadata( 4011 'PeeringGroupPeers.List', req), 4012 timeout=t) 4013 except Exception as e: 4014 if self.parent.shouldRetry(tries, e, deadline): 4015 tries += 1 4016 time.sleep( 4017 self.parent.exponentialBackoff(tries, deadline)) 4018 continue 4019 raise plumbing.convert_error_to_porcelain(e) from e 4020 tries = 0 4021 for plumbing_item in plumbing_response.peering_group_peers: 4022 yield plumbing.convert_peering_group_peer_to_porcelain( 4023 plumbing_item) 4024 if plumbing_response.meta.next_cursor == '': 4025 break 4026 req.meta.cursor = plumbing_response.meta.next_cursor 4027 4028 return generator(self, req)
PeeringGroupPeers provides the building blocks necessary to link two peering groups.
See strongdm.models.PeeringGroupPeer
.
3880 def create(self, peering_group_peer, timeout=None): 3881 ''' 3882 Create links two peering groups. 3883 ''' 3884 deadline = None if timeout is None else time.time() + timeout 3885 req = PeeringGroupPeerCreateRequest() 3886 3887 if peering_group_peer is not None: 3888 req.peering_group_peer.CopyFrom( 3889 plumbing.convert_peering_group_peer_to_plumbing( 3890 peering_group_peer)) 3891 tries = 0 3892 plumbing_response = None 3893 while True: 3894 t = None if deadline is None else deadline - time.time() 3895 try: 3896 plumbing_response = self.stub.Create( 3897 req, 3898 metadata=self.parent.get_metadata( 3899 'PeeringGroupPeers.Create', req), 3900 timeout=t) 3901 except Exception as e: 3902 if self.parent.shouldRetry(tries, e, deadline): 3903 tries += 1 3904 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3905 continue 3906 raise plumbing.convert_error_to_porcelain(e) from e 3907 break 3908 3909 resp = models.PeeringGroupPeerCreateResponse() 3910 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 3911 plumbing_response.meta) 3912 resp.peering_group_peer = plumbing.convert_peering_group_peer_to_porcelain( 3913 plumbing_response.peering_group_peer) 3914 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3915 plumbing_response.rate_limit) 3916 return resp
Create links two peering groups.
3918 def delete(self, id, timeout=None): 3919 ''' 3920 Delete unlinks two peering groups. 3921 ''' 3922 deadline = None if timeout is None else time.time() + timeout 3923 req = PeeringGroupPeerDeleteRequest() 3924 3925 req.id = (id) 3926 tries = 0 3927 plumbing_response = None 3928 while True: 3929 t = None if deadline is None else deadline - time.time() 3930 try: 3931 plumbing_response = self.stub.Delete( 3932 req, 3933 metadata=self.parent.get_metadata( 3934 'PeeringGroupPeers.Delete', req), 3935 timeout=t) 3936 except Exception as e: 3937 if self.parent.shouldRetry(tries, e, deadline): 3938 tries += 1 3939 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3940 continue 3941 raise plumbing.convert_error_to_porcelain(e) from e 3942 break 3943 3944 resp = models.PeeringGroupPeerDeleteResponse() 3945 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 3946 plumbing_response.meta) 3947 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3948 plumbing_response.rate_limit) 3949 return resp
Delete unlinks two peering groups.
3951 def get(self, id, timeout=None): 3952 ''' 3953 Get reads the information of one peering group link. 3954 ''' 3955 deadline = None if timeout is None else time.time() + timeout 3956 req = PeeringGroupPeerGetRequest() 3957 if self.parent.snapshot_datetime is not None: 3958 req.meta.CopyFrom(GetRequestMetadata()) 3959 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 3960 3961 req.id = (id) 3962 tries = 0 3963 plumbing_response = None 3964 while True: 3965 t = None if deadline is None else deadline - time.time() 3966 try: 3967 plumbing_response = self.stub.Get( 3968 req, 3969 metadata=self.parent.get_metadata('PeeringGroupPeers.Get', 3970 req), 3971 timeout=t) 3972 except Exception as e: 3973 if self.parent.shouldRetry(tries, e, deadline): 3974 tries += 1 3975 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 3976 continue 3977 raise plumbing.convert_error_to_porcelain(e) from e 3978 break 3979 3980 resp = models.PeeringGroupPeerGetResponse() 3981 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 3982 plumbing_response.meta) 3983 resp.peering_group_peer = plumbing.convert_peering_group_peer_to_porcelain( 3984 plumbing_response.peering_group_peer) 3985 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 3986 plumbing_response.rate_limit) 3987 return resp
Get reads the information of one peering group link.
3989 def list(self, filter, *args, timeout=None): 3990 ''' 3991 List gets a list of peering group links. 3992 ''' 3993 deadline = None if timeout is None else time.time() + timeout 3994 req = PeeringGroupPeerListRequest() 3995 req.meta.CopyFrom(ListRequestMetadata()) 3996 if self.parent.page_limit > 0: 3997 req.meta.limit = self.parent.page_limit 3998 if self.parent.snapshot_datetime is not None: 3999 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4000 4001 req.filter = plumbing.quote_filter_args(filter, *args) 4002 4003 def generator(svc, req): 4004 tries = 0 4005 while True: 4006 t = None if deadline is None else deadline - time.time() 4007 try: 4008 plumbing_response = svc.stub.List( 4009 req, 4010 metadata=svc.parent.get_metadata( 4011 'PeeringGroupPeers.List', req), 4012 timeout=t) 4013 except Exception as e: 4014 if self.parent.shouldRetry(tries, e, deadline): 4015 tries += 1 4016 time.sleep( 4017 self.parent.exponentialBackoff(tries, deadline)) 4018 continue 4019 raise plumbing.convert_error_to_porcelain(e) from e 4020 tries = 0 4021 for plumbing_item in plumbing_response.peering_group_peers: 4022 yield plumbing.convert_peering_group_peer_to_porcelain( 4023 plumbing_item) 4024 if plumbing_response.meta.next_cursor == '': 4025 break 4026 req.meta.cursor = plumbing_response.meta.next_cursor 4027 4028 return generator(self, req)
List gets a list of peering group links.
4031class PeeringGroupResources: 4032 ''' 4033 PeeringGroupResources provides the building blocks necessary to obtain attach a resource to a peering group. 4034 See `strongdm.models.PeeringGroupResource`. 4035 ''' 4036 def __init__(self, channel, client): 4037 self.parent = client 4038 self.stub = PeeringGroupResourcesStub(channel) 4039 4040 def create(self, peering_group_resource, timeout=None): 4041 ''' 4042 Create attaches a Resource to a PeeringGroup 4043 ''' 4044 deadline = None if timeout is None else time.time() + timeout 4045 req = PeeringGroupResourceCreateRequest() 4046 4047 if peering_group_resource is not None: 4048 req.peering_group_resource.CopyFrom( 4049 plumbing.convert_peering_group_resource_to_plumbing( 4050 peering_group_resource)) 4051 tries = 0 4052 plumbing_response = None 4053 while True: 4054 t = None if deadline is None else deadline - time.time() 4055 try: 4056 plumbing_response = self.stub.Create( 4057 req, 4058 metadata=self.parent.get_metadata( 4059 'PeeringGroupResources.Create', req), 4060 timeout=t) 4061 except Exception as e: 4062 if self.parent.shouldRetry(tries, e, deadline): 4063 tries += 1 4064 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4065 continue 4066 raise plumbing.convert_error_to_porcelain(e) from e 4067 break 4068 4069 resp = models.PeeringGroupResourceCreateResponse() 4070 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4071 plumbing_response.meta) 4072 resp.peering_group_resource = plumbing.convert_peering_group_resource_to_porcelain( 4073 plumbing_response.peering_group_resource) 4074 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4075 plumbing_response.rate_limit) 4076 return resp 4077 4078 def delete(self, id, timeout=None): 4079 ''' 4080 Delete detaches a Resource to a PeeringGroup 4081 ''' 4082 deadline = None if timeout is None else time.time() + timeout 4083 req = PeeringGroupResourceDeleteRequest() 4084 4085 req.id = (id) 4086 tries = 0 4087 plumbing_response = None 4088 while True: 4089 t = None if deadline is None else deadline - time.time() 4090 try: 4091 plumbing_response = self.stub.Delete( 4092 req, 4093 metadata=self.parent.get_metadata( 4094 'PeeringGroupResources.Delete', req), 4095 timeout=t) 4096 except Exception as e: 4097 if self.parent.shouldRetry(tries, e, deadline): 4098 tries += 1 4099 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4100 continue 4101 raise plumbing.convert_error_to_porcelain(e) from e 4102 break 4103 4104 resp = models.PeeringGroupResourceDeleteResponse() 4105 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4106 plumbing_response.meta) 4107 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4108 plumbing_response.rate_limit) 4109 return resp 4110 4111 def get(self, id, timeout=None): 4112 ''' 4113 Get reads the information of one peering group to resource attachment. 4114 ''' 4115 deadline = None if timeout is None else time.time() + timeout 4116 req = PeeringGroupResourceGetRequest() 4117 if self.parent.snapshot_datetime is not None: 4118 req.meta.CopyFrom(GetRequestMetadata()) 4119 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4120 4121 req.id = (id) 4122 tries = 0 4123 plumbing_response = None 4124 while True: 4125 t = None if deadline is None else deadline - time.time() 4126 try: 4127 plumbing_response = self.stub.Get( 4128 req, 4129 metadata=self.parent.get_metadata( 4130 'PeeringGroupResources.Get', req), 4131 timeout=t) 4132 except Exception as e: 4133 if self.parent.shouldRetry(tries, e, deadline): 4134 tries += 1 4135 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4136 continue 4137 raise plumbing.convert_error_to_porcelain(e) from e 4138 break 4139 4140 resp = models.PeeringGroupResourceGetResponse() 4141 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4142 plumbing_response.meta) 4143 resp.peering_group_resource = plumbing.convert_peering_group_resource_to_porcelain( 4144 plumbing_response.peering_group_resource) 4145 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4146 plumbing_response.rate_limit) 4147 return resp 4148 4149 def list(self, filter, *args, timeout=None): 4150 ''' 4151 List gets a list of peering group resource attachments. 4152 ''' 4153 deadline = None if timeout is None else time.time() + timeout 4154 req = PeeringGroupResourceListRequest() 4155 req.meta.CopyFrom(ListRequestMetadata()) 4156 if self.parent.page_limit > 0: 4157 req.meta.limit = self.parent.page_limit 4158 if self.parent.snapshot_datetime is not None: 4159 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4160 4161 req.filter = plumbing.quote_filter_args(filter, *args) 4162 4163 def generator(svc, req): 4164 tries = 0 4165 while True: 4166 t = None if deadline is None else deadline - time.time() 4167 try: 4168 plumbing_response = svc.stub.List( 4169 req, 4170 metadata=svc.parent.get_metadata( 4171 'PeeringGroupResources.List', req), 4172 timeout=t) 4173 except Exception as e: 4174 if self.parent.shouldRetry(tries, e, deadline): 4175 tries += 1 4176 time.sleep( 4177 self.parent.exponentialBackoff(tries, deadline)) 4178 continue 4179 raise plumbing.convert_error_to_porcelain(e) from e 4180 tries = 0 4181 for plumbing_item in plumbing_response.peering_group_resources: 4182 yield plumbing.convert_peering_group_resource_to_porcelain( 4183 plumbing_item) 4184 if plumbing_response.meta.next_cursor == '': 4185 break 4186 req.meta.cursor = plumbing_response.meta.next_cursor 4187 4188 return generator(self, req)
PeeringGroupResources provides the building blocks necessary to obtain attach a resource to a peering group.
See strongdm.models.PeeringGroupResource
.
4040 def create(self, peering_group_resource, timeout=None): 4041 ''' 4042 Create attaches a Resource to a PeeringGroup 4043 ''' 4044 deadline = None if timeout is None else time.time() + timeout 4045 req = PeeringGroupResourceCreateRequest() 4046 4047 if peering_group_resource is not None: 4048 req.peering_group_resource.CopyFrom( 4049 plumbing.convert_peering_group_resource_to_plumbing( 4050 peering_group_resource)) 4051 tries = 0 4052 plumbing_response = None 4053 while True: 4054 t = None if deadline is None else deadline - time.time() 4055 try: 4056 plumbing_response = self.stub.Create( 4057 req, 4058 metadata=self.parent.get_metadata( 4059 'PeeringGroupResources.Create', req), 4060 timeout=t) 4061 except Exception as e: 4062 if self.parent.shouldRetry(tries, e, deadline): 4063 tries += 1 4064 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4065 continue 4066 raise plumbing.convert_error_to_porcelain(e) from e 4067 break 4068 4069 resp = models.PeeringGroupResourceCreateResponse() 4070 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4071 plumbing_response.meta) 4072 resp.peering_group_resource = plumbing.convert_peering_group_resource_to_porcelain( 4073 plumbing_response.peering_group_resource) 4074 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4075 plumbing_response.rate_limit) 4076 return resp
Create attaches a Resource to a PeeringGroup
4078 def delete(self, id, timeout=None): 4079 ''' 4080 Delete detaches a Resource to a PeeringGroup 4081 ''' 4082 deadline = None if timeout is None else time.time() + timeout 4083 req = PeeringGroupResourceDeleteRequest() 4084 4085 req.id = (id) 4086 tries = 0 4087 plumbing_response = None 4088 while True: 4089 t = None if deadline is None else deadline - time.time() 4090 try: 4091 plumbing_response = self.stub.Delete( 4092 req, 4093 metadata=self.parent.get_metadata( 4094 'PeeringGroupResources.Delete', req), 4095 timeout=t) 4096 except Exception as e: 4097 if self.parent.shouldRetry(tries, e, deadline): 4098 tries += 1 4099 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4100 continue 4101 raise plumbing.convert_error_to_porcelain(e) from e 4102 break 4103 4104 resp = models.PeeringGroupResourceDeleteResponse() 4105 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4106 plumbing_response.meta) 4107 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4108 plumbing_response.rate_limit) 4109 return resp
Delete detaches a Resource to a PeeringGroup
4111 def get(self, id, timeout=None): 4112 ''' 4113 Get reads the information of one peering group to resource attachment. 4114 ''' 4115 deadline = None if timeout is None else time.time() + timeout 4116 req = PeeringGroupResourceGetRequest() 4117 if self.parent.snapshot_datetime is not None: 4118 req.meta.CopyFrom(GetRequestMetadata()) 4119 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4120 4121 req.id = (id) 4122 tries = 0 4123 plumbing_response = None 4124 while True: 4125 t = None if deadline is None else deadline - time.time() 4126 try: 4127 plumbing_response = self.stub.Get( 4128 req, 4129 metadata=self.parent.get_metadata( 4130 'PeeringGroupResources.Get', req), 4131 timeout=t) 4132 except Exception as e: 4133 if self.parent.shouldRetry(tries, e, deadline): 4134 tries += 1 4135 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4136 continue 4137 raise plumbing.convert_error_to_porcelain(e) from e 4138 break 4139 4140 resp = models.PeeringGroupResourceGetResponse() 4141 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4142 plumbing_response.meta) 4143 resp.peering_group_resource = plumbing.convert_peering_group_resource_to_porcelain( 4144 plumbing_response.peering_group_resource) 4145 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4146 plumbing_response.rate_limit) 4147 return resp
Get reads the information of one peering group to resource attachment.
4149 def list(self, filter, *args, timeout=None): 4150 ''' 4151 List gets a list of peering group resource attachments. 4152 ''' 4153 deadline = None if timeout is None else time.time() + timeout 4154 req = PeeringGroupResourceListRequest() 4155 req.meta.CopyFrom(ListRequestMetadata()) 4156 if self.parent.page_limit > 0: 4157 req.meta.limit = self.parent.page_limit 4158 if self.parent.snapshot_datetime is not None: 4159 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4160 4161 req.filter = plumbing.quote_filter_args(filter, *args) 4162 4163 def generator(svc, req): 4164 tries = 0 4165 while True: 4166 t = None if deadline is None else deadline - time.time() 4167 try: 4168 plumbing_response = svc.stub.List( 4169 req, 4170 metadata=svc.parent.get_metadata( 4171 'PeeringGroupResources.List', req), 4172 timeout=t) 4173 except Exception as e: 4174 if self.parent.shouldRetry(tries, e, deadline): 4175 tries += 1 4176 time.sleep( 4177 self.parent.exponentialBackoff(tries, deadline)) 4178 continue 4179 raise plumbing.convert_error_to_porcelain(e) from e 4180 tries = 0 4181 for plumbing_item in plumbing_response.peering_group_resources: 4182 yield plumbing.convert_peering_group_resource_to_porcelain( 4183 plumbing_item) 4184 if plumbing_response.meta.next_cursor == '': 4185 break 4186 req.meta.cursor = plumbing_response.meta.next_cursor 4187 4188 return generator(self, req)
List gets a list of peering group resource attachments.
4191class PeeringGroups: 4192 ''' 4193 PeeringGroups provides the building blocks necessary to obtain explicit network topology and routing. 4194 See `strongdm.models.PeeringGroup`. 4195 ''' 4196 def __init__(self, channel, client): 4197 self.parent = client 4198 self.stub = PeeringGroupsStub(channel) 4199 4200 def create(self, peering_group, timeout=None): 4201 ''' 4202 Create registers a new PeeringGroup. 4203 ''' 4204 deadline = None if timeout is None else time.time() + timeout 4205 req = PeeringGroupCreateRequest() 4206 4207 if peering_group is not None: 4208 req.peering_group.CopyFrom( 4209 plumbing.convert_peering_group_to_plumbing(peering_group)) 4210 tries = 0 4211 plumbing_response = None 4212 while True: 4213 t = None if deadline is None else deadline - time.time() 4214 try: 4215 plumbing_response = self.stub.Create( 4216 req, 4217 metadata=self.parent.get_metadata('PeeringGroups.Create', 4218 req), 4219 timeout=t) 4220 except Exception as e: 4221 if self.parent.shouldRetry(tries, e, deadline): 4222 tries += 1 4223 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4224 continue 4225 raise plumbing.convert_error_to_porcelain(e) from e 4226 break 4227 4228 resp = models.PeeringGroupCreateResponse() 4229 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4230 plumbing_response.meta) 4231 resp.peering_group = plumbing.convert_peering_group_to_porcelain( 4232 plumbing_response.peering_group) 4233 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4234 plumbing_response.rate_limit) 4235 return resp 4236 4237 def delete(self, id, timeout=None): 4238 ''' 4239 Delete removes a PeeringGroup by ID. 4240 ''' 4241 deadline = None if timeout is None else time.time() + timeout 4242 req = PeeringGroupDeleteRequest() 4243 4244 req.id = (id) 4245 tries = 0 4246 plumbing_response = None 4247 while True: 4248 t = None if deadline is None else deadline - time.time() 4249 try: 4250 plumbing_response = self.stub.Delete( 4251 req, 4252 metadata=self.parent.get_metadata('PeeringGroups.Delete', 4253 req), 4254 timeout=t) 4255 except Exception as e: 4256 if self.parent.shouldRetry(tries, e, deadline): 4257 tries += 1 4258 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4259 continue 4260 raise plumbing.convert_error_to_porcelain(e) from e 4261 break 4262 4263 resp = models.PeeringGroupDeleteResponse() 4264 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4265 plumbing_response.meta) 4266 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4267 plumbing_response.rate_limit) 4268 return resp 4269 4270 def get(self, id, timeout=None): 4271 ''' 4272 Get reads one PeeringGroup by ID. It will load all its dependencies. 4273 ''' 4274 deadline = None if timeout is None else time.time() + timeout 4275 req = PeeringGroupGetRequest() 4276 if self.parent.snapshot_datetime is not None: 4277 req.meta.CopyFrom(GetRequestMetadata()) 4278 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4279 4280 req.id = (id) 4281 tries = 0 4282 plumbing_response = None 4283 while True: 4284 t = None if deadline is None else deadline - time.time() 4285 try: 4286 plumbing_response = self.stub.Get( 4287 req, 4288 metadata=self.parent.get_metadata('PeeringGroups.Get', 4289 req), 4290 timeout=t) 4291 except Exception as e: 4292 if self.parent.shouldRetry(tries, e, deadline): 4293 tries += 1 4294 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4295 continue 4296 raise plumbing.convert_error_to_porcelain(e) from e 4297 break 4298 4299 resp = models.PeeringGroupGetResponse() 4300 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4301 plumbing_response.meta) 4302 resp.peering_group = plumbing.convert_peering_group_to_porcelain( 4303 plumbing_response.peering_group) 4304 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4305 plumbing_response.rate_limit) 4306 return resp 4307 4308 def list(self, filter, *args, timeout=None): 4309 ''' 4310 List gets a list of Peering Groups. 4311 ''' 4312 deadline = None if timeout is None else time.time() + timeout 4313 req = PeeringGroupListRequest() 4314 req.meta.CopyFrom(ListRequestMetadata()) 4315 if self.parent.page_limit > 0: 4316 req.meta.limit = self.parent.page_limit 4317 if self.parent.snapshot_datetime is not None: 4318 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4319 4320 req.filter = plumbing.quote_filter_args(filter, *args) 4321 4322 def generator(svc, req): 4323 tries = 0 4324 while True: 4325 t = None if deadline is None else deadline - time.time() 4326 try: 4327 plumbing_response = svc.stub.List( 4328 req, 4329 metadata=svc.parent.get_metadata( 4330 'PeeringGroups.List', req), 4331 timeout=t) 4332 except Exception as e: 4333 if self.parent.shouldRetry(tries, e, deadline): 4334 tries += 1 4335 time.sleep( 4336 self.parent.exponentialBackoff(tries, deadline)) 4337 continue 4338 raise plumbing.convert_error_to_porcelain(e) from e 4339 tries = 0 4340 for plumbing_item in plumbing_response.peering_groups: 4341 yield plumbing.convert_peering_group_to_porcelain( 4342 plumbing_item) 4343 if plumbing_response.meta.next_cursor == '': 4344 break 4345 req.meta.cursor = plumbing_response.meta.next_cursor 4346 4347 return generator(self, req)
PeeringGroups provides the building blocks necessary to obtain explicit network topology and routing.
See strongdm.models.PeeringGroup
.
4200 def create(self, peering_group, timeout=None): 4201 ''' 4202 Create registers a new PeeringGroup. 4203 ''' 4204 deadline = None if timeout is None else time.time() + timeout 4205 req = PeeringGroupCreateRequest() 4206 4207 if peering_group is not None: 4208 req.peering_group.CopyFrom( 4209 plumbing.convert_peering_group_to_plumbing(peering_group)) 4210 tries = 0 4211 plumbing_response = None 4212 while True: 4213 t = None if deadline is None else deadline - time.time() 4214 try: 4215 plumbing_response = self.stub.Create( 4216 req, 4217 metadata=self.parent.get_metadata('PeeringGroups.Create', 4218 req), 4219 timeout=t) 4220 except Exception as e: 4221 if self.parent.shouldRetry(tries, e, deadline): 4222 tries += 1 4223 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4224 continue 4225 raise plumbing.convert_error_to_porcelain(e) from e 4226 break 4227 4228 resp = models.PeeringGroupCreateResponse() 4229 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4230 plumbing_response.meta) 4231 resp.peering_group = plumbing.convert_peering_group_to_porcelain( 4232 plumbing_response.peering_group) 4233 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4234 plumbing_response.rate_limit) 4235 return resp
Create registers a new PeeringGroup.
4237 def delete(self, id, timeout=None): 4238 ''' 4239 Delete removes a PeeringGroup by ID. 4240 ''' 4241 deadline = None if timeout is None else time.time() + timeout 4242 req = PeeringGroupDeleteRequest() 4243 4244 req.id = (id) 4245 tries = 0 4246 plumbing_response = None 4247 while True: 4248 t = None if deadline is None else deadline - time.time() 4249 try: 4250 plumbing_response = self.stub.Delete( 4251 req, 4252 metadata=self.parent.get_metadata('PeeringGroups.Delete', 4253 req), 4254 timeout=t) 4255 except Exception as e: 4256 if self.parent.shouldRetry(tries, e, deadline): 4257 tries += 1 4258 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4259 continue 4260 raise plumbing.convert_error_to_porcelain(e) from e 4261 break 4262 4263 resp = models.PeeringGroupDeleteResponse() 4264 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4265 plumbing_response.meta) 4266 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4267 plumbing_response.rate_limit) 4268 return resp
Delete removes a PeeringGroup by ID.
4270 def get(self, id, timeout=None): 4271 ''' 4272 Get reads one PeeringGroup by ID. It will load all its dependencies. 4273 ''' 4274 deadline = None if timeout is None else time.time() + timeout 4275 req = PeeringGroupGetRequest() 4276 if self.parent.snapshot_datetime is not None: 4277 req.meta.CopyFrom(GetRequestMetadata()) 4278 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4279 4280 req.id = (id) 4281 tries = 0 4282 plumbing_response = None 4283 while True: 4284 t = None if deadline is None else deadline - time.time() 4285 try: 4286 plumbing_response = self.stub.Get( 4287 req, 4288 metadata=self.parent.get_metadata('PeeringGroups.Get', 4289 req), 4290 timeout=t) 4291 except Exception as e: 4292 if self.parent.shouldRetry(tries, e, deadline): 4293 tries += 1 4294 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4295 continue 4296 raise plumbing.convert_error_to_porcelain(e) from e 4297 break 4298 4299 resp = models.PeeringGroupGetResponse() 4300 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4301 plumbing_response.meta) 4302 resp.peering_group = plumbing.convert_peering_group_to_porcelain( 4303 plumbing_response.peering_group) 4304 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4305 plumbing_response.rate_limit) 4306 return resp
Get reads one PeeringGroup by ID. It will load all its dependencies.
4308 def list(self, filter, *args, timeout=None): 4309 ''' 4310 List gets a list of Peering Groups. 4311 ''' 4312 deadline = None if timeout is None else time.time() + timeout 4313 req = PeeringGroupListRequest() 4314 req.meta.CopyFrom(ListRequestMetadata()) 4315 if self.parent.page_limit > 0: 4316 req.meta.limit = self.parent.page_limit 4317 if self.parent.snapshot_datetime is not None: 4318 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4319 4320 req.filter = plumbing.quote_filter_args(filter, *args) 4321 4322 def generator(svc, req): 4323 tries = 0 4324 while True: 4325 t = None if deadline is None else deadline - time.time() 4326 try: 4327 plumbing_response = svc.stub.List( 4328 req, 4329 metadata=svc.parent.get_metadata( 4330 'PeeringGroups.List', req), 4331 timeout=t) 4332 except Exception as e: 4333 if self.parent.shouldRetry(tries, e, deadline): 4334 tries += 1 4335 time.sleep( 4336 self.parent.exponentialBackoff(tries, deadline)) 4337 continue 4338 raise plumbing.convert_error_to_porcelain(e) from e 4339 tries = 0 4340 for plumbing_item in plumbing_response.peering_groups: 4341 yield plumbing.convert_peering_group_to_porcelain( 4342 plumbing_item) 4343 if plumbing_response.meta.next_cursor == '': 4344 break 4345 req.meta.cursor = plumbing_response.meta.next_cursor 4346 4347 return generator(self, req)
List gets a list of Peering Groups.
4350class Policies: 4351 ''' 4352 Policies are the collection of one or more statements that enforce fine-grained access 4353 control for the users of an organization. 4354 See `strongdm.models.Policy`. 4355 ''' 4356 def __init__(self, channel, client): 4357 self.parent = client 4358 self.stub = PoliciesStub(channel) 4359 4360 def create(self, policy, timeout=None): 4361 ''' 4362 Create creates a new Policy. 4363 ''' 4364 deadline = None if timeout is None else time.time() + timeout 4365 req = PolicyCreateRequest() 4366 4367 if policy is not None: 4368 req.policy.CopyFrom(plumbing.convert_policy_to_plumbing(policy)) 4369 tries = 0 4370 plumbing_response = None 4371 while True: 4372 t = None if deadline is None else deadline - time.time() 4373 try: 4374 plumbing_response = self.stub.Create( 4375 req, 4376 metadata=self.parent.get_metadata('Policies.Create', req), 4377 timeout=t) 4378 except Exception as e: 4379 if self.parent.shouldRetry(tries, e, deadline): 4380 tries += 1 4381 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4382 continue 4383 raise plumbing.convert_error_to_porcelain(e) from e 4384 break 4385 4386 resp = models.PolicyCreateResponse() 4387 resp.policy = plumbing.convert_policy_to_porcelain( 4388 plumbing_response.policy) 4389 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4390 plumbing_response.rate_limit) 4391 return resp 4392 4393 def delete(self, id, timeout=None): 4394 ''' 4395 Delete removes a Policy by ID. 4396 ''' 4397 deadline = None if timeout is None else time.time() + timeout 4398 req = PolicyDeleteRequest() 4399 4400 req.id = (id) 4401 tries = 0 4402 plumbing_response = None 4403 while True: 4404 t = None if deadline is None else deadline - time.time() 4405 try: 4406 plumbing_response = self.stub.Delete( 4407 req, 4408 metadata=self.parent.get_metadata('Policies.Delete', req), 4409 timeout=t) 4410 except Exception as e: 4411 if self.parent.shouldRetry(tries, e, deadline): 4412 tries += 1 4413 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4414 continue 4415 raise plumbing.convert_error_to_porcelain(e) from e 4416 break 4417 4418 resp = models.PolicyDeleteResponse() 4419 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4420 plumbing_response.rate_limit) 4421 return resp 4422 4423 def update(self, policy, timeout=None): 4424 ''' 4425 Update replaces all the fields of a Policy by ID. 4426 ''' 4427 deadline = None if timeout is None else time.time() + timeout 4428 req = PolicyUpdateRequest() 4429 4430 if policy is not None: 4431 req.policy.CopyFrom(plumbing.convert_policy_to_plumbing(policy)) 4432 tries = 0 4433 plumbing_response = None 4434 while True: 4435 t = None if deadline is None else deadline - time.time() 4436 try: 4437 plumbing_response = self.stub.Update( 4438 req, 4439 metadata=self.parent.get_metadata('Policies.Update', req), 4440 timeout=t) 4441 except Exception as e: 4442 if self.parent.shouldRetry(tries, e, deadline): 4443 tries += 1 4444 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4445 continue 4446 raise plumbing.convert_error_to_porcelain(e) from e 4447 break 4448 4449 resp = models.PolicyUpdateResponse() 4450 resp.policy = plumbing.convert_policy_to_porcelain( 4451 plumbing_response.policy) 4452 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4453 plumbing_response.rate_limit) 4454 return resp 4455 4456 def get(self, id, timeout=None): 4457 ''' 4458 Get reads one Policy by ID. 4459 ''' 4460 deadline = None if timeout is None else time.time() + timeout 4461 req = PolicyGetRequest() 4462 if self.parent.snapshot_datetime is not None: 4463 req.meta.CopyFrom(GetRequestMetadata()) 4464 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4465 4466 req.id = (id) 4467 tries = 0 4468 plumbing_response = None 4469 while True: 4470 t = None if deadline is None else deadline - time.time() 4471 try: 4472 plumbing_response = self.stub.Get( 4473 req, 4474 metadata=self.parent.get_metadata('Policies.Get', req), 4475 timeout=t) 4476 except Exception as e: 4477 if self.parent.shouldRetry(tries, e, deadline): 4478 tries += 1 4479 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4480 continue 4481 raise plumbing.convert_error_to_porcelain(e) from e 4482 break 4483 4484 resp = models.PolicyGetResponse() 4485 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4486 plumbing_response.meta) 4487 resp.policy = plumbing.convert_policy_to_porcelain( 4488 plumbing_response.policy) 4489 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4490 plumbing_response.rate_limit) 4491 return resp 4492 4493 def list(self, filter, *args, timeout=None): 4494 ''' 4495 List gets a list of Policy matching a given set of criteria 4496 ''' 4497 deadline = None if timeout is None else time.time() + timeout 4498 req = PolicyListRequest() 4499 req.meta.CopyFrom(ListRequestMetadata()) 4500 if self.parent.page_limit > 0: 4501 req.meta.limit = self.parent.page_limit 4502 if self.parent.snapshot_datetime is not None: 4503 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4504 4505 req.filter = plumbing.quote_filter_args(filter, *args) 4506 4507 def generator(svc, req): 4508 tries = 0 4509 while True: 4510 t = None if deadline is None else deadline - time.time() 4511 try: 4512 plumbing_response = svc.stub.List( 4513 req, 4514 metadata=svc.parent.get_metadata('Policies.List', req), 4515 timeout=t) 4516 except Exception as e: 4517 if self.parent.shouldRetry(tries, e, deadline): 4518 tries += 1 4519 time.sleep( 4520 self.parent.exponentialBackoff(tries, deadline)) 4521 continue 4522 raise plumbing.convert_error_to_porcelain(e) from e 4523 tries = 0 4524 for plumbing_item in plumbing_response.policies: 4525 yield plumbing.convert_policy_to_porcelain(plumbing_item) 4526 if plumbing_response.meta.next_cursor == '': 4527 break 4528 req.meta.cursor = plumbing_response.meta.next_cursor 4529 4530 return generator(self, req)
Policies are the collection of one or more statements that enforce fine-grained access
control for the users of an organization.
See strongdm.models.Policy
.
4360 def create(self, policy, timeout=None): 4361 ''' 4362 Create creates a new Policy. 4363 ''' 4364 deadline = None if timeout is None else time.time() + timeout 4365 req = PolicyCreateRequest() 4366 4367 if policy is not None: 4368 req.policy.CopyFrom(plumbing.convert_policy_to_plumbing(policy)) 4369 tries = 0 4370 plumbing_response = None 4371 while True: 4372 t = None if deadline is None else deadline - time.time() 4373 try: 4374 plumbing_response = self.stub.Create( 4375 req, 4376 metadata=self.parent.get_metadata('Policies.Create', req), 4377 timeout=t) 4378 except Exception as e: 4379 if self.parent.shouldRetry(tries, e, deadline): 4380 tries += 1 4381 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4382 continue 4383 raise plumbing.convert_error_to_porcelain(e) from e 4384 break 4385 4386 resp = models.PolicyCreateResponse() 4387 resp.policy = plumbing.convert_policy_to_porcelain( 4388 plumbing_response.policy) 4389 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4390 plumbing_response.rate_limit) 4391 return resp
Create creates a new Policy.
4393 def delete(self, id, timeout=None): 4394 ''' 4395 Delete removes a Policy by ID. 4396 ''' 4397 deadline = None if timeout is None else time.time() + timeout 4398 req = PolicyDeleteRequest() 4399 4400 req.id = (id) 4401 tries = 0 4402 plumbing_response = None 4403 while True: 4404 t = None if deadline is None else deadline - time.time() 4405 try: 4406 plumbing_response = self.stub.Delete( 4407 req, 4408 metadata=self.parent.get_metadata('Policies.Delete', req), 4409 timeout=t) 4410 except Exception as e: 4411 if self.parent.shouldRetry(tries, e, deadline): 4412 tries += 1 4413 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4414 continue 4415 raise plumbing.convert_error_to_porcelain(e) from e 4416 break 4417 4418 resp = models.PolicyDeleteResponse() 4419 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4420 plumbing_response.rate_limit) 4421 return resp
Delete removes a Policy by ID.
4423 def update(self, policy, timeout=None): 4424 ''' 4425 Update replaces all the fields of a Policy by ID. 4426 ''' 4427 deadline = None if timeout is None else time.time() + timeout 4428 req = PolicyUpdateRequest() 4429 4430 if policy is not None: 4431 req.policy.CopyFrom(plumbing.convert_policy_to_plumbing(policy)) 4432 tries = 0 4433 plumbing_response = None 4434 while True: 4435 t = None if deadline is None else deadline - time.time() 4436 try: 4437 plumbing_response = self.stub.Update( 4438 req, 4439 metadata=self.parent.get_metadata('Policies.Update', req), 4440 timeout=t) 4441 except Exception as e: 4442 if self.parent.shouldRetry(tries, e, deadline): 4443 tries += 1 4444 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4445 continue 4446 raise plumbing.convert_error_to_porcelain(e) from e 4447 break 4448 4449 resp = models.PolicyUpdateResponse() 4450 resp.policy = plumbing.convert_policy_to_porcelain( 4451 plumbing_response.policy) 4452 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4453 plumbing_response.rate_limit) 4454 return resp
Update replaces all the fields of a Policy by ID.
4456 def get(self, id, timeout=None): 4457 ''' 4458 Get reads one Policy by ID. 4459 ''' 4460 deadline = None if timeout is None else time.time() + timeout 4461 req = PolicyGetRequest() 4462 if self.parent.snapshot_datetime is not None: 4463 req.meta.CopyFrom(GetRequestMetadata()) 4464 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4465 4466 req.id = (id) 4467 tries = 0 4468 plumbing_response = None 4469 while True: 4470 t = None if deadline is None else deadline - time.time() 4471 try: 4472 plumbing_response = self.stub.Get( 4473 req, 4474 metadata=self.parent.get_metadata('Policies.Get', req), 4475 timeout=t) 4476 except Exception as e: 4477 if self.parent.shouldRetry(tries, e, deadline): 4478 tries += 1 4479 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4480 continue 4481 raise plumbing.convert_error_to_porcelain(e) from e 4482 break 4483 4484 resp = models.PolicyGetResponse() 4485 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4486 plumbing_response.meta) 4487 resp.policy = plumbing.convert_policy_to_porcelain( 4488 plumbing_response.policy) 4489 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4490 plumbing_response.rate_limit) 4491 return resp
Get reads one Policy by ID.
4493 def list(self, filter, *args, timeout=None): 4494 ''' 4495 List gets a list of Policy matching a given set of criteria 4496 ''' 4497 deadline = None if timeout is None else time.time() + timeout 4498 req = PolicyListRequest() 4499 req.meta.CopyFrom(ListRequestMetadata()) 4500 if self.parent.page_limit > 0: 4501 req.meta.limit = self.parent.page_limit 4502 if self.parent.snapshot_datetime is not None: 4503 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4504 4505 req.filter = plumbing.quote_filter_args(filter, *args) 4506 4507 def generator(svc, req): 4508 tries = 0 4509 while True: 4510 t = None if deadline is None else deadline - time.time() 4511 try: 4512 plumbing_response = svc.stub.List( 4513 req, 4514 metadata=svc.parent.get_metadata('Policies.List', req), 4515 timeout=t) 4516 except Exception as e: 4517 if self.parent.shouldRetry(tries, e, deadline): 4518 tries += 1 4519 time.sleep( 4520 self.parent.exponentialBackoff(tries, deadline)) 4521 continue 4522 raise plumbing.convert_error_to_porcelain(e) from e 4523 tries = 0 4524 for plumbing_item in plumbing_response.policies: 4525 yield plumbing.convert_policy_to_porcelain(plumbing_item) 4526 if plumbing_response.meta.next_cursor == '': 4527 break 4528 req.meta.cursor = plumbing_response.meta.next_cursor 4529 4530 return generator(self, req)
List gets a list of Policy matching a given set of criteria
4533class SnapshotPolicies: 4534 ''' 4535 SnapshotPolicies exposes the read only methods of the Policies 4536 service for historical queries. 4537 ''' 4538 def __init__(self, policies): 4539 self.policies = policies 4540 4541 def get(self, id, timeout=None): 4542 ''' 4543 Get reads one Policy by ID. 4544 ''' 4545 return self.policies.get(id, timeout=timeout) 4546 4547 def list(self, filter, *args, timeout=None): 4548 ''' 4549 List gets a list of Policy matching a given set of criteria 4550 ''' 4551 return self.policies.list(filter, *args, timeout=timeout)
SnapshotPolicies exposes the read only methods of the Policies service for historical queries.
4554class PoliciesHistory: 4555 ''' 4556 PoliciesHistory records all changes to the state of a Policy. 4557 See `strongdm.models.PolicyHistory`. 4558 ''' 4559 def __init__(self, channel, client): 4560 self.parent = client 4561 self.stub = PoliciesHistoryStub(channel) 4562 4563 def list(self, filter, *args, timeout=None): 4564 ''' 4565 List gets a list of PolicyHistory records matching a given set of criteria. 4566 ''' 4567 deadline = None if timeout is None else time.time() + timeout 4568 req = PoliciesHistoryListRequest() 4569 req.meta.CopyFrom(ListRequestMetadata()) 4570 if self.parent.page_limit > 0: 4571 req.meta.limit = self.parent.page_limit 4572 if self.parent.snapshot_datetime is not None: 4573 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4574 4575 req.filter = plumbing.quote_filter_args(filter, *args) 4576 4577 def generator(svc, req): 4578 tries = 0 4579 while True: 4580 t = None if deadline is None else deadline - time.time() 4581 try: 4582 plumbing_response = svc.stub.List( 4583 req, 4584 metadata=svc.parent.get_metadata( 4585 'PoliciesHistory.List', req), 4586 timeout=t) 4587 except Exception as e: 4588 if self.parent.shouldRetry(tries, e, deadline): 4589 tries += 1 4590 time.sleep( 4591 self.parent.exponentialBackoff(tries, deadline)) 4592 continue 4593 raise plumbing.convert_error_to_porcelain(e) from e 4594 tries = 0 4595 for plumbing_item in plumbing_response.history: 4596 yield plumbing.convert_policy_history_to_porcelain( 4597 plumbing_item) 4598 if plumbing_response.meta.next_cursor == '': 4599 break 4600 req.meta.cursor = plumbing_response.meta.next_cursor 4601 4602 return generator(self, req)
PoliciesHistory records all changes to the state of a Policy.
See strongdm.models.PolicyHistory
.
4563 def list(self, filter, *args, timeout=None): 4564 ''' 4565 List gets a list of PolicyHistory records matching a given set of criteria. 4566 ''' 4567 deadline = None if timeout is None else time.time() + timeout 4568 req = PoliciesHistoryListRequest() 4569 req.meta.CopyFrom(ListRequestMetadata()) 4570 if self.parent.page_limit > 0: 4571 req.meta.limit = self.parent.page_limit 4572 if self.parent.snapshot_datetime is not None: 4573 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4574 4575 req.filter = plumbing.quote_filter_args(filter, *args) 4576 4577 def generator(svc, req): 4578 tries = 0 4579 while True: 4580 t = None if deadline is None else deadline - time.time() 4581 try: 4582 plumbing_response = svc.stub.List( 4583 req, 4584 metadata=svc.parent.get_metadata( 4585 'PoliciesHistory.List', req), 4586 timeout=t) 4587 except Exception as e: 4588 if self.parent.shouldRetry(tries, e, deadline): 4589 tries += 1 4590 time.sleep( 4591 self.parent.exponentialBackoff(tries, deadline)) 4592 continue 4593 raise plumbing.convert_error_to_porcelain(e) from e 4594 tries = 0 4595 for plumbing_item in plumbing_response.history: 4596 yield plumbing.convert_policy_history_to_porcelain( 4597 plumbing_item) 4598 if plumbing_response.meta.next_cursor == '': 4599 break 4600 req.meta.cursor = plumbing_response.meta.next_cursor 4601 4602 return generator(self, req)
List gets a list of PolicyHistory records matching a given set of criteria.
4605class ProxyClusterKeys: 4606 ''' 4607 Proxy Cluster Keys are authentication keys for all proxies within a cluster. 4608 The proxies within a cluster share the same key. One cluster can have 4609 multiple keys in order to facilitate key rotation. 4610 See `strongdm.models.ProxyClusterKey`. 4611 ''' 4612 def __init__(self, channel, client): 4613 self.parent = client 4614 self.stub = ProxyClusterKeysStub(channel) 4615 4616 def create(self, proxy_cluster_key, timeout=None): 4617 ''' 4618 Create registers a new ProxyClusterKey. 4619 ''' 4620 deadline = None if timeout is None else time.time() + timeout 4621 req = ProxyClusterKeyCreateRequest() 4622 4623 if proxy_cluster_key is not None: 4624 req.proxy_cluster_key.CopyFrom( 4625 plumbing.convert_proxy_cluster_key_to_plumbing( 4626 proxy_cluster_key)) 4627 tries = 0 4628 plumbing_response = None 4629 while True: 4630 t = None if deadline is None else deadline - time.time() 4631 try: 4632 plumbing_response = self.stub.Create( 4633 req, 4634 metadata=self.parent.get_metadata( 4635 'ProxyClusterKeys.Create', req), 4636 timeout=t) 4637 except Exception as e: 4638 if self.parent.shouldRetry(tries, e, deadline): 4639 tries += 1 4640 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4641 continue 4642 raise plumbing.convert_error_to_porcelain(e) from e 4643 break 4644 4645 resp = models.ProxyClusterKeyCreateResponse() 4646 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4647 plumbing_response.meta) 4648 resp.proxy_cluster_key = plumbing.convert_proxy_cluster_key_to_porcelain( 4649 plumbing_response.proxy_cluster_key) 4650 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4651 plumbing_response.rate_limit) 4652 resp.secret_key = (plumbing_response.secret_key) 4653 return resp 4654 4655 def get(self, id, timeout=None): 4656 ''' 4657 Get reads one ProxyClusterKey by ID. 4658 ''' 4659 deadline = None if timeout is None else time.time() + timeout 4660 req = ProxyClusterKeyGetRequest() 4661 if self.parent.snapshot_datetime is not None: 4662 req.meta.CopyFrom(GetRequestMetadata()) 4663 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4664 4665 req.id = (id) 4666 tries = 0 4667 plumbing_response = None 4668 while True: 4669 t = None if deadline is None else deadline - time.time() 4670 try: 4671 plumbing_response = self.stub.Get( 4672 req, 4673 metadata=self.parent.get_metadata('ProxyClusterKeys.Get', 4674 req), 4675 timeout=t) 4676 except Exception as e: 4677 if self.parent.shouldRetry(tries, e, deadline): 4678 tries += 1 4679 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4680 continue 4681 raise plumbing.convert_error_to_porcelain(e) from e 4682 break 4683 4684 resp = models.ProxyClusterKeyGetResponse() 4685 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4686 plumbing_response.meta) 4687 resp.proxy_cluster_key = plumbing.convert_proxy_cluster_key_to_porcelain( 4688 plumbing_response.proxy_cluster_key) 4689 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4690 plumbing_response.rate_limit) 4691 return resp 4692 4693 def delete(self, id, timeout=None): 4694 ''' 4695 Delete removes a ProxyClusterKey by ID. 4696 ''' 4697 deadline = None if timeout is None else time.time() + timeout 4698 req = ProxyClusterKeyDeleteRequest() 4699 4700 req.id = (id) 4701 tries = 0 4702 plumbing_response = None 4703 while True: 4704 t = None if deadline is None else deadline - time.time() 4705 try: 4706 plumbing_response = self.stub.Delete( 4707 req, 4708 metadata=self.parent.get_metadata( 4709 'ProxyClusterKeys.Delete', req), 4710 timeout=t) 4711 except Exception as e: 4712 if self.parent.shouldRetry(tries, e, deadline): 4713 tries += 1 4714 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4715 continue 4716 raise plumbing.convert_error_to_porcelain(e) from e 4717 break 4718 4719 resp = models.ProxyClusterKeyDeleteResponse() 4720 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4721 plumbing_response.meta) 4722 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4723 plumbing_response.rate_limit) 4724 return resp 4725 4726 def list(self, filter, *args, timeout=None): 4727 ''' 4728 List gets a list of ProxyClusterKeys matching a given set of criteria. 4729 ''' 4730 deadline = None if timeout is None else time.time() + timeout 4731 req = ProxyClusterKeyListRequest() 4732 req.meta.CopyFrom(ListRequestMetadata()) 4733 if self.parent.page_limit > 0: 4734 req.meta.limit = self.parent.page_limit 4735 if self.parent.snapshot_datetime is not None: 4736 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4737 4738 req.filter = plumbing.quote_filter_args(filter, *args) 4739 4740 def generator(svc, req): 4741 tries = 0 4742 while True: 4743 t = None if deadline is None else deadline - time.time() 4744 try: 4745 plumbing_response = svc.stub.List( 4746 req, 4747 metadata=svc.parent.get_metadata( 4748 'ProxyClusterKeys.List', req), 4749 timeout=t) 4750 except Exception as e: 4751 if self.parent.shouldRetry(tries, e, deadline): 4752 tries += 1 4753 time.sleep( 4754 self.parent.exponentialBackoff(tries, deadline)) 4755 continue 4756 raise plumbing.convert_error_to_porcelain(e) from e 4757 tries = 0 4758 for plumbing_item in plumbing_response.proxy_cluster_keys: 4759 yield plumbing.convert_proxy_cluster_key_to_porcelain( 4760 plumbing_item) 4761 if plumbing_response.meta.next_cursor == '': 4762 break 4763 req.meta.cursor = plumbing_response.meta.next_cursor 4764 4765 return generator(self, req)
Proxy Cluster Keys are authentication keys for all proxies within a cluster.
The proxies within a cluster share the same key. One cluster can have
multiple keys in order to facilitate key rotation.
See strongdm.models.ProxyClusterKey
.
4616 def create(self, proxy_cluster_key, timeout=None): 4617 ''' 4618 Create registers a new ProxyClusterKey. 4619 ''' 4620 deadline = None if timeout is None else time.time() + timeout 4621 req = ProxyClusterKeyCreateRequest() 4622 4623 if proxy_cluster_key is not None: 4624 req.proxy_cluster_key.CopyFrom( 4625 plumbing.convert_proxy_cluster_key_to_plumbing( 4626 proxy_cluster_key)) 4627 tries = 0 4628 plumbing_response = None 4629 while True: 4630 t = None if deadline is None else deadline - time.time() 4631 try: 4632 plumbing_response = self.stub.Create( 4633 req, 4634 metadata=self.parent.get_metadata( 4635 'ProxyClusterKeys.Create', req), 4636 timeout=t) 4637 except Exception as e: 4638 if self.parent.shouldRetry(tries, e, deadline): 4639 tries += 1 4640 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4641 continue 4642 raise plumbing.convert_error_to_porcelain(e) from e 4643 break 4644 4645 resp = models.ProxyClusterKeyCreateResponse() 4646 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4647 plumbing_response.meta) 4648 resp.proxy_cluster_key = plumbing.convert_proxy_cluster_key_to_porcelain( 4649 plumbing_response.proxy_cluster_key) 4650 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4651 plumbing_response.rate_limit) 4652 resp.secret_key = (plumbing_response.secret_key) 4653 return resp
Create registers a new ProxyClusterKey.
4655 def get(self, id, timeout=None): 4656 ''' 4657 Get reads one ProxyClusterKey by ID. 4658 ''' 4659 deadline = None if timeout is None else time.time() + timeout 4660 req = ProxyClusterKeyGetRequest() 4661 if self.parent.snapshot_datetime is not None: 4662 req.meta.CopyFrom(GetRequestMetadata()) 4663 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4664 4665 req.id = (id) 4666 tries = 0 4667 plumbing_response = None 4668 while True: 4669 t = None if deadline is None else deadline - time.time() 4670 try: 4671 plumbing_response = self.stub.Get( 4672 req, 4673 metadata=self.parent.get_metadata('ProxyClusterKeys.Get', 4674 req), 4675 timeout=t) 4676 except Exception as e: 4677 if self.parent.shouldRetry(tries, e, deadline): 4678 tries += 1 4679 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4680 continue 4681 raise plumbing.convert_error_to_porcelain(e) from e 4682 break 4683 4684 resp = models.ProxyClusterKeyGetResponse() 4685 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4686 plumbing_response.meta) 4687 resp.proxy_cluster_key = plumbing.convert_proxy_cluster_key_to_porcelain( 4688 plumbing_response.proxy_cluster_key) 4689 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4690 plumbing_response.rate_limit) 4691 return resp
Get reads one ProxyClusterKey by ID.
4693 def delete(self, id, timeout=None): 4694 ''' 4695 Delete removes a ProxyClusterKey by ID. 4696 ''' 4697 deadline = None if timeout is None else time.time() + timeout 4698 req = ProxyClusterKeyDeleteRequest() 4699 4700 req.id = (id) 4701 tries = 0 4702 plumbing_response = None 4703 while True: 4704 t = None if deadline is None else deadline - time.time() 4705 try: 4706 plumbing_response = self.stub.Delete( 4707 req, 4708 metadata=self.parent.get_metadata( 4709 'ProxyClusterKeys.Delete', req), 4710 timeout=t) 4711 except Exception as e: 4712 if self.parent.shouldRetry(tries, e, deadline): 4713 tries += 1 4714 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4715 continue 4716 raise plumbing.convert_error_to_porcelain(e) from e 4717 break 4718 4719 resp = models.ProxyClusterKeyDeleteResponse() 4720 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4721 plumbing_response.meta) 4722 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4723 plumbing_response.rate_limit) 4724 return resp
Delete removes a ProxyClusterKey by ID.
4726 def list(self, filter, *args, timeout=None): 4727 ''' 4728 List gets a list of ProxyClusterKeys matching a given set of criteria. 4729 ''' 4730 deadline = None if timeout is None else time.time() + timeout 4731 req = ProxyClusterKeyListRequest() 4732 req.meta.CopyFrom(ListRequestMetadata()) 4733 if self.parent.page_limit > 0: 4734 req.meta.limit = self.parent.page_limit 4735 if self.parent.snapshot_datetime is not None: 4736 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4737 4738 req.filter = plumbing.quote_filter_args(filter, *args) 4739 4740 def generator(svc, req): 4741 tries = 0 4742 while True: 4743 t = None if deadline is None else deadline - time.time() 4744 try: 4745 plumbing_response = svc.stub.List( 4746 req, 4747 metadata=svc.parent.get_metadata( 4748 'ProxyClusterKeys.List', req), 4749 timeout=t) 4750 except Exception as e: 4751 if self.parent.shouldRetry(tries, e, deadline): 4752 tries += 1 4753 time.sleep( 4754 self.parent.exponentialBackoff(tries, deadline)) 4755 continue 4756 raise plumbing.convert_error_to_porcelain(e) from e 4757 tries = 0 4758 for plumbing_item in plumbing_response.proxy_cluster_keys: 4759 yield plumbing.convert_proxy_cluster_key_to_porcelain( 4760 plumbing_item) 4761 if plumbing_response.meta.next_cursor == '': 4762 break 4763 req.meta.cursor = plumbing_response.meta.next_cursor 4764 4765 return generator(self, req)
List gets a list of ProxyClusterKeys matching a given set of criteria.
4768class SnapshotProxyClusterKeys: 4769 ''' 4770 SnapshotProxyClusterKeys exposes the read only methods of the ProxyClusterKeys 4771 service for historical queries. 4772 ''' 4773 def __init__(self, proxy_cluster_keys): 4774 self.proxy_cluster_keys = proxy_cluster_keys 4775 4776 def get(self, id, timeout=None): 4777 ''' 4778 Get reads one ProxyClusterKey by ID. 4779 ''' 4780 return self.proxy_cluster_keys.get(id, timeout=timeout) 4781 4782 def list(self, filter, *args, timeout=None): 4783 ''' 4784 List gets a list of ProxyClusterKeys matching a given set of criteria. 4785 ''' 4786 return self.proxy_cluster_keys.list(filter, *args, timeout=timeout)
SnapshotProxyClusterKeys exposes the read only methods of the ProxyClusterKeys service for historical queries.
4776 def get(self, id, timeout=None): 4777 ''' 4778 Get reads one ProxyClusterKey by ID. 4779 ''' 4780 return self.proxy_cluster_keys.get(id, timeout=timeout)
Get reads one ProxyClusterKey by ID.
4782 def list(self, filter, *args, timeout=None): 4783 ''' 4784 List gets a list of ProxyClusterKeys matching a given set of criteria. 4785 ''' 4786 return self.proxy_cluster_keys.list(filter, *args, timeout=timeout)
List gets a list of ProxyClusterKeys matching a given set of criteria.
4789class Queries: 4790 ''' 4791 A Query is a record of a single client request to a resource, such as a SQL query. 4792 Long-running SSH, RDP, or Kubernetes interactive sessions also count as queries. 4793 The Queries service is read-only. 4794 See `strongdm.models.Query`. 4795 ''' 4796 def __init__(self, channel, client): 4797 self.parent = client 4798 self.stub = QueriesStub(channel) 4799 4800 def list(self, filter, *args, timeout=None): 4801 ''' 4802 List gets a list of Queries matching a given set of criteria. 4803 ''' 4804 deadline = None if timeout is None else time.time() + timeout 4805 req = QueryListRequest() 4806 req.meta.CopyFrom(ListRequestMetadata()) 4807 if self.parent.page_limit > 0: 4808 req.meta.limit = self.parent.page_limit 4809 if self.parent.snapshot_datetime is not None: 4810 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4811 4812 req.filter = plumbing.quote_filter_args(filter, *args) 4813 4814 def generator(svc, req): 4815 tries = 0 4816 while True: 4817 t = None if deadline is None else deadline - time.time() 4818 try: 4819 plumbing_response = svc.stub.List( 4820 req, 4821 metadata=svc.parent.get_metadata('Queries.List', req), 4822 timeout=t) 4823 except Exception as e: 4824 if self.parent.shouldRetry(tries, e, deadline): 4825 tries += 1 4826 time.sleep( 4827 self.parent.exponentialBackoff(tries, deadline)) 4828 continue 4829 raise plumbing.convert_error_to_porcelain(e) from e 4830 tries = 0 4831 for plumbing_item in plumbing_response.queries: 4832 yield plumbing.convert_query_to_porcelain(plumbing_item) 4833 if plumbing_response.meta.next_cursor == '': 4834 break 4835 req.meta.cursor = plumbing_response.meta.next_cursor 4836 4837 return generator(self, req)
A Query is a record of a single client request to a resource, such as a SQL query.
Long-running SSH, RDP, or Kubernetes interactive sessions also count as queries.
The Queries service is read-only.
See strongdm.models.Query
.
4800 def list(self, filter, *args, timeout=None): 4801 ''' 4802 List gets a list of Queries matching a given set of criteria. 4803 ''' 4804 deadline = None if timeout is None else time.time() + timeout 4805 req = QueryListRequest() 4806 req.meta.CopyFrom(ListRequestMetadata()) 4807 if self.parent.page_limit > 0: 4808 req.meta.limit = self.parent.page_limit 4809 if self.parent.snapshot_datetime is not None: 4810 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4811 4812 req.filter = plumbing.quote_filter_args(filter, *args) 4813 4814 def generator(svc, req): 4815 tries = 0 4816 while True: 4817 t = None if deadline is None else deadline - time.time() 4818 try: 4819 plumbing_response = svc.stub.List( 4820 req, 4821 metadata=svc.parent.get_metadata('Queries.List', req), 4822 timeout=t) 4823 except Exception as e: 4824 if self.parent.shouldRetry(tries, e, deadline): 4825 tries += 1 4826 time.sleep( 4827 self.parent.exponentialBackoff(tries, deadline)) 4828 continue 4829 raise plumbing.convert_error_to_porcelain(e) from e 4830 tries = 0 4831 for plumbing_item in plumbing_response.queries: 4832 yield plumbing.convert_query_to_porcelain(plumbing_item) 4833 if plumbing_response.meta.next_cursor == '': 4834 break 4835 req.meta.cursor = plumbing_response.meta.next_cursor 4836 4837 return generator(self, req)
List gets a list of Queries matching a given set of criteria.
4840class RemoteIdentities: 4841 ''' 4842 RemoteIdentities assign a resource directly to an account, giving the account the permission to connect to that resource. 4843 See `strongdm.models.RemoteIdentity`. 4844 ''' 4845 def __init__(self, channel, client): 4846 self.parent = client 4847 self.stub = RemoteIdentitiesStub(channel) 4848 4849 def create(self, remote_identity, timeout=None): 4850 ''' 4851 Create registers a new RemoteIdentity. 4852 ''' 4853 deadline = None if timeout is None else time.time() + timeout 4854 req = RemoteIdentityCreateRequest() 4855 4856 if remote_identity is not None: 4857 req.remote_identity.CopyFrom( 4858 plumbing.convert_remote_identity_to_plumbing(remote_identity)) 4859 tries = 0 4860 plumbing_response = None 4861 while True: 4862 t = None if deadline is None else deadline - time.time() 4863 try: 4864 plumbing_response = self.stub.Create( 4865 req, 4866 metadata=self.parent.get_metadata( 4867 'RemoteIdentities.Create', req), 4868 timeout=t) 4869 except Exception as e: 4870 if self.parent.shouldRetry(tries, e, deadline): 4871 tries += 1 4872 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4873 continue 4874 raise plumbing.convert_error_to_porcelain(e) from e 4875 break 4876 4877 resp = models.RemoteIdentityCreateResponse() 4878 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4879 plumbing_response.meta) 4880 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4881 plumbing_response.rate_limit) 4882 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4883 plumbing_response.remote_identity) 4884 return resp 4885 4886 def get(self, id, timeout=None): 4887 ''' 4888 Get reads one RemoteIdentity by ID. 4889 ''' 4890 deadline = None if timeout is None else time.time() + timeout 4891 req = RemoteIdentityGetRequest() 4892 if self.parent.snapshot_datetime is not None: 4893 req.meta.CopyFrom(GetRequestMetadata()) 4894 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4895 4896 req.id = (id) 4897 tries = 0 4898 plumbing_response = None 4899 while True: 4900 t = None if deadline is None else deadline - time.time() 4901 try: 4902 plumbing_response = self.stub.Get( 4903 req, 4904 metadata=self.parent.get_metadata('RemoteIdentities.Get', 4905 req), 4906 timeout=t) 4907 except Exception as e: 4908 if self.parent.shouldRetry(tries, e, deadline): 4909 tries += 1 4910 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4911 continue 4912 raise plumbing.convert_error_to_porcelain(e) from e 4913 break 4914 4915 resp = models.RemoteIdentityGetResponse() 4916 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4917 plumbing_response.meta) 4918 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4919 plumbing_response.rate_limit) 4920 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4921 plumbing_response.remote_identity) 4922 return resp 4923 4924 def update(self, remote_identity, timeout=None): 4925 ''' 4926 Update replaces all the fields of a RemoteIdentity by ID. 4927 ''' 4928 deadline = None if timeout is None else time.time() + timeout 4929 req = RemoteIdentityUpdateRequest() 4930 4931 if remote_identity is not None: 4932 req.remote_identity.CopyFrom( 4933 plumbing.convert_remote_identity_to_plumbing(remote_identity)) 4934 tries = 0 4935 plumbing_response = None 4936 while True: 4937 t = None if deadline is None else deadline - time.time() 4938 try: 4939 plumbing_response = self.stub.Update( 4940 req, 4941 metadata=self.parent.get_metadata( 4942 'RemoteIdentities.Update', req), 4943 timeout=t) 4944 except Exception as e: 4945 if self.parent.shouldRetry(tries, e, deadline): 4946 tries += 1 4947 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4948 continue 4949 raise plumbing.convert_error_to_porcelain(e) from e 4950 break 4951 4952 resp = models.RemoteIdentityUpdateResponse() 4953 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 4954 plumbing_response.meta) 4955 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4956 plumbing_response.rate_limit) 4957 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4958 plumbing_response.remote_identity) 4959 return resp 4960 4961 def delete(self, id, timeout=None): 4962 ''' 4963 Delete removes a RemoteIdentity by ID. 4964 ''' 4965 deadline = None if timeout is None else time.time() + timeout 4966 req = RemoteIdentityDeleteRequest() 4967 4968 req.id = (id) 4969 tries = 0 4970 plumbing_response = None 4971 while True: 4972 t = None if deadline is None else deadline - time.time() 4973 try: 4974 plumbing_response = self.stub.Delete( 4975 req, 4976 metadata=self.parent.get_metadata( 4977 'RemoteIdentities.Delete', req), 4978 timeout=t) 4979 except Exception as e: 4980 if self.parent.shouldRetry(tries, e, deadline): 4981 tries += 1 4982 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4983 continue 4984 raise plumbing.convert_error_to_porcelain(e) from e 4985 break 4986 4987 resp = models.RemoteIdentityDeleteResponse() 4988 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4989 plumbing_response.meta) 4990 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4991 plumbing_response.rate_limit) 4992 return resp 4993 4994 def list(self, filter, *args, timeout=None): 4995 ''' 4996 List gets a list of RemoteIdentities matching a given set of criteria. 4997 ''' 4998 deadline = None if timeout is None else time.time() + timeout 4999 req = RemoteIdentityListRequest() 5000 req.meta.CopyFrom(ListRequestMetadata()) 5001 if self.parent.page_limit > 0: 5002 req.meta.limit = self.parent.page_limit 5003 if self.parent.snapshot_datetime is not None: 5004 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5005 5006 req.filter = plumbing.quote_filter_args(filter, *args) 5007 5008 def generator(svc, req): 5009 tries = 0 5010 while True: 5011 t = None if deadline is None else deadline - time.time() 5012 try: 5013 plumbing_response = svc.stub.List( 5014 req, 5015 metadata=svc.parent.get_metadata( 5016 'RemoteIdentities.List', req), 5017 timeout=t) 5018 except Exception as e: 5019 if self.parent.shouldRetry(tries, e, deadline): 5020 tries += 1 5021 time.sleep( 5022 self.parent.exponentialBackoff(tries, deadline)) 5023 continue 5024 raise plumbing.convert_error_to_porcelain(e) from e 5025 tries = 0 5026 for plumbing_item in plumbing_response.remote_identities: 5027 yield plumbing.convert_remote_identity_to_porcelain( 5028 plumbing_item) 5029 if plumbing_response.meta.next_cursor == '': 5030 break 5031 req.meta.cursor = plumbing_response.meta.next_cursor 5032 5033 return generator(self, req)
RemoteIdentities assign a resource directly to an account, giving the account the permission to connect to that resource.
See strongdm.models.RemoteIdentity
.
4849 def create(self, remote_identity, timeout=None): 4850 ''' 4851 Create registers a new RemoteIdentity. 4852 ''' 4853 deadline = None if timeout is None else time.time() + timeout 4854 req = RemoteIdentityCreateRequest() 4855 4856 if remote_identity is not None: 4857 req.remote_identity.CopyFrom( 4858 plumbing.convert_remote_identity_to_plumbing(remote_identity)) 4859 tries = 0 4860 plumbing_response = None 4861 while True: 4862 t = None if deadline is None else deadline - time.time() 4863 try: 4864 plumbing_response = self.stub.Create( 4865 req, 4866 metadata=self.parent.get_metadata( 4867 'RemoteIdentities.Create', req), 4868 timeout=t) 4869 except Exception as e: 4870 if self.parent.shouldRetry(tries, e, deadline): 4871 tries += 1 4872 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4873 continue 4874 raise plumbing.convert_error_to_porcelain(e) from e 4875 break 4876 4877 resp = models.RemoteIdentityCreateResponse() 4878 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 4879 plumbing_response.meta) 4880 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4881 plumbing_response.rate_limit) 4882 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4883 plumbing_response.remote_identity) 4884 return resp
Create registers a new RemoteIdentity.
4886 def get(self, id, timeout=None): 4887 ''' 4888 Get reads one RemoteIdentity by ID. 4889 ''' 4890 deadline = None if timeout is None else time.time() + timeout 4891 req = RemoteIdentityGetRequest() 4892 if self.parent.snapshot_datetime is not None: 4893 req.meta.CopyFrom(GetRequestMetadata()) 4894 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 4895 4896 req.id = (id) 4897 tries = 0 4898 plumbing_response = None 4899 while True: 4900 t = None if deadline is None else deadline - time.time() 4901 try: 4902 plumbing_response = self.stub.Get( 4903 req, 4904 metadata=self.parent.get_metadata('RemoteIdentities.Get', 4905 req), 4906 timeout=t) 4907 except Exception as e: 4908 if self.parent.shouldRetry(tries, e, deadline): 4909 tries += 1 4910 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4911 continue 4912 raise plumbing.convert_error_to_porcelain(e) from e 4913 break 4914 4915 resp = models.RemoteIdentityGetResponse() 4916 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 4917 plumbing_response.meta) 4918 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4919 plumbing_response.rate_limit) 4920 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4921 plumbing_response.remote_identity) 4922 return resp
Get reads one RemoteIdentity by ID.
4924 def update(self, remote_identity, timeout=None): 4925 ''' 4926 Update replaces all the fields of a RemoteIdentity by ID. 4927 ''' 4928 deadline = None if timeout is None else time.time() + timeout 4929 req = RemoteIdentityUpdateRequest() 4930 4931 if remote_identity is not None: 4932 req.remote_identity.CopyFrom( 4933 plumbing.convert_remote_identity_to_plumbing(remote_identity)) 4934 tries = 0 4935 plumbing_response = None 4936 while True: 4937 t = None if deadline is None else deadline - time.time() 4938 try: 4939 plumbing_response = self.stub.Update( 4940 req, 4941 metadata=self.parent.get_metadata( 4942 'RemoteIdentities.Update', req), 4943 timeout=t) 4944 except Exception as e: 4945 if self.parent.shouldRetry(tries, e, deadline): 4946 tries += 1 4947 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4948 continue 4949 raise plumbing.convert_error_to_porcelain(e) from e 4950 break 4951 4952 resp = models.RemoteIdentityUpdateResponse() 4953 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 4954 plumbing_response.meta) 4955 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4956 plumbing_response.rate_limit) 4957 resp.remote_identity = plumbing.convert_remote_identity_to_porcelain( 4958 plumbing_response.remote_identity) 4959 return resp
Update replaces all the fields of a RemoteIdentity by ID.
4961 def delete(self, id, timeout=None): 4962 ''' 4963 Delete removes a RemoteIdentity by ID. 4964 ''' 4965 deadline = None if timeout is None else time.time() + timeout 4966 req = RemoteIdentityDeleteRequest() 4967 4968 req.id = (id) 4969 tries = 0 4970 plumbing_response = None 4971 while True: 4972 t = None if deadline is None else deadline - time.time() 4973 try: 4974 plumbing_response = self.stub.Delete( 4975 req, 4976 metadata=self.parent.get_metadata( 4977 'RemoteIdentities.Delete', req), 4978 timeout=t) 4979 except Exception as e: 4980 if self.parent.shouldRetry(tries, e, deadline): 4981 tries += 1 4982 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 4983 continue 4984 raise plumbing.convert_error_to_porcelain(e) from e 4985 break 4986 4987 resp = models.RemoteIdentityDeleteResponse() 4988 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 4989 plumbing_response.meta) 4990 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 4991 plumbing_response.rate_limit) 4992 return resp
Delete removes a RemoteIdentity by ID.
4994 def list(self, filter, *args, timeout=None): 4995 ''' 4996 List gets a list of RemoteIdentities matching a given set of criteria. 4997 ''' 4998 deadline = None if timeout is None else time.time() + timeout 4999 req = RemoteIdentityListRequest() 5000 req.meta.CopyFrom(ListRequestMetadata()) 5001 if self.parent.page_limit > 0: 5002 req.meta.limit = self.parent.page_limit 5003 if self.parent.snapshot_datetime is not None: 5004 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5005 5006 req.filter = plumbing.quote_filter_args(filter, *args) 5007 5008 def generator(svc, req): 5009 tries = 0 5010 while True: 5011 t = None if deadline is None else deadline - time.time() 5012 try: 5013 plumbing_response = svc.stub.List( 5014 req, 5015 metadata=svc.parent.get_metadata( 5016 'RemoteIdentities.List', req), 5017 timeout=t) 5018 except Exception as e: 5019 if self.parent.shouldRetry(tries, e, deadline): 5020 tries += 1 5021 time.sleep( 5022 self.parent.exponentialBackoff(tries, deadline)) 5023 continue 5024 raise plumbing.convert_error_to_porcelain(e) from e 5025 tries = 0 5026 for plumbing_item in plumbing_response.remote_identities: 5027 yield plumbing.convert_remote_identity_to_porcelain( 5028 plumbing_item) 5029 if plumbing_response.meta.next_cursor == '': 5030 break 5031 req.meta.cursor = plumbing_response.meta.next_cursor 5032 5033 return generator(self, req)
List gets a list of RemoteIdentities matching a given set of criteria.
5036class SnapshotRemoteIdentities: 5037 ''' 5038 SnapshotRemoteIdentities exposes the read only methods of the RemoteIdentities 5039 service for historical queries. 5040 ''' 5041 def __init__(self, remote_identities): 5042 self.remote_identities = remote_identities 5043 5044 def get(self, id, timeout=None): 5045 ''' 5046 Get reads one RemoteIdentity by ID. 5047 ''' 5048 return self.remote_identities.get(id, timeout=timeout) 5049 5050 def list(self, filter, *args, timeout=None): 5051 ''' 5052 List gets a list of RemoteIdentities matching a given set of criteria. 5053 ''' 5054 return self.remote_identities.list(filter, *args, timeout=timeout)
SnapshotRemoteIdentities exposes the read only methods of the RemoteIdentities service for historical queries.
5044 def get(self, id, timeout=None): 5045 ''' 5046 Get reads one RemoteIdentity by ID. 5047 ''' 5048 return self.remote_identities.get(id, timeout=timeout)
Get reads one RemoteIdentity by ID.
5050 def list(self, filter, *args, timeout=None): 5051 ''' 5052 List gets a list of RemoteIdentities matching a given set of criteria. 5053 ''' 5054 return self.remote_identities.list(filter, *args, timeout=timeout)
List gets a list of RemoteIdentities matching a given set of criteria.
5057class RemoteIdentitiesHistory: 5058 ''' 5059 RemoteIdentitiesHistory records all changes to the state of a RemoteIdentity. 5060 See `strongdm.models.RemoteIdentityHistory`. 5061 ''' 5062 def __init__(self, channel, client): 5063 self.parent = client 5064 self.stub = RemoteIdentitiesHistoryStub(channel) 5065 5066 def list(self, filter, *args, timeout=None): 5067 ''' 5068 List gets a list of RemoteIdentityHistory records matching a given set of criteria. 5069 ''' 5070 deadline = None if timeout is None else time.time() + timeout 5071 req = RemoteIdentityHistoryListRequest() 5072 req.meta.CopyFrom(ListRequestMetadata()) 5073 if self.parent.page_limit > 0: 5074 req.meta.limit = self.parent.page_limit 5075 if self.parent.snapshot_datetime is not None: 5076 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5077 5078 req.filter = plumbing.quote_filter_args(filter, *args) 5079 5080 def generator(svc, req): 5081 tries = 0 5082 while True: 5083 t = None if deadline is None else deadline - time.time() 5084 try: 5085 plumbing_response = svc.stub.List( 5086 req, 5087 metadata=svc.parent.get_metadata( 5088 'RemoteIdentitiesHistory.List', req), 5089 timeout=t) 5090 except Exception as e: 5091 if self.parent.shouldRetry(tries, e, deadline): 5092 tries += 1 5093 time.sleep( 5094 self.parent.exponentialBackoff(tries, deadline)) 5095 continue 5096 raise plumbing.convert_error_to_porcelain(e) from e 5097 tries = 0 5098 for plumbing_item in plumbing_response.history: 5099 yield plumbing.convert_remote_identity_history_to_porcelain( 5100 plumbing_item) 5101 if plumbing_response.meta.next_cursor == '': 5102 break 5103 req.meta.cursor = plumbing_response.meta.next_cursor 5104 5105 return generator(self, req)
RemoteIdentitiesHistory records all changes to the state of a RemoteIdentity.
See strongdm.models.RemoteIdentityHistory
.
5066 def list(self, filter, *args, timeout=None): 5067 ''' 5068 List gets a list of RemoteIdentityHistory records matching a given set of criteria. 5069 ''' 5070 deadline = None if timeout is None else time.time() + timeout 5071 req = RemoteIdentityHistoryListRequest() 5072 req.meta.CopyFrom(ListRequestMetadata()) 5073 if self.parent.page_limit > 0: 5074 req.meta.limit = self.parent.page_limit 5075 if self.parent.snapshot_datetime is not None: 5076 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5077 5078 req.filter = plumbing.quote_filter_args(filter, *args) 5079 5080 def generator(svc, req): 5081 tries = 0 5082 while True: 5083 t = None if deadline is None else deadline - time.time() 5084 try: 5085 plumbing_response = svc.stub.List( 5086 req, 5087 metadata=svc.parent.get_metadata( 5088 'RemoteIdentitiesHistory.List', req), 5089 timeout=t) 5090 except Exception as e: 5091 if self.parent.shouldRetry(tries, e, deadline): 5092 tries += 1 5093 time.sleep( 5094 self.parent.exponentialBackoff(tries, deadline)) 5095 continue 5096 raise plumbing.convert_error_to_porcelain(e) from e 5097 tries = 0 5098 for plumbing_item in plumbing_response.history: 5099 yield plumbing.convert_remote_identity_history_to_porcelain( 5100 plumbing_item) 5101 if plumbing_response.meta.next_cursor == '': 5102 break 5103 req.meta.cursor = plumbing_response.meta.next_cursor 5104 5105 return generator(self, req)
List gets a list of RemoteIdentityHistory records matching a given set of criteria.
5108class RemoteIdentityGroups: 5109 ''' 5110 A RemoteIdentityGroup is a named grouping of Remote Identities for Accounts. 5111 An Account's relationship to a RemoteIdentityGroup is defined via RemoteIdentity objects. 5112 See `strongdm.models.RemoteIdentityGroup`. 5113 ''' 5114 def __init__(self, channel, client): 5115 self.parent = client 5116 self.stub = RemoteIdentityGroupsStub(channel) 5117 5118 def get(self, id, timeout=None): 5119 ''' 5120 Get reads one RemoteIdentityGroup by ID. 5121 ''' 5122 deadline = None if timeout is None else time.time() + timeout 5123 req = RemoteIdentityGroupGetRequest() 5124 if self.parent.snapshot_datetime is not None: 5125 req.meta.CopyFrom(GetRequestMetadata()) 5126 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5127 5128 req.id = (id) 5129 tries = 0 5130 plumbing_response = None 5131 while True: 5132 t = None if deadline is None else deadline - time.time() 5133 try: 5134 plumbing_response = self.stub.Get( 5135 req, 5136 metadata=self.parent.get_metadata( 5137 'RemoteIdentityGroups.Get', req), 5138 timeout=t) 5139 except Exception as e: 5140 if self.parent.shouldRetry(tries, e, deadline): 5141 tries += 1 5142 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5143 continue 5144 raise plumbing.convert_error_to_porcelain(e) from e 5145 break 5146 5147 resp = models.RemoteIdentityGroupGetResponse() 5148 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 5149 plumbing_response.meta) 5150 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5151 plumbing_response.rate_limit) 5152 resp.remote_identity_group = plumbing.convert_remote_identity_group_to_porcelain( 5153 plumbing_response.remote_identity_group) 5154 return resp 5155 5156 def list(self, filter, *args, timeout=None): 5157 ''' 5158 List gets a list of RemoteIdentityGroups matching a given set of criteria. 5159 ''' 5160 deadline = None if timeout is None else time.time() + timeout 5161 req = RemoteIdentityGroupListRequest() 5162 req.meta.CopyFrom(ListRequestMetadata()) 5163 if self.parent.page_limit > 0: 5164 req.meta.limit = self.parent.page_limit 5165 if self.parent.snapshot_datetime is not None: 5166 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5167 5168 req.filter = plumbing.quote_filter_args(filter, *args) 5169 5170 def generator(svc, req): 5171 tries = 0 5172 while True: 5173 t = None if deadline is None else deadline - time.time() 5174 try: 5175 plumbing_response = svc.stub.List( 5176 req, 5177 metadata=svc.parent.get_metadata( 5178 'RemoteIdentityGroups.List', req), 5179 timeout=t) 5180 except Exception as e: 5181 if self.parent.shouldRetry(tries, e, deadline): 5182 tries += 1 5183 time.sleep( 5184 self.parent.exponentialBackoff(tries, deadline)) 5185 continue 5186 raise plumbing.convert_error_to_porcelain(e) from e 5187 tries = 0 5188 for plumbing_item in plumbing_response.remote_identity_groups: 5189 yield plumbing.convert_remote_identity_group_to_porcelain( 5190 plumbing_item) 5191 if plumbing_response.meta.next_cursor == '': 5192 break 5193 req.meta.cursor = plumbing_response.meta.next_cursor 5194 5195 return generator(self, req)
A RemoteIdentityGroup is a named grouping of Remote Identities for Accounts.
An Account's relationship to a RemoteIdentityGroup is defined via RemoteIdentity objects.
See strongdm.models.RemoteIdentityGroup
.
5118 def get(self, id, timeout=None): 5119 ''' 5120 Get reads one RemoteIdentityGroup by ID. 5121 ''' 5122 deadline = None if timeout is None else time.time() + timeout 5123 req = RemoteIdentityGroupGetRequest() 5124 if self.parent.snapshot_datetime is not None: 5125 req.meta.CopyFrom(GetRequestMetadata()) 5126 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5127 5128 req.id = (id) 5129 tries = 0 5130 plumbing_response = None 5131 while True: 5132 t = None if deadline is None else deadline - time.time() 5133 try: 5134 plumbing_response = self.stub.Get( 5135 req, 5136 metadata=self.parent.get_metadata( 5137 'RemoteIdentityGroups.Get', req), 5138 timeout=t) 5139 except Exception as e: 5140 if self.parent.shouldRetry(tries, e, deadline): 5141 tries += 1 5142 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5143 continue 5144 raise plumbing.convert_error_to_porcelain(e) from e 5145 break 5146 5147 resp = models.RemoteIdentityGroupGetResponse() 5148 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 5149 plumbing_response.meta) 5150 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5151 plumbing_response.rate_limit) 5152 resp.remote_identity_group = plumbing.convert_remote_identity_group_to_porcelain( 5153 plumbing_response.remote_identity_group) 5154 return resp
Get reads one RemoteIdentityGroup by ID.
5156 def list(self, filter, *args, timeout=None): 5157 ''' 5158 List gets a list of RemoteIdentityGroups matching a given set of criteria. 5159 ''' 5160 deadline = None if timeout is None else time.time() + timeout 5161 req = RemoteIdentityGroupListRequest() 5162 req.meta.CopyFrom(ListRequestMetadata()) 5163 if self.parent.page_limit > 0: 5164 req.meta.limit = self.parent.page_limit 5165 if self.parent.snapshot_datetime is not None: 5166 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5167 5168 req.filter = plumbing.quote_filter_args(filter, *args) 5169 5170 def generator(svc, req): 5171 tries = 0 5172 while True: 5173 t = None if deadline is None else deadline - time.time() 5174 try: 5175 plumbing_response = svc.stub.List( 5176 req, 5177 metadata=svc.parent.get_metadata( 5178 'RemoteIdentityGroups.List', req), 5179 timeout=t) 5180 except Exception as e: 5181 if self.parent.shouldRetry(tries, e, deadline): 5182 tries += 1 5183 time.sleep( 5184 self.parent.exponentialBackoff(tries, deadline)) 5185 continue 5186 raise plumbing.convert_error_to_porcelain(e) from e 5187 tries = 0 5188 for plumbing_item in plumbing_response.remote_identity_groups: 5189 yield plumbing.convert_remote_identity_group_to_porcelain( 5190 plumbing_item) 5191 if plumbing_response.meta.next_cursor == '': 5192 break 5193 req.meta.cursor = plumbing_response.meta.next_cursor 5194 5195 return generator(self, req)
List gets a list of RemoteIdentityGroups matching a given set of criteria.
5198class SnapshotRemoteIdentityGroups: 5199 ''' 5200 SnapshotRemoteIdentityGroups exposes the read only methods of the RemoteIdentityGroups 5201 service for historical queries. 5202 ''' 5203 def __init__(self, remote_identity_groups): 5204 self.remote_identity_groups = remote_identity_groups 5205 5206 def get(self, id, timeout=None): 5207 ''' 5208 Get reads one RemoteIdentityGroup by ID. 5209 ''' 5210 return self.remote_identity_groups.get(id, timeout=timeout) 5211 5212 def list(self, filter, *args, timeout=None): 5213 ''' 5214 List gets a list of RemoteIdentityGroups matching a given set of criteria. 5215 ''' 5216 return self.remote_identity_groups.list(filter, *args, timeout=timeout)
SnapshotRemoteIdentityGroups exposes the read only methods of the RemoteIdentityGroups service for historical queries.
5206 def get(self, id, timeout=None): 5207 ''' 5208 Get reads one RemoteIdentityGroup by ID. 5209 ''' 5210 return self.remote_identity_groups.get(id, timeout=timeout)
Get reads one RemoteIdentityGroup by ID.
5212 def list(self, filter, *args, timeout=None): 5213 ''' 5214 List gets a list of RemoteIdentityGroups matching a given set of criteria. 5215 ''' 5216 return self.remote_identity_groups.list(filter, *args, timeout=timeout)
List gets a list of RemoteIdentityGroups matching a given set of criteria.
5219class RemoteIdentityGroupsHistory: 5220 ''' 5221 RemoteIdentityGroupsHistory records all changes to the state of a RemoteIdentityGroup. 5222 See `strongdm.models.RemoteIdentityGroupHistory`. 5223 ''' 5224 def __init__(self, channel, client): 5225 self.parent = client 5226 self.stub = RemoteIdentityGroupsHistoryStub(channel) 5227 5228 def list(self, filter, *args, timeout=None): 5229 ''' 5230 List gets a list of RemoteIdentityGroupHistory records matching a given set of criteria. 5231 ''' 5232 deadline = None if timeout is None else time.time() + timeout 5233 req = RemoteIdentityGroupHistoryListRequest() 5234 req.meta.CopyFrom(ListRequestMetadata()) 5235 if self.parent.page_limit > 0: 5236 req.meta.limit = self.parent.page_limit 5237 if self.parent.snapshot_datetime is not None: 5238 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5239 5240 req.filter = plumbing.quote_filter_args(filter, *args) 5241 5242 def generator(svc, req): 5243 tries = 0 5244 while True: 5245 t = None if deadline is None else deadline - time.time() 5246 try: 5247 plumbing_response = svc.stub.List( 5248 req, 5249 metadata=svc.parent.get_metadata( 5250 'RemoteIdentityGroupsHistory.List', req), 5251 timeout=t) 5252 except Exception as e: 5253 if self.parent.shouldRetry(tries, e, deadline): 5254 tries += 1 5255 time.sleep( 5256 self.parent.exponentialBackoff(tries, deadline)) 5257 continue 5258 raise plumbing.convert_error_to_porcelain(e) from e 5259 tries = 0 5260 for plumbing_item in plumbing_response.history: 5261 yield plumbing.convert_remote_identity_group_history_to_porcelain( 5262 plumbing_item) 5263 if plumbing_response.meta.next_cursor == '': 5264 break 5265 req.meta.cursor = plumbing_response.meta.next_cursor 5266 5267 return generator(self, req)
RemoteIdentityGroupsHistory records all changes to the state of a RemoteIdentityGroup.
See strongdm.models.RemoteIdentityGroupHistory
.
5228 def list(self, filter, *args, timeout=None): 5229 ''' 5230 List gets a list of RemoteIdentityGroupHistory records matching a given set of criteria. 5231 ''' 5232 deadline = None if timeout is None else time.time() + timeout 5233 req = RemoteIdentityGroupHistoryListRequest() 5234 req.meta.CopyFrom(ListRequestMetadata()) 5235 if self.parent.page_limit > 0: 5236 req.meta.limit = self.parent.page_limit 5237 if self.parent.snapshot_datetime is not None: 5238 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5239 5240 req.filter = plumbing.quote_filter_args(filter, *args) 5241 5242 def generator(svc, req): 5243 tries = 0 5244 while True: 5245 t = None if deadline is None else deadline - time.time() 5246 try: 5247 plumbing_response = svc.stub.List( 5248 req, 5249 metadata=svc.parent.get_metadata( 5250 'RemoteIdentityGroupsHistory.List', req), 5251 timeout=t) 5252 except Exception as e: 5253 if self.parent.shouldRetry(tries, e, deadline): 5254 tries += 1 5255 time.sleep( 5256 self.parent.exponentialBackoff(tries, deadline)) 5257 continue 5258 raise plumbing.convert_error_to_porcelain(e) from e 5259 tries = 0 5260 for plumbing_item in plumbing_response.history: 5261 yield plumbing.convert_remote_identity_group_history_to_porcelain( 5262 plumbing_item) 5263 if plumbing_response.meta.next_cursor == '': 5264 break 5265 req.meta.cursor = plumbing_response.meta.next_cursor 5266 5267 return generator(self, req)
List gets a list of RemoteIdentityGroupHistory records matching a given set of criteria.
5270class Replays: 5271 ''' 5272 A Replay captures the data transferred over a long-running SSH, RDP, or Kubernetes interactive session 5273 (otherwise referred to as a query). The Replays service is read-only. 5274 See `strongdm.models.ReplayChunk`. 5275 ''' 5276 def __init__(self, channel, client): 5277 self.parent = client 5278 self.stub = ReplaysStub(channel) 5279 5280 def list(self, filter, *args, timeout=None): 5281 ''' 5282 List gets a list of ReplayChunks for the Query ID specified by the filter criteria. 5283 ''' 5284 deadline = None if timeout is None else time.time() + timeout 5285 req = ReplayListRequest() 5286 req.meta.CopyFrom(ListRequestMetadata()) 5287 if self.parent.page_limit > 0: 5288 req.meta.limit = self.parent.page_limit 5289 if self.parent.snapshot_datetime is not None: 5290 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5291 5292 req.filter = plumbing.quote_filter_args(filter, *args) 5293 5294 def generator(svc, req): 5295 tries = 0 5296 while True: 5297 t = None if deadline is None else deadline - time.time() 5298 try: 5299 plumbing_response = svc.stub.List( 5300 req, 5301 metadata=svc.parent.get_metadata('Replays.List', req), 5302 timeout=t) 5303 except Exception as e: 5304 if self.parent.shouldRetry(tries, e, deadline): 5305 tries += 1 5306 time.sleep( 5307 self.parent.exponentialBackoff(tries, deadline)) 5308 continue 5309 raise plumbing.convert_error_to_porcelain(e) from e 5310 tries = 0 5311 for plumbing_item in plumbing_response.chunks: 5312 yield plumbing.convert_replay_chunk_to_porcelain( 5313 plumbing_item) 5314 if plumbing_response.meta.next_cursor == '': 5315 break 5316 req.meta.cursor = plumbing_response.meta.next_cursor 5317 5318 return generator(self, req)
A Replay captures the data transferred over a long-running SSH, RDP, or Kubernetes interactive session
(otherwise referred to as a query). The Replays service is read-only.
See strongdm.models.ReplayChunk
.
5280 def list(self, filter, *args, timeout=None): 5281 ''' 5282 List gets a list of ReplayChunks for the Query ID specified by the filter criteria. 5283 ''' 5284 deadline = None if timeout is None else time.time() + timeout 5285 req = ReplayListRequest() 5286 req.meta.CopyFrom(ListRequestMetadata()) 5287 if self.parent.page_limit > 0: 5288 req.meta.limit = self.parent.page_limit 5289 if self.parent.snapshot_datetime is not None: 5290 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5291 5292 req.filter = plumbing.quote_filter_args(filter, *args) 5293 5294 def generator(svc, req): 5295 tries = 0 5296 while True: 5297 t = None if deadline is None else deadline - time.time() 5298 try: 5299 plumbing_response = svc.stub.List( 5300 req, 5301 metadata=svc.parent.get_metadata('Replays.List', req), 5302 timeout=t) 5303 except Exception as e: 5304 if self.parent.shouldRetry(tries, e, deadline): 5305 tries += 1 5306 time.sleep( 5307 self.parent.exponentialBackoff(tries, deadline)) 5308 continue 5309 raise plumbing.convert_error_to_porcelain(e) from e 5310 tries = 0 5311 for plumbing_item in plumbing_response.chunks: 5312 yield plumbing.convert_replay_chunk_to_porcelain( 5313 plumbing_item) 5314 if plumbing_response.meta.next_cursor == '': 5315 break 5316 req.meta.cursor = plumbing_response.meta.next_cursor 5317 5318 return generator(self, req)
List gets a list of ReplayChunks for the Query ID specified by the filter criteria.
5321class Resources: 5322 ''' 5323 Resources are databases, servers, clusters, websites, or clouds that strongDM 5324 delegates access to. 5325 See: 5326 `strongdm.models.Aerospike` 5327 `strongdm.models.AKS` 5328 `strongdm.models.AKSBasicAuth` 5329 `strongdm.models.AKSServiceAccount` 5330 `strongdm.models.AKSServiceAccountUserImpersonation` 5331 `strongdm.models.AKSUserImpersonation` 5332 `strongdm.models.AmazonEKS` 5333 `strongdm.models.AmazonEKSInstanceProfile` 5334 `strongdm.models.AmazonEKSInstanceProfileUserImpersonation` 5335 `strongdm.models.AmazonEKSUserImpersonation` 5336 `strongdm.models.AmazonES` 5337 `strongdm.models.AmazonESIAM` 5338 `strongdm.models.AmazonMQAMQP091` 5339 `strongdm.models.AMQP` 5340 `strongdm.models.Athena` 5341 `strongdm.models.AthenaIAM` 5342 `strongdm.models.AuroraMysql` 5343 `strongdm.models.AuroraMysqlIAM` 5344 `strongdm.models.AuroraPostgres` 5345 `strongdm.models.AuroraPostgresIAM` 5346 `strongdm.models.AWS` 5347 `strongdm.models.AWSConsole` 5348 `strongdm.models.AWSConsoleStaticKeyPair` 5349 `strongdm.models.AWSInstanceProfile` 5350 `strongdm.models.Azure` 5351 `strongdm.models.AzureCertificate` 5352 `strongdm.models.AzureConsole` 5353 `strongdm.models.AzureMysql` 5354 `strongdm.models.AzureMysqlManagedIdentity` 5355 `strongdm.models.AzurePostgres` 5356 `strongdm.models.AzurePostgresManagedIdentity` 5357 `strongdm.models.BigQuery` 5358 `strongdm.models.Cassandra` 5359 `strongdm.models.Citus` 5360 `strongdm.models.ClickHouseHTTP` 5361 `strongdm.models.ClickHouseMySQL` 5362 `strongdm.models.ClickHouseTCP` 5363 `strongdm.models.Clustrix` 5364 `strongdm.models.Cockroach` 5365 `strongdm.models.CouchbaseDatabase` 5366 `strongdm.models.CouchbaseWebUI` 5367 `strongdm.models.DB2I` 5368 `strongdm.models.DB2LUW` 5369 `strongdm.models.DocumentDBHost` 5370 `strongdm.models.DocumentDBHostIAM` 5371 `strongdm.models.DocumentDBReplicaSet` 5372 `strongdm.models.DocumentDBReplicaSetIAM` 5373 `strongdm.models.Druid` 5374 `strongdm.models.DynamoDB` 5375 `strongdm.models.DynamoDBIAM` 5376 `strongdm.models.Elastic` 5377 `strongdm.models.ElasticacheRedis` 5378 `strongdm.models.GCP` 5379 `strongdm.models.GCPConsole` 5380 `strongdm.models.GCPWIF` 5381 `strongdm.models.GoogleGKE` 5382 `strongdm.models.GoogleGKEUserImpersonation` 5383 `strongdm.models.Greenplum` 5384 `strongdm.models.HTTPAuth` 5385 `strongdm.models.HTTPBasicAuth` 5386 `strongdm.models.HTTPNoAuth` 5387 `strongdm.models.Kubernetes` 5388 `strongdm.models.KubernetesBasicAuth` 5389 `strongdm.models.KubernetesPodIdentity` 5390 `strongdm.models.KubernetesServiceAccount` 5391 `strongdm.models.KubernetesServiceAccountUserImpersonation` 5392 `strongdm.models.KubernetesUserImpersonation` 5393 `strongdm.models.Maria` 5394 `strongdm.models.Memcached` 5395 `strongdm.models.Memsql` 5396 `strongdm.models.MongoHost` 5397 `strongdm.models.MongoLegacyHost` 5398 `strongdm.models.MongoLegacyReplicaset` 5399 `strongdm.models.MongoReplicaSet` 5400 `strongdm.models.MongoShardedCluster` 5401 `strongdm.models.MTLSMysql` 5402 `strongdm.models.MTLSPostgres` 5403 `strongdm.models.Mysql` 5404 `strongdm.models.Neptune` 5405 `strongdm.models.NeptuneIAM` 5406 `strongdm.models.Oracle` 5407 `strongdm.models.OracleNNE` 5408 `strongdm.models.Postgres` 5409 `strongdm.models.Presto` 5410 `strongdm.models.RabbitMQAMQP091` 5411 `strongdm.models.RawTCP` 5412 `strongdm.models.RDP` 5413 `strongdm.models.RDPCert` 5414 `strongdm.models.RDSPostgresIAM` 5415 `strongdm.models.Redis` 5416 `strongdm.models.RedisCluster` 5417 `strongdm.models.Redshift` 5418 `strongdm.models.RedshiftIAM` 5419 `strongdm.models.RedshiftServerlessIAM` 5420 `strongdm.models.SingleStore` 5421 `strongdm.models.Snowflake` 5422 `strongdm.models.Snowsight` 5423 `strongdm.models.SQLServer` 5424 `strongdm.models.SQLServerAzureAD` 5425 `strongdm.models.SQLServerKerberosAD` 5426 `strongdm.models.SSH` 5427 `strongdm.models.SSHCert` 5428 `strongdm.models.SSHCustomerKey` 5429 `strongdm.models.SSHPassword` 5430 `strongdm.models.Sybase` 5431 `strongdm.models.SybaseIQ` 5432 `strongdm.models.Teradata` 5433 `strongdm.models.Trino` 5434 `strongdm.models.Vertica` 5435 ''' 5436 def __init__(self, channel, client): 5437 self.parent = client 5438 self.stub = ResourcesStub(channel) 5439 5440 def enumerate_tags(self, filter, *args, timeout=None): 5441 ''' 5442 EnumerateTags gets a list of the filter matching tags. 5443 ''' 5444 deadline = None if timeout is None else time.time() + timeout 5445 req = EnumerateTagsRequest() 5446 req.meta.CopyFrom(ListRequestMetadata()) 5447 if self.parent.page_limit > 0: 5448 req.meta.limit = self.parent.page_limit 5449 if self.parent.snapshot_datetime is not None: 5450 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5451 5452 req.filter = plumbing.quote_filter_args(filter, *args) 5453 5454 def generator(svc, req): 5455 tries = 0 5456 while True: 5457 t = None if deadline is None else deadline - time.time() 5458 try: 5459 plumbing_response = svc.stub.EnumerateTags( 5460 req, 5461 metadata=svc.parent.get_metadata( 5462 'Resources.EnumerateTags', req), 5463 timeout=t) 5464 except Exception as e: 5465 if self.parent.shouldRetry(tries, e, deadline): 5466 tries += 1 5467 time.sleep( 5468 self.parent.exponentialBackoff(tries, deadline)) 5469 continue 5470 raise plumbing.convert_error_to_porcelain(e) from e 5471 tries = 0 5472 for plumbing_item in plumbing_response.matches: 5473 yield plumbing.convert_tag_to_porcelain(plumbing_item) 5474 if plumbing_response.meta.next_cursor == '': 5475 break 5476 req.meta.cursor = plumbing_response.meta.next_cursor 5477 5478 return generator(self, req) 5479 5480 def create(self, resource, timeout=None): 5481 ''' 5482 Create registers a new Resource. 5483 ''' 5484 deadline = None if timeout is None else time.time() + timeout 5485 req = ResourceCreateRequest() 5486 5487 if resource is not None: 5488 req.resource.CopyFrom( 5489 plumbing.convert_resource_to_plumbing(resource)) 5490 tries = 0 5491 plumbing_response = None 5492 while True: 5493 t = None if deadline is None else deadline - time.time() 5494 try: 5495 plumbing_response = self.stub.Create( 5496 req, 5497 metadata=self.parent.get_metadata('Resources.Create', req), 5498 timeout=t) 5499 except Exception as e: 5500 if self.parent.shouldRetry(tries, e, deadline): 5501 tries += 1 5502 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5503 continue 5504 raise plumbing.convert_error_to_porcelain(e) from e 5505 break 5506 5507 resp = models.ResourceCreateResponse() 5508 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 5509 plumbing_response.meta) 5510 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5511 plumbing_response.rate_limit) 5512 resp.resource = plumbing.convert_resource_to_porcelain( 5513 plumbing_response.resource) 5514 return resp 5515 5516 def get(self, id, timeout=None): 5517 ''' 5518 Get reads one Resource by ID. 5519 ''' 5520 deadline = None if timeout is None else time.time() + timeout 5521 req = ResourceGetRequest() 5522 if self.parent.snapshot_datetime is not None: 5523 req.meta.CopyFrom(GetRequestMetadata()) 5524 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5525 5526 req.id = (id) 5527 tries = 0 5528 plumbing_response = None 5529 while True: 5530 t = None if deadline is None else deadline - time.time() 5531 try: 5532 plumbing_response = self.stub.Get( 5533 req, 5534 metadata=self.parent.get_metadata('Resources.Get', req), 5535 timeout=t) 5536 except Exception as e: 5537 if self.parent.shouldRetry(tries, e, deadline): 5538 tries += 1 5539 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5540 continue 5541 raise plumbing.convert_error_to_porcelain(e) from e 5542 break 5543 5544 resp = models.ResourceGetResponse() 5545 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 5546 plumbing_response.meta) 5547 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5548 plumbing_response.rate_limit) 5549 resp.resource = plumbing.convert_resource_to_porcelain( 5550 plumbing_response.resource) 5551 return resp 5552 5553 def update(self, resource, timeout=None): 5554 ''' 5555 Update replaces all the fields of a Resource by ID. 5556 ''' 5557 deadline = None if timeout is None else time.time() + timeout 5558 req = ResourceUpdateRequest() 5559 5560 if resource is not None: 5561 req.resource.CopyFrom( 5562 plumbing.convert_resource_to_plumbing(resource)) 5563 tries = 0 5564 plumbing_response = None 5565 while True: 5566 t = None if deadline is None else deadline - time.time() 5567 try: 5568 plumbing_response = self.stub.Update( 5569 req, 5570 metadata=self.parent.get_metadata('Resources.Update', req), 5571 timeout=t) 5572 except Exception as e: 5573 if self.parent.shouldRetry(tries, e, deadline): 5574 tries += 1 5575 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5576 continue 5577 raise plumbing.convert_error_to_porcelain(e) from e 5578 break 5579 5580 resp = models.ResourceUpdateResponse() 5581 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 5582 plumbing_response.meta) 5583 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5584 plumbing_response.rate_limit) 5585 resp.resource = plumbing.convert_resource_to_porcelain( 5586 plumbing_response.resource) 5587 return resp 5588 5589 def delete(self, id, timeout=None): 5590 ''' 5591 Delete removes a Resource by ID. 5592 ''' 5593 deadline = None if timeout is None else time.time() + timeout 5594 req = ResourceDeleteRequest() 5595 5596 req.id = (id) 5597 tries = 0 5598 plumbing_response = None 5599 while True: 5600 t = None if deadline is None else deadline - time.time() 5601 try: 5602 plumbing_response = self.stub.Delete( 5603 req, 5604 metadata=self.parent.get_metadata('Resources.Delete', req), 5605 timeout=t) 5606 except Exception as e: 5607 if self.parent.shouldRetry(tries, e, deadline): 5608 tries += 1 5609 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5610 continue 5611 raise plumbing.convert_error_to_porcelain(e) from e 5612 break 5613 5614 resp = models.ResourceDeleteResponse() 5615 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 5616 plumbing_response.meta) 5617 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5618 plumbing_response.rate_limit) 5619 return resp 5620 5621 def list(self, filter, *args, timeout=None): 5622 ''' 5623 List gets a list of Resources matching a given set of criteria. 5624 ''' 5625 deadline = None if timeout is None else time.time() + timeout 5626 req = ResourceListRequest() 5627 req.meta.CopyFrom(ListRequestMetadata()) 5628 if self.parent.page_limit > 0: 5629 req.meta.limit = self.parent.page_limit 5630 if self.parent.snapshot_datetime is not None: 5631 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5632 5633 req.filter = plumbing.quote_filter_args(filter, *args) 5634 5635 def generator(svc, req): 5636 tries = 0 5637 while True: 5638 t = None if deadline is None else deadline - time.time() 5639 try: 5640 plumbing_response = svc.stub.List( 5641 req, 5642 metadata=svc.parent.get_metadata( 5643 'Resources.List', req), 5644 timeout=t) 5645 except Exception as e: 5646 if self.parent.shouldRetry(tries, e, deadline): 5647 tries += 1 5648 time.sleep( 5649 self.parent.exponentialBackoff(tries, deadline)) 5650 continue 5651 raise plumbing.convert_error_to_porcelain(e) from e 5652 tries = 0 5653 for plumbing_item in plumbing_response.resources: 5654 yield plumbing.convert_resource_to_porcelain(plumbing_item) 5655 if plumbing_response.meta.next_cursor == '': 5656 break 5657 req.meta.cursor = plumbing_response.meta.next_cursor 5658 5659 return generator(self, req) 5660 5661 def healthcheck(self, id, timeout=None): 5662 ''' 5663 Healthcheck triggers a remote healthcheck. It may take minutes to propagate across a 5664 large network of Nodes. The call will return immediately, and the updated health of the 5665 Resource can be retrieved via Get or List. 5666 ''' 5667 deadline = None if timeout is None else time.time() + timeout 5668 req = ResourceHealthcheckRequest() 5669 5670 req.id = (id) 5671 tries = 0 5672 plumbing_response = None 5673 while True: 5674 t = None if deadline is None else deadline - time.time() 5675 try: 5676 plumbing_response = self.stub.Healthcheck( 5677 req, 5678 metadata=self.parent.get_metadata('Resources.Healthcheck', 5679 req), 5680 timeout=t) 5681 except Exception as e: 5682 if self.parent.shouldRetry(tries, e, deadline): 5683 tries += 1 5684 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5685 continue 5686 raise plumbing.convert_error_to_porcelain(e) from e 5687 break 5688 5689 resp = models.ResourceHealthcheckResponse() 5690 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 5691 plumbing_response.meta) 5692 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5693 plumbing_response.rate_limit) 5694 return resp
Resources are databases, servers, clusters, websites, or clouds that strongDM
delegates access to.
See:
strongdm.models.Aerospike
strongdm.models.AKS
strongdm.models.AKSBasicAuth
strongdm.models.AKSServiceAccount
strongdm.models.AKSServiceAccountUserImpersonation
strongdm.models.AKSUserImpersonation
strongdm.models.AmazonEKS
strongdm.models.AmazonEKSInstanceProfile
strongdm.models.AmazonEKSInstanceProfileUserImpersonation
strongdm.models.AmazonEKSUserImpersonation
strongdm.models.AmazonES
strongdm.models.AmazonESIAM
strongdm.models.AmazonMQAMQP091
strongdm.models.AMQP
strongdm.models.Athena
strongdm.models.AthenaIAM
strongdm.models.AuroraMysql
strongdm.models.AuroraMysqlIAM
strongdm.models.AuroraPostgres
strongdm.models.AuroraPostgresIAM
strongdm.models.AWS
strongdm.models.AWSConsole
strongdm.models.AWSConsoleStaticKeyPair
strongdm.models.AWSInstanceProfile
strongdm.models.Azure
strongdm.models.AzureCertificate
strongdm.models.AzureConsole
strongdm.models.AzureMysql
strongdm.models.AzureMysqlManagedIdentity
strongdm.models.AzurePostgres
strongdm.models.AzurePostgresManagedIdentity
strongdm.models.BigQuery
strongdm.models.Cassandra
strongdm.models.Citus
strongdm.models.ClickHouseHTTP
strongdm.models.ClickHouseMySQL
strongdm.models.ClickHouseTCP
strongdm.models.Clustrix
strongdm.models.Cockroach
strongdm.models.CouchbaseDatabase
strongdm.models.CouchbaseWebUI
strongdm.models.DB2I
strongdm.models.DB2LUW
strongdm.models.DocumentDBHost
strongdm.models.DocumentDBHostIAM
strongdm.models.DocumentDBReplicaSet
strongdm.models.DocumentDBReplicaSetIAM
strongdm.models.Druid
strongdm.models.DynamoDB
strongdm.models.DynamoDBIAM
strongdm.models.Elastic
strongdm.models.ElasticacheRedis
strongdm.models.GCP
strongdm.models.GCPConsole
strongdm.models.GCPWIF
strongdm.models.GoogleGKE
strongdm.models.GoogleGKEUserImpersonation
strongdm.models.Greenplum
strongdm.models.HTTPAuth
strongdm.models.HTTPBasicAuth
strongdm.models.HTTPNoAuth
strongdm.models.Kubernetes
strongdm.models.KubernetesBasicAuth
strongdm.models.KubernetesPodIdentity
strongdm.models.KubernetesServiceAccount
strongdm.models.KubernetesServiceAccountUserImpersonation
strongdm.models.KubernetesUserImpersonation
strongdm.models.Maria
strongdm.models.Memcached
strongdm.models.Memsql
strongdm.models.MongoHost
strongdm.models.MongoLegacyHost
strongdm.models.MongoLegacyReplicaset
strongdm.models.MongoReplicaSet
strongdm.models.MongoShardedCluster
strongdm.models.MTLSMysql
strongdm.models.MTLSPostgres
strongdm.models.Mysql
strongdm.models.Neptune
strongdm.models.NeptuneIAM
strongdm.models.Oracle
strongdm.models.OracleNNE
strongdm.models.Postgres
strongdm.models.Presto
strongdm.models.RabbitMQAMQP091
strongdm.models.RawTCP
strongdm.models.RDP
strongdm.models.RDPCert
strongdm.models.RDSPostgresIAM
strongdm.models.Redis
strongdm.models.RedisCluster
strongdm.models.Redshift
strongdm.models.RedshiftIAM
strongdm.models.RedshiftServerlessIAM
strongdm.models.SingleStore
strongdm.models.Snowflake
strongdm.models.Snowsight
strongdm.models.SQLServer
strongdm.models.SQLServerAzureAD
strongdm.models.SQLServerKerberosAD
strongdm.models.SSH
strongdm.models.SSHCert
strongdm.models.SSHCustomerKey
strongdm.models.SSHPassword
strongdm.models.Sybase
strongdm.models.SybaseIQ
strongdm.models.Teradata
strongdm.models.Trino
strongdm.models.Vertica
5480 def create(self, resource, timeout=None): 5481 ''' 5482 Create registers a new Resource. 5483 ''' 5484 deadline = None if timeout is None else time.time() + timeout 5485 req = ResourceCreateRequest() 5486 5487 if resource is not None: 5488 req.resource.CopyFrom( 5489 plumbing.convert_resource_to_plumbing(resource)) 5490 tries = 0 5491 plumbing_response = None 5492 while True: 5493 t = None if deadline is None else deadline - time.time() 5494 try: 5495 plumbing_response = self.stub.Create( 5496 req, 5497 metadata=self.parent.get_metadata('Resources.Create', req), 5498 timeout=t) 5499 except Exception as e: 5500 if self.parent.shouldRetry(tries, e, deadline): 5501 tries += 1 5502 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5503 continue 5504 raise plumbing.convert_error_to_porcelain(e) from e 5505 break 5506 5507 resp = models.ResourceCreateResponse() 5508 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 5509 plumbing_response.meta) 5510 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5511 plumbing_response.rate_limit) 5512 resp.resource = plumbing.convert_resource_to_porcelain( 5513 plumbing_response.resource) 5514 return resp
Create registers a new Resource.
5516 def get(self, id, timeout=None): 5517 ''' 5518 Get reads one Resource by ID. 5519 ''' 5520 deadline = None if timeout is None else time.time() + timeout 5521 req = ResourceGetRequest() 5522 if self.parent.snapshot_datetime is not None: 5523 req.meta.CopyFrom(GetRequestMetadata()) 5524 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5525 5526 req.id = (id) 5527 tries = 0 5528 plumbing_response = None 5529 while True: 5530 t = None if deadline is None else deadline - time.time() 5531 try: 5532 plumbing_response = self.stub.Get( 5533 req, 5534 metadata=self.parent.get_metadata('Resources.Get', req), 5535 timeout=t) 5536 except Exception as e: 5537 if self.parent.shouldRetry(tries, e, deadline): 5538 tries += 1 5539 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5540 continue 5541 raise plumbing.convert_error_to_porcelain(e) from e 5542 break 5543 5544 resp = models.ResourceGetResponse() 5545 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 5546 plumbing_response.meta) 5547 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5548 plumbing_response.rate_limit) 5549 resp.resource = plumbing.convert_resource_to_porcelain( 5550 plumbing_response.resource) 5551 return resp
Get reads one Resource by ID.
5553 def update(self, resource, timeout=None): 5554 ''' 5555 Update replaces all the fields of a Resource by ID. 5556 ''' 5557 deadline = None if timeout is None else time.time() + timeout 5558 req = ResourceUpdateRequest() 5559 5560 if resource is not None: 5561 req.resource.CopyFrom( 5562 plumbing.convert_resource_to_plumbing(resource)) 5563 tries = 0 5564 plumbing_response = None 5565 while True: 5566 t = None if deadline is None else deadline - time.time() 5567 try: 5568 plumbing_response = self.stub.Update( 5569 req, 5570 metadata=self.parent.get_metadata('Resources.Update', req), 5571 timeout=t) 5572 except Exception as e: 5573 if self.parent.shouldRetry(tries, e, deadline): 5574 tries += 1 5575 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5576 continue 5577 raise plumbing.convert_error_to_porcelain(e) from e 5578 break 5579 5580 resp = models.ResourceUpdateResponse() 5581 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 5582 plumbing_response.meta) 5583 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5584 plumbing_response.rate_limit) 5585 resp.resource = plumbing.convert_resource_to_porcelain( 5586 plumbing_response.resource) 5587 return resp
Update replaces all the fields of a Resource by ID.
5589 def delete(self, id, timeout=None): 5590 ''' 5591 Delete removes a Resource by ID. 5592 ''' 5593 deadline = None if timeout is None else time.time() + timeout 5594 req = ResourceDeleteRequest() 5595 5596 req.id = (id) 5597 tries = 0 5598 plumbing_response = None 5599 while True: 5600 t = None if deadline is None else deadline - time.time() 5601 try: 5602 plumbing_response = self.stub.Delete( 5603 req, 5604 metadata=self.parent.get_metadata('Resources.Delete', req), 5605 timeout=t) 5606 except Exception as e: 5607 if self.parent.shouldRetry(tries, e, deadline): 5608 tries += 1 5609 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5610 continue 5611 raise plumbing.convert_error_to_porcelain(e) from e 5612 break 5613 5614 resp = models.ResourceDeleteResponse() 5615 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 5616 plumbing_response.meta) 5617 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5618 plumbing_response.rate_limit) 5619 return resp
Delete removes a Resource by ID.
5621 def list(self, filter, *args, timeout=None): 5622 ''' 5623 List gets a list of Resources matching a given set of criteria. 5624 ''' 5625 deadline = None if timeout is None else time.time() + timeout 5626 req = ResourceListRequest() 5627 req.meta.CopyFrom(ListRequestMetadata()) 5628 if self.parent.page_limit > 0: 5629 req.meta.limit = self.parent.page_limit 5630 if self.parent.snapshot_datetime is not None: 5631 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5632 5633 req.filter = plumbing.quote_filter_args(filter, *args) 5634 5635 def generator(svc, req): 5636 tries = 0 5637 while True: 5638 t = None if deadline is None else deadline - time.time() 5639 try: 5640 plumbing_response = svc.stub.List( 5641 req, 5642 metadata=svc.parent.get_metadata( 5643 'Resources.List', req), 5644 timeout=t) 5645 except Exception as e: 5646 if self.parent.shouldRetry(tries, e, deadline): 5647 tries += 1 5648 time.sleep( 5649 self.parent.exponentialBackoff(tries, deadline)) 5650 continue 5651 raise plumbing.convert_error_to_porcelain(e) from e 5652 tries = 0 5653 for plumbing_item in plumbing_response.resources: 5654 yield plumbing.convert_resource_to_porcelain(plumbing_item) 5655 if plumbing_response.meta.next_cursor == '': 5656 break 5657 req.meta.cursor = plumbing_response.meta.next_cursor 5658 5659 return generator(self, req)
List gets a list of Resources matching a given set of criteria.
5661 def healthcheck(self, id, timeout=None): 5662 ''' 5663 Healthcheck triggers a remote healthcheck. It may take minutes to propagate across a 5664 large network of Nodes. The call will return immediately, and the updated health of the 5665 Resource can be retrieved via Get or List. 5666 ''' 5667 deadline = None if timeout is None else time.time() + timeout 5668 req = ResourceHealthcheckRequest() 5669 5670 req.id = (id) 5671 tries = 0 5672 plumbing_response = None 5673 while True: 5674 t = None if deadline is None else deadline - time.time() 5675 try: 5676 plumbing_response = self.stub.Healthcheck( 5677 req, 5678 metadata=self.parent.get_metadata('Resources.Healthcheck', 5679 req), 5680 timeout=t) 5681 except Exception as e: 5682 if self.parent.shouldRetry(tries, e, deadline): 5683 tries += 1 5684 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5685 continue 5686 raise plumbing.convert_error_to_porcelain(e) from e 5687 break 5688 5689 resp = models.ResourceHealthcheckResponse() 5690 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 5691 plumbing_response.meta) 5692 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5693 plumbing_response.rate_limit) 5694 return resp
Healthcheck triggers a remote healthcheck. It may take minutes to propagate across a large network of Nodes. The call will return immediately, and the updated health of the Resource can be retrieved via Get or List.
5697class SnapshotResources: 5698 ''' 5699 SnapshotResources exposes the read only methods of the Resources 5700 service for historical queries. 5701 ''' 5702 def __init__(self, resources): 5703 self.resources = resources 5704 5705 def get(self, id, timeout=None): 5706 ''' 5707 Get reads one Resource by ID. 5708 ''' 5709 return self.resources.get(id, timeout=timeout) 5710 5711 def list(self, filter, *args, timeout=None): 5712 ''' 5713 List gets a list of Resources matching a given set of criteria. 5714 ''' 5715 return self.resources.list(filter, *args, timeout=timeout)
SnapshotResources exposes the read only methods of the Resources service for historical queries.
5705 def get(self, id, timeout=None): 5706 ''' 5707 Get reads one Resource by ID. 5708 ''' 5709 return self.resources.get(id, timeout=timeout)
Get reads one Resource by ID.
5711 def list(self, filter, *args, timeout=None): 5712 ''' 5713 List gets a list of Resources matching a given set of criteria. 5714 ''' 5715 return self.resources.list(filter, *args, timeout=timeout)
List gets a list of Resources matching a given set of criteria.
5718class ResourcesHistory: 5719 ''' 5720 ResourcesHistory records all changes to the state of a Resource. 5721 See `strongdm.models.ResourceHistory`. 5722 ''' 5723 def __init__(self, channel, client): 5724 self.parent = client 5725 self.stub = ResourcesHistoryStub(channel) 5726 5727 def list(self, filter, *args, timeout=None): 5728 ''' 5729 List gets a list of ResourceHistory records matching a given set of criteria. 5730 ''' 5731 deadline = None if timeout is None else time.time() + timeout 5732 req = ResourceHistoryListRequest() 5733 req.meta.CopyFrom(ListRequestMetadata()) 5734 if self.parent.page_limit > 0: 5735 req.meta.limit = self.parent.page_limit 5736 if self.parent.snapshot_datetime is not None: 5737 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5738 5739 req.filter = plumbing.quote_filter_args(filter, *args) 5740 5741 def generator(svc, req): 5742 tries = 0 5743 while True: 5744 t = None if deadline is None else deadline - time.time() 5745 try: 5746 plumbing_response = svc.stub.List( 5747 req, 5748 metadata=svc.parent.get_metadata( 5749 'ResourcesHistory.List', req), 5750 timeout=t) 5751 except Exception as e: 5752 if self.parent.shouldRetry(tries, e, deadline): 5753 tries += 1 5754 time.sleep( 5755 self.parent.exponentialBackoff(tries, deadline)) 5756 continue 5757 raise plumbing.convert_error_to_porcelain(e) from e 5758 tries = 0 5759 for plumbing_item in plumbing_response.history: 5760 yield plumbing.convert_resource_history_to_porcelain( 5761 plumbing_item) 5762 if plumbing_response.meta.next_cursor == '': 5763 break 5764 req.meta.cursor = plumbing_response.meta.next_cursor 5765 5766 return generator(self, req)
ResourcesHistory records all changes to the state of a Resource.
See strongdm.models.ResourceHistory
.
5727 def list(self, filter, *args, timeout=None): 5728 ''' 5729 List gets a list of ResourceHistory records matching a given set of criteria. 5730 ''' 5731 deadline = None if timeout is None else time.time() + timeout 5732 req = ResourceHistoryListRequest() 5733 req.meta.CopyFrom(ListRequestMetadata()) 5734 if self.parent.page_limit > 0: 5735 req.meta.limit = self.parent.page_limit 5736 if self.parent.snapshot_datetime is not None: 5737 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5738 5739 req.filter = plumbing.quote_filter_args(filter, *args) 5740 5741 def generator(svc, req): 5742 tries = 0 5743 while True: 5744 t = None if deadline is None else deadline - time.time() 5745 try: 5746 plumbing_response = svc.stub.List( 5747 req, 5748 metadata=svc.parent.get_metadata( 5749 'ResourcesHistory.List', req), 5750 timeout=t) 5751 except Exception as e: 5752 if self.parent.shouldRetry(tries, e, deadline): 5753 tries += 1 5754 time.sleep( 5755 self.parent.exponentialBackoff(tries, deadline)) 5756 continue 5757 raise plumbing.convert_error_to_porcelain(e) from e 5758 tries = 0 5759 for plumbing_item in plumbing_response.history: 5760 yield plumbing.convert_resource_history_to_porcelain( 5761 plumbing_item) 5762 if plumbing_response.meta.next_cursor == '': 5763 break 5764 req.meta.cursor = plumbing_response.meta.next_cursor 5765 5766 return generator(self, req)
List gets a list of ResourceHistory records matching a given set of criteria.
5769class RoleResources: 5770 ''' 5771 RoleResources enumerates the resources to which roles have access. 5772 The RoleResources service is read-only. 5773 See `strongdm.models.RoleResource`. 5774 ''' 5775 def __init__(self, channel, client): 5776 self.parent = client 5777 self.stub = RoleResourcesStub(channel) 5778 5779 def list(self, filter, *args, timeout=None): 5780 ''' 5781 List gets a list of RoleResource records matching a given set of criteria. 5782 ''' 5783 deadline = None if timeout is None else time.time() + timeout 5784 req = RoleResourceListRequest() 5785 req.meta.CopyFrom(ListRequestMetadata()) 5786 if self.parent.page_limit > 0: 5787 req.meta.limit = self.parent.page_limit 5788 if self.parent.snapshot_datetime is not None: 5789 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5790 5791 req.filter = plumbing.quote_filter_args(filter, *args) 5792 5793 def generator(svc, req): 5794 tries = 0 5795 while True: 5796 t = None if deadline is None else deadline - time.time() 5797 try: 5798 plumbing_response = svc.stub.List( 5799 req, 5800 metadata=svc.parent.get_metadata( 5801 'RoleResources.List', req), 5802 timeout=t) 5803 except Exception as e: 5804 if self.parent.shouldRetry(tries, e, deadline): 5805 tries += 1 5806 time.sleep( 5807 self.parent.exponentialBackoff(tries, deadline)) 5808 continue 5809 raise plumbing.convert_error_to_porcelain(e) from e 5810 tries = 0 5811 for plumbing_item in plumbing_response.role_resources: 5812 yield plumbing.convert_role_resource_to_porcelain( 5813 plumbing_item) 5814 if plumbing_response.meta.next_cursor == '': 5815 break 5816 req.meta.cursor = plumbing_response.meta.next_cursor 5817 5818 return generator(self, req)
RoleResources enumerates the resources to which roles have access.
The RoleResources service is read-only.
See strongdm.models.RoleResource
.
5779 def list(self, filter, *args, timeout=None): 5780 ''' 5781 List gets a list of RoleResource records matching a given set of criteria. 5782 ''' 5783 deadline = None if timeout is None else time.time() + timeout 5784 req = RoleResourceListRequest() 5785 req.meta.CopyFrom(ListRequestMetadata()) 5786 if self.parent.page_limit > 0: 5787 req.meta.limit = self.parent.page_limit 5788 if self.parent.snapshot_datetime is not None: 5789 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5790 5791 req.filter = plumbing.quote_filter_args(filter, *args) 5792 5793 def generator(svc, req): 5794 tries = 0 5795 while True: 5796 t = None if deadline is None else deadline - time.time() 5797 try: 5798 plumbing_response = svc.stub.List( 5799 req, 5800 metadata=svc.parent.get_metadata( 5801 'RoleResources.List', req), 5802 timeout=t) 5803 except Exception as e: 5804 if self.parent.shouldRetry(tries, e, deadline): 5805 tries += 1 5806 time.sleep( 5807 self.parent.exponentialBackoff(tries, deadline)) 5808 continue 5809 raise plumbing.convert_error_to_porcelain(e) from e 5810 tries = 0 5811 for plumbing_item in plumbing_response.role_resources: 5812 yield plumbing.convert_role_resource_to_porcelain( 5813 plumbing_item) 5814 if plumbing_response.meta.next_cursor == '': 5815 break 5816 req.meta.cursor = plumbing_response.meta.next_cursor 5817 5818 return generator(self, req)
List gets a list of RoleResource records matching a given set of criteria.
5821class SnapshotRoleResources: 5822 ''' 5823 SnapshotRoleResources exposes the read only methods of the RoleResources 5824 service for historical queries. 5825 ''' 5826 def __init__(self, role_resources): 5827 self.role_resources = role_resources 5828 5829 def list(self, filter, *args, timeout=None): 5830 ''' 5831 List gets a list of RoleResource records matching a given set of criteria. 5832 ''' 5833 return self.role_resources.list(filter, *args, timeout=timeout)
SnapshotRoleResources exposes the read only methods of the RoleResources service for historical queries.
5829 def list(self, filter, *args, timeout=None): 5830 ''' 5831 List gets a list of RoleResource records matching a given set of criteria. 5832 ''' 5833 return self.role_resources.list(filter, *args, timeout=timeout)
List gets a list of RoleResource records matching a given set of criteria.
5836class RoleResourcesHistory: 5837 ''' 5838 RoleResourcesHistory records all changes to the state of a RoleResource. 5839 See `strongdm.models.RoleResourceHistory`. 5840 ''' 5841 def __init__(self, channel, client): 5842 self.parent = client 5843 self.stub = RoleResourcesHistoryStub(channel) 5844 5845 def list(self, filter, *args, timeout=None): 5846 ''' 5847 List gets a list of RoleResourceHistory records matching a given set of criteria. 5848 ''' 5849 deadline = None if timeout is None else time.time() + timeout 5850 req = RoleResourceHistoryListRequest() 5851 req.meta.CopyFrom(ListRequestMetadata()) 5852 if self.parent.page_limit > 0: 5853 req.meta.limit = self.parent.page_limit 5854 if self.parent.snapshot_datetime is not None: 5855 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5856 5857 req.filter = plumbing.quote_filter_args(filter, *args) 5858 5859 def generator(svc, req): 5860 tries = 0 5861 while True: 5862 t = None if deadline is None else deadline - time.time() 5863 try: 5864 plumbing_response = svc.stub.List( 5865 req, 5866 metadata=svc.parent.get_metadata( 5867 'RoleResourcesHistory.List', req), 5868 timeout=t) 5869 except Exception as e: 5870 if self.parent.shouldRetry(tries, e, deadline): 5871 tries += 1 5872 time.sleep( 5873 self.parent.exponentialBackoff(tries, deadline)) 5874 continue 5875 raise plumbing.convert_error_to_porcelain(e) from e 5876 tries = 0 5877 for plumbing_item in plumbing_response.history: 5878 yield plumbing.convert_role_resource_history_to_porcelain( 5879 plumbing_item) 5880 if plumbing_response.meta.next_cursor == '': 5881 break 5882 req.meta.cursor = plumbing_response.meta.next_cursor 5883 5884 return generator(self, req)
RoleResourcesHistory records all changes to the state of a RoleResource.
See strongdm.models.RoleResourceHistory
.
5845 def list(self, filter, *args, timeout=None): 5846 ''' 5847 List gets a list of RoleResourceHistory records matching a given set of criteria. 5848 ''' 5849 deadline = None if timeout is None else time.time() + timeout 5850 req = RoleResourceHistoryListRequest() 5851 req.meta.CopyFrom(ListRequestMetadata()) 5852 if self.parent.page_limit > 0: 5853 req.meta.limit = self.parent.page_limit 5854 if self.parent.snapshot_datetime is not None: 5855 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5856 5857 req.filter = plumbing.quote_filter_args(filter, *args) 5858 5859 def generator(svc, req): 5860 tries = 0 5861 while True: 5862 t = None if deadline is None else deadline - time.time() 5863 try: 5864 plumbing_response = svc.stub.List( 5865 req, 5866 metadata=svc.parent.get_metadata( 5867 'RoleResourcesHistory.List', req), 5868 timeout=t) 5869 except Exception as e: 5870 if self.parent.shouldRetry(tries, e, deadline): 5871 tries += 1 5872 time.sleep( 5873 self.parent.exponentialBackoff(tries, deadline)) 5874 continue 5875 raise plumbing.convert_error_to_porcelain(e) from e 5876 tries = 0 5877 for plumbing_item in plumbing_response.history: 5878 yield plumbing.convert_role_resource_history_to_porcelain( 5879 plumbing_item) 5880 if plumbing_response.meta.next_cursor == '': 5881 break 5882 req.meta.cursor = plumbing_response.meta.next_cursor 5883 5884 return generator(self, req)
List gets a list of RoleResourceHistory records matching a given set of criteria.
5887class RolesHistory: 5888 ''' 5889 RolesHistory records all changes to the state of a Role. 5890 See `strongdm.models.RoleHistory`. 5891 ''' 5892 def __init__(self, channel, client): 5893 self.parent = client 5894 self.stub = RolesHistoryStub(channel) 5895 5896 def list(self, filter, *args, timeout=None): 5897 ''' 5898 List gets a list of RoleHistory records matching a given set of criteria. 5899 ''' 5900 deadline = None if timeout is None else time.time() + timeout 5901 req = RoleHistoryListRequest() 5902 req.meta.CopyFrom(ListRequestMetadata()) 5903 if self.parent.page_limit > 0: 5904 req.meta.limit = self.parent.page_limit 5905 if self.parent.snapshot_datetime is not None: 5906 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5907 5908 req.filter = plumbing.quote_filter_args(filter, *args) 5909 5910 def generator(svc, req): 5911 tries = 0 5912 while True: 5913 t = None if deadline is None else deadline - time.time() 5914 try: 5915 plumbing_response = svc.stub.List( 5916 req, 5917 metadata=svc.parent.get_metadata( 5918 'RolesHistory.List', req), 5919 timeout=t) 5920 except Exception as e: 5921 if self.parent.shouldRetry(tries, e, deadline): 5922 tries += 1 5923 time.sleep( 5924 self.parent.exponentialBackoff(tries, deadline)) 5925 continue 5926 raise plumbing.convert_error_to_porcelain(e) from e 5927 tries = 0 5928 for plumbing_item in plumbing_response.history: 5929 yield plumbing.convert_role_history_to_porcelain( 5930 plumbing_item) 5931 if plumbing_response.meta.next_cursor == '': 5932 break 5933 req.meta.cursor = plumbing_response.meta.next_cursor 5934 5935 return generator(self, req)
RolesHistory records all changes to the state of a Role.
See strongdm.models.RoleHistory
.
5896 def list(self, filter, *args, timeout=None): 5897 ''' 5898 List gets a list of RoleHistory records matching a given set of criteria. 5899 ''' 5900 deadline = None if timeout is None else time.time() + timeout 5901 req = RoleHistoryListRequest() 5902 req.meta.CopyFrom(ListRequestMetadata()) 5903 if self.parent.page_limit > 0: 5904 req.meta.limit = self.parent.page_limit 5905 if self.parent.snapshot_datetime is not None: 5906 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 5907 5908 req.filter = plumbing.quote_filter_args(filter, *args) 5909 5910 def generator(svc, req): 5911 tries = 0 5912 while True: 5913 t = None if deadline is None else deadline - time.time() 5914 try: 5915 plumbing_response = svc.stub.List( 5916 req, 5917 metadata=svc.parent.get_metadata( 5918 'RolesHistory.List', req), 5919 timeout=t) 5920 except Exception as e: 5921 if self.parent.shouldRetry(tries, e, deadline): 5922 tries += 1 5923 time.sleep( 5924 self.parent.exponentialBackoff(tries, deadline)) 5925 continue 5926 raise plumbing.convert_error_to_porcelain(e) from e 5927 tries = 0 5928 for plumbing_item in plumbing_response.history: 5929 yield plumbing.convert_role_history_to_porcelain( 5930 plumbing_item) 5931 if plumbing_response.meta.next_cursor == '': 5932 break 5933 req.meta.cursor = plumbing_response.meta.next_cursor 5934 5935 return generator(self, req)
List gets a list of RoleHistory records matching a given set of criteria.
5938class SecretStores: 5939 ''' 5940 SecretStores are servers where resource secrets (passwords, keys) are stored. 5941 See: 5942 `strongdm.models.ActiveDirectoryStore` 5943 `strongdm.models.AWSStore` 5944 `strongdm.models.AWSCertX509Store` 5945 `strongdm.models.AzureStore` 5946 `strongdm.models.CyberarkConjurStore` 5947 `strongdm.models.CyberarkPAMStore` 5948 `strongdm.models.CyberarkPAMExperimentalStore` 5949 `strongdm.models.DelineaStore` 5950 `strongdm.models.GCPStore` 5951 `strongdm.models.GCPCertX509Store` 5952 `strongdm.models.KeyfactorSSHStore` 5953 `strongdm.models.KeyfactorX509Store` 5954 `strongdm.models.VaultAppRoleStore` 5955 `strongdm.models.VaultAppRoleCertSSHStore` 5956 `strongdm.models.VaultAppRoleCertX509Store` 5957 `strongdm.models.VaultAWSEC2Store` 5958 `strongdm.models.VaultAWSIAMStore` 5959 `strongdm.models.VaultTLSStore` 5960 `strongdm.models.VaultTLSCertSSHStore` 5961 `strongdm.models.VaultTLSCertX509Store` 5962 `strongdm.models.VaultTokenStore` 5963 `strongdm.models.VaultTokenCertSSHStore` 5964 `strongdm.models.VaultTokenCertX509Store` 5965 ''' 5966 def __init__(self, channel, client): 5967 self.parent = client 5968 self.stub = SecretStoresStub(channel) 5969 5970 def create(self, secret_store, timeout=None): 5971 deadline = None if timeout is None else time.time() + timeout 5972 req = SecretStoreCreateRequest() 5973 5974 if secret_store is not None: 5975 req.secret_store.CopyFrom( 5976 plumbing.convert_secret_store_to_plumbing(secret_store)) 5977 tries = 0 5978 plumbing_response = None 5979 while True: 5980 t = None if deadline is None else deadline - time.time() 5981 try: 5982 plumbing_response = self.stub.Create( 5983 req, 5984 metadata=self.parent.get_metadata('SecretStores.Create', 5985 req), 5986 timeout=t) 5987 except Exception as e: 5988 if self.parent.shouldRetry(tries, e, deadline): 5989 tries += 1 5990 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5991 continue 5992 raise plumbing.convert_error_to_porcelain(e) from e 5993 break 5994 5995 resp = models.SecretStoreCreateResponse() 5996 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 5997 plumbing_response.meta) 5998 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5999 plumbing_response.rate_limit) 6000 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6001 plumbing_response.secret_store) 6002 return resp 6003 6004 def get(self, id, timeout=None): 6005 ''' 6006 Get reads one SecretStore by ID. 6007 ''' 6008 deadline = None if timeout is None else time.time() + timeout 6009 req = SecretStoreGetRequest() 6010 if self.parent.snapshot_datetime is not None: 6011 req.meta.CopyFrom(GetRequestMetadata()) 6012 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6013 6014 req.id = (id) 6015 tries = 0 6016 plumbing_response = None 6017 while True: 6018 t = None if deadline is None else deadline - time.time() 6019 try: 6020 plumbing_response = self.stub.Get( 6021 req, 6022 metadata=self.parent.get_metadata('SecretStores.Get', req), 6023 timeout=t) 6024 except Exception as e: 6025 if self.parent.shouldRetry(tries, e, deadline): 6026 tries += 1 6027 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6028 continue 6029 raise plumbing.convert_error_to_porcelain(e) from e 6030 break 6031 6032 resp = models.SecretStoreGetResponse() 6033 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6034 plumbing_response.meta) 6035 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6036 plumbing_response.rate_limit) 6037 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6038 plumbing_response.secret_store) 6039 return resp 6040 6041 def update(self, secret_store, timeout=None): 6042 ''' 6043 Update replaces all the fields of a SecretStore by ID. 6044 ''' 6045 deadline = None if timeout is None else time.time() + timeout 6046 req = SecretStoreUpdateRequest() 6047 6048 if secret_store is not None: 6049 req.secret_store.CopyFrom( 6050 plumbing.convert_secret_store_to_plumbing(secret_store)) 6051 tries = 0 6052 plumbing_response = None 6053 while True: 6054 t = None if deadline is None else deadline - time.time() 6055 try: 6056 plumbing_response = self.stub.Update( 6057 req, 6058 metadata=self.parent.get_metadata('SecretStores.Update', 6059 req), 6060 timeout=t) 6061 except Exception as e: 6062 if self.parent.shouldRetry(tries, e, deadline): 6063 tries += 1 6064 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6065 continue 6066 raise plumbing.convert_error_to_porcelain(e) from e 6067 break 6068 6069 resp = models.SecretStoreUpdateResponse() 6070 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 6071 plumbing_response.meta) 6072 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6073 plumbing_response.rate_limit) 6074 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6075 plumbing_response.secret_store) 6076 return resp 6077 6078 def delete(self, id, timeout=None): 6079 ''' 6080 Delete removes a SecretStore by ID. 6081 ''' 6082 deadline = None if timeout is None else time.time() + timeout 6083 req = SecretStoreDeleteRequest() 6084 6085 req.id = (id) 6086 tries = 0 6087 plumbing_response = None 6088 while True: 6089 t = None if deadline is None else deadline - time.time() 6090 try: 6091 plumbing_response = self.stub.Delete( 6092 req, 6093 metadata=self.parent.get_metadata('SecretStores.Delete', 6094 req), 6095 timeout=t) 6096 except Exception as e: 6097 if self.parent.shouldRetry(tries, e, deadline): 6098 tries += 1 6099 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6100 continue 6101 raise plumbing.convert_error_to_porcelain(e) from e 6102 break 6103 6104 resp = models.SecretStoreDeleteResponse() 6105 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 6106 plumbing_response.meta) 6107 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6108 plumbing_response.rate_limit) 6109 return resp 6110 6111 def list(self, filter, *args, timeout=None): 6112 ''' 6113 List gets a list of SecretStores matching a given set of criteria. 6114 ''' 6115 deadline = None if timeout is None else time.time() + timeout 6116 req = SecretStoreListRequest() 6117 req.meta.CopyFrom(ListRequestMetadata()) 6118 if self.parent.page_limit > 0: 6119 req.meta.limit = self.parent.page_limit 6120 if self.parent.snapshot_datetime is not None: 6121 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6122 6123 req.filter = plumbing.quote_filter_args(filter, *args) 6124 6125 def generator(svc, req): 6126 tries = 0 6127 while True: 6128 t = None if deadline is None else deadline - time.time() 6129 try: 6130 plumbing_response = svc.stub.List( 6131 req, 6132 metadata=svc.parent.get_metadata( 6133 'SecretStores.List', req), 6134 timeout=t) 6135 except Exception as e: 6136 if self.parent.shouldRetry(tries, e, deadline): 6137 tries += 1 6138 time.sleep( 6139 self.parent.exponentialBackoff(tries, deadline)) 6140 continue 6141 raise plumbing.convert_error_to_porcelain(e) from e 6142 tries = 0 6143 for plumbing_item in plumbing_response.secret_stores: 6144 yield plumbing.convert_secret_store_to_porcelain( 6145 plumbing_item) 6146 if plumbing_response.meta.next_cursor == '': 6147 break 6148 req.meta.cursor = plumbing_response.meta.next_cursor 6149 6150 return generator(self, req)
SecretStores are servers where resource secrets (passwords, keys) are stored.
See:
strongdm.models.ActiveDirectoryStore
strongdm.models.AWSStore
strongdm.models.AWSCertX509Store
strongdm.models.AzureStore
strongdm.models.CyberarkConjurStore
strongdm.models.CyberarkPAMStore
strongdm.models.CyberarkPAMExperimentalStore
strongdm.models.DelineaStore
strongdm.models.GCPStore
strongdm.models.GCPCertX509Store
strongdm.models.KeyfactorSSHStore
strongdm.models.KeyfactorX509Store
strongdm.models.VaultAppRoleStore
strongdm.models.VaultAppRoleCertSSHStore
strongdm.models.VaultAppRoleCertX509Store
strongdm.models.VaultAWSEC2Store
strongdm.models.VaultAWSIAMStore
strongdm.models.VaultTLSStore
strongdm.models.VaultTLSCertSSHStore
strongdm.models.VaultTLSCertX509Store
strongdm.models.VaultTokenStore
strongdm.models.VaultTokenCertSSHStore
strongdm.models.VaultTokenCertX509Store
5970 def create(self, secret_store, timeout=None): 5971 deadline = None if timeout is None else time.time() + timeout 5972 req = SecretStoreCreateRequest() 5973 5974 if secret_store is not None: 5975 req.secret_store.CopyFrom( 5976 plumbing.convert_secret_store_to_plumbing(secret_store)) 5977 tries = 0 5978 plumbing_response = None 5979 while True: 5980 t = None if deadline is None else deadline - time.time() 5981 try: 5982 plumbing_response = self.stub.Create( 5983 req, 5984 metadata=self.parent.get_metadata('SecretStores.Create', 5985 req), 5986 timeout=t) 5987 except Exception as e: 5988 if self.parent.shouldRetry(tries, e, deadline): 5989 tries += 1 5990 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 5991 continue 5992 raise plumbing.convert_error_to_porcelain(e) from e 5993 break 5994 5995 resp = models.SecretStoreCreateResponse() 5996 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 5997 plumbing_response.meta) 5998 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 5999 plumbing_response.rate_limit) 6000 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6001 plumbing_response.secret_store) 6002 return resp
6004 def get(self, id, timeout=None): 6005 ''' 6006 Get reads one SecretStore by ID. 6007 ''' 6008 deadline = None if timeout is None else time.time() + timeout 6009 req = SecretStoreGetRequest() 6010 if self.parent.snapshot_datetime is not None: 6011 req.meta.CopyFrom(GetRequestMetadata()) 6012 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6013 6014 req.id = (id) 6015 tries = 0 6016 plumbing_response = None 6017 while True: 6018 t = None if deadline is None else deadline - time.time() 6019 try: 6020 plumbing_response = self.stub.Get( 6021 req, 6022 metadata=self.parent.get_metadata('SecretStores.Get', req), 6023 timeout=t) 6024 except Exception as e: 6025 if self.parent.shouldRetry(tries, e, deadline): 6026 tries += 1 6027 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6028 continue 6029 raise plumbing.convert_error_to_porcelain(e) from e 6030 break 6031 6032 resp = models.SecretStoreGetResponse() 6033 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6034 plumbing_response.meta) 6035 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6036 plumbing_response.rate_limit) 6037 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6038 plumbing_response.secret_store) 6039 return resp
Get reads one SecretStore by ID.
6041 def update(self, secret_store, timeout=None): 6042 ''' 6043 Update replaces all the fields of a SecretStore by ID. 6044 ''' 6045 deadline = None if timeout is None else time.time() + timeout 6046 req = SecretStoreUpdateRequest() 6047 6048 if secret_store is not None: 6049 req.secret_store.CopyFrom( 6050 plumbing.convert_secret_store_to_plumbing(secret_store)) 6051 tries = 0 6052 plumbing_response = None 6053 while True: 6054 t = None if deadline is None else deadline - time.time() 6055 try: 6056 plumbing_response = self.stub.Update( 6057 req, 6058 metadata=self.parent.get_metadata('SecretStores.Update', 6059 req), 6060 timeout=t) 6061 except Exception as e: 6062 if self.parent.shouldRetry(tries, e, deadline): 6063 tries += 1 6064 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6065 continue 6066 raise plumbing.convert_error_to_porcelain(e) from e 6067 break 6068 6069 resp = models.SecretStoreUpdateResponse() 6070 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 6071 plumbing_response.meta) 6072 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6073 plumbing_response.rate_limit) 6074 resp.secret_store = plumbing.convert_secret_store_to_porcelain( 6075 plumbing_response.secret_store) 6076 return resp
Update replaces all the fields of a SecretStore by ID.
6078 def delete(self, id, timeout=None): 6079 ''' 6080 Delete removes a SecretStore by ID. 6081 ''' 6082 deadline = None if timeout is None else time.time() + timeout 6083 req = SecretStoreDeleteRequest() 6084 6085 req.id = (id) 6086 tries = 0 6087 plumbing_response = None 6088 while True: 6089 t = None if deadline is None else deadline - time.time() 6090 try: 6091 plumbing_response = self.stub.Delete( 6092 req, 6093 metadata=self.parent.get_metadata('SecretStores.Delete', 6094 req), 6095 timeout=t) 6096 except Exception as e: 6097 if self.parent.shouldRetry(tries, e, deadline): 6098 tries += 1 6099 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6100 continue 6101 raise plumbing.convert_error_to_porcelain(e) from e 6102 break 6103 6104 resp = models.SecretStoreDeleteResponse() 6105 resp.meta = plumbing.convert_delete_response_metadata_to_porcelain( 6106 plumbing_response.meta) 6107 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6108 plumbing_response.rate_limit) 6109 return resp
Delete removes a SecretStore by ID.
6111 def list(self, filter, *args, timeout=None): 6112 ''' 6113 List gets a list of SecretStores matching a given set of criteria. 6114 ''' 6115 deadline = None if timeout is None else time.time() + timeout 6116 req = SecretStoreListRequest() 6117 req.meta.CopyFrom(ListRequestMetadata()) 6118 if self.parent.page_limit > 0: 6119 req.meta.limit = self.parent.page_limit 6120 if self.parent.snapshot_datetime is not None: 6121 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6122 6123 req.filter = plumbing.quote_filter_args(filter, *args) 6124 6125 def generator(svc, req): 6126 tries = 0 6127 while True: 6128 t = None if deadline is None else deadline - time.time() 6129 try: 6130 plumbing_response = svc.stub.List( 6131 req, 6132 metadata=svc.parent.get_metadata( 6133 'SecretStores.List', req), 6134 timeout=t) 6135 except Exception as e: 6136 if self.parent.shouldRetry(tries, e, deadline): 6137 tries += 1 6138 time.sleep( 6139 self.parent.exponentialBackoff(tries, deadline)) 6140 continue 6141 raise plumbing.convert_error_to_porcelain(e) from e 6142 tries = 0 6143 for plumbing_item in plumbing_response.secret_stores: 6144 yield plumbing.convert_secret_store_to_porcelain( 6145 plumbing_item) 6146 if plumbing_response.meta.next_cursor == '': 6147 break 6148 req.meta.cursor = plumbing_response.meta.next_cursor 6149 6150 return generator(self, req)
List gets a list of SecretStores matching a given set of criteria.
6153class SnapshotSecretStores: 6154 ''' 6155 SnapshotSecretStores exposes the read only methods of the SecretStores 6156 service for historical queries. 6157 ''' 6158 def __init__(self, secret_stores): 6159 self.secret_stores = secret_stores 6160 6161 def get(self, id, timeout=None): 6162 ''' 6163 Get reads one SecretStore by ID. 6164 ''' 6165 return self.secret_stores.get(id, timeout=timeout) 6166 6167 def list(self, filter, *args, timeout=None): 6168 ''' 6169 List gets a list of SecretStores matching a given set of criteria. 6170 ''' 6171 return self.secret_stores.list(filter, *args, timeout=timeout)
SnapshotSecretStores exposes the read only methods of the SecretStores service for historical queries.
6161 def get(self, id, timeout=None): 6162 ''' 6163 Get reads one SecretStore by ID. 6164 ''' 6165 return self.secret_stores.get(id, timeout=timeout)
Get reads one SecretStore by ID.
6167 def list(self, filter, *args, timeout=None): 6168 ''' 6169 List gets a list of SecretStores matching a given set of criteria. 6170 ''' 6171 return self.secret_stores.list(filter, *args, timeout=timeout)
List gets a list of SecretStores matching a given set of criteria.
6174class SecretEngines: 6175 ''' 6176 6177 See: 6178 `strongdm.models.ActiveDirectoryEngine` 6179 `strongdm.models.KeyValueEngine` 6180 ''' 6181 def __init__(self, channel, client): 6182 self.parent = client 6183 self.stub = SecretEnginesStub(channel) 6184 6185 def list(self, filter, *args, timeout=None): 6186 ''' 6187 List returns a list of Secret Engines 6188 ''' 6189 deadline = None if timeout is None else time.time() + timeout 6190 req = SecretEngineListRequest() 6191 req.meta.CopyFrom(ListRequestMetadata()) 6192 if self.parent.page_limit > 0: 6193 req.meta.limit = self.parent.page_limit 6194 if self.parent.snapshot_datetime is not None: 6195 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6196 6197 req.filter = plumbing.quote_filter_args(filter, *args) 6198 6199 def generator(svc, req): 6200 tries = 0 6201 while True: 6202 t = None if deadline is None else deadline - time.time() 6203 try: 6204 plumbing_response = svc.stub.List( 6205 req, 6206 metadata=svc.parent.get_metadata( 6207 'SecretEngines.List', req), 6208 timeout=t) 6209 except Exception as e: 6210 if self.parent.shouldRetry(tries, e, deadline): 6211 tries += 1 6212 time.sleep( 6213 self.parent.exponentialBackoff(tries, deadline)) 6214 continue 6215 raise plumbing.convert_error_to_porcelain(e) from e 6216 tries = 0 6217 for plumbing_item in plumbing_response.secret_engines: 6218 yield plumbing.convert_secret_engine_to_porcelain( 6219 plumbing_item) 6220 if plumbing_response.meta.next_cursor == '': 6221 break 6222 req.meta.cursor = plumbing_response.meta.next_cursor 6223 6224 return generator(self, req) 6225 6226 def get(self, id, timeout=None): 6227 ''' 6228 Get returns a secret engine details 6229 ''' 6230 deadline = None if timeout is None else time.time() + timeout 6231 req = SecretEngineGetRequest() 6232 if self.parent.snapshot_datetime is not None: 6233 req.meta.CopyFrom(GetRequestMetadata()) 6234 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6235 6236 req.id = (id) 6237 tries = 0 6238 plumbing_response = None 6239 while True: 6240 t = None if deadline is None else deadline - time.time() 6241 try: 6242 plumbing_response = self.stub.Get( 6243 req, 6244 metadata=self.parent.get_metadata('SecretEngines.Get', 6245 req), 6246 timeout=t) 6247 except Exception as e: 6248 if self.parent.shouldRetry(tries, e, deadline): 6249 tries += 1 6250 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6251 continue 6252 raise plumbing.convert_error_to_porcelain(e) from e 6253 break 6254 6255 resp = models.SecretEngineGetResponse() 6256 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6257 plumbing_response.meta) 6258 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6259 plumbing_response.rate_limit) 6260 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6261 plumbing_response.secret_engine) 6262 return resp 6263 6264 def create(self, secret_engine, timeout=None): 6265 ''' 6266 Create creates a secret engine 6267 ''' 6268 deadline = None if timeout is None else time.time() + timeout 6269 req = SecretEngineCreateRequest() 6270 6271 if secret_engine is not None: 6272 req.secret_engine.CopyFrom( 6273 plumbing.convert_secret_engine_to_plumbing(secret_engine)) 6274 tries = 0 6275 plumbing_response = None 6276 while True: 6277 t = None if deadline is None else deadline - time.time() 6278 try: 6279 plumbing_response = self.stub.Create( 6280 req, 6281 metadata=self.parent.get_metadata('SecretEngines.Create', 6282 req), 6283 timeout=t) 6284 except Exception as e: 6285 if self.parent.shouldRetry(tries, e, deadline): 6286 tries += 1 6287 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6288 continue 6289 raise plumbing.convert_error_to_porcelain(e) from e 6290 break 6291 6292 resp = models.SecretEngineCreateResponse() 6293 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 6294 plumbing_response.meta) 6295 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6296 plumbing_response.rate_limit) 6297 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6298 plumbing_response.secret_engine) 6299 return resp 6300 6301 def update(self, secret_engine, timeout=None): 6302 ''' 6303 Update updates a secret engine 6304 ''' 6305 deadline = None if timeout is None else time.time() + timeout 6306 req = SecretEngineUpdateRequest() 6307 6308 if secret_engine is not None: 6309 req.secret_engine.CopyFrom( 6310 plumbing.convert_secret_engine_to_plumbing(secret_engine)) 6311 tries = 0 6312 plumbing_response = None 6313 while True: 6314 t = None if deadline is None else deadline - time.time() 6315 try: 6316 plumbing_response = self.stub.Update( 6317 req, 6318 metadata=self.parent.get_metadata('SecretEngines.Update', 6319 req), 6320 timeout=t) 6321 except Exception as e: 6322 if self.parent.shouldRetry(tries, e, deadline): 6323 tries += 1 6324 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6325 continue 6326 raise plumbing.convert_error_to_porcelain(e) from e 6327 break 6328 6329 resp = models.SecretEngineUpdateResponse() 6330 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 6331 plumbing_response.meta) 6332 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6333 plumbing_response.rate_limit) 6334 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6335 plumbing_response.secret_engine) 6336 return resp 6337 6338 def delete(self, id, timeout=None): 6339 ''' 6340 Delete deletes a secret engine 6341 ''' 6342 deadline = None if timeout is None else time.time() + timeout 6343 req = SecretEngineDeleteRequest() 6344 6345 req.id = (id) 6346 tries = 0 6347 plumbing_response = None 6348 while True: 6349 t = None if deadline is None else deadline - time.time() 6350 try: 6351 plumbing_response = self.stub.Delete( 6352 req, 6353 metadata=self.parent.get_metadata('SecretEngines.Delete', 6354 req), 6355 timeout=t) 6356 except Exception as e: 6357 if self.parent.shouldRetry(tries, e, deadline): 6358 tries += 1 6359 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6360 continue 6361 raise plumbing.convert_error_to_porcelain(e) from e 6362 break 6363 6364 resp = models.SecretEngineDeleteResponse() 6365 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6366 plumbing_response.rate_limit) 6367 return resp 6368 6369 def list_secret_stores(self, filter, *args, timeout=None): 6370 ''' 6371 ListSecretStores returns a list of Secret Stores that can be used as a backing store 6372 for Secret Engine 6373 ''' 6374 deadline = None if timeout is None else time.time() + timeout 6375 req = SecretStoreListRequest() 6376 req.meta.CopyFrom(ListRequestMetadata()) 6377 if self.parent.page_limit > 0: 6378 req.meta.limit = self.parent.page_limit 6379 if self.parent.snapshot_datetime is not None: 6380 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6381 6382 req.filter = plumbing.quote_filter_args(filter, *args) 6383 6384 def generator(svc, req): 6385 tries = 0 6386 while True: 6387 t = None if deadline is None else deadline - time.time() 6388 try: 6389 plumbing_response = svc.stub.ListSecretStores( 6390 req, 6391 metadata=svc.parent.get_metadata( 6392 'SecretEngines.ListSecretStores', req), 6393 timeout=t) 6394 except Exception as e: 6395 if self.parent.shouldRetry(tries, e, deadline): 6396 tries += 1 6397 time.sleep( 6398 self.parent.exponentialBackoff(tries, deadline)) 6399 continue 6400 raise plumbing.convert_error_to_porcelain(e) from e 6401 tries = 0 6402 for plumbing_item in plumbing_response.secret_stores: 6403 yield plumbing.convert_secret_store_to_porcelain( 6404 plumbing_item) 6405 if plumbing_response.meta.next_cursor == '': 6406 break 6407 req.meta.cursor = plumbing_response.meta.next_cursor 6408 6409 return generator(self, req) 6410 6411 def generate_keys(self, secret_engine_id, timeout=None): 6412 ''' 6413 GenerateKeys generates a private key, stores it in a secret store and stores a public key in a secret engine 6414 ''' 6415 deadline = None if timeout is None else time.time() + timeout 6416 req = GenerateKeysRequest() 6417 6418 req.secret_engine_id = (secret_engine_id) 6419 tries = 0 6420 plumbing_response = None 6421 while True: 6422 t = None if deadline is None else deadline - time.time() 6423 try: 6424 plumbing_response = self.stub.GenerateKeys( 6425 req, 6426 metadata=self.parent.get_metadata( 6427 'SecretEngines.GenerateKeys', req), 6428 timeout=t) 6429 except Exception as e: 6430 if self.parent.shouldRetry(tries, e, deadline): 6431 tries += 1 6432 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6433 continue 6434 raise plumbing.convert_error_to_porcelain(e) from e 6435 break 6436 6437 resp = models.GenerateKeysResponse() 6438 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6439 plumbing_response.rate_limit) 6440 return resp 6441 6442 def healthcheck(self, secret_engine_id, timeout=None): 6443 ''' 6444 Healthcheck triggers a healthcheck for all nodes serving a secret engine 6445 ''' 6446 deadline = None if timeout is None else time.time() + timeout 6447 req = HealthcheckRequest() 6448 6449 req.secret_engine_id = (secret_engine_id) 6450 tries = 0 6451 plumbing_response = None 6452 while True: 6453 t = None if deadline is None else deadline - time.time() 6454 try: 6455 plumbing_response = self.stub.Healthcheck( 6456 req, 6457 metadata=self.parent.get_metadata( 6458 'SecretEngines.Healthcheck', req), 6459 timeout=t) 6460 except Exception as e: 6461 if self.parent.shouldRetry(tries, e, deadline): 6462 tries += 1 6463 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6464 continue 6465 raise plumbing.convert_error_to_porcelain(e) from e 6466 break 6467 6468 resp = models.HealthcheckResponse() 6469 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6470 plumbing_response.rate_limit) 6471 resp.status = plumbing.convert_repeated_healthcheck_status_to_porcelain( 6472 plumbing_response.status) 6473 return resp 6474 6475 def rotate(self, id, password_policy, timeout=None): 6476 ''' 6477 Rotate rotates secret engine's credentials 6478 ''' 6479 deadline = None if timeout is None else time.time() + timeout 6480 req = SecretEngineRotateRequest() 6481 6482 req.id = (id) 6483 if password_policy is not None: 6484 req.password_policy.CopyFrom( 6485 plumbing.convert_secret_engine_password_policy_to_plumbing( 6486 password_policy)) 6487 tries = 0 6488 plumbing_response = None 6489 while True: 6490 t = None if deadline is None else deadline - time.time() 6491 try: 6492 plumbing_response = self.stub.Rotate( 6493 req, 6494 metadata=self.parent.get_metadata('SecretEngines.Rotate', 6495 req), 6496 timeout=t) 6497 except Exception as e: 6498 if self.parent.shouldRetry(tries, e, deadline): 6499 tries += 1 6500 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6501 continue 6502 raise plumbing.convert_error_to_porcelain(e) from e 6503 break 6504 6505 resp = models.SecretEngineRotateResponse() 6506 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6507 plumbing_response.rate_limit) 6508 return resp
6185 def list(self, filter, *args, timeout=None): 6186 ''' 6187 List returns a list of Secret Engines 6188 ''' 6189 deadline = None if timeout is None else time.time() + timeout 6190 req = SecretEngineListRequest() 6191 req.meta.CopyFrom(ListRequestMetadata()) 6192 if self.parent.page_limit > 0: 6193 req.meta.limit = self.parent.page_limit 6194 if self.parent.snapshot_datetime is not None: 6195 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6196 6197 req.filter = plumbing.quote_filter_args(filter, *args) 6198 6199 def generator(svc, req): 6200 tries = 0 6201 while True: 6202 t = None if deadline is None else deadline - time.time() 6203 try: 6204 plumbing_response = svc.stub.List( 6205 req, 6206 metadata=svc.parent.get_metadata( 6207 'SecretEngines.List', req), 6208 timeout=t) 6209 except Exception as e: 6210 if self.parent.shouldRetry(tries, e, deadline): 6211 tries += 1 6212 time.sleep( 6213 self.parent.exponentialBackoff(tries, deadline)) 6214 continue 6215 raise plumbing.convert_error_to_porcelain(e) from e 6216 tries = 0 6217 for plumbing_item in plumbing_response.secret_engines: 6218 yield plumbing.convert_secret_engine_to_porcelain( 6219 plumbing_item) 6220 if plumbing_response.meta.next_cursor == '': 6221 break 6222 req.meta.cursor = plumbing_response.meta.next_cursor 6223 6224 return generator(self, req)
List returns a list of Secret Engines
6226 def get(self, id, timeout=None): 6227 ''' 6228 Get returns a secret engine details 6229 ''' 6230 deadline = None if timeout is None else time.time() + timeout 6231 req = SecretEngineGetRequest() 6232 if self.parent.snapshot_datetime is not None: 6233 req.meta.CopyFrom(GetRequestMetadata()) 6234 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6235 6236 req.id = (id) 6237 tries = 0 6238 plumbing_response = None 6239 while True: 6240 t = None if deadline is None else deadline - time.time() 6241 try: 6242 plumbing_response = self.stub.Get( 6243 req, 6244 metadata=self.parent.get_metadata('SecretEngines.Get', 6245 req), 6246 timeout=t) 6247 except Exception as e: 6248 if self.parent.shouldRetry(tries, e, deadline): 6249 tries += 1 6250 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6251 continue 6252 raise plumbing.convert_error_to_porcelain(e) from e 6253 break 6254 6255 resp = models.SecretEngineGetResponse() 6256 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6257 plumbing_response.meta) 6258 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6259 plumbing_response.rate_limit) 6260 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6261 plumbing_response.secret_engine) 6262 return resp
Get returns a secret engine details
6264 def create(self, secret_engine, timeout=None): 6265 ''' 6266 Create creates a secret engine 6267 ''' 6268 deadline = None if timeout is None else time.time() + timeout 6269 req = SecretEngineCreateRequest() 6270 6271 if secret_engine is not None: 6272 req.secret_engine.CopyFrom( 6273 plumbing.convert_secret_engine_to_plumbing(secret_engine)) 6274 tries = 0 6275 plumbing_response = None 6276 while True: 6277 t = None if deadline is None else deadline - time.time() 6278 try: 6279 plumbing_response = self.stub.Create( 6280 req, 6281 metadata=self.parent.get_metadata('SecretEngines.Create', 6282 req), 6283 timeout=t) 6284 except Exception as e: 6285 if self.parent.shouldRetry(tries, e, deadline): 6286 tries += 1 6287 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6288 continue 6289 raise plumbing.convert_error_to_porcelain(e) from e 6290 break 6291 6292 resp = models.SecretEngineCreateResponse() 6293 resp.meta = plumbing.convert_create_response_metadata_to_porcelain( 6294 plumbing_response.meta) 6295 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6296 plumbing_response.rate_limit) 6297 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6298 plumbing_response.secret_engine) 6299 return resp
Create creates a secret engine
6301 def update(self, secret_engine, timeout=None): 6302 ''' 6303 Update updates a secret engine 6304 ''' 6305 deadline = None if timeout is None else time.time() + timeout 6306 req = SecretEngineUpdateRequest() 6307 6308 if secret_engine is not None: 6309 req.secret_engine.CopyFrom( 6310 plumbing.convert_secret_engine_to_plumbing(secret_engine)) 6311 tries = 0 6312 plumbing_response = None 6313 while True: 6314 t = None if deadline is None else deadline - time.time() 6315 try: 6316 plumbing_response = self.stub.Update( 6317 req, 6318 metadata=self.parent.get_metadata('SecretEngines.Update', 6319 req), 6320 timeout=t) 6321 except Exception as e: 6322 if self.parent.shouldRetry(tries, e, deadline): 6323 tries += 1 6324 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6325 continue 6326 raise plumbing.convert_error_to_porcelain(e) from e 6327 break 6328 6329 resp = models.SecretEngineUpdateResponse() 6330 resp.meta = plumbing.convert_update_response_metadata_to_porcelain( 6331 plumbing_response.meta) 6332 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6333 plumbing_response.rate_limit) 6334 resp.secret_engine = plumbing.convert_secret_engine_to_porcelain( 6335 plumbing_response.secret_engine) 6336 return resp
Update updates a secret engine
6338 def delete(self, id, timeout=None): 6339 ''' 6340 Delete deletes a secret engine 6341 ''' 6342 deadline = None if timeout is None else time.time() + timeout 6343 req = SecretEngineDeleteRequest() 6344 6345 req.id = (id) 6346 tries = 0 6347 plumbing_response = None 6348 while True: 6349 t = None if deadline is None else deadline - time.time() 6350 try: 6351 plumbing_response = self.stub.Delete( 6352 req, 6353 metadata=self.parent.get_metadata('SecretEngines.Delete', 6354 req), 6355 timeout=t) 6356 except Exception as e: 6357 if self.parent.shouldRetry(tries, e, deadline): 6358 tries += 1 6359 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6360 continue 6361 raise plumbing.convert_error_to_porcelain(e) from e 6362 break 6363 6364 resp = models.SecretEngineDeleteResponse() 6365 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6366 plumbing_response.rate_limit) 6367 return resp
Delete deletes a secret engine
6369 def list_secret_stores(self, filter, *args, timeout=None): 6370 ''' 6371 ListSecretStores returns a list of Secret Stores that can be used as a backing store 6372 for Secret Engine 6373 ''' 6374 deadline = None if timeout is None else time.time() + timeout 6375 req = SecretStoreListRequest() 6376 req.meta.CopyFrom(ListRequestMetadata()) 6377 if self.parent.page_limit > 0: 6378 req.meta.limit = self.parent.page_limit 6379 if self.parent.snapshot_datetime is not None: 6380 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6381 6382 req.filter = plumbing.quote_filter_args(filter, *args) 6383 6384 def generator(svc, req): 6385 tries = 0 6386 while True: 6387 t = None if deadline is None else deadline - time.time() 6388 try: 6389 plumbing_response = svc.stub.ListSecretStores( 6390 req, 6391 metadata=svc.parent.get_metadata( 6392 'SecretEngines.ListSecretStores', req), 6393 timeout=t) 6394 except Exception as e: 6395 if self.parent.shouldRetry(tries, e, deadline): 6396 tries += 1 6397 time.sleep( 6398 self.parent.exponentialBackoff(tries, deadline)) 6399 continue 6400 raise plumbing.convert_error_to_porcelain(e) from e 6401 tries = 0 6402 for plumbing_item in plumbing_response.secret_stores: 6403 yield plumbing.convert_secret_store_to_porcelain( 6404 plumbing_item) 6405 if plumbing_response.meta.next_cursor == '': 6406 break 6407 req.meta.cursor = plumbing_response.meta.next_cursor 6408 6409 return generator(self, req)
ListSecretStores returns a list of Secret Stores that can be used as a backing store for Secret Engine
6411 def generate_keys(self, secret_engine_id, timeout=None): 6412 ''' 6413 GenerateKeys generates a private key, stores it in a secret store and stores a public key in a secret engine 6414 ''' 6415 deadline = None if timeout is None else time.time() + timeout 6416 req = GenerateKeysRequest() 6417 6418 req.secret_engine_id = (secret_engine_id) 6419 tries = 0 6420 plumbing_response = None 6421 while True: 6422 t = None if deadline is None else deadline - time.time() 6423 try: 6424 plumbing_response = self.stub.GenerateKeys( 6425 req, 6426 metadata=self.parent.get_metadata( 6427 'SecretEngines.GenerateKeys', req), 6428 timeout=t) 6429 except Exception as e: 6430 if self.parent.shouldRetry(tries, e, deadline): 6431 tries += 1 6432 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6433 continue 6434 raise plumbing.convert_error_to_porcelain(e) from e 6435 break 6436 6437 resp = models.GenerateKeysResponse() 6438 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6439 plumbing_response.rate_limit) 6440 return resp
GenerateKeys generates a private key, stores it in a secret store and stores a public key in a secret engine
6442 def healthcheck(self, secret_engine_id, timeout=None): 6443 ''' 6444 Healthcheck triggers a healthcheck for all nodes serving a secret engine 6445 ''' 6446 deadline = None if timeout is None else time.time() + timeout 6447 req = HealthcheckRequest() 6448 6449 req.secret_engine_id = (secret_engine_id) 6450 tries = 0 6451 plumbing_response = None 6452 while True: 6453 t = None if deadline is None else deadline - time.time() 6454 try: 6455 plumbing_response = self.stub.Healthcheck( 6456 req, 6457 metadata=self.parent.get_metadata( 6458 'SecretEngines.Healthcheck', req), 6459 timeout=t) 6460 except Exception as e: 6461 if self.parent.shouldRetry(tries, e, deadline): 6462 tries += 1 6463 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6464 continue 6465 raise plumbing.convert_error_to_porcelain(e) from e 6466 break 6467 6468 resp = models.HealthcheckResponse() 6469 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6470 plumbing_response.rate_limit) 6471 resp.status = plumbing.convert_repeated_healthcheck_status_to_porcelain( 6472 plumbing_response.status) 6473 return resp
Healthcheck triggers a healthcheck for all nodes serving a secret engine
6475 def rotate(self, id, password_policy, timeout=None): 6476 ''' 6477 Rotate rotates secret engine's credentials 6478 ''' 6479 deadline = None if timeout is None else time.time() + timeout 6480 req = SecretEngineRotateRequest() 6481 6482 req.id = (id) 6483 if password_policy is not None: 6484 req.password_policy.CopyFrom( 6485 plumbing.convert_secret_engine_password_policy_to_plumbing( 6486 password_policy)) 6487 tries = 0 6488 plumbing_response = None 6489 while True: 6490 t = None if deadline is None else deadline - time.time() 6491 try: 6492 plumbing_response = self.stub.Rotate( 6493 req, 6494 metadata=self.parent.get_metadata('SecretEngines.Rotate', 6495 req), 6496 timeout=t) 6497 except Exception as e: 6498 if self.parent.shouldRetry(tries, e, deadline): 6499 tries += 1 6500 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6501 continue 6502 raise plumbing.convert_error_to_porcelain(e) from e 6503 break 6504 6505 resp = models.SecretEngineRotateResponse() 6506 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6507 plumbing_response.rate_limit) 6508 return resp
Rotate rotates secret engine's credentials
6511class SecretStoreHealths: 6512 ''' 6513 SecretStoreHealths exposes health states for secret stores. 6514 See `strongdm.models.SecretStoreHealth`. 6515 ''' 6516 def __init__(self, channel, client): 6517 self.parent = client 6518 self.stub = SecretStoreHealthsStub(channel) 6519 6520 def list(self, filter, *args, timeout=None): 6521 ''' 6522 List reports the health status of node to secret store pairs. 6523 ''' 6524 deadline = None if timeout is None else time.time() + timeout 6525 req = SecretStoreHealthListRequest() 6526 req.meta.CopyFrom(ListRequestMetadata()) 6527 if self.parent.page_limit > 0: 6528 req.meta.limit = self.parent.page_limit 6529 if self.parent.snapshot_datetime is not None: 6530 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6531 6532 req.filter = plumbing.quote_filter_args(filter, *args) 6533 6534 def generator(svc, req): 6535 tries = 0 6536 while True: 6537 t = None if deadline is None else deadline - time.time() 6538 try: 6539 plumbing_response = svc.stub.List( 6540 req, 6541 metadata=svc.parent.get_metadata( 6542 'SecretStoreHealths.List', req), 6543 timeout=t) 6544 except Exception as e: 6545 if self.parent.shouldRetry(tries, e, deadline): 6546 tries += 1 6547 time.sleep( 6548 self.parent.exponentialBackoff(tries, deadline)) 6549 continue 6550 raise plumbing.convert_error_to_porcelain(e) from e 6551 tries = 0 6552 for plumbing_item in plumbing_response.secret_store_healths: 6553 yield plumbing.convert_secret_store_health_to_porcelain( 6554 plumbing_item) 6555 if plumbing_response.meta.next_cursor == '': 6556 break 6557 req.meta.cursor = plumbing_response.meta.next_cursor 6558 6559 return generator(self, req) 6560 6561 def healthcheck(self, secret_store_id, timeout=None): 6562 ''' 6563 Healthcheck triggers a remote healthcheck request for a secret store. It may take minutes 6564 to propagate across a large network of Nodes. The call will return immediately, and the 6565 updated health of the Secret Store can be retrieved via List. 6566 ''' 6567 deadline = None if timeout is None else time.time() + timeout 6568 req = SecretStoreHealthcheckRequest() 6569 6570 req.secret_store_id = (secret_store_id) 6571 tries = 0 6572 plumbing_response = None 6573 while True: 6574 t = None if deadline is None else deadline - time.time() 6575 try: 6576 plumbing_response = self.stub.Healthcheck( 6577 req, 6578 metadata=self.parent.get_metadata( 6579 'SecretStoreHealths.Healthcheck', req), 6580 timeout=t) 6581 except Exception as e: 6582 if self.parent.shouldRetry(tries, e, deadline): 6583 tries += 1 6584 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6585 continue 6586 raise plumbing.convert_error_to_porcelain(e) from e 6587 break 6588 6589 resp = models.SecretStoreHealthcheckResponse() 6590 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6591 plumbing_response.rate_limit) 6592 return resp
SecretStoreHealths exposes health states for secret stores.
See strongdm.models.SecretStoreHealth
.
6520 def list(self, filter, *args, timeout=None): 6521 ''' 6522 List reports the health status of node to secret store pairs. 6523 ''' 6524 deadline = None if timeout is None else time.time() + timeout 6525 req = SecretStoreHealthListRequest() 6526 req.meta.CopyFrom(ListRequestMetadata()) 6527 if self.parent.page_limit > 0: 6528 req.meta.limit = self.parent.page_limit 6529 if self.parent.snapshot_datetime is not None: 6530 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6531 6532 req.filter = plumbing.quote_filter_args(filter, *args) 6533 6534 def generator(svc, req): 6535 tries = 0 6536 while True: 6537 t = None if deadline is None else deadline - time.time() 6538 try: 6539 plumbing_response = svc.stub.List( 6540 req, 6541 metadata=svc.parent.get_metadata( 6542 'SecretStoreHealths.List', req), 6543 timeout=t) 6544 except Exception as e: 6545 if self.parent.shouldRetry(tries, e, deadline): 6546 tries += 1 6547 time.sleep( 6548 self.parent.exponentialBackoff(tries, deadline)) 6549 continue 6550 raise plumbing.convert_error_to_porcelain(e) from e 6551 tries = 0 6552 for plumbing_item in plumbing_response.secret_store_healths: 6553 yield plumbing.convert_secret_store_health_to_porcelain( 6554 plumbing_item) 6555 if plumbing_response.meta.next_cursor == '': 6556 break 6557 req.meta.cursor = plumbing_response.meta.next_cursor 6558 6559 return generator(self, req)
List reports the health status of node to secret store pairs.
6561 def healthcheck(self, secret_store_id, timeout=None): 6562 ''' 6563 Healthcheck triggers a remote healthcheck request for a secret store. It may take minutes 6564 to propagate across a large network of Nodes. The call will return immediately, and the 6565 updated health of the Secret Store can be retrieved via List. 6566 ''' 6567 deadline = None if timeout is None else time.time() + timeout 6568 req = SecretStoreHealthcheckRequest() 6569 6570 req.secret_store_id = (secret_store_id) 6571 tries = 0 6572 plumbing_response = None 6573 while True: 6574 t = None if deadline is None else deadline - time.time() 6575 try: 6576 plumbing_response = self.stub.Healthcheck( 6577 req, 6578 metadata=self.parent.get_metadata( 6579 'SecretStoreHealths.Healthcheck', req), 6580 timeout=t) 6581 except Exception as e: 6582 if self.parent.shouldRetry(tries, e, deadline): 6583 tries += 1 6584 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6585 continue 6586 raise plumbing.convert_error_to_porcelain(e) from e 6587 break 6588 6589 resp = models.SecretStoreHealthcheckResponse() 6590 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6591 plumbing_response.rate_limit) 6592 return resp
Healthcheck triggers a remote healthcheck request for a secret store. It may take minutes to propagate across a large network of Nodes. The call will return immediately, and the updated health of the Secret Store can be retrieved via List.
6595class SecretStoresHistory: 6596 ''' 6597 SecretStoresHistory records all changes to the state of a SecretStore. 6598 See `strongdm.models.SecretStoreHistory`. 6599 ''' 6600 def __init__(self, channel, client): 6601 self.parent = client 6602 self.stub = SecretStoresHistoryStub(channel) 6603 6604 def list(self, filter, *args, timeout=None): 6605 ''' 6606 List gets a list of SecretStoreHistory records matching a given set of criteria. 6607 ''' 6608 deadline = None if timeout is None else time.time() + timeout 6609 req = SecretStoreHistoryListRequest() 6610 req.meta.CopyFrom(ListRequestMetadata()) 6611 if self.parent.page_limit > 0: 6612 req.meta.limit = self.parent.page_limit 6613 if self.parent.snapshot_datetime is not None: 6614 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6615 6616 req.filter = plumbing.quote_filter_args(filter, *args) 6617 6618 def generator(svc, req): 6619 tries = 0 6620 while True: 6621 t = None if deadline is None else deadline - time.time() 6622 try: 6623 plumbing_response = svc.stub.List( 6624 req, 6625 metadata=svc.parent.get_metadata( 6626 'SecretStoresHistory.List', req), 6627 timeout=t) 6628 except Exception as e: 6629 if self.parent.shouldRetry(tries, e, deadline): 6630 tries += 1 6631 time.sleep( 6632 self.parent.exponentialBackoff(tries, deadline)) 6633 continue 6634 raise plumbing.convert_error_to_porcelain(e) from e 6635 tries = 0 6636 for plumbing_item in plumbing_response.history: 6637 yield plumbing.convert_secret_store_history_to_porcelain( 6638 plumbing_item) 6639 if plumbing_response.meta.next_cursor == '': 6640 break 6641 req.meta.cursor = plumbing_response.meta.next_cursor 6642 6643 return generator(self, req)
SecretStoresHistory records all changes to the state of a SecretStore.
See strongdm.models.SecretStoreHistory
.
6604 def list(self, filter, *args, timeout=None): 6605 ''' 6606 List gets a list of SecretStoreHistory records matching a given set of criteria. 6607 ''' 6608 deadline = None if timeout is None else time.time() + timeout 6609 req = SecretStoreHistoryListRequest() 6610 req.meta.CopyFrom(ListRequestMetadata()) 6611 if self.parent.page_limit > 0: 6612 req.meta.limit = self.parent.page_limit 6613 if self.parent.snapshot_datetime is not None: 6614 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6615 6616 req.filter = plumbing.quote_filter_args(filter, *args) 6617 6618 def generator(svc, req): 6619 tries = 0 6620 while True: 6621 t = None if deadline is None else deadline - time.time() 6622 try: 6623 plumbing_response = svc.stub.List( 6624 req, 6625 metadata=svc.parent.get_metadata( 6626 'SecretStoresHistory.List', req), 6627 timeout=t) 6628 except Exception as e: 6629 if self.parent.shouldRetry(tries, e, deadline): 6630 tries += 1 6631 time.sleep( 6632 self.parent.exponentialBackoff(tries, deadline)) 6633 continue 6634 raise plumbing.convert_error_to_porcelain(e) from e 6635 tries = 0 6636 for plumbing_item in plumbing_response.history: 6637 yield plumbing.convert_secret_store_history_to_porcelain( 6638 plumbing_item) 6639 if plumbing_response.meta.next_cursor == '': 6640 break 6641 req.meta.cursor = plumbing_response.meta.next_cursor 6642 6643 return generator(self, req)
List gets a list of SecretStoreHistory records matching a given set of criteria.
6646class WorkflowApprovers: 6647 ''' 6648 WorkflowApprovers is an account or a role with the ability to approve requests bound to a workflow. 6649 See `strongdm.models.WorkflowApprover`. 6650 ''' 6651 def __init__(self, channel, client): 6652 self.parent = client 6653 self.stub = WorkflowApproversStub(channel) 6654 6655 def create(self, workflow_approver, timeout=None): 6656 ''' 6657 Create creates a new workflow approver 6658 ''' 6659 deadline = None if timeout is None else time.time() + timeout 6660 req = WorkflowApproversCreateRequest() 6661 6662 if workflow_approver is not None: 6663 req.workflow_approver.CopyFrom( 6664 plumbing.convert_workflow_approver_to_plumbing( 6665 workflow_approver)) 6666 tries = 0 6667 plumbing_response = None 6668 while True: 6669 t = None if deadline is None else deadline - time.time() 6670 try: 6671 plumbing_response = self.stub.Create( 6672 req, 6673 metadata=self.parent.get_metadata( 6674 'WorkflowApprovers.Create', req), 6675 timeout=t) 6676 except Exception as e: 6677 if self.parent.shouldRetry(tries, e, deadline): 6678 tries += 1 6679 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6680 continue 6681 raise plumbing.convert_error_to_porcelain(e) from e 6682 break 6683 6684 resp = models.WorkflowApproversCreateResponse() 6685 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6686 plumbing_response.rate_limit) 6687 resp.workflow_approver = plumbing.convert_workflow_approver_to_porcelain( 6688 plumbing_response.workflow_approver) 6689 return resp 6690 6691 def get(self, id, timeout=None): 6692 ''' 6693 Get reads one workflow approver by ID. 6694 ''' 6695 deadline = None if timeout is None else time.time() + timeout 6696 req = WorkflowApproverGetRequest() 6697 if self.parent.snapshot_datetime is not None: 6698 req.meta.CopyFrom(GetRequestMetadata()) 6699 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6700 6701 req.id = (id) 6702 tries = 0 6703 plumbing_response = None 6704 while True: 6705 t = None if deadline is None else deadline - time.time() 6706 try: 6707 plumbing_response = self.stub.Get( 6708 req, 6709 metadata=self.parent.get_metadata('WorkflowApprovers.Get', 6710 req), 6711 timeout=t) 6712 except Exception as e: 6713 if self.parent.shouldRetry(tries, e, deadline): 6714 tries += 1 6715 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6716 continue 6717 raise plumbing.convert_error_to_porcelain(e) from e 6718 break 6719 6720 resp = models.WorkflowApproverGetResponse() 6721 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6722 plumbing_response.meta) 6723 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6724 plumbing_response.rate_limit) 6725 resp.workflow_approver = plumbing.convert_workflow_approver_to_porcelain( 6726 plumbing_response.workflow_approver) 6727 return resp 6728 6729 def delete(self, id, timeout=None): 6730 ''' 6731 Delete deletes a workflow approver 6732 ''' 6733 deadline = None if timeout is None else time.time() + timeout 6734 req = WorkflowApproversDeleteRequest() 6735 6736 req.id = (id) 6737 tries = 0 6738 plumbing_response = None 6739 while True: 6740 t = None if deadline is None else deadline - time.time() 6741 try: 6742 plumbing_response = self.stub.Delete( 6743 req, 6744 metadata=self.parent.get_metadata( 6745 'WorkflowApprovers.Delete', req), 6746 timeout=t) 6747 except Exception as e: 6748 if self.parent.shouldRetry(tries, e, deadline): 6749 tries += 1 6750 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6751 continue 6752 raise plumbing.convert_error_to_porcelain(e) from e 6753 break 6754 6755 resp = models.WorkflowApproversDeleteResponse() 6756 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6757 plumbing_response.rate_limit) 6758 return resp 6759 6760 def list(self, filter, *args, timeout=None): 6761 ''' 6762 Lists existing workflow approvers. 6763 ''' 6764 deadline = None if timeout is None else time.time() + timeout 6765 req = WorkflowApproversListRequest() 6766 req.meta.CopyFrom(ListRequestMetadata()) 6767 if self.parent.page_limit > 0: 6768 req.meta.limit = self.parent.page_limit 6769 if self.parent.snapshot_datetime is not None: 6770 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6771 6772 req.filter = plumbing.quote_filter_args(filter, *args) 6773 6774 def generator(svc, req): 6775 tries = 0 6776 while True: 6777 t = None if deadline is None else deadline - time.time() 6778 try: 6779 plumbing_response = svc.stub.List( 6780 req, 6781 metadata=svc.parent.get_metadata( 6782 'WorkflowApprovers.List', req), 6783 timeout=t) 6784 except Exception as e: 6785 if self.parent.shouldRetry(tries, e, deadline): 6786 tries += 1 6787 time.sleep( 6788 self.parent.exponentialBackoff(tries, deadline)) 6789 continue 6790 raise plumbing.convert_error_to_porcelain(e) from e 6791 tries = 0 6792 for plumbing_item in plumbing_response.workflow_approvers: 6793 yield plumbing.convert_workflow_approver_to_porcelain( 6794 plumbing_item) 6795 if plumbing_response.meta.next_cursor == '': 6796 break 6797 req.meta.cursor = plumbing_response.meta.next_cursor 6798 6799 return generator(self, req)
WorkflowApprovers is an account or a role with the ability to approve requests bound to a workflow.
See strongdm.models.WorkflowApprover
.
6655 def create(self, workflow_approver, timeout=None): 6656 ''' 6657 Create creates a new workflow approver 6658 ''' 6659 deadline = None if timeout is None else time.time() + timeout 6660 req = WorkflowApproversCreateRequest() 6661 6662 if workflow_approver is not None: 6663 req.workflow_approver.CopyFrom( 6664 plumbing.convert_workflow_approver_to_plumbing( 6665 workflow_approver)) 6666 tries = 0 6667 plumbing_response = None 6668 while True: 6669 t = None if deadline is None else deadline - time.time() 6670 try: 6671 plumbing_response = self.stub.Create( 6672 req, 6673 metadata=self.parent.get_metadata( 6674 'WorkflowApprovers.Create', req), 6675 timeout=t) 6676 except Exception as e: 6677 if self.parent.shouldRetry(tries, e, deadline): 6678 tries += 1 6679 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6680 continue 6681 raise plumbing.convert_error_to_porcelain(e) from e 6682 break 6683 6684 resp = models.WorkflowApproversCreateResponse() 6685 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6686 plumbing_response.rate_limit) 6687 resp.workflow_approver = plumbing.convert_workflow_approver_to_porcelain( 6688 plumbing_response.workflow_approver) 6689 return resp
Create creates a new workflow approver
6691 def get(self, id, timeout=None): 6692 ''' 6693 Get reads one workflow approver by ID. 6694 ''' 6695 deadline = None if timeout is None else time.time() + timeout 6696 req = WorkflowApproverGetRequest() 6697 if self.parent.snapshot_datetime is not None: 6698 req.meta.CopyFrom(GetRequestMetadata()) 6699 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6700 6701 req.id = (id) 6702 tries = 0 6703 plumbing_response = None 6704 while True: 6705 t = None if deadline is None else deadline - time.time() 6706 try: 6707 plumbing_response = self.stub.Get( 6708 req, 6709 metadata=self.parent.get_metadata('WorkflowApprovers.Get', 6710 req), 6711 timeout=t) 6712 except Exception as e: 6713 if self.parent.shouldRetry(tries, e, deadline): 6714 tries += 1 6715 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6716 continue 6717 raise plumbing.convert_error_to_porcelain(e) from e 6718 break 6719 6720 resp = models.WorkflowApproverGetResponse() 6721 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6722 plumbing_response.meta) 6723 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6724 plumbing_response.rate_limit) 6725 resp.workflow_approver = plumbing.convert_workflow_approver_to_porcelain( 6726 plumbing_response.workflow_approver) 6727 return resp
Get reads one workflow approver by ID.
6729 def delete(self, id, timeout=None): 6730 ''' 6731 Delete deletes a workflow approver 6732 ''' 6733 deadline = None if timeout is None else time.time() + timeout 6734 req = WorkflowApproversDeleteRequest() 6735 6736 req.id = (id) 6737 tries = 0 6738 plumbing_response = None 6739 while True: 6740 t = None if deadline is None else deadline - time.time() 6741 try: 6742 plumbing_response = self.stub.Delete( 6743 req, 6744 metadata=self.parent.get_metadata( 6745 'WorkflowApprovers.Delete', req), 6746 timeout=t) 6747 except Exception as e: 6748 if self.parent.shouldRetry(tries, e, deadline): 6749 tries += 1 6750 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6751 continue 6752 raise plumbing.convert_error_to_porcelain(e) from e 6753 break 6754 6755 resp = models.WorkflowApproversDeleteResponse() 6756 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6757 plumbing_response.rate_limit) 6758 return resp
Delete deletes a workflow approver
6760 def list(self, filter, *args, timeout=None): 6761 ''' 6762 Lists existing workflow approvers. 6763 ''' 6764 deadline = None if timeout is None else time.time() + timeout 6765 req = WorkflowApproversListRequest() 6766 req.meta.CopyFrom(ListRequestMetadata()) 6767 if self.parent.page_limit > 0: 6768 req.meta.limit = self.parent.page_limit 6769 if self.parent.snapshot_datetime is not None: 6770 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6771 6772 req.filter = plumbing.quote_filter_args(filter, *args) 6773 6774 def generator(svc, req): 6775 tries = 0 6776 while True: 6777 t = None if deadline is None else deadline - time.time() 6778 try: 6779 plumbing_response = svc.stub.List( 6780 req, 6781 metadata=svc.parent.get_metadata( 6782 'WorkflowApprovers.List', req), 6783 timeout=t) 6784 except Exception as e: 6785 if self.parent.shouldRetry(tries, e, deadline): 6786 tries += 1 6787 time.sleep( 6788 self.parent.exponentialBackoff(tries, deadline)) 6789 continue 6790 raise plumbing.convert_error_to_porcelain(e) from e 6791 tries = 0 6792 for plumbing_item in plumbing_response.workflow_approvers: 6793 yield plumbing.convert_workflow_approver_to_porcelain( 6794 plumbing_item) 6795 if plumbing_response.meta.next_cursor == '': 6796 break 6797 req.meta.cursor = plumbing_response.meta.next_cursor 6798 6799 return generator(self, req)
Lists existing workflow approvers.
6802class SnapshotWorkflowApprovers: 6803 ''' 6804 SnapshotWorkflowApprovers exposes the read only methods of the WorkflowApprovers 6805 service for historical queries. 6806 ''' 6807 def __init__(self, workflow_approvers): 6808 self.workflow_approvers = workflow_approvers 6809 6810 def get(self, id, timeout=None): 6811 ''' 6812 Get reads one workflow approver by ID. 6813 ''' 6814 return self.workflow_approvers.get(id, timeout=timeout) 6815 6816 def list(self, filter, *args, timeout=None): 6817 ''' 6818 Lists existing workflow approvers. 6819 ''' 6820 return self.workflow_approvers.list(filter, *args, timeout=timeout)
SnapshotWorkflowApprovers exposes the read only methods of the WorkflowApprovers service for historical queries.
6823class WorkflowApproversHistory: 6824 ''' 6825 WorkflowApproversHistory provides records of all changes to the state of a WorkflowApprover. 6826 See `strongdm.models.WorkflowApproverHistory`. 6827 ''' 6828 def __init__(self, channel, client): 6829 self.parent = client 6830 self.stub = WorkflowApproversHistoryStub(channel) 6831 6832 def list(self, filter, *args, timeout=None): 6833 ''' 6834 List gets a list of WorkflowApproversHistory records matching a given set of criteria. 6835 ''' 6836 deadline = None if timeout is None else time.time() + timeout 6837 req = WorkflowApproversHistoryListRequest() 6838 req.meta.CopyFrom(ListRequestMetadata()) 6839 if self.parent.page_limit > 0: 6840 req.meta.limit = self.parent.page_limit 6841 if self.parent.snapshot_datetime is not None: 6842 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6843 6844 req.filter = plumbing.quote_filter_args(filter, *args) 6845 6846 def generator(svc, req): 6847 tries = 0 6848 while True: 6849 t = None if deadline is None else deadline - time.time() 6850 try: 6851 plumbing_response = svc.stub.List( 6852 req, 6853 metadata=svc.parent.get_metadata( 6854 'WorkflowApproversHistory.List', req), 6855 timeout=t) 6856 except Exception as e: 6857 if self.parent.shouldRetry(tries, e, deadline): 6858 tries += 1 6859 time.sleep( 6860 self.parent.exponentialBackoff(tries, deadline)) 6861 continue 6862 raise plumbing.convert_error_to_porcelain(e) from e 6863 tries = 0 6864 for plumbing_item in plumbing_response.history: 6865 yield plumbing.convert_workflow_approver_history_to_porcelain( 6866 plumbing_item) 6867 if plumbing_response.meta.next_cursor == '': 6868 break 6869 req.meta.cursor = plumbing_response.meta.next_cursor 6870 6871 return generator(self, req)
WorkflowApproversHistory provides records of all changes to the state of a WorkflowApprover.
See strongdm.models.WorkflowApproverHistory
.
6832 def list(self, filter, *args, timeout=None): 6833 ''' 6834 List gets a list of WorkflowApproversHistory records matching a given set of criteria. 6835 ''' 6836 deadline = None if timeout is None else time.time() + timeout 6837 req = WorkflowApproversHistoryListRequest() 6838 req.meta.CopyFrom(ListRequestMetadata()) 6839 if self.parent.page_limit > 0: 6840 req.meta.limit = self.parent.page_limit 6841 if self.parent.snapshot_datetime is not None: 6842 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6843 6844 req.filter = plumbing.quote_filter_args(filter, *args) 6845 6846 def generator(svc, req): 6847 tries = 0 6848 while True: 6849 t = None if deadline is None else deadline - time.time() 6850 try: 6851 plumbing_response = svc.stub.List( 6852 req, 6853 metadata=svc.parent.get_metadata( 6854 'WorkflowApproversHistory.List', req), 6855 timeout=t) 6856 except Exception as e: 6857 if self.parent.shouldRetry(tries, e, deadline): 6858 tries += 1 6859 time.sleep( 6860 self.parent.exponentialBackoff(tries, deadline)) 6861 continue 6862 raise plumbing.convert_error_to_porcelain(e) from e 6863 tries = 0 6864 for plumbing_item in plumbing_response.history: 6865 yield plumbing.convert_workflow_approver_history_to_porcelain( 6866 plumbing_item) 6867 if plumbing_response.meta.next_cursor == '': 6868 break 6869 req.meta.cursor = plumbing_response.meta.next_cursor 6870 6871 return generator(self, req)
List gets a list of WorkflowApproversHistory records matching a given set of criteria.
6874class WorkflowRoles: 6875 ''' 6876 WorkflowRole links a role to a workflow. The linked roles indicate which roles a user must be a part of 6877 to request access to a resource via the workflow. 6878 See `strongdm.models.WorkflowRole`. 6879 ''' 6880 def __init__(self, channel, client): 6881 self.parent = client 6882 self.stub = WorkflowRolesStub(channel) 6883 6884 def create(self, workflow_role, timeout=None): 6885 ''' 6886 Create creates a new workflow role 6887 ''' 6888 deadline = None if timeout is None else time.time() + timeout 6889 req = WorkflowRolesCreateRequest() 6890 6891 if workflow_role is not None: 6892 req.workflow_role.CopyFrom( 6893 plumbing.convert_workflow_role_to_plumbing(workflow_role)) 6894 tries = 0 6895 plumbing_response = None 6896 while True: 6897 t = None if deadline is None else deadline - time.time() 6898 try: 6899 plumbing_response = self.stub.Create( 6900 req, 6901 metadata=self.parent.get_metadata('WorkflowRoles.Create', 6902 req), 6903 timeout=t) 6904 except Exception as e: 6905 if self.parent.shouldRetry(tries, e, deadline): 6906 tries += 1 6907 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6908 continue 6909 raise plumbing.convert_error_to_porcelain(e) from e 6910 break 6911 6912 resp = models.WorkflowRolesCreateResponse() 6913 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6914 plumbing_response.rate_limit) 6915 resp.workflow_role = plumbing.convert_workflow_role_to_porcelain( 6916 plumbing_response.workflow_role) 6917 return resp 6918 6919 def get(self, id, timeout=None): 6920 ''' 6921 Get reads one workflow role by ID. 6922 ''' 6923 deadline = None if timeout is None else time.time() + timeout 6924 req = WorkflowRoleGetRequest() 6925 if self.parent.snapshot_datetime is not None: 6926 req.meta.CopyFrom(GetRequestMetadata()) 6927 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6928 6929 req.id = (id) 6930 tries = 0 6931 plumbing_response = None 6932 while True: 6933 t = None if deadline is None else deadline - time.time() 6934 try: 6935 plumbing_response = self.stub.Get( 6936 req, 6937 metadata=self.parent.get_metadata('WorkflowRoles.Get', 6938 req), 6939 timeout=t) 6940 except Exception as e: 6941 if self.parent.shouldRetry(tries, e, deadline): 6942 tries += 1 6943 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6944 continue 6945 raise plumbing.convert_error_to_porcelain(e) from e 6946 break 6947 6948 resp = models.WorkflowRoleGetResponse() 6949 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6950 plumbing_response.meta) 6951 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6952 plumbing_response.rate_limit) 6953 resp.workflow_role = plumbing.convert_workflow_role_to_porcelain( 6954 plumbing_response.workflow_role) 6955 return resp 6956 6957 def delete(self, id, timeout=None): 6958 ''' 6959 Delete deletes a workflow role 6960 ''' 6961 deadline = None if timeout is None else time.time() + timeout 6962 req = WorkflowRolesDeleteRequest() 6963 6964 req.id = (id) 6965 tries = 0 6966 plumbing_response = None 6967 while True: 6968 t = None if deadline is None else deadline - time.time() 6969 try: 6970 plumbing_response = self.stub.Delete( 6971 req, 6972 metadata=self.parent.get_metadata('WorkflowRoles.Delete', 6973 req), 6974 timeout=t) 6975 except Exception as e: 6976 if self.parent.shouldRetry(tries, e, deadline): 6977 tries += 1 6978 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6979 continue 6980 raise plumbing.convert_error_to_porcelain(e) from e 6981 break 6982 6983 resp = models.WorkflowRolesDeleteResponse() 6984 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6985 plumbing_response.rate_limit) 6986 return resp 6987 6988 def list(self, filter, *args, timeout=None): 6989 ''' 6990 Lists existing workflow roles. 6991 ''' 6992 deadline = None if timeout is None else time.time() + timeout 6993 req = WorkflowRolesListRequest() 6994 req.meta.CopyFrom(ListRequestMetadata()) 6995 if self.parent.page_limit > 0: 6996 req.meta.limit = self.parent.page_limit 6997 if self.parent.snapshot_datetime is not None: 6998 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6999 7000 req.filter = plumbing.quote_filter_args(filter, *args) 7001 7002 def generator(svc, req): 7003 tries = 0 7004 while True: 7005 t = None if deadline is None else deadline - time.time() 7006 try: 7007 plumbing_response = svc.stub.List( 7008 req, 7009 metadata=svc.parent.get_metadata( 7010 'WorkflowRoles.List', req), 7011 timeout=t) 7012 except Exception as e: 7013 if self.parent.shouldRetry(tries, e, deadline): 7014 tries += 1 7015 time.sleep( 7016 self.parent.exponentialBackoff(tries, deadline)) 7017 continue 7018 raise plumbing.convert_error_to_porcelain(e) from e 7019 tries = 0 7020 for plumbing_item in plumbing_response.workflow_role: 7021 yield plumbing.convert_workflow_role_to_porcelain( 7022 plumbing_item) 7023 if plumbing_response.meta.next_cursor == '': 7024 break 7025 req.meta.cursor = plumbing_response.meta.next_cursor 7026 7027 return generator(self, req)
WorkflowRole links a role to a workflow. The linked roles indicate which roles a user must be a part of
to request access to a resource via the workflow.
See strongdm.models.WorkflowRole
.
6884 def create(self, workflow_role, timeout=None): 6885 ''' 6886 Create creates a new workflow role 6887 ''' 6888 deadline = None if timeout is None else time.time() + timeout 6889 req = WorkflowRolesCreateRequest() 6890 6891 if workflow_role is not None: 6892 req.workflow_role.CopyFrom( 6893 plumbing.convert_workflow_role_to_plumbing(workflow_role)) 6894 tries = 0 6895 plumbing_response = None 6896 while True: 6897 t = None if deadline is None else deadline - time.time() 6898 try: 6899 plumbing_response = self.stub.Create( 6900 req, 6901 metadata=self.parent.get_metadata('WorkflowRoles.Create', 6902 req), 6903 timeout=t) 6904 except Exception as e: 6905 if self.parent.shouldRetry(tries, e, deadline): 6906 tries += 1 6907 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6908 continue 6909 raise plumbing.convert_error_to_porcelain(e) from e 6910 break 6911 6912 resp = models.WorkflowRolesCreateResponse() 6913 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6914 plumbing_response.rate_limit) 6915 resp.workflow_role = plumbing.convert_workflow_role_to_porcelain( 6916 plumbing_response.workflow_role) 6917 return resp
Create creates a new workflow role
6919 def get(self, id, timeout=None): 6920 ''' 6921 Get reads one workflow role by ID. 6922 ''' 6923 deadline = None if timeout is None else time.time() + timeout 6924 req = WorkflowRoleGetRequest() 6925 if self.parent.snapshot_datetime is not None: 6926 req.meta.CopyFrom(GetRequestMetadata()) 6927 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6928 6929 req.id = (id) 6930 tries = 0 6931 plumbing_response = None 6932 while True: 6933 t = None if deadline is None else deadline - time.time() 6934 try: 6935 plumbing_response = self.stub.Get( 6936 req, 6937 metadata=self.parent.get_metadata('WorkflowRoles.Get', 6938 req), 6939 timeout=t) 6940 except Exception as e: 6941 if self.parent.shouldRetry(tries, e, deadline): 6942 tries += 1 6943 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6944 continue 6945 raise plumbing.convert_error_to_porcelain(e) from e 6946 break 6947 6948 resp = models.WorkflowRoleGetResponse() 6949 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 6950 plumbing_response.meta) 6951 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6952 plumbing_response.rate_limit) 6953 resp.workflow_role = plumbing.convert_workflow_role_to_porcelain( 6954 plumbing_response.workflow_role) 6955 return resp
Get reads one workflow role by ID.
6957 def delete(self, id, timeout=None): 6958 ''' 6959 Delete deletes a workflow role 6960 ''' 6961 deadline = None if timeout is None else time.time() + timeout 6962 req = WorkflowRolesDeleteRequest() 6963 6964 req.id = (id) 6965 tries = 0 6966 plumbing_response = None 6967 while True: 6968 t = None if deadline is None else deadline - time.time() 6969 try: 6970 plumbing_response = self.stub.Delete( 6971 req, 6972 metadata=self.parent.get_metadata('WorkflowRoles.Delete', 6973 req), 6974 timeout=t) 6975 except Exception as e: 6976 if self.parent.shouldRetry(tries, e, deadline): 6977 tries += 1 6978 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 6979 continue 6980 raise plumbing.convert_error_to_porcelain(e) from e 6981 break 6982 6983 resp = models.WorkflowRolesDeleteResponse() 6984 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 6985 plumbing_response.rate_limit) 6986 return resp
Delete deletes a workflow role
6988 def list(self, filter, *args, timeout=None): 6989 ''' 6990 Lists existing workflow roles. 6991 ''' 6992 deadline = None if timeout is None else time.time() + timeout 6993 req = WorkflowRolesListRequest() 6994 req.meta.CopyFrom(ListRequestMetadata()) 6995 if self.parent.page_limit > 0: 6996 req.meta.limit = self.parent.page_limit 6997 if self.parent.snapshot_datetime is not None: 6998 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 6999 7000 req.filter = plumbing.quote_filter_args(filter, *args) 7001 7002 def generator(svc, req): 7003 tries = 0 7004 while True: 7005 t = None if deadline is None else deadline - time.time() 7006 try: 7007 plumbing_response = svc.stub.List( 7008 req, 7009 metadata=svc.parent.get_metadata( 7010 'WorkflowRoles.List', req), 7011 timeout=t) 7012 except Exception as e: 7013 if self.parent.shouldRetry(tries, e, deadline): 7014 tries += 1 7015 time.sleep( 7016 self.parent.exponentialBackoff(tries, deadline)) 7017 continue 7018 raise plumbing.convert_error_to_porcelain(e) from e 7019 tries = 0 7020 for plumbing_item in plumbing_response.workflow_role: 7021 yield plumbing.convert_workflow_role_to_porcelain( 7022 plumbing_item) 7023 if plumbing_response.meta.next_cursor == '': 7024 break 7025 req.meta.cursor = plumbing_response.meta.next_cursor 7026 7027 return generator(self, req)
Lists existing workflow roles.
7030class SnapshotWorkflowRoles: 7031 ''' 7032 SnapshotWorkflowRoles exposes the read only methods of the WorkflowRoles 7033 service for historical queries. 7034 ''' 7035 def __init__(self, workflow_roles): 7036 self.workflow_roles = workflow_roles 7037 7038 def get(self, id, timeout=None): 7039 ''' 7040 Get reads one workflow role by ID. 7041 ''' 7042 return self.workflow_roles.get(id, timeout=timeout) 7043 7044 def list(self, filter, *args, timeout=None): 7045 ''' 7046 Lists existing workflow roles. 7047 ''' 7048 return self.workflow_roles.list(filter, *args, timeout=timeout)
SnapshotWorkflowRoles exposes the read only methods of the WorkflowRoles service for historical queries.
7051class WorkflowRolesHistory: 7052 ''' 7053 WorkflowRolesHistory provides records of all changes to the state of a WorkflowRole 7054 See `strongdm.models.WorkflowRoleHistory`. 7055 ''' 7056 def __init__(self, channel, client): 7057 self.parent = client 7058 self.stub = WorkflowRolesHistoryStub(channel) 7059 7060 def list(self, filter, *args, timeout=None): 7061 ''' 7062 List gets a list of WorkflowRolesHistory records matching a given set of criteria. 7063 ''' 7064 deadline = None if timeout is None else time.time() + timeout 7065 req = WorkflowRolesHistoryListRequest() 7066 req.meta.CopyFrom(ListRequestMetadata()) 7067 if self.parent.page_limit > 0: 7068 req.meta.limit = self.parent.page_limit 7069 if self.parent.snapshot_datetime is not None: 7070 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7071 7072 req.filter = plumbing.quote_filter_args(filter, *args) 7073 7074 def generator(svc, req): 7075 tries = 0 7076 while True: 7077 t = None if deadline is None else deadline - time.time() 7078 try: 7079 plumbing_response = svc.stub.List( 7080 req, 7081 metadata=svc.parent.get_metadata( 7082 'WorkflowRolesHistory.List', req), 7083 timeout=t) 7084 except Exception as e: 7085 if self.parent.shouldRetry(tries, e, deadline): 7086 tries += 1 7087 time.sleep( 7088 self.parent.exponentialBackoff(tries, deadline)) 7089 continue 7090 raise plumbing.convert_error_to_porcelain(e) from e 7091 tries = 0 7092 for plumbing_item in plumbing_response.history: 7093 yield plumbing.convert_workflow_role_history_to_porcelain( 7094 plumbing_item) 7095 if plumbing_response.meta.next_cursor == '': 7096 break 7097 req.meta.cursor = plumbing_response.meta.next_cursor 7098 7099 return generator(self, req)
WorkflowRolesHistory provides records of all changes to the state of a WorkflowRole
See strongdm.models.WorkflowRoleHistory
.
7060 def list(self, filter, *args, timeout=None): 7061 ''' 7062 List gets a list of WorkflowRolesHistory records matching a given set of criteria. 7063 ''' 7064 deadline = None if timeout is None else time.time() + timeout 7065 req = WorkflowRolesHistoryListRequest() 7066 req.meta.CopyFrom(ListRequestMetadata()) 7067 if self.parent.page_limit > 0: 7068 req.meta.limit = self.parent.page_limit 7069 if self.parent.snapshot_datetime is not None: 7070 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7071 7072 req.filter = plumbing.quote_filter_args(filter, *args) 7073 7074 def generator(svc, req): 7075 tries = 0 7076 while True: 7077 t = None if deadline is None else deadline - time.time() 7078 try: 7079 plumbing_response = svc.stub.List( 7080 req, 7081 metadata=svc.parent.get_metadata( 7082 'WorkflowRolesHistory.List', req), 7083 timeout=t) 7084 except Exception as e: 7085 if self.parent.shouldRetry(tries, e, deadline): 7086 tries += 1 7087 time.sleep( 7088 self.parent.exponentialBackoff(tries, deadline)) 7089 continue 7090 raise plumbing.convert_error_to_porcelain(e) from e 7091 tries = 0 7092 for plumbing_item in plumbing_response.history: 7093 yield plumbing.convert_workflow_role_history_to_porcelain( 7094 plumbing_item) 7095 if plumbing_response.meta.next_cursor == '': 7096 break 7097 req.meta.cursor = plumbing_response.meta.next_cursor 7098 7099 return generator(self, req)
List gets a list of WorkflowRolesHistory records matching a given set of criteria.
7102class Workflows: 7103 ''' 7104 Workflows are the collection of rules that define the resources to which access can be requested, 7105 the users that can request that access, and the mechanism for approving those requests which can either 7106 be automatic approval or a set of users authorized to approve the requests. 7107 See `strongdm.models.Workflow`. 7108 ''' 7109 def __init__(self, channel, client): 7110 self.parent = client 7111 self.stub = WorkflowsStub(channel) 7112 7113 def create(self, workflow, timeout=None): 7114 ''' 7115 Create creates a new workflow and requires a name for the workflow. 7116 ''' 7117 deadline = None if timeout is None else time.time() + timeout 7118 req = WorkflowCreateRequest() 7119 7120 if workflow is not None: 7121 req.workflow.CopyFrom( 7122 plumbing.convert_workflow_to_plumbing(workflow)) 7123 tries = 0 7124 plumbing_response = None 7125 while True: 7126 t = None if deadline is None else deadline - time.time() 7127 try: 7128 plumbing_response = self.stub.Create( 7129 req, 7130 metadata=self.parent.get_metadata('Workflows.Create', req), 7131 timeout=t) 7132 except Exception as e: 7133 if self.parent.shouldRetry(tries, e, deadline): 7134 tries += 1 7135 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7136 continue 7137 raise plumbing.convert_error_to_porcelain(e) from e 7138 break 7139 7140 resp = models.WorkflowCreateResponse() 7141 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7142 plumbing_response.rate_limit) 7143 resp.workflow = plumbing.convert_workflow_to_porcelain( 7144 plumbing_response.workflow) 7145 return resp 7146 7147 def get(self, id, timeout=None): 7148 ''' 7149 Get reads one workflow by ID. 7150 ''' 7151 deadline = None if timeout is None else time.time() + timeout 7152 req = WorkflowGetRequest() 7153 if self.parent.snapshot_datetime is not None: 7154 req.meta.CopyFrom(GetRequestMetadata()) 7155 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7156 7157 req.id = (id) 7158 tries = 0 7159 plumbing_response = None 7160 while True: 7161 t = None if deadline is None else deadline - time.time() 7162 try: 7163 plumbing_response = self.stub.Get( 7164 req, 7165 metadata=self.parent.get_metadata('Workflows.Get', req), 7166 timeout=t) 7167 except Exception as e: 7168 if self.parent.shouldRetry(tries, e, deadline): 7169 tries += 1 7170 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7171 continue 7172 raise plumbing.convert_error_to_porcelain(e) from e 7173 break 7174 7175 resp = models.WorkflowGetResponse() 7176 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 7177 plumbing_response.meta) 7178 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7179 plumbing_response.rate_limit) 7180 resp.workflow = plumbing.convert_workflow_to_porcelain( 7181 plumbing_response.workflow) 7182 return resp 7183 7184 def delete(self, id, timeout=None): 7185 ''' 7186 Delete deletes an existing workflow. 7187 ''' 7188 deadline = None if timeout is None else time.time() + timeout 7189 req = WorkflowDeleteRequest() 7190 7191 req.id = (id) 7192 tries = 0 7193 plumbing_response = None 7194 while True: 7195 t = None if deadline is None else deadline - time.time() 7196 try: 7197 plumbing_response = self.stub.Delete( 7198 req, 7199 metadata=self.parent.get_metadata('Workflows.Delete', req), 7200 timeout=t) 7201 except Exception as e: 7202 if self.parent.shouldRetry(tries, e, deadline): 7203 tries += 1 7204 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7205 continue 7206 raise plumbing.convert_error_to_porcelain(e) from e 7207 break 7208 7209 resp = models.WorkflowDeleteResponse() 7210 resp.id = (plumbing_response.id) 7211 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7212 plumbing_response.rate_limit) 7213 return resp 7214 7215 def update(self, workflow, timeout=None): 7216 ''' 7217 Update updates an existing workflow. 7218 ''' 7219 deadline = None if timeout is None else time.time() + timeout 7220 req = WorkflowUpdateRequest() 7221 7222 if workflow is not None: 7223 req.workflow.CopyFrom( 7224 plumbing.convert_workflow_to_plumbing(workflow)) 7225 tries = 0 7226 plumbing_response = None 7227 while True: 7228 t = None if deadline is None else deadline - time.time() 7229 try: 7230 plumbing_response = self.stub.Update( 7231 req, 7232 metadata=self.parent.get_metadata('Workflows.Update', req), 7233 timeout=t) 7234 except Exception as e: 7235 if self.parent.shouldRetry(tries, e, deadline): 7236 tries += 1 7237 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7238 continue 7239 raise plumbing.convert_error_to_porcelain(e) from e 7240 break 7241 7242 resp = models.WorkflowUpdateResponse() 7243 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7244 plumbing_response.rate_limit) 7245 resp.workflow = plumbing.convert_workflow_to_porcelain( 7246 plumbing_response.workflow) 7247 return resp 7248 7249 def list(self, filter, *args, timeout=None): 7250 ''' 7251 Lists existing workflows. 7252 ''' 7253 deadline = None if timeout is None else time.time() + timeout 7254 req = WorkflowListRequest() 7255 req.meta.CopyFrom(ListRequestMetadata()) 7256 if self.parent.page_limit > 0: 7257 req.meta.limit = self.parent.page_limit 7258 if self.parent.snapshot_datetime is not None: 7259 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7260 7261 req.filter = plumbing.quote_filter_args(filter, *args) 7262 7263 def generator(svc, req): 7264 tries = 0 7265 while True: 7266 t = None if deadline is None else deadline - time.time() 7267 try: 7268 plumbing_response = svc.stub.List( 7269 req, 7270 metadata=svc.parent.get_metadata( 7271 'Workflows.List', req), 7272 timeout=t) 7273 except Exception as e: 7274 if self.parent.shouldRetry(tries, e, deadline): 7275 tries += 1 7276 time.sleep( 7277 self.parent.exponentialBackoff(tries, deadline)) 7278 continue 7279 raise plumbing.convert_error_to_porcelain(e) from e 7280 tries = 0 7281 for plumbing_item in plumbing_response.workflows: 7282 yield plumbing.convert_workflow_to_porcelain(plumbing_item) 7283 if plumbing_response.meta.next_cursor == '': 7284 break 7285 req.meta.cursor = plumbing_response.meta.next_cursor 7286 7287 return generator(self, req)
Workflows are the collection of rules that define the resources to which access can be requested,
the users that can request that access, and the mechanism for approving those requests which can either
be automatic approval or a set of users authorized to approve the requests.
See strongdm.models.Workflow
.
7113 def create(self, workflow, timeout=None): 7114 ''' 7115 Create creates a new workflow and requires a name for the workflow. 7116 ''' 7117 deadline = None if timeout is None else time.time() + timeout 7118 req = WorkflowCreateRequest() 7119 7120 if workflow is not None: 7121 req.workflow.CopyFrom( 7122 plumbing.convert_workflow_to_plumbing(workflow)) 7123 tries = 0 7124 plumbing_response = None 7125 while True: 7126 t = None if deadline is None else deadline - time.time() 7127 try: 7128 plumbing_response = self.stub.Create( 7129 req, 7130 metadata=self.parent.get_metadata('Workflows.Create', req), 7131 timeout=t) 7132 except Exception as e: 7133 if self.parent.shouldRetry(tries, e, deadline): 7134 tries += 1 7135 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7136 continue 7137 raise plumbing.convert_error_to_porcelain(e) from e 7138 break 7139 7140 resp = models.WorkflowCreateResponse() 7141 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7142 plumbing_response.rate_limit) 7143 resp.workflow = plumbing.convert_workflow_to_porcelain( 7144 plumbing_response.workflow) 7145 return resp
Create creates a new workflow and requires a name for the workflow.
7147 def get(self, id, timeout=None): 7148 ''' 7149 Get reads one workflow by ID. 7150 ''' 7151 deadline = None if timeout is None else time.time() + timeout 7152 req = WorkflowGetRequest() 7153 if self.parent.snapshot_datetime is not None: 7154 req.meta.CopyFrom(GetRequestMetadata()) 7155 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7156 7157 req.id = (id) 7158 tries = 0 7159 plumbing_response = None 7160 while True: 7161 t = None if deadline is None else deadline - time.time() 7162 try: 7163 plumbing_response = self.stub.Get( 7164 req, 7165 metadata=self.parent.get_metadata('Workflows.Get', req), 7166 timeout=t) 7167 except Exception as e: 7168 if self.parent.shouldRetry(tries, e, deadline): 7169 tries += 1 7170 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7171 continue 7172 raise plumbing.convert_error_to_porcelain(e) from e 7173 break 7174 7175 resp = models.WorkflowGetResponse() 7176 resp.meta = plumbing.convert_get_response_metadata_to_porcelain( 7177 plumbing_response.meta) 7178 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7179 plumbing_response.rate_limit) 7180 resp.workflow = plumbing.convert_workflow_to_porcelain( 7181 plumbing_response.workflow) 7182 return resp
Get reads one workflow by ID.
7184 def delete(self, id, timeout=None): 7185 ''' 7186 Delete deletes an existing workflow. 7187 ''' 7188 deadline = None if timeout is None else time.time() + timeout 7189 req = WorkflowDeleteRequest() 7190 7191 req.id = (id) 7192 tries = 0 7193 plumbing_response = None 7194 while True: 7195 t = None if deadline is None else deadline - time.time() 7196 try: 7197 plumbing_response = self.stub.Delete( 7198 req, 7199 metadata=self.parent.get_metadata('Workflows.Delete', req), 7200 timeout=t) 7201 except Exception as e: 7202 if self.parent.shouldRetry(tries, e, deadline): 7203 tries += 1 7204 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7205 continue 7206 raise plumbing.convert_error_to_porcelain(e) from e 7207 break 7208 7209 resp = models.WorkflowDeleteResponse() 7210 resp.id = (plumbing_response.id) 7211 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7212 plumbing_response.rate_limit) 7213 return resp
Delete deletes an existing workflow.
7215 def update(self, workflow, timeout=None): 7216 ''' 7217 Update updates an existing workflow. 7218 ''' 7219 deadline = None if timeout is None else time.time() + timeout 7220 req = WorkflowUpdateRequest() 7221 7222 if workflow is not None: 7223 req.workflow.CopyFrom( 7224 plumbing.convert_workflow_to_plumbing(workflow)) 7225 tries = 0 7226 plumbing_response = None 7227 while True: 7228 t = None if deadline is None else deadline - time.time() 7229 try: 7230 plumbing_response = self.stub.Update( 7231 req, 7232 metadata=self.parent.get_metadata('Workflows.Update', req), 7233 timeout=t) 7234 except Exception as e: 7235 if self.parent.shouldRetry(tries, e, deadline): 7236 tries += 1 7237 time.sleep(self.parent.exponentialBackoff(tries, deadline)) 7238 continue 7239 raise plumbing.convert_error_to_porcelain(e) from e 7240 break 7241 7242 resp = models.WorkflowUpdateResponse() 7243 resp.rate_limit = plumbing.convert_rate_limit_metadata_to_porcelain( 7244 plumbing_response.rate_limit) 7245 resp.workflow = plumbing.convert_workflow_to_porcelain( 7246 plumbing_response.workflow) 7247 return resp
Update updates an existing workflow.
7249 def list(self, filter, *args, timeout=None): 7250 ''' 7251 Lists existing workflows. 7252 ''' 7253 deadline = None if timeout is None else time.time() + timeout 7254 req = WorkflowListRequest() 7255 req.meta.CopyFrom(ListRequestMetadata()) 7256 if self.parent.page_limit > 0: 7257 req.meta.limit = self.parent.page_limit 7258 if self.parent.snapshot_datetime is not None: 7259 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7260 7261 req.filter = plumbing.quote_filter_args(filter, *args) 7262 7263 def generator(svc, req): 7264 tries = 0 7265 while True: 7266 t = None if deadline is None else deadline - time.time() 7267 try: 7268 plumbing_response = svc.stub.List( 7269 req, 7270 metadata=svc.parent.get_metadata( 7271 'Workflows.List', req), 7272 timeout=t) 7273 except Exception as e: 7274 if self.parent.shouldRetry(tries, e, deadline): 7275 tries += 1 7276 time.sleep( 7277 self.parent.exponentialBackoff(tries, deadline)) 7278 continue 7279 raise plumbing.convert_error_to_porcelain(e) from e 7280 tries = 0 7281 for plumbing_item in plumbing_response.workflows: 7282 yield plumbing.convert_workflow_to_porcelain(plumbing_item) 7283 if plumbing_response.meta.next_cursor == '': 7284 break 7285 req.meta.cursor = plumbing_response.meta.next_cursor 7286 7287 return generator(self, req)
Lists existing workflows.
7290class SnapshotWorkflows: 7291 ''' 7292 SnapshotWorkflows exposes the read only methods of the Workflows 7293 service for historical queries. 7294 ''' 7295 def __init__(self, workflows): 7296 self.workflows = workflows 7297 7298 def get(self, id, timeout=None): 7299 ''' 7300 Get reads one workflow by ID. 7301 ''' 7302 return self.workflows.get(id, timeout=timeout) 7303 7304 def list(self, filter, *args, timeout=None): 7305 ''' 7306 Lists existing workflows. 7307 ''' 7308 return self.workflows.list(filter, *args, timeout=timeout)
SnapshotWorkflows exposes the read only methods of the Workflows service for historical queries.
7311class WorkflowsHistory: 7312 ''' 7313 WorkflowsHistory provides records of all changes to the state of a Workflow. 7314 See `strongdm.models.WorkflowHistory`. 7315 ''' 7316 def __init__(self, channel, client): 7317 self.parent = client 7318 self.stub = WorkflowsHistoryStub(channel) 7319 7320 def list(self, filter, *args, timeout=None): 7321 ''' 7322 List gets a list of WorkflowHistory records matching a given set of criteria. 7323 ''' 7324 deadline = None if timeout is None else time.time() + timeout 7325 req = WorkflowHistoryListRequest() 7326 req.meta.CopyFrom(ListRequestMetadata()) 7327 if self.parent.page_limit > 0: 7328 req.meta.limit = self.parent.page_limit 7329 if self.parent.snapshot_datetime is not None: 7330 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7331 7332 req.filter = plumbing.quote_filter_args(filter, *args) 7333 7334 def generator(svc, req): 7335 tries = 0 7336 while True: 7337 t = None if deadline is None else deadline - time.time() 7338 try: 7339 plumbing_response = svc.stub.List( 7340 req, 7341 metadata=svc.parent.get_metadata( 7342 'WorkflowsHistory.List', req), 7343 timeout=t) 7344 except Exception as e: 7345 if self.parent.shouldRetry(tries, e, deadline): 7346 tries += 1 7347 time.sleep( 7348 self.parent.exponentialBackoff(tries, deadline)) 7349 continue 7350 raise plumbing.convert_error_to_porcelain(e) from e 7351 tries = 0 7352 for plumbing_item in plumbing_response.history: 7353 yield plumbing.convert_workflow_history_to_porcelain( 7354 plumbing_item) 7355 if plumbing_response.meta.next_cursor == '': 7356 break 7357 req.meta.cursor = plumbing_response.meta.next_cursor 7358 7359 return generator(self, req)
WorkflowsHistory provides records of all changes to the state of a Workflow.
See strongdm.models.WorkflowHistory
.
7320 def list(self, filter, *args, timeout=None): 7321 ''' 7322 List gets a list of WorkflowHistory records matching a given set of criteria. 7323 ''' 7324 deadline = None if timeout is None else time.time() + timeout 7325 req = WorkflowHistoryListRequest() 7326 req.meta.CopyFrom(ListRequestMetadata()) 7327 if self.parent.page_limit > 0: 7328 req.meta.limit = self.parent.page_limit 7329 if self.parent.snapshot_datetime is not None: 7330 req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime) 7331 7332 req.filter = plumbing.quote_filter_args(filter, *args) 7333 7334 def generator(svc, req): 7335 tries = 0 7336 while True: 7337 t = None if deadline is None else deadline - time.time() 7338 try: 7339 plumbing_response = svc.stub.List( 7340 req, 7341 metadata=svc.parent.get_metadata( 7342 'WorkflowsHistory.List', req), 7343 timeout=t) 7344 except Exception as e: 7345 if self.parent.shouldRetry(tries, e, deadline): 7346 tries += 1 7347 time.sleep( 7348 self.parent.exponentialBackoff(tries, deadline)) 7349 continue 7350 raise plumbing.convert_error_to_porcelain(e) from e 7351 tries = 0 7352 for plumbing_item in plumbing_response.history: 7353 yield plumbing.convert_workflow_history_to_porcelain( 7354 plumbing_item) 7355 if plumbing_response.meta.next_cursor == '': 7356 break 7357 req.meta.cursor = plumbing_response.meta.next_cursor 7358 7359 return generator(self, req)
List gets a list of WorkflowHistory records matching a given set of criteria.