Class: SDM::Resources

Inherits:
Object
  • Object
show all
Extended by:
Gem::Deprecate
Defined in:
lib/svc.rb

Overview

Resources are databases, servers, clusters, websites, or clouds that strongDM delegates access to.

See: Aerospike AKS AKSBasicAuth AKSServiceAccount AKSServiceAccountUserImpersonation AKSUserImpersonation AmazonEKS AmazonEKSInstanceProfile AmazonEKSInstanceProfileUserImpersonation AmazonEKSUserImpersonation AmazonES AmazonESIAM AmazonMQAMQP091 AMQP Athena AthenaIAM AuroraMysql AuroraMysqlIAM AuroraPostgres AuroraPostgresIAM AWS AWSConsole AWSConsoleStaticKeyPair AWSInstanceProfile Azure AzureCertificate AzureMysql AzureMysqlManagedIdentity AzurePostgres AzurePostgresManagedIdentity BigQuery Cassandra Citus ClickHouseHTTP ClickHouseMySQL ClickHouseTCP Clustrix Cockroach CouchbaseDatabase CouchbaseWebUI Databricks DB2I DB2LUW DocumentDBHost DocumentDBHostIAM DocumentDBReplicaSet DocumentDBReplicaSetIAM Druid DynamoDB DynamoDBIAM Elastic ElasticacheRedis ElasticacheRedisIAM EntraID GCP GCPConsole GCPWIF GoogleGKE GoogleGKEUserImpersonation GoogleSpanner Greenplum HTTPAuth HTTPBasicAuth HTTPNoAuth Kubernetes KubernetesBasicAuth KubernetesPodIdentity KubernetesServiceAccount KubernetesServiceAccountUserImpersonation KubernetesUserImpersonation LLM Maria MCPGatewayNoAuth MCPGatewayOAuth MCPGatewayOAuthDCR MCPGatewayPAT Memcached Memsql MongoHost MongoLegacyHost MongoLegacyReplicaset MongoReplicaSet MongoShardedCluster MTLSMysql MTLSPostgres Mysql Neptune NeptuneIAM OktaGroups Oracle OracleNNE Postgres Presto RabbitMQAMQP091 RawTCP RDP RDPCert RDSPostgresIAM Redis RedisCluster Redshift RedshiftIAM RedshiftServerlessIAM SingleStore Snowflake Snowsight SQLServer SQLServerAzureAD SQLServerKerberosAD SSH SSHCert SSHCustomerKey SSHPassword Sybase SybaseIQ Teradata Trino Vertica

Instance Method Summary collapse

Constructor Details

#initialize(channel, parent) ⇒ Resources

Returns a new instance of Resources.



7463
7464
7465
7466
7467
7468
7469
7470
# File 'lib/svc.rb', line 7463

def initialize(channel, parent)
  begin
    @stub = V1::Resources::Stub.new(nil, nil, channel_override: channel)
  rescue => exception
    raise Plumbing::convert_error_to_porcelain(exception)
  end
  @parent = parent
end

Instance Method Details

#create(resource, deadline: nil) ⇒ Object

Create registers a new Resource.



7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
# File 'lib/svc.rb', line 7512

def create(
  resource,
  deadline: nil
)
  req = V1::ResourceCreateRequest.new()

  req.resource = Plumbing::convert_resource_to_plumbing(resource)
  # Execute before interceptor hooks
  req = @parent.interceptor.execute_before("Resources.Create", self, req)
  tries = 0
  plumbing_response = nil
  loop do
    begin
      plumbing_response = @stub.create(req, metadata: @parent.("Resources.Create", req), deadline: deadline)
    rescue => exception
      if (@parent.shouldRetry(tries, exception, deadline))
        tries + +sleep(@parent.exponentialBackoff(tries, deadline))
        next
      end
      raise Plumbing::convert_error_to_porcelain(exception)
    end
    break
  end

  # Execute after interceptor hooks
  plumbing_response = @parent.interceptor.execute_after("Resources.Create", self, req, plumbing_response)

  resp = ResourceCreateResponse.new()
  resp.meta = Plumbing::(plumbing_response.meta)
  resp.rate_limit = Plumbing::(plumbing_response.rate_limit)
  resp.resource = Plumbing::convert_resource_to_porcelain(plumbing_response.resource)
  resp
end

#delete(id, deadline: nil) ⇒ Object

Delete removes a Resource by ID.



7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
# File 'lib/svc.rb', line 7621

def delete(
  id,
  deadline: nil
)
  req = V1::ResourceDeleteRequest.new()

  req.id = (id)
  # Execute before interceptor hooks
  req = @parent.interceptor.execute_before("Resources.Delete", self, req)
  tries = 0
  plumbing_response = nil
  loop do
    begin
      plumbing_response = @stub.delete(req, metadata: @parent.("Resources.Delete", req), deadline: deadline)
    rescue => exception
      if (@parent.shouldRetry(tries, exception, deadline))
        tries + +sleep(@parent.exponentialBackoff(tries, deadline))
        next
      end
      raise Plumbing::convert_error_to_porcelain(exception)
    end
    break
  end

  # Execute after interceptor hooks
  plumbing_response = @parent.interceptor.execute_after("Resources.Delete", self, req, plumbing_response)

  resp = ResourceDeleteResponse.new()
  resp.meta = Plumbing::(plumbing_response.meta)
  resp.rate_limit = Plumbing::(plumbing_response.rate_limit)
  resp
end

#enumerate_tags(filter, *args, deadline: nil) ⇒ Object

EnumerateTags gets a list of the filter matching tags.



7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
# File 'lib/svc.rb', line 7473

def enumerate_tags(
  filter,
  *args,
  deadline: nil
)
  req = V1::EnumerateTagsRequest.new()
  req.meta = V1::ListRequestMetadata.new()
  if not @parent.page_limit.nil?
    req.meta.limit = @parent.page_limit
  end
  if not @parent.snapshot_time.nil?
    req.meta.snapshot_at = @parent.snapshot_time
  end

  req.filter = Plumbing::quote_filter_args(filter, *args)
  resp = Enumerator::Generator.new { |g|
    tries = 0
    loop do
      begin
        plumbing_response = @stub.enumerate_tags(req, metadata: @parent.("Resources.EnumerateTags", req), deadline: deadline)
      rescue => exception
        if (@parent.shouldRetry(tries, exception, deadline))
          tries + +sleep(@parent.exponentialBackoff(tries, deadline))
          next
        end
        raise Plumbing::convert_error_to_porcelain(exception)
      end
      tries = 0
      plumbing_response.matches.each do |plumbing_item|
        g.yield Plumbing::convert_tag_to_porcelain(plumbing_item)
      end
      break if plumbing_response.meta.next_cursor == ""
      req.meta.cursor = plumbing_response.meta.next_cursor
    end
  }
  resp
end

#get(id, deadline: nil) ⇒ Object

Get reads one Resource by ID.



7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
# File 'lib/svc.rb', line 7547

def get(
  id,
  deadline: nil
)
  req = V1::ResourceGetRequest.new()
  if not @parent.snapshot_time.nil?
    req.meta = V1::GetRequestMetadata.new()
    req.meta.snapshot_at = @parent.snapshot_time
  end

  req.id = (id)
  # Execute before interceptor hooks
  req = @parent.interceptor.execute_before("Resources.Get", self, req)
  tries = 0
  plumbing_response = nil
  loop do
    begin
      plumbing_response = @stub.get(req, metadata: @parent.("Resources.Get", req), deadline: deadline)
    rescue => exception
      if (@parent.shouldRetry(tries, exception, deadline))
        tries + +sleep(@parent.exponentialBackoff(tries, deadline))
        next
      end
      raise Plumbing::convert_error_to_porcelain(exception)
    end
    break
  end

  # Execute after interceptor hooks
  plumbing_response = @parent.interceptor.execute_after("Resources.Get", self, req, plumbing_response)

  resp = ResourceGetResponse.new()
  resp.meta = Plumbing::(plumbing_response.meta)
  resp.rate_limit = Plumbing::(plumbing_response.rate_limit)
  resp.resource = Plumbing::convert_resource_to_porcelain(plumbing_response.resource)
  resp
end

#healthcheck(id, deadline: nil) ⇒ Object

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.



7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
# File 'lib/svc.rb', line 7696

def healthcheck(
  id,
  deadline: nil
)
  req = V1::ResourceHealthcheckRequest.new()

  req.id = (id)
  # Execute before interceptor hooks
  req = @parent.interceptor.execute_before("Resources.Healthcheck", self, req)
  tries = 0
  plumbing_response = nil
  loop do
    begin
      plumbing_response = @stub.healthcheck(req, metadata: @parent.("Resources.Healthcheck", req), deadline: deadline)
    rescue => exception
      if (@parent.shouldRetry(tries, exception, deadline))
        tries + +sleep(@parent.exponentialBackoff(tries, deadline))
        next
      end
      raise Plumbing::convert_error_to_porcelain(exception)
    end
    break
  end

  # Execute after interceptor hooks
  plumbing_response = @parent.interceptor.execute_after("Resources.Healthcheck", self, req, plumbing_response)

  resp = ResourceHealthcheckResponse.new()
  resp.meta = Plumbing::(plumbing_response.meta)
  resp.rate_limit = Plumbing::(plumbing_response.rate_limit)
  resp
end

#list(filter, *args, deadline: nil) ⇒ Object

List gets a list of Resources matching a given set of criteria.



7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
# File 'lib/svc.rb', line 7655

def list(
  filter,
  *args,
  deadline: nil
)
  req = V1::ResourceListRequest.new()
  req.meta = V1::ListRequestMetadata.new()
  if not @parent.page_limit.nil?
    req.meta.limit = @parent.page_limit
  end
  if not @parent.snapshot_time.nil?
    req.meta.snapshot_at = @parent.snapshot_time
  end

  req.filter = Plumbing::quote_filter_args(filter, *args)
  resp = Enumerator::Generator.new { |g|
    tries = 0
    loop do
      begin
        plumbing_response = @stub.list(req, metadata: @parent.("Resources.List", req), deadline: deadline)
      rescue => exception
        if (@parent.shouldRetry(tries, exception, deadline))
          tries + +sleep(@parent.exponentialBackoff(tries, deadline))
          next
        end
        raise Plumbing::convert_error_to_porcelain(exception)
      end
      tries = 0
      plumbing_response.resources.each do |plumbing_item|
        g.yield Plumbing::convert_resource_to_porcelain(plumbing_item)
      end
      break if plumbing_response.meta.next_cursor == ""
      req.meta.cursor = plumbing_response.meta.next_cursor
    end
  }
  resp
end

#update(resource, deadline: nil) ⇒ Object

Update replaces all the fields of a Resource by ID.



7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
# File 'lib/svc.rb', line 7586

def update(
  resource,
  deadline: nil
)
  req = V1::ResourceUpdateRequest.new()

  req.resource = Plumbing::convert_resource_to_plumbing(resource)
  # Execute before interceptor hooks
  req = @parent.interceptor.execute_before("Resources.Update", self, req)
  tries = 0
  plumbing_response = nil
  loop do
    begin
      plumbing_response = @stub.update(req, metadata: @parent.("Resources.Update", req), deadline: deadline)
    rescue => exception
      if (@parent.shouldRetry(tries, exception, deadline))
        tries + +sleep(@parent.exponentialBackoff(tries, deadline))
        next
      end
      raise Plumbing::convert_error_to_porcelain(exception)
    end
    break
  end

  # Execute after interceptor hooks
  plumbing_response = @parent.interceptor.execute_after("Resources.Update", self, req, plumbing_response)

  resp = ResourceUpdateResponse.new()
  resp.meta = Plumbing::(plumbing_response.meta)
  resp.rate_limit = Plumbing::(plumbing_response.rate_limit)
  resp.resource = Plumbing::convert_resource_to_porcelain(plumbing_response.resource)
  resp
end