Skip to content

Instantly share code, notes, and snippets.

@mrdavidlaing
Created January 20, 2014 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrdavidlaing/8520054 to your computer and use it in GitHub Desktop.
Save mrdavidlaing/8520054 to your computer and use it in GitHub Desktop.
Add support for spot instances to BOSH AWS CPI
...
resource_pools:
- name: vpc-private-medium-spot
network: vpc-private
size: 2
stemcell:
name: bosh-aws-xen-ubuntu
version: latest
cloud_properties:
use_spot: true
spot_bid_price: 0.05
instance_type: m1.medium
availability_zone: eu-west-1b
# Replace: /var/vcap/packages/director/gem_home/gems/aws-sdk-1.8.5/lib/aws/api_config/EC2-2013-02-01.yml
#
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
---
:api_version: '2013-02-01'
:operations:
- :name: ActivateLicense
:method: :activate_license
:inputs:
LicenseId:
- :string
- :required
Capacity:
- :integer
- :required
:outputs: {}
- :name: AllocateAddress
:method: :allocate_address
:inputs:
Domain:
- :string
:outputs: {}
- :name: AssignPrivateIpAddresses
:method: :assign_private_ip_addresses
:inputs:
NetworkInterfaceId:
- :string
- :required
PrivateIpAddress:
- :list:
- :string
- :rename: privateIpAddresses
SecondaryPrivateIpAddressCount:
- :integer
AllowReassignment:
- :boolean
:outputs: {}
- :name: AssociateAddress
:method: :associate_address
:inputs:
InstanceId:
- :string
PublicIp:
- :string
AllocationId:
- :string
NetworkInterfaceId:
- :string
PrivateIpAddress:
- :string
AllowReassociation:
- :boolean
:outputs: {}
- :name: AssociateDhcpOptions
:method: :associate_dhcp_options
:inputs:
DhcpOptionsId:
- :string
- :required
VpcId:
- :string
- :required
:outputs: {}
- :name: AssociateRouteTable
:method: :associate_route_table
:inputs:
SubnetId:
- :string
- :required
RouteTableId:
- :string
- :required
:outputs: {}
- :name: AttachInternetGateway
:method: :attach_internet_gateway
:inputs:
InternetGatewayId:
- :string
- :required
VpcId:
- :string
- :required
:outputs: {}
- :name: AttachNetworkInterface
:method: :attach_network_interface
:inputs:
NetworkInterfaceId:
- :string
- :required
InstanceId:
- :string
- :required
DeviceIndex:
- :integer
- :required
:outputs: {}
- :name: AttachVolume
:method: :attach_volume
:inputs:
VolumeId:
- :string
- :required
InstanceId:
- :string
- :required
Device:
- :string
- :required
:outputs:
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
- :name: AttachVpnGateway
:method: :attach_vpn_gateway
:inputs:
VpnGatewayId:
- :string
- :required
VpcId:
- :string
- :required
:outputs: {}
- :name: AuthorizeSecurityGroupEgress
:method: :authorize_security_group_egress
:inputs:
GroupId:
- :string
- :required
SourceSecurityGroupName:
- :string
SourceSecurityGroupOwnerId:
- :string
IpProtocol:
- :string
FromPort:
- :integer
ToPort:
- :integer
CidrIp:
- :string
IpPermissions:
- :list:
- :structure:
IpProtocol:
- :string
- :rename: IpProtocol
FromPort:
- :integer
- :rename: FromPort
ToPort:
- :integer
- :rename: ToPort
Groups:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
GroupName:
- :string
- :rename: GroupName
GroupId:
- :string
- :rename: GroupId
- :rename: UserIdGroupPairs
IpRanges:
- :list:
- :structure:
CidrIp:
- :string
- :rename: CidrIp
- :rename: IpRanges
:outputs: {}
- :name: AuthorizeSecurityGroupIngress
:method: :authorize_security_group_ingress
:inputs:
GroupName:
- :string
GroupId:
- :string
SourceSecurityGroupName:
- :string
SourceSecurityGroupOwnerId:
- :string
IpProtocol:
- :string
FromPort:
- :integer
ToPort:
- :integer
CidrIp:
- :string
IpPermissions:
- :list:
- :structure:
IpProtocol:
- :string
- :rename: IpProtocol
FromPort:
- :integer
- :rename: FromPort
ToPort:
- :integer
- :rename: ToPort
Groups:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
GroupName:
- :string
- :rename: GroupName
GroupId:
- :string
- :rename: GroupId
- :rename: UserIdGroupPairs
IpRanges:
- :list:
- :structure:
CidrIp:
- :string
- :rename: CidrIp
- :rename: IpRanges
:outputs: {}
- :name: BundleInstance
:method: :bundle_instance
:inputs:
InstanceId:
- :string
- :required
Storage:
- :structure:
S3:
- :structure:
Bucket:
- :string
- :rename: Bucket
Prefix:
- :string
- :rename: Prefix
AWSAccessKeyId:
- :string
UploadPolicy:
- :string
- :rename: UploadPolicy
UploadPolicySignature:
- :string
- :rename: UploadPolicySignature
- :required
:outputs:
:children:
bundleInstanceTask:
:children:
startTime:
:type: :time
updateTime:
:type: :time
- :name: CancelBundleTask
:method: :cancel_bundle_task
:inputs:
BundleId:
- :string
- :required
:outputs:
:children:
bundleInstanceTask:
:children:
startTime:
:type: :time
updateTime:
:type: :time
- :name: CancelConversionTask
:method: :cancel_conversion_task
:inputs:
ConversionTaskId:
- :string
- :required
ReasonMessage:
- :string
:outputs: {}
- :name: CancelExportTask
:method: :cancel_export_task
:inputs:
ExportTaskId:
- :string
- :required
:outputs: {}
- :name: CancelReservedInstancesListing
:method: :cancel_reserved_instances_listing
:inputs:
ReservedInstancesListingId:
- :string
- :required
:outputs:
:children:
reservedInstancesListingsSet:
:ignore: true
:children:
item:
:rename: :reserved_instances_listings_set
:list: true
:children:
createDate:
:type: :time
updateDate:
:type: :time
instanceCounts:
:ignore: true
:children:
item:
:rename: :instance_counts
:list: true
:children:
instanceCount:
:type: :integer
priceSchedules:
:ignore: true
:children:
item:
:rename: :price_schedules
:list: true
:children:
term:
:type: :integer
price:
:type: :float
active:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CancelSpotInstanceRequests
:method: :cancel_spot_instance_requests
:inputs:
SpotInstanceRequestId:
- :list:
- :string
- :required
- :rename: spotInstanceRequestIds
:outputs:
:children:
spotInstanceRequestSet:
:ignore: true
:children:
item:
:rename: :spot_instance_request_set
:list: true
- :name: ConfirmProductInstance
:method: :confirm_product_instance
:inputs:
ProductCode:
- :string
- :required
InstanceId:
- :string
- :required
:outputs: {}
- :name: CopyImage
:method: :copy_image
:inputs:
SourceRegion:
- :string
- :required
SourceImageId:
- :string
- :required
Name:
- :string
- :required
Description:
- :string
ClientToken:
- :string
:outputs: {}
- :name: CopySnapshot
:method: :copy_snapshot
:inputs:
SourceRegion:
- :string
- :required
SourceSnapshotId:
- :string
- :required
Description:
- :string
:outputs: {}
- :name: CreateCustomerGateway
:method: :create_customer_gateway
:inputs:
Type:
- :string
- :required
IpAddress:
- :string
- :required
- :rename: PublicIp
BgpAsn:
- :integer
- :required
:outputs:
:children:
customerGateway:
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateDhcpOptions
:method: :create_dhcp_options
:inputs:
DhcpConfiguration:
- :list:
- :structure:
Key:
- :string
- :rename: Key
Value:
- :list:
- :string
- :rename: Values
- :required
- :rename: DhcpConfigurations
:outputs:
:children:
dhcpOptions:
:children:
dhcpConfigurationSet:
:ignore: true
:children:
item:
:rename: :dhcp_configuration_set
:list: true
:children:
valueSet:
:ignore: true
:children:
item:
:rename: :value_set
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateImage
:method: :create_image
:inputs:
InstanceId:
- :string
- :required
Name:
- :string
- :required
Description:
- :string
NoReboot:
- :boolean
BlockDeviceMapping:
- :list:
- :structure:
VirtualName:
- :string
- :rename: VirtualName
DeviceName:
- :string
- :rename: DeviceName
Ebs:
- :structure:
SnapshotId:
- :string
VolumeSize:
- :integer
DeleteOnTermination:
- :boolean
VolumeType:
- :string
Iops:
- :integer
NoDevice:
- :string
- :rename: blockDeviceMappings
:outputs: {}
- :name: CreateInstanceExportTask
:method: :create_instance_export_task
:inputs:
Description:
- :string
InstanceId:
- :string
- :required
TargetEnvironment:
- :string
ExportToS3:
- :structure:
DiskImageFormat:
- :string
ContainerFormat:
- :string
S3Bucket:
- :string
S3Prefix:
- :string
- :rename: exportToS3Task
:outputs: {}
- :name: CreateInternetGateway
:method: :create_internet_gateway
:inputs: {}
:outputs:
:children:
internetGateway:
:children:
attachmentSet:
:ignore: true
:children:
item:
:rename: :attachment_set
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateKeyPair
:method: :create_key_pair
:inputs:
KeyName:
- :string
- :required
:outputs: {}
- :name: CreateNetworkAcl
:method: :create_network_acl
:inputs:
VpcId:
- :string
- :required
:outputs:
:children:
networkAcl:
:children:
default:
:type: :boolean
entrySet:
:ignore: true
:children:
item:
:rename: :entry_set
:list: true
:children:
ruleNumber:
:type: :integer
egress:
:type: :boolean
icmpTypeCode:
:children:
type:
:type: :integer
code:
:type: :integer
portRange:
:children:
from:
:type: :integer
to:
:type: :integer
associationSet:
:ignore: true
:children:
item:
:rename: :association_set
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateNetworkAclEntry
:method: :create_network_acl_entry
:inputs:
NetworkAclId:
- :string
- :required
RuleNumber:
- :integer
- :required
Protocol:
- :string
- :required
RuleAction:
- :string
- :required
Egress:
- :boolean
- :required
CidrBlock:
- :string
- :required
Icmp:
- :structure:
Type:
- :integer
Code:
- :integer
- :rename: icmpTypeCode
PortRange:
- :structure:
From:
- :integer
To:
- :integer
:outputs: {}
- :name: CreateNetworkInterface
:method: :create_network_interface
:inputs:
SubnetId:
- :string
- :required
Description:
- :string
PrivateIpAddress:
- :string
SecurityGroupId:
- :list:
- :string
- :rename: groups
PrivateIpAddresses:
- :list:
- :structure:
PrivateIpAddress:
- :string
- :required
Primary:
- :boolean
SecondaryPrivateIpAddressCount:
- :integer
:outputs:
:children:
networkInterface:
:children:
requesterManaged:
:type: :boolean
sourceDestCheck:
:type: :boolean
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
attachment:
:children:
deviceIndex:
:type: :integer
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
privateIpAddressesSet:
:ignore: true
:children:
item:
:rename: :private_ip_addresses_set
:list: true
:children:
primary:
:type: :boolean
- :name: CreatePlacementGroup
:method: :create_placement_group
:inputs:
GroupName:
- :string
- :required
Strategy:
- :string
- :required
:outputs: {}
- :name: CreateReservedInstancesListing
:method: :create_reserved_instances_listing
:inputs:
ReservedInstancesId:
- :string
- :required
InstanceCount:
- :integer
- :required
PriceSchedules:
- :list:
- :structure:
Term:
- :long
Price:
- :double
CurrencyCode:
- :string
- :required
ClientToken:
- :string
- :required
:outputs:
:children:
reservedInstancesListingsSet:
:ignore: true
:children:
item:
:rename: :reserved_instances_listings_set
:list: true
:children:
createDate:
:type: :time
updateDate:
:type: :time
instanceCounts:
:ignore: true
:children:
item:
:rename: :instance_counts
:list: true
:children:
instanceCount:
:type: :integer
priceSchedules:
:ignore: true
:children:
item:
:rename: :price_schedules
:list: true
:children:
term:
:type: :integer
price:
:type: :float
active:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateRoute
:method: :create_route
:inputs:
RouteTableId:
- :string
- :required
DestinationCidrBlock:
- :string
- :required
GatewayId:
- :string
InstanceId:
- :string
NetworkInterfaceId:
- :string
:outputs: {}
- :name: CreateRouteTable
:method: :create_route_table
:inputs:
VpcId:
- :string
- :required
:outputs:
:children:
routeTable:
:children:
routeSet:
:ignore: true
:children:
item:
:rename: :route_set
:list: true
associationSet:
:ignore: true
:children:
item:
:rename: :association_set
:list: true
:children:
main:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
propagatingVgwSet:
:ignore: true
:children:
item:
:rename: :propagating_vgw_set
:list: true
- :name: CreateSecurityGroup
:method: :create_security_group
:inputs:
GroupName:
- :string
- :required
GroupDescription:
- :string
- :required
- :rename: Description
VpcId:
- :string
:outputs: {}
- :name: CreateSnapshot
:method: :create_snapshot
:inputs:
VolumeId:
- :string
- :required
Description:
- :string
:outputs:
:children:
startTime:
:type: :time
volumeSize:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateSpotDatafeedSubscription
:method: :create_spot_datafeed_subscription
:inputs:
Bucket:
- :string
- :required
Prefix:
- :string
:outputs: {}
- :name: CreateSubnet
:method: :create_subnet
:inputs:
VpcId:
- :string
- :required
CidrBlock:
- :string
- :required
AvailabilityZone:
- :string
:outputs:
:children:
subnet:
:children:
availableIpAddressCount:
:type: :integer
defaultForAz:
:type: :boolean
mapPublicIpOnLaunch:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: CreateTags
:method: :create_tags
:inputs:
ResourceId:
- :list:
- :string
- :required
- :rename: resources
Tag:
- :list:
- :structure:
Key:
- :string
Value:
- :string
- :required
- :rename: tags
:outputs: {}
- :name: CreateVolume
:method: :create_volume
:inputs:
Size:
- :integer
SnapshotId:
- :string
AvailabilityZone:
- :string
- :required
VolumeType:
- :string
Iops:
- :integer
:outputs:
:children:
size:
:type: :integer
createTime:
:type: :time
attachmentSet:
:ignore: true
:children:
item:
:rename: :attachment_set
:list: true
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
iops:
:type: :integer
- :name: CreateVpc
:method: :create_vpc
:inputs:
CidrBlock:
- :string
- :required
InstanceTenancy:
- :string
:outputs:
:children:
vpc:
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
isDefault:
:type: :boolean
- :name: CreateVpnConnection
:method: :create_vpn_connection
:inputs:
Type:
- :string
- :required
CustomerGatewayId:
- :string
- :required
VpnGatewayId:
- :string
- :required
Options:
- :structure:
StaticRoutesOnly:
- :boolean
:outputs:
:children:
vpnConnection:
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
vgwTelemetry:
:ignore: true
:children:
item:
:rename: :vgw_telemetry
:list: true
:children:
lastStatusChange:
:type: :time
acceptedRouteCount:
:type: :integer
options:
:children:
staticRoutesOnly:
:type: :boolean
routes:
:ignore: true
:children:
item:
:rename: :routes
:list: true
- :name: CreateVpnConnectionRoute
:method: :create_vpn_connection_route
:inputs:
VpnConnectionId:
- :string
- :required
DestinationCidrBlock:
- :string
- :required
:outputs: {}
- :name: CreateVpnGateway
:method: :create_vpn_gateway
:inputs:
Type:
- :string
- :required
AvailabilityZone:
- :string
:outputs:
:children:
vpnGateway:
:children:
attachments:
:ignore: true
:children:
item:
:rename: :attachments
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
type:
:rename: :vpn_type
- :name: DeactivateLicense
:method: :deactivate_license
:inputs:
LicenseId:
- :string
- :required
Capacity:
- :integer
- :required
:outputs: {}
- :name: DeleteCustomerGateway
:method: :delete_customer_gateway
:inputs:
CustomerGatewayId:
- :string
- :required
:outputs: {}
- :name: DeleteDhcpOptions
:method: :delete_dhcp_options
:inputs:
DhcpOptionsId:
- :string
- :required
:outputs: {}
- :name: DeleteInternetGateway
:method: :delete_internet_gateway
:inputs:
InternetGatewayId:
- :string
- :required
:outputs: {}
- :name: DeleteKeyPair
:method: :delete_key_pair
:inputs:
KeyName:
- :string
- :required
:outputs: {}
- :name: DeleteNetworkAcl
:method: :delete_network_acl
:inputs:
NetworkAclId:
- :string
- :required
:outputs: {}
- :name: DeleteNetworkAclEntry
:method: :delete_network_acl_entry
:inputs:
NetworkAclId:
- :string
- :required
RuleNumber:
- :integer
- :required
Egress:
- :boolean
- :required
:outputs: {}
- :name: DeleteNetworkInterface
:method: :delete_network_interface
:inputs:
NetworkInterfaceId:
- :string
- :required
:outputs: {}
- :name: DeletePlacementGroup
:method: :delete_placement_group
:inputs:
GroupName:
- :string
- :required
:outputs: {}
- :name: DeleteRoute
:method: :delete_route
:inputs:
RouteTableId:
- :string
- :required
DestinationCidrBlock:
- :string
- :required
:outputs: {}
- :name: DeleteRouteTable
:method: :delete_route_table
:inputs:
RouteTableId:
- :string
- :required
:outputs: {}
- :name: DeleteSecurityGroup
:method: :delete_security_group
:inputs:
GroupName:
- :string
GroupId:
- :string
:outputs: {}
- :name: DeleteSnapshot
:method: :delete_snapshot
:inputs:
SnapshotId:
- :string
- :required
:outputs: {}
- :name: DeleteSpotDatafeedSubscription
:method: :delete_spot_datafeed_subscription
:inputs: {}
:outputs: {}
- :name: DeleteSubnet
:method: :delete_subnet
:inputs:
SubnetId:
- :string
- :required
:outputs: {}
- :name: DeleteTags
:method: :delete_tags
:inputs:
ResourceId:
- :list:
- :string
- :required
- :rename: resources
Tag:
- :list:
- :structure:
Key:
- :string
Value:
- :string
- :rename: tags
:outputs: {}
- :name: DeleteVolume
:method: :delete_volume
:inputs:
VolumeId:
- :string
- :required
:outputs: {}
- :name: DeleteVpc
:method: :delete_vpc
:inputs:
VpcId:
- :string
- :required
:outputs: {}
- :name: DeleteVpnConnection
:method: :delete_vpn_connection
:inputs:
VpnConnectionId:
- :string
- :required
:outputs: {}
- :name: DeleteVpnConnectionRoute
:method: :delete_vpn_connection_route
:inputs:
VpnConnectionId:
- :string
- :required
DestinationCidrBlock:
- :string
- :required
:outputs: {}
- :name: DeleteVpnGateway
:method: :delete_vpn_gateway
:inputs:
VpnGatewayId:
- :string
- :required
:outputs: {}
- :name: DeregisterImage
:method: :deregister_image
:inputs:
ImageId:
- :string
- :required
:outputs: {}
- :name: DescribeAccountAttributes
:method: :describe_account_attributes
:inputs:
AttributeName:
- :list:
- :string
- :rename: attributeNames
:outputs:
:children:
accountAttributeSet:
:ignore: true
:children:
item:
:rename: :account_attribute_set
:list: true
:children:
attributeValueSet:
:ignore: true
:children:
item:
:rename: :attribute_value_set
:list: true
- :name: DescribeAddresses
:method: :describe_addresses
:inputs:
PublicIp:
- :list:
- :string
- :rename: PublicIps
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
AllocationId:
- :list:
- :string
- :rename: allocationIds
:outputs:
:children:
addressesSet:
:ignore: true
:children:
item:
:rename: :addresses_set
:list: true
:index:
:key: :public_ip
:name: :address_index
- :name: DescribeAvailabilityZones
:method: :describe_availability_zones
:inputs:
ZoneName:
- :list:
- :string
- :rename: ZoneNames
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
availabilityZoneInfo:
:ignore: true
:children:
item:
:rename: :availability_zone_info
:list: true
:children:
messageSet:
:ignore: true
:children:
item:
:rename: :message_set
:list: true
- :name: DescribeBundleTasks
:method: :describe_bundle_tasks
:inputs:
BundleId:
- :list:
- :string
- :rename: BundleIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
bundleInstanceTasksSet:
:ignore: true
:children:
item:
:rename: :bundle_instance_tasks_set
:list: true
:children:
startTime:
:type: :time
updateTime:
:type: :time
- :name: DescribeConversionTasks
:method: :describe_conversion_tasks
:inputs:
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
ConversionTaskId:
- :list:
- :string
- :rename: conversionTaskIds
:outputs:
:children:
conversionTasks:
:ignore: true
:children:
item:
:rename: :conversion_tasks
:list: true
:children:
importInstance:
:children:
volumes:
:ignore: true
:children:
item:
:rename: :volumes
:list: true
:children:
bytesConverted:
:type: :integer
image:
:children:
size:
:type: :integer
volume:
:children:
size:
:type: :integer
importVolume:
:children:
bytesConverted:
:type: :integer
image:
:children:
size:
:type: :integer
volume:
:children:
size:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeCustomerGateways
:method: :describe_customer_gateways
:inputs:
CustomerGatewayId:
- :list:
- :string
- :rename: CustomerGatewayIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: Filters
:outputs:
:children:
customerGatewaySet:
:ignore: true
:children:
item:
:rename: :customer_gateway_set
:list: true
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
type:
:rename: :vpn_type
- :name: DescribeDhcpOptions
:method: :describe_dhcp_options
:inputs:
DhcpOptionsId:
- :list:
- :string
- :rename: DhcpOptionsIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
dhcpOptionsSet:
:ignore: true
:children:
item:
:rename: :dhcp_options_set
:list: true
:children:
dhcpConfigurationSet:
:ignore: true
:children:
item:
:rename: :dhcp_configuration_set
:list: true
:children:
valueSet:
:ignore: true
:children:
item:
:rename: :value_set
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeExportTasks
:method: :describe_export_tasks
:inputs:
ExportTaskId:
- :list:
- :string
- :rename: exportTaskIds
:outputs:
:children:
exportTaskSet:
:ignore: true
:children:
item:
:rename: :export_task_set
:list: true
- :name: DescribeImageAttribute
:method: :describe_image_attribute
:inputs:
ImageId:
- :string
- :required
Attribute:
- :string
- :required
:outputs:
:children:
launchPermission:
:ignore: true
:children:
item:
:rename: :launch_permission
:list: true
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
volumeSize:
:type: :integer
deleteOnTermination:
:type: :boolean
iops:
:type: :integer
- :name: DescribeImages
:method: :describe_images
:inputs:
ImageId:
- :list:
- :string
- :rename: ImageIds
Owner:
- :list:
- :string
- :rename: Owners
ExecutableBy:
- :list:
- :string
- :rename: ExecutableUsers
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
imagesSet:
:ignore: true
:children:
item:
:rename: :images_set
:list: true
:children:
isPublic:
:type: :boolean
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
volumeSize:
:type: :integer
deleteOnTermination:
:type: :boolean
iops:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
:index:
:key: :image_id
:name: :image_index
- :name: DescribeInstanceAttribute
:method: :describe_instance_attribute
:inputs:
InstanceId:
- :string
- :required
Attribute:
- :string
- :required
:outputs:
:children:
disableApiTermination:
:children:
value:
:type: :boolean
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
ebsOptimized:
:children:
value:
:type: :boolean
- :name: DescribeInstanceStatus
:method: :describe_instance_status
:inputs:
InstanceId:
- :list:
- :string
- :rename: InstanceIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
NextToken:
- :string
MaxResults:
- :integer
IncludeAllInstances:
- :boolean
:outputs:
:children:
instanceStatusSet:
:ignore: true
:children:
item:
:rename: :instance_status_set
:list: true
:children:
eventsSet:
:ignore: true
:children:
item:
:rename: :events_set
:list: true
:children:
notBefore:
:type: :time
notAfter:
:type: :time
instanceState:
:children:
code:
:type: :integer
systemStatus:
:children:
details:
:ignore: true
:children:
item:
:rename: :details
:list: true
:children:
impairedSince:
:type: :time
instanceStatus:
:children:
details:
:ignore: true
:children:
item:
:rename: :details
:list: true
:children:
impairedSince:
:type: :time
- :name: DescribeInstances
:method: :describe_instances
:inputs:
InstanceId:
- :list:
- :string
- :rename: InstanceIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
reservationSet:
:ignore: true
:children:
item:
:rename: :reservation_set
:list: true
:children:
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
:children:
instanceState:
:children:
code:
:type: :integer
amiLaunchIndex:
:type: :integer
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
launchTime:
:type: :time
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
sourceDestCheck:
:type: :boolean
networkInterfaceSet:
:ignore: true
:children:
item:
:rename: :network_interface_set
:list: true
:children:
sourceDestCheck:
:type: :boolean
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
attachment:
:children:
deviceIndex:
:type: :integer
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
privateIpAddressesSet:
:ignore: true
:children:
item:
:rename: :private_ip_addresses_set
:list: true
:children:
primary:
:type: :boolean
ebsOptimized:
:type: :boolean
:index:
:key: :instance_id
:name: :instance_index
:index:
:key_path:
- :instances_set
- :instance_id
:name: :reservation_index
- :name: DescribeInternetGateways
:method: :describe_internet_gateways
:inputs:
InternetGatewayId:
- :list:
- :string
- :rename: internetGatewayIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
internetGatewaySet:
:ignore: true
:children:
item:
:rename: :internet_gateway_set
:list: true
:children:
attachmentSet:
:ignore: true
:children:
item:
:rename: :attachment_set
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeKeyPairs
:method: :describe_key_pairs
:inputs:
KeyName:
- :list:
- :string
- :rename: KeyNames
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
keySet:
:ignore: true
:children:
item:
:rename: :key_set
:list: true
:index:
:key: :key_name
:name: :key_index
- :name: DescribeLicenses
:method: :describe_licenses
:inputs:
LicenseId:
- :list:
- :string
- :rename: licenseIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
licenseSet:
:ignore: true
:children:
item:
:rename: :license_set
:list: true
:children:
capacitySet:
:ignore: true
:children:
item:
:rename: :capacity_set
:list: true
:children:
capacity:
:type: :integer
instanceCapacity:
:type: :integer
earliestAllowedDeactivationTime:
:type: :time
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeNetworkAcls
:method: :describe_network_acls
:inputs:
NetworkAclId:
- :list:
- :string
- :rename: networkAclIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
networkAclSet:
:ignore: true
:children:
item:
:rename: :network_acl_set
:list: true
:children:
default:
:type: :boolean
entrySet:
:ignore: true
:children:
item:
:rename: :entry_set
:list: true
:children:
ruleNumber:
:type: :integer
egress:
:type: :boolean
icmpTypeCode:
:children:
type:
:type: :integer
code:
:type: :integer
portRange:
:children:
from:
:type: :integer
to:
:type: :integer
associationSet:
:ignore: true
:children:
item:
:rename: :association_set
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeNetworkInterfaceAttribute
:method: :describe_network_interface_attribute
:inputs:
NetworkInterfaceId:
- :string
- :required
Description:
- :string
SourceDestCheck:
- :string
GroupSet:
- :string
- :rename: groups
Attachment:
- :string
:outputs:
:children:
sourceDestCheck:
:children:
value:
:type: :boolean
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
attachment:
:children:
deviceIndex:
:type: :integer
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
- :name: DescribeNetworkInterfaces
:method: :describe_network_interfaces
:inputs:
NetworkInterfaceId:
- :list:
- :string
- :rename: networkInterfaceIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
networkInterfaceSet:
:ignore: true
:children:
item:
:rename: :network_interface_set
:list: true
:children:
requesterManaged:
:type: :boolean
sourceDestCheck:
:type: :boolean
groupSet:
:ignore: true
:children:
item:
:rename: :groups
:list: true
attachment:
:children:
deviceIndex:
:type: :integer
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
privateIpAddressesSet:
:ignore: true
:children:
item:
:rename: :private_ip_addresses_set
:list: true
:children:
primary:
:type: :boolean
:rename: :set
- :name: DescribePlacementGroups
:method: :describe_placement_groups
:inputs:
GroupName:
- :list:
- :string
- :rename: groupNames
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
placementGroupSet:
:ignore: true
:children:
item:
:rename: :placement_group_set
:list: true
- :name: DescribeRegions
:method: :describe_regions
:inputs:
RegionName:
- :list:
- :string
- :rename: RegionNames
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
regionInfo:
:ignore: true
:children:
item:
:rename: :region_info
:list: true
- :name: DescribeReservedInstances
:method: :describe_reserved_instances
:inputs:
ReservedInstancesId:
- :list:
- :string
- :rename: ReservedInstancesIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
OfferingType:
- :string
:outputs:
:children:
reservedInstancesSet:
:ignore: true
:children:
item:
:rename: :reserved_instances_set
:list: true
:children:
start:
:type: :time
duration:
:type: :integer
usagePrice:
:type: :float
fixedPrice:
:type: :float
instanceCount:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
recurringCharges:
:ignore: true
:children:
item:
:rename: :recurring_charges
:list: true
:children:
amount:
:type: :float
- :name: DescribeReservedInstancesListings
:method: :describe_reserved_instances_listings
:inputs:
ReservedInstancesId:
- :string
ReservedInstancesListingId:
- :string
Filters:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
:outputs:
:children:
reservedInstancesListingsSet:
:ignore: true
:children:
item:
:rename: :reserved_instances_listings_set
:list: true
:children:
createDate:
:type: :time
updateDate:
:type: :time
instanceCounts:
:ignore: true
:children:
item:
:rename: :instance_counts
:list: true
:children:
instanceCount:
:type: :integer
priceSchedules:
:ignore: true
:children:
item:
:rename: :price_schedules
:list: true
:children:
term:
:type: :integer
price:
:type: :float
active:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeReservedInstancesOfferings
:method: :describe_reserved_instances_offerings
:inputs:
ReservedInstancesOfferingId:
- :list:
- :string
- :rename: ReservedInstancesOfferingIds
InstanceType:
- :string
AvailabilityZone:
- :string
ProductDescription:
- :string
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
InstanceTenancy:
- :string
OfferingType:
- :string
NextToken:
- :string
MaxResults:
- :integer
:outputs:
:children:
reservedInstancesOfferingsSet:
:ignore: true
:children:
item:
:rename: :reserved_instances_offerings_set
:list: true
:children:
duration:
:type: :integer
usagePrice:
:type: :float
fixedPrice:
:type: :float
recurringCharges:
:ignore: true
:children:
item:
:rename: :recurring_charges
:list: true
:children:
amount:
:type: :float
marketplace:
:type: :boolean
pricingDetailsSet:
:ignore: true
:children:
item:
:rename: :pricing_details_set
:list: true
:children:
price:
:type: :float
count:
:type: :integer
- :name: DescribeRouteTables
:method: :describe_route_tables
:inputs:
RouteTableId:
- :list:
- :string
- :rename: routeTableIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
routeTableSet:
:ignore: true
:children:
item:
:rename: :route_table_set
:list: true
:children:
routeSet:
:ignore: true
:children:
item:
:rename: :route_set
:list: true
associationSet:
:ignore: true
:children:
item:
:rename: :association_set
:list: true
:children:
main:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
propagatingVgwSet:
:ignore: true
:children:
item:
:rename: :propagating_vgw_set
:list: true
- :name: DescribeSecurityGroups
:method: :describe_security_groups
:inputs:
GroupName:
- :list:
- :string
- :rename: GroupNames
GroupId:
- :list:
- :string
- :rename: GroupIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
securityGroupInfo:
:ignore: true
:children:
item:
:rename: :security_group_info
:list: true
:children:
ipPermissions:
:ignore: true
:children:
item:
:rename: :ip_permissions
:list: true
:children:
fromPort:
:type: :integer
toPort:
:type: :integer
groups:
:ignore: true
:children:
item:
:rename: :groups
:list: true
ipRanges:
:ignore: true
:children:
item:
:rename: :ip_ranges
:list: true
ipPermissionsEgress:
:ignore: true
:children:
item:
:rename: :ip_permissions_egress
:list: true
:children:
fromPort:
:type: :integer
toPort:
:type: :integer
groups:
:ignore: true
:children:
item:
:rename: :groups
:list: true
ipRanges:
:ignore: true
:children:
item:
:rename: :ip_ranges
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
:index:
:key: :group_id
:name: :security_group_index
- :name: DescribeSnapshotAttribute
:method: :describe_snapshot_attribute
:inputs:
SnapshotId:
- :string
- :required
Attribute:
- :string
- :required
:outputs:
:children:
createVolumePermission:
:ignore: true
:children:
item:
:rename: :create_volume_permission
:list: true
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
- :name: DescribeSnapshots
:method: :describe_snapshots
:inputs:
SnapshotId:
- :list:
- :string
- :rename: SnapshotIds
Owner:
- :list:
- :string
- :rename: OwnerIds
RestorableBy:
- :list:
- :string
- :rename: RestorableByUserIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
snapshotSet:
:ignore: true
:children:
item:
:rename: :snapshot_set
:list: true
:children:
startTime:
:type: :time
volumeSize:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
:index:
:key: :snapshot_id
:name: :snapshot_index
- :name: DescribeSpotDatafeedSubscription
:method: :describe_spot_datafeed_subscription
:inputs: {}
:outputs: {}
- :name: DescribeSpotInstanceRequests
:method: :describe_spot_instance_requests
:inputs:
SpotInstanceRequestId:
- :list:
- :string
- :rename: spotInstanceRequestIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
spotInstanceRequestSet:
:ignore: true
:children:
item:
:rename: :spot_instance_request_set
:list: true
:children:
status:
:children:
updateTime:
:type: :time
validFrom:
:type: :time
validUntil:
:type: :time
launchSpecification:
:children:
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
volumeSize:
:type: :integer
deleteOnTermination:
:type: :boolean
iops:
:type: :integer
monitoringEnabled:
:type: :boolean
networkInterfaceSet:
:ignore: true
:children:
item:
:rename: :network_interface_set
:list: true
:children:
deviceIndex:
:type: :integer
SecurityGroupId:
:ignore: true
:children:
SecurityGroupId:
:rename: :security_group_id
:list: true
deleteOnTermination:
:type: :boolean
privateIpAddressesSet:
:ignore: true
:children:
item:
:rename: :private_ip_addresses_set
:list: true
:children:
primary:
:type: :boolean
secondaryPrivateIpAddressCount:
:type: :integer
ebsOptimized:
:type: :boolean
createTime:
:type: :time
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeSpotPriceHistory
:method: :describe_spot_price_history
:inputs:
StartTime:
- :timestamp
EndTime:
- :timestamp
InstanceType:
- :list:
- :string
- :rename: instanceTypes
ProductDescription:
- :list:
- :string
- :rename: productDescriptions
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
AvailabilityZone:
- :string
MaxResults:
- :integer
NextToken:
- :string
:outputs:
:children:
spotPriceHistorySet:
:ignore: true
:children:
item:
:rename: :spot_price_history_set
:list: true
:children:
timestamp:
:type: :time
- :name: DescribeSubnets
:method: :describe_subnets
:inputs:
SubnetId:
- :list:
- :string
- :rename: SubnetIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: Filters
:outputs:
:children:
subnetSet:
:ignore: true
:children:
item:
:rename: :subnet_set
:list: true
:children:
availableIpAddressCount:
:type: :integer
defaultForAz:
:type: :boolean
mapPublicIpOnLaunch:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: DescribeTags
:method: :describe_tags
:inputs:
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
:index:
:keys:
- :resource_type
- :resource_id
- :key
:name: :tag_index
- :name: DescribeVolumeAttribute
:method: :describe_volume_attribute
:inputs:
VolumeId:
- :string
- :required
Attribute:
- :string
:outputs:
:children:
autoEnableIO:
:children:
value:
:type: :boolean
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
- :name: DescribeVolumeStatus
:method: :describe_volume_status
:inputs:
VolumeId:
- :list:
- :string
- :rename: VolumeIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
NextToken:
- :string
MaxResults:
- :integer
:outputs:
:children:
volumeStatusSet:
:ignore: true
:children:
item:
:rename: :volume_status_set
:list: true
:children:
volumeStatus:
:children:
details:
:ignore: true
:children:
item:
:rename: :details
:list: true
eventsSet:
:ignore: true
:children:
item:
:rename: :events_set
:list: true
:children:
notBefore:
:type: :time
notAfter:
:type: :time
actionsSet:
:ignore: true
:children:
item:
:rename: :actions_set
:list: true
- :name: DescribeVolumes
:method: :describe_volumes
:inputs:
VolumeId:
- :list:
- :string
- :rename: VolumeIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: filters
:outputs:
:children:
volumeSet:
:ignore: true
:children:
item:
:rename: :volume_set
:list: true
:children:
size:
:type: :integer
createTime:
:type: :time
attachmentSet:
:ignore: true
:children:
item:
:rename: :attachment_set
:list: true
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
iops:
:type: :integer
:index:
:key: :volume_id
:name: :volume_index
- :name: DescribeVpcAttribute
:method: :describe_vpc_attribute
:inputs:
VpcId:
- :string
- :required
Attribute:
- :string
:outputs:
:children:
enableDnsSupport:
:children:
value:
:type: :boolean
enableDnsHostnames:
:children:
value:
:type: :boolean
- :name: DescribeVpcs
:method: :describe_vpcs
:inputs:
VpcId:
- :list:
- :string
- :rename: VpcIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: Filters
:outputs:
:children:
vpcSet:
:ignore: true
:children:
item:
:rename: :vpc_set
:list: true
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
isDefault:
:type: :boolean
- :name: DescribeVpnConnections
:method: :describe_vpn_connections
:inputs:
VpnConnectionId:
- :list:
- :string
- :rename: VpnConnectionIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: Filters
:outputs:
:children:
vpnConnectionSet:
:ignore: true
:children:
item:
:rename: :vpn_connection_set
:list: true
:children:
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
vgwTelemetry:
:ignore: true
:children:
item:
:rename: :vgw_telemetry
:list: true
:children:
lastStatusChange:
:type: :time
acceptedRouteCount:
:type: :integer
options:
:children:
staticRoutesOnly:
:type: :boolean
routes:
:ignore: true
:children:
item:
:rename: :routes
:list: true
type:
:rename: :vpn_type
- :name: DescribeVpnGateways
:method: :describe_vpn_gateways
:inputs:
VpnGatewayId:
- :list:
- :string
- :rename: VpnGatewayIds
Filter:
- :list:
- :structure:
Name:
- :string
Value:
- :list:
- :string
- :rename: Values
- :rename: Filters
:outputs:
:children:
vpnGatewaySet:
:ignore: true
:children:
item:
:rename: :vpn_gateway_set
:list: true
:children:
attachments:
:ignore: true
:children:
item:
:rename: :attachments
:list: true
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
type:
:rename: :vpn_type
- :name: DetachInternetGateway
:method: :detach_internet_gateway
:inputs:
InternetGatewayId:
- :string
- :required
VpcId:
- :string
- :required
:outputs: {}
- :name: DetachNetworkInterface
:method: :detach_network_interface
:inputs:
AttachmentId:
- :string
- :required
Force:
- :boolean
:outputs: {}
- :name: DetachVolume
:method: :detach_volume
:inputs:
VolumeId:
- :string
- :required
InstanceId:
- :string
Device:
- :string
Force:
- :boolean
:outputs:
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
- :name: DetachVpnGateway
:method: :detach_vpn_gateway
:inputs:
VpnGatewayId:
- :string
- :required
VpcId:
- :string
- :required
:outputs: {}
- :name: DisableVgwRoutePropagation
:method: :disable_vgw_route_propagation
:inputs:
RouteTableId:
- :string
- :required
GatewayId:
- :string
- :required
:outputs: {}
- :name: DisassociateAddress
:method: :disassociate_address
:inputs:
PublicIp:
- :string
AssociationId:
- :string
:outputs: {}
- :name: DisassociateRouteTable
:method: :disassociate_route_table
:inputs:
AssociationId:
- :string
- :required
:outputs: {}
- :name: EnableVgwRoutePropagation
:method: :enable_vgw_route_propagation
:inputs:
RouteTableId:
- :string
- :required
GatewayId:
- :string
- :required
:outputs: {}
- :name: EnableVolumeIO
:method: :enable_volume_io
:inputs:
VolumeId:
- :string
- :required
:outputs: {}
- :name: GetConsoleOutput
:method: :get_console_output
:inputs:
InstanceId:
- :string
- :required
:outputs:
:children:
timestamp:
:type: :time
- :name: GetPasswordData
:method: :get_password_data
:inputs:
InstanceId:
- :string
- :required
:outputs:
:children:
timestamp:
:type: :time
- :name: ImportInstance
:method: :import_instance
:inputs:
Description:
- :string
LaunchSpecification:
- :structure:
Architecture:
- :string
SecurityGroup:
- :list:
- :string
- :rename: securityGroups
AdditionalInfo:
- :string
UserData:
- :string
InstanceType:
- :string
Placement:
- :structure:
AvailabilityZone:
- :string
- :rename: AvailabilityZone
GroupName:
- :string
Tenancy:
- :string
BlockDeviceMapping:
- :list:
- :structure:
VirtualName:
- :string
- :rename: VirtualName
DeviceName:
- :string
- :rename: DeviceName
Ebs:
- :structure:
SnapshotId:
- :string
VolumeSize:
- :integer
DeleteOnTermination:
- :boolean
VolumeType:
- :string
Iops:
- :integer
NoDevice:
- :string
- :rename: blockDeviceMappings
Monitoring:
- :boolean
SubnetId:
- :string
DisableApiTermination:
- :boolean
InstanceInitiatedShutdownBehavior:
- :string
PrivateIpAddress:
- :string
DiskImage:
- :list:
- :structure:
Image:
- :structure:
Format:
- :string
- :required
Bytes:
- :long
- :required
ImportManifestUrl:
- :string
- :required
Description:
- :string
Volume:
- :structure:
Size:
- :long
- :required
- :rename: diskImages
Platform:
- :string
- :required
:outputs:
:children:
conversionTask:
:children:
importInstance:
:children:
volumes:
:ignore: true
:children:
item:
:rename: :volumes
:list: true
:children:
bytesConverted:
:type: :integer
image:
:children:
size:
:type: :integer
volume:
:children:
size:
:type: :integer
importVolume:
:children:
bytesConverted:
:type: :integer
image:
:children:
size:
:type: :integer
volume:
:children:
size:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: ImportKeyPair
:method: :import_key_pair
:inputs:
KeyName:
- :string
- :required
PublicKeyMaterial:
- :string
- :required
:outputs: {}
- :name: ImportVolume
:method: :import_volume
:inputs:
AvailabilityZone:
- :string
Image:
- :structure:
Format:
- :string
- :required
Bytes:
- :long
- :required
ImportManifestUrl:
- :string
- :required
Description:
- :string
Volume:
- :structure:
Size:
- :long
- :required
:outputs:
:children:
conversionTask:
:children:
importInstance:
:children:
volumes:
:ignore: true
:children:
item:
:rename: :volumes
:list: true
:children:
bytesConverted:
:type: :integer
image:
:children:
size:
:type: :integer
volume:
:children:
size:
:type: :integer
importVolume:
:children:
bytesConverted:
:type: :integer
image:
:children:
size:
:type: :integer
volume:
:children:
size:
:type: :integer
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: ModifyImageAttribute
:method: :modify_image_attribute
:inputs:
ImageId:
- :string
- :required
Attribute:
- :string
OperationType:
- :string
UserId:
- :list:
- :string
- :rename: UserIds
UserGroup:
- :list:
- :string
- :rename: UserGroups
ProductCode:
- :list:
- :string
- :rename: ProductCodes
Value:
- :string
LaunchPermission:
- :structure:
Add:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
Group:
- :string
- :rename: Group
Remove:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
Group:
- :string
- :rename: Group
Description:
- :structure:
Value:
- :string
:outputs: {}
- :name: ModifyInstanceAttribute
:method: :modify_instance_attribute
:inputs:
InstanceId:
- :string
- :required
Attribute:
- :string
Value:
- :string
BlockDeviceMapping:
- :list:
- :structure:
DeviceName:
- :string
Ebs:
- :structure:
VolumeId:
- :string
DeleteOnTermination:
- :boolean
VirtualName:
- :string
NoDevice:
- :string
- :rename: blockDeviceMappings
SourceDestCheck:
- :structure:
Value:
- :boolean
DisableApiTermination:
- :structure:
Value:
- :boolean
InstanceType:
- :structure:
Value:
- :string
Kernel:
- :structure:
Value:
- :string
Ramdisk:
- :structure:
Value:
- :string
UserData:
- :structure:
Value:
- :string
InstanceInitiatedShutdownBehavior:
- :structure:
Value:
- :string
GroupId:
- :list:
- :string
- :rename: groups
EbsOptimized:
- :structure:
Value:
- :boolean
:outputs: {}
- :name: ModifyNetworkInterfaceAttribute
:method: :modify_network_interface_attribute
:inputs:
NetworkInterfaceId:
- :string
- :required
Description:
- :structure:
Value:
- :string
SourceDestCheck:
- :structure:
Value:
- :boolean
SecurityGroupId:
- :list:
- :string
- :rename: groups
Attachment:
- :structure:
AttachmentId:
- :string
DeleteOnTermination:
- :boolean
:outputs: {}
- :name: ModifySnapshotAttribute
:method: :modify_snapshot_attribute
:inputs:
SnapshotId:
- :string
- :required
Attribute:
- :string
OperationType:
- :string
UserId:
- :list:
- :string
- :rename: UserIds
UserGroup:
- :list:
- :string
- :rename: GroupNames
CreateVolumePermission:
- :structure:
Add:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
Group:
- :string
- :rename: Group
Remove:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
Group:
- :string
- :rename: Group
:outputs: {}
- :name: ModifyVolumeAttribute
:method: :modify_volume_attribute
:inputs:
VolumeId:
- :string
- :required
AutoEnableIO:
- :boolean
:outputs: {}
- :name: ModifyVpcAttribute
:method: :modify_vpc_attribute
:inputs:
VpcId:
- :string
- :required
- :rename: VpcId
EnableDnsSupport:
- :structure:
Value:
- :boolean
EnableDnsHostnames:
- :structure:
Value:
- :boolean
:outputs: {}
- :name: MonitorInstances
:method: :monitor_instances
:inputs:
InstanceId:
- :list:
- :string
- :required
- :rename: InstanceIds
:outputs:
:children:
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
- :name: PurchaseReservedInstancesOffering
:method: :purchase_reserved_instances_offering
:inputs:
ReservedInstancesOfferingId:
- :string
- :required
InstanceCount:
- :integer
- :required
LimitPrice:
- :structure:
Amount:
- :double
CurrencyCode:
- :string
:outputs: {}
- :name: RebootInstances
:method: :reboot_instances
:inputs:
InstanceId:
- :list:
- :string
- :required
- :rename: InstanceIds
:outputs: {}
- :name: RegisterImage
:method: :register_image
:inputs:
ImageLocation:
- :string
Name:
- :string
Description:
- :string
Architecture:
- :string
KernelId:
- :string
RamdiskId:
- :string
RootDeviceName:
- :string
BlockDeviceMapping:
- :list:
- :structure:
VirtualName:
- :string
- :rename: VirtualName
DeviceName:
- :string
- :rename: DeviceName
Ebs:
- :structure:
SnapshotId:
- :string
VolumeSize:
- :integer
DeleteOnTermination:
- :boolean
VolumeType:
- :string
Iops:
- :integer
NoDevice:
- :string
- :rename: blockDeviceMappings
:outputs: {}
- :name: ReleaseAddress
:method: :release_address
:inputs:
PublicIp:
- :string
AllocationId:
- :string
:outputs: {}
- :name: ReplaceNetworkAclAssociation
:method: :replace_network_acl_association
:inputs:
AssociationId:
- :string
- :required
NetworkAclId:
- :string
- :required
:outputs: {}
- :name: ReplaceNetworkAclEntry
:method: :replace_network_acl_entry
:inputs:
NetworkAclId:
- :string
- :required
RuleNumber:
- :integer
- :required
Protocol:
- :string
- :required
RuleAction:
- :string
- :required
Egress:
- :boolean
- :required
CidrBlock:
- :string
- :required
Icmp:
- :structure:
Type:
- :integer
Code:
- :integer
- :rename: icmpTypeCode
PortRange:
- :structure:
From:
- :integer
To:
- :integer
:outputs: {}
- :name: ReplaceRoute
:method: :replace_route
:inputs:
RouteTableId:
- :string
- :required
DestinationCidrBlock:
- :string
- :required
GatewayId:
- :string
InstanceId:
- :string
NetworkInterfaceId:
- :string
:outputs: {}
- :name: ReplaceRouteTableAssociation
:method: :replace_route_table_association
:inputs:
AssociationId:
- :string
- :required
RouteTableId:
- :string
- :required
:outputs: {}
- :name: ReportInstanceStatus
:method: :report_instance_status
:inputs:
InstanceId:
- :list:
- :string
- :rename: instances
Status:
- :string
StartTime:
- :timestamp
EndTime:
- :timestamp
ReasonCode:
- :list:
- :string
- :rename: reasonCodes
Description:
- :string
:outputs: {}
- :name: RequestSpotInstances
:method: :request_spot_instances
:inputs:
SpotPrice:
- :string
- :required
InstanceCount:
- :integer
Type:
- :string
ValidFrom:
- :timestamp
ValidUntil:
- :timestamp
LaunchGroup:
- :string
AvailabilityZoneGroup:
- :string
LaunchSpecification:
- :structure:
ImageId:
- :string
KeyName:
- :string
UserData:
- :string
AddressingType:
- :string
InstanceType:
- :string
Placement:
- :structure:
AvailabilityZone:
- :string
GroupName:
- :string
KernelId:
- :string
RamdiskId:
- :string
BlockDeviceMapping:
- :list:
- :structure:
VirtualName:
- :string
- :rename: VirtualName
DeviceName:
- :string
- :rename: DeviceName
Ebs:
- :structure:
SnapshotId:
- :string
VolumeSize:
- :integer
DeleteOnTermination:
- :boolean
VolumeType:
- :string
Iops:
- :integer
NoDevice:
- :string
- :rename: blockDeviceMappings
MonitoringEnabled:
- :boolean
SubnetId:
- :string
NetworkInterface:
- :list:
- :structure:
NetworkInterfaceId:
- :string
DeviceIndex:
- :integer
SubnetId:
- :string
Description:
- :string
PrivateIpAddress:
- :string
SecurityGroupId:
- :list:
- :string
- :rename: groups
DeleteOnTermination:
- :boolean
PrivateIpAddresses:
- :list:
- :structure:
PrivateIpAddress:
- :string
- :required
Primary:
- :boolean
- :rename: privateIpAddresses
SecondaryPrivateIpAddressCount:
- :integer
- :rename: networkInterfaces
IamInstanceProfile:
- :structure:
Arn:
- :string
Name:
- :string
EbsOptimized:
- :boolean
SecurityGroup:
- :list:
- :string
- :rename: SecurityGroups
SecurityGroupId:
- :list:
- :string
- :rename: SecurityGroupIds
:outputs:
:children:
spotInstanceRequestSet:
:ignore: true
:children:
item:
:rename: :spot_instance_request_set
:list: true
:children:
status:
:children:
updateTime:
:type: :time
validFrom:
:type: :time
validUntil:
:type: :time
launchSpecification:
:children:
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
volumeSize:
:type: :integer
deleteOnTermination:
:type: :boolean
iops:
:type: :integer
monitoringEnabled:
:type: :boolean
networkInterfaceSet:
:ignore: true
:children:
item:
:rename: :network_interface_set
:list: true
:children:
deviceIndex:
:type: :integer
SecurityGroupId:
:ignore: true
:children:
SecurityGroupId:
:rename: :security_group_id
:list: true
deleteOnTermination:
:type: :boolean
privateIpAddressesSet:
:ignore: true
:children:
item:
:rename: :private_ip_addresses_set
:list: true
:children:
primary:
:type: :boolean
secondaryPrivateIpAddressCount:
:type: :integer
ebsOptimized:
:type: :boolean
createTime:
:type: :time
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
- :name: ResetImageAttribute
:method: :reset_image_attribute
:inputs:
ImageId:
- :string
- :required
Attribute:
- :string
- :required
:outputs: {}
- :name: ResetInstanceAttribute
:method: :reset_instance_attribute
:inputs:
InstanceId:
- :string
- :required
Attribute:
- :string
- :required
:outputs: {}
- :name: ResetNetworkInterfaceAttribute
:method: :reset_network_interface_attribute
:inputs:
NetworkInterfaceId:
- :string
- :required
SourceDestCheck:
- :string
:outputs: {}
- :name: ResetSnapshotAttribute
:method: :reset_snapshot_attribute
:inputs:
SnapshotId:
- :string
- :required
Attribute:
- :string
- :required
:outputs: {}
- :name: RevokeSecurityGroupEgress
:method: :revoke_security_group_egress
:inputs:
GroupId:
- :string
- :required
SourceSecurityGroupName:
- :string
SourceSecurityGroupOwnerId:
- :string
IpProtocol:
- :string
FromPort:
- :integer
ToPort:
- :integer
CidrIp:
- :string
IpPermissions:
- :list:
- :structure:
IpProtocol:
- :string
- :rename: IpProtocol
FromPort:
- :integer
- :rename: FromPort
ToPort:
- :integer
- :rename: ToPort
Groups:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
GroupName:
- :string
- :rename: GroupName
GroupId:
- :string
- :rename: GroupId
- :rename: UserIdGroupPairs
IpRanges:
- :list:
- :structure:
CidrIp:
- :string
- :rename: CidrIp
- :rename: IpRanges
:outputs: {}
- :name: RevokeSecurityGroupIngress
:method: :revoke_security_group_ingress
:inputs:
GroupName:
- :string
GroupId:
- :string
SourceSecurityGroupName:
- :string
SourceSecurityGroupOwnerId:
- :string
IpProtocol:
- :string
FromPort:
- :integer
ToPort:
- :integer
CidrIp:
- :string
IpPermissions:
- :list:
- :structure:
IpProtocol:
- :string
- :rename: IpProtocol
FromPort:
- :integer
- :rename: FromPort
ToPort:
- :integer
- :rename: ToPort
Groups:
- :list:
- :structure:
UserId:
- :string
- :rename: UserId
GroupName:
- :string
- :rename: GroupName
GroupId:
- :string
- :rename: GroupId
- :rename: UserIdGroupPairs
IpRanges:
- :list:
- :structure:
CidrIp:
- :string
- :rename: CidrIp
- :rename: IpRanges
:outputs: {}
- :name: RunInstances
:method: :run_instances
:inputs:
ImageId:
- :string
- :required
MinCount:
- :integer
- :required
MaxCount:
- :integer
- :required
KeyName:
- :string
SecurityGroup:
- :list:
- :string
- :rename: SecurityGroups
SecurityGroupId:
- :list:
- :string
- :rename: SecurityGroupIds
UserData:
- :string
InstanceType:
- :string
Placement:
- :structure:
AvailabilityZone:
- :string
- :rename: AvailabilityZone
GroupName:
- :string
Tenancy:
- :string
KernelId:
- :string
RamdiskId:
- :string
BlockDeviceMapping:
- :list:
- :structure:
VirtualName:
- :string
- :rename: VirtualName
DeviceName:
- :string
- :rename: DeviceName
Ebs:
- :structure:
SnapshotId:
- :string
VolumeSize:
- :integer
DeleteOnTermination:
- :boolean
VolumeType:
- :string
Iops:
- :integer
NoDevice:
- :string
- :rename: BlockDeviceMappings
Monitoring:
- :structure:
Enabled:
- :boolean
- :required
SubnetId:
- :string
DisableApiTermination:
- :boolean
InstanceInitiatedShutdownBehavior:
- :string
License:
- :structure:
Pool:
- :string
PrivateIpAddress:
- :string
ClientToken:
- :string
AdditionalInfo:
- :string
NetworkInterface:
- :list:
- :structure:
NetworkInterfaceId:
- :string
DeviceIndex:
- :integer
SubnetId:
- :string
Description:
- :string
PrivateIpAddress:
- :string
SecurityGroupId:
- :list:
- :string
- :rename: groups
DeleteOnTermination:
- :boolean
PrivateIpAddressesSet:
- :list:
- :structure:
PrivateIpAddress:
- :string
- :required
Primary:
- :boolean
- :rename: privateIpAddresses
SecondaryPrivateIpAddressCount:
- :integer
- :rename: networkInterfaces
IamInstanceProfile:
- :structure:
Arn:
- :string
Name:
- :string
EbsOptimized:
- :boolean
:outputs:
:children:
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
:children:
instanceState:
:children:
code:
:type: :integer
amiLaunchIndex:
:type: :integer
productCodes:
:ignore: true
:children:
item:
:rename: :product_codes
:list: true
launchTime:
:type: :time
blockDeviceMapping:
:ignore: true
:children:
item:
:rename: :block_device_mapping
:list: true
:children:
ebs:
:children:
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
tagSet:
:ignore: true
:children:
item:
:rename: :tag_set
:list: true
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
sourceDestCheck:
:type: :boolean
networkInterfaceSet:
:ignore: true
:children:
item:
:rename: :network_interface_set
:list: true
:children:
sourceDestCheck:
:type: :boolean
groupSet:
:ignore: true
:children:
item:
:rename: :group_set
:list: true
attachment:
:children:
deviceIndex:
:type: :integer
attachTime:
:type: :time
deleteOnTermination:
:type: :boolean
privateIpAddressesSet:
:ignore: true
:children:
item:
:rename: :private_ip_addresses_set
:list: true
:children:
primary:
:type: :boolean
ebsOptimized:
:type: :boolean
- :name: StartInstances
:method: :start_instances
:inputs:
InstanceId:
- :list:
- :string
- :required
- :rename: InstanceIds
AdditionalInfo:
- :string
:outputs:
:children:
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
:children:
currentState:
:children:
code:
:type: :integer
previousState:
:children:
code:
:type: :integer
- :name: StopInstances
:method: :stop_instances
:inputs:
InstanceId:
- :list:
- :string
- :required
- :rename: InstanceIds
Force:
- :boolean
:outputs:
:children:
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
:children:
currentState:
:children:
code:
:type: :integer
previousState:
:children:
code:
:type: :integer
- :name: TerminateInstances
:method: :terminate_instances
:inputs:
InstanceId:
- :list:
- :string
- :required
- :rename: InstanceIds
:outputs:
:children:
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
:children:
currentState:
:children:
code:
:type: :integer
previousState:
:children:
code:
:type: :integer
- :name: UnassignPrivateIpAddresses
:method: :unassign_private_ip_addresses
:inputs:
NetworkInterfaceId:
- :string
- :required
PrivateIpAddress:
- :list:
- :string
- :required
- :rename: privateIpAddresses
:outputs: {}
- :name: UnmonitorInstances
:method: :unmonitor_instances
:inputs:
InstanceId:
- :list:
- :string
- :required
- :rename: InstanceIds
:outputs:
:children:
instancesSet:
:ignore: true
:children:
item:
:rename: :instances_set
:list: true
# Replace: /var/vcap/jobs/blobstore/packages/director/gem_home/gems/bosh_aws_cpi-1.5.0.pre.1657/lib/cloud/aws/instance_manager.rb
require "common/common"
module Bosh::AwsCloud
class InstanceManager
include Helpers
attr_reader :instance
attr_reader :instance_params
attr_reader :elbs
def initialize(region, registry, az_selector=nil)
@region = region
@registry = registry
@logger = Bosh::Clouds::Config.logger
@az_selector = az_selector
@instance_params = {count: 1}
end
def create(agent_id, stemcell_id, resource_pool, networks_spec, disk_locality, environment, options)
@instance_params[:image_id] = stemcell_id
@instance_params[:instance_type] = resource_pool["instance_type"]
set_user_data_parameter(networks_spec)
set_key_name_parameter(resource_pool["key_name"], options["aws"]["default_key_name"])
set_security_groups_parameter(networks_spec, options["aws"]["default_security_groups"])
set_vpc_parameters(networks_spec)
set_availability_zone_parameter(
(disk_locality || []).map { |volume_id| @region.volumes[volume_id].availability_zone.to_s },
resource_pool["availability_zone"],
(@instance_params[:subnet].availability_zone_name if @instance_params[:subnet])
)
resource_pool["use_spot"] ||= false
@logger.info("Creating new instance with: #{instance_params.inspect}")
if resource_pool["use_spot"]
security_group_ids = []
@region.security_groups.each do |group|
security_group_ids << group.security_group_id if @instance_params[:security_groups].include?(group.name)
end
spot_request_spec = create_spot_request_spec(instance_params, security_group_ids, resource_pool["spot_bid_price"])
@logger.info("Launching spot instance with: #{spot_request_spec.inspect}")
spot_instance_requests = @region.client.request_spot_instances(spot_request_spec)
@logger.info("Got spot instance requests: #{spot_instance_requests.inspect}")
Bosh::Common.retryable(sleep: instance_create_wait_time*2, tries: 20) do |tries, error|
@logger.info("Waiting for spot request instances...")
spot_instance_request_ids = spot_instance_requests[:spot_instance_request_set].map { |r| r[:spot_instance_request_id] }
response = @region.client.describe_spot_instance_requests(:spot_instance_request_ids => spot_instance_request_ids)
statuses = response[:spot_instance_request_set].map { |rr| rr[:state] }
if statuses.all? { |s| s == 'active' }
@logger.info("Spot request instances fulfilled: #{response.inspect}")
instance_id = response[:spot_instance_request_set].map { |rr| rr[:instance_id] }[0]
@instance = @region.instances[instance_id]
end
end
else
# Retry the create instance operation a couple of times if we are told that the IP
# address is in use - it can happen when the director recreates a VM and AWS
# is too slow to update its state when we have released the IP address and want to
# realocate it again.
errors = [AWS::EC2::Errors::InvalidIPAddress::InUse]
Bosh::Common.retryable(sleep: instance_create_wait_time, tries: 10, on: errors) do |tries, error|
@logger.info("Launching on demand instance...")
@logger.warn("IP address was in use: #{error}") if tries > 0
@instance = @region.instances.create(instance_params)
end
end
# We need to wait here for the instance to be running, as if we are going to
# attach to a load balancer, the instance must be running.
# If we time out, it is because the instance never gets from state running to started,
# so we signal the director that it is ok to retry the operation. At the moment this
# forever (until the operation is cancelled by the user).
begin
ResourceWait.for_instance(instance: instance, state: :running)
rescue Bosh::Common::RetryCountExceeded => e
@logger.warn("timed out waiting for #{instance.id} to be running")
raise Bosh::Clouds::VMCreationFailed.new(true)
end
@elbs = resource_pool['elbs']
attach_to_load_balancers if elbs
instance
end
def create_spot_request_spec(instance_params, security_group_ids, spot_price) {
spot_price: "#{spot_price}",
instance_count: 1,
launch_specification: {
image_id: instance_params[:image_id],
key_name: instance_params[:key_name],
instance_type: instance_params[:instance_type],
user_data: Base64.encode64(instance_params[:user_data]),
placement: {
availability_zone: instance_params[:availability_zone]
},
network_interfaces: [
{
subnet_id: instance_params[:subnet].subnet_id,
groups: security_group_ids,
device_index: 0,
private_ip_address: instance_params[:private_ip_address]
}
]
}
}
end
def terminate(instance_id, fast=false)
@instance = @region.instances[instance_id]
remove_from_load_balancers
instance.terminate
@logger.info("Deleting instance settings for '#{instance.id}'")
@registry.delete_settings(instance.id)
if fast
TagManager.tag(instance, "Name", "to be deleted")
@logger.info("Instance #{instance_id} marked to deletion")
return
end
begin
@logger.info("Deleting instance '#{instance.id}'")
ResourceWait.for_instance(instance: instance, state: :terminated)
rescue AWS::EC2::Errors::InvalidInstanceID::NotFound
# It's OK, just means that instance has already been deleted
end
end
# Soft reboots EC2 instance
# @param [String] instance_id EC2 instance id
def reboot(instance_id)
instance = @region.instances[instance_id]
# There is no trackable status change for the instance being
# rebooted, so it's up to CPI client to keep track of agent
# being ready after reboot.
# Due to this, we can't deregister the instance from any load
# balancers it might be attached to, and reattach once the
# reboot is complete, so we just have to let the load balancers
# take the instance out of rotation, and put it back in once it
# is back up again.
instance.reboot
end
def attach_to_load_balancers
elb = AWS::ELB.new
elbs.each do |load_balancer|
lb = elb.load_balancers[load_balancer]
lb.instances.register(instance)
end
end
# Determines if the instance exists.
# @param [String] instance_id EC2 instance id
def has_instance?(instance_id)
instance = @region.instances[instance_id]
instance.exists? && instance.status != :terminated
end
def remove_from_load_balancers
elb = AWS::ELB.new
elb.load_balancers.each do |load_balancer|
begin
load_balancer.instances.deregister(instance)
rescue AWS::ELB::Errors::InvalidInstance
# ignore this, as it just means it wasn't registered
end
end
end
def set_key_name_parameter(resource_pool_key_name, default_aws_key_name)
key_name = resource_pool_key_name || default_aws_key_name
instance_params[:key_name] = key_name unless key_name.nil?
end
def set_security_groups_parameter(networks_spec, default_security_groups)
security_group_names = extract_security_group_names(networks_spec)
if security_group_names.empty?
instance_params[:security_groups] = default_security_groups
else
instance_params[:security_groups] = security_group_names
end
end
def set_vpc_parameters(network_spec)
manual_network_spec = network_spec.values.select { |spec| ["manual", nil].include? spec["type"] }.first
if manual_network_spec
instance_params[:subnet] = @region.subnets[manual_network_spec["cloud_properties"]["subnet"]]
instance_params[:private_ip_address] = manual_network_spec["ip"]
end
end
def set_availability_zone_parameter(volume_zones, resource_pool_zone, subnet_zone)
availability_zone = @az_selector.common_availability_zone(volume_zones, resource_pool_zone, subnet_zone)
instance_params[:availability_zone] = availability_zone if availability_zone
end
def set_user_data_parameter(networks_spec)
user_data = {registry: {endpoint: @registry.endpoint}}
spec_with_dns = networks_spec.values.select { |spec| spec.has_key? "dns" }.first
user_data[:dns] = {nameserver: spec_with_dns["dns"]} if spec_with_dns
@instance_params[:user_data] = Yajl::Encoder.encode(user_data)
end
private
def instance_create_wait_time; 30; end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment