# WARNING ABOUT GENERATED CODE # # This file is generated. See the contributing guide for more information: # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md # # WARNING ABOUT GENERATED CODE module Aws::EC2 class PlacementGroup extend Aws::Deprecations # @overload def initialize(name, options = {}) # @param [String] name # @option options [Client] :client # @overload def initialize(options = {}) # @option options [required, String] :name # @option options [Client] :client def initialize(*args) options = Hash === args.last ? args.pop.dup : {} @name = extract_name(args, options) @data = options.delete(:data) @client = options.delete(:client) || Client.new(options) end # @!group Read-Only Attributes # @return [String] def name @name end alias :group_name :name # The placement strategy. # @return [String] def strategy data.strategy end # The state of the placement group. # @return [String] def state data.state end # @!endgroup # @return [Client] def client @client end # Loads, or reloads {#data} for the current {PlacementGroup}. # Returns `self` making it possible to chain methods. # # placement_group.reload.data # # @return [self] def load resp = @client.describe_placement_groups(group_names: [@name]) @data = resp.placement_groups[0] self end alias :reload :load # @return [Types::PlacementGroup] # Returns the data for this {PlacementGroup}. Calls # {Client#describe_placement_groups} if {#data_loaded?} is `false`. def data load unless @data @data end # @return [Boolean] # Returns `true` if this resource is loaded. Accessing attributes or # {#data} on an unloaded resource will trigger a call to {#load}. def data_loaded? !!@data end # @!group Actions # @example Request syntax with placeholder values # # placement_group.delete({ # dry_run: false, # }) # @param [Hash] options ({}) # @option options [Boolean] :dry_run # Checks whether you have the required permissions for the action, # without actually making the request, and provides an error response. # If you have the required permissions, the error response is # `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`. # @return [EmptyStructure] def delete(options = {}) options = options.merge(group_name: @name) resp = @client.delete_placement_group(options) resp.data end # @!group Associations # @example Request syntax with placeholder values # # instances = placement_group.instances({ # dry_run: false, # instance_ids: ["String"], # filters: [ # { # name: "String", # values: ["String"], # }, # ], # }) # @param [Hash] options ({}) # @option options [Boolean] :dry_run # Checks whether you have the required permissions for the action, # without actually making the request, and provides an error response. # If you have the required permissions, the error response is # `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`. # @option options [Array] :instance_ids # One or more instance IDs. # # Default: Describes all your instances. # @option options [Array] :filters # One or more filters. # # * `affinity` - The affinity setting for an instance running on a # Dedicated Host (`default` \| `host`). # # * `architecture` - The instance architecture (`i386` \| `x86_64`). # # * `availability-zone` - The Availability Zone of the instance. # # * `block-device-mapping.attach-time` - The attach time for an EBS # volume mapped to the instance, for example, # `2010-09-15T17:15:20.000Z`. # # * `block-device-mapping.delete-on-termination` - A Boolean that # indicates whether the EBS volume is deleted on instance termination. # # * `block-device-mapping.device-name` - The device name for the EBS # volume (for example, `/dev/sdh` or `xvdh`). # # * `block-device-mapping.status` - The status for the EBS volume # (`attaching` \| `attached` \| `detaching` \| `detached`). # # * `block-device-mapping.volume-id` - The volume ID of the EBS volume. # # * `client-token` - The idempotency token you provided when you # launched the instance. # # * `dns-name` - The public DNS name of the instance. # # * `group-id` - The ID of the security group for the instance. # EC2-Classic only. # # * `group-name` - The name of the security group for the instance. # EC2-Classic only. # # * `host-id` - The ID of the Dedicated Host on which the instance is # running, if applicable. # # * `hypervisor` - The hypervisor type of the instance (`ovm` \| `xen`). # # * `iam-instance-profile.arn` - The instance profile associated with # the instance. Specified as an ARN. # # * `image-id` - The ID of the image used to launch the instance. # # * `instance-id` - The ID of the instance. # # * `instance-lifecycle` - Indicates whether this is a Spot Instance or # a Scheduled Instance (`spot` \| `scheduled`). # # * `instance-state-code` - The state of the instance, as a 16-bit # unsigned integer. The high byte is an opaque internal value and # should be ignored. The low byte is set based on the state # represented. The valid values are: 0 (pending), 16 (running), 32 # (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped). # # * `instance-state-name` - The state of the instance (`pending` \| # `running` \| `shutting-down` \| `terminated` \| `stopping` \| # `stopped`). # # * `instance-type` - The type of instance (for example, `t2.micro`). # # * `instance.group-id` - The ID of the security group for the instance. # # * `instance.group-name` - The name of the security group for the # instance. # # * `ip-address` - The public IPv4 address of the instance. # # * `kernel-id` - The kernel ID. # # * `key-name` - The name of the key pair used when the instance was # launched. # # * `launch-index` - When launching multiple instances, this is the # index for the instance in the launch group (for example, 0, 1, 2, # and so on). # # * `launch-time` - The time when the instance was launched. # # * `monitoring-state` - Indicates whether detailed monitoring is # enabled (`disabled` \| `enabled`). # # * `network-interface.addresses.private-ip-address` - The private IPv4 # address associated with the network interface. # # * `network-interface.addresses.primary` - Specifies whether the IPv4 # address of the network interface is the primary private IPv4 # address. # # * `network-interface.addresses.association.public-ip` - The ID of the # association of an Elastic IP address (IPv4) with a network # interface. # # * `network-interface.addresses.association.ip-owner-id` - The owner ID # of the private IPv4 address associated with the network interface. # # * `network-interface.association.public-ip` - The address of the # Elastic IP address (IPv4) bound to the network interface. # # * `network-interface.association.ip-owner-id` - The owner of the # Elastic IP address (IPv4) associated with the network interface. # # * `network-interface.association.allocation-id` - The allocation ID # returned when you allocated the Elastic IP address (IPv4) for your # network interface. # # * `network-interface.association.association-id` - The association ID # returned when the network interface was associated with an IPv4 # address. # # * `network-interface.attachment.attachment-id` - The ID of the # interface attachment. # # * `network-interface.attachment.instance-id` - The ID of the instance # to which the network interface is attached. # # * `network-interface.attachment.instance-owner-id` - The owner ID of # the instance to which the network interface is attached. # # * `network-interface.attachment.device-index` - The device index to # which the network interface is attached. # # * `network-interface.attachment.status` - The status of the attachment # (`attaching` \| `attached` \| `detaching` \| `detached`). # # * `network-interface.attachment.attach-time` - The time that the # network interface was attached to an instance. # # * `network-interface.attachment.delete-on-termination` - Specifies # whether the attachment is deleted when an instance is terminated. # # * `network-interface.availability-zone` - The Availability Zone for # the network interface. # # * `network-interface.description` - The description of the network # interface. # # * `network-interface.group-id` - The ID of a security group associated # with the network interface. # # * `network-interface.group-name` - The name of a security group # associated with the network interface. # # * `network-interface.ipv6-addresses.ipv6-address` - The IPv6 address # associated with the network interface. # # * `network-interface.mac-address` - The MAC address of the network # interface. # # * `network-interface.network-interface-id` - The ID of the network # interface. # # * `network-interface.owner-id` - The ID of the owner of the network # interface. # # * `network-interface.private-dns-name` - The private DNS name of the # network interface. # # * `network-interface.requester-id` - The requester ID for the network # interface. # # * `network-interface.requester-managed` - Indicates whether the # network interface is being managed by AWS. # # * `network-interface.status` - The status of the network interface # (`available`) \| `in-use`). # # * `network-interface.source-dest-check` - Whether the network # interface performs source/destination checking. A value of `true` # means checking is enabled, and `false` means checking is disabled. # The value must be `false` for the network interface to perform # network address translation (NAT) in your VPC. # # * `network-interface.subnet-id` - The ID of the subnet for the network # interface. # # * `network-interface.vpc-id` - The ID of the VPC for the network # interface. # # * `owner-id` - The AWS account ID of the instance owner. # # * `placement-group-name` - The name of the placement group for the # instance. # # * `platform` - The platform. Use `windows` if you have Windows # instances; otherwise, leave blank. # # * `private-dns-name` - The private IPv4 DNS name of the instance. # # * `private-ip-address` - The private IPv4 address of the instance. # # * `product-code` - The product code associated with the AMI used to # launch the instance. # # * `product-code.type` - The type of product code (`devpay` \| # `marketplace`). # # * `ramdisk-id` - The RAM disk ID. # # * `reason` - The reason for the current state of the instance (for # example, shows "User Initiated \[date\]" when you stop or # terminate the instance). Similar to the state-reason-code filter. # # * `requester-id` - The ID of the entity that launched the instance on # your behalf (for example, AWS Management Console, Auto Scaling, and # so on). # # * `reservation-id` - The ID of the instance's reservation. A # reservation ID is created any time you launch an instance. A # reservation ID has a one-to-one relationship with an instance launch # request, but can be associated with more than one instance if you # launch multiple instances using the same launch request. For # example, if you launch one instance, you'll get one reservation ID. # If you launch ten instances using the same launch request, you'll # also get one reservation ID. # # * `root-device-name` - The name of the root device for the instance # (for example, `/dev/sda1` or `/dev/xvda`). # # * `root-device-type` - The type of root device that the instance uses # (`ebs` \| `instance-store`). # # * `source-dest-check` - Indicates whether the instance performs # source/destination checking. A value of `true` means that checking # is enabled, and `false` means checking is disabled. The value must # be `false` for the instance to perform network address translation # (NAT) in your VPC. # # * `spot-instance-request-id` - The ID of the Spot instance request. # # * `state-reason-code` - The reason code for the state change. # # * `state-reason-message` - A message that describes the state change. # # * `subnet-id` - The ID of the subnet for the instance. # # * `tag`\:*key*=*value* - The key/value combination of a tag assigned # to the resource. Specify the key of the tag in the filter name and # the value of the tag in the filter value. For example, for the tag # Purpose=X, specify `tag:Purpose` for the filter name and `X` for the # filter value. # # * `tag-key` - The key of a tag assigned to the resource. This filter # is independent of the `tag-value` filter. For example, if you use # both the filter "tag-key=Purpose" and the filter "tag-value=X", # you get any resources assigned both the tag key Purpose (regardless # of what the tag's value is), and the tag value X (regardless of # what the tag's key is). If you want to list only resources where # Purpose is X, see the `tag`\:*key*=*value* filter. # # * `tag-value` - The value of a tag assigned to the resource. This # filter is independent of the `tag-key` filter. # # * `tenancy` - The tenancy of an instance (`dedicated` \| `default` \| # `host`). # # * `virtualization-type` - The virtualization type of the instance # (`paravirtual` \| `hvm`). # # * `vpc-id` - The ID of the VPC that the instance is running in. # @return [Instance::Collection] def instances(options = {}) batches = Enumerator.new do |y| options = Aws::Util.deep_merge(options, filters: [{ name: "placement-group-name", values: [@name] }]) resp = @client.describe_instances(options) resp.each_page do |page| batch = [] page.data.reservations.each do |r| r.instances.each do |i| batch << Instance.new( id: i.instance_id, data: i, client: @client ) end end y.yield(batch) end end Instance::Collection.new(batches) end # @deprecated # @api private def identifiers { name: @name } end deprecated(:identifiers) private def extract_name(args, options) value = args[0] || options.delete(:name) case value when String then value when nil then raise ArgumentError, "missing required option :name" else msg = "expected :name to be a String, got #{value.class}" raise ArgumentError, msg end end class Collection < Aws::Resources::Collection; end end end