active_aws 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +32 -0
- data/Gemfile.lock +153 -0
- data/LICENSE.txt +20 -0
- data/README.md +19 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/active_aws.gemspec +120 -0
- data/config/cucumber.yml +2 -0
- data/features/cloud_formation/cloud_formation.feature +160 -0
- data/features/cloud_formation/dsl/parameterized_initializer.feature +15 -0
- data/features/cloud_formation/dsl/properties.feature +2 -0
- data/features/cloud_formation/dsl/resource_definition.feature +0 -0
- data/features/cloud_formation/templates/ec2_instances.feature +79 -0
- data/features/ec2/client/ec2_client.feature +19 -0
- data/features/step_definitions/common_steps.rb +79 -0
- data/features/step_definitions/ec2_client_steps.rb +7 -0
- data/features/support/env.rb +15 -0
- data/features/support/vcr.rb +11 -0
- data/fixtures/vcr_cassettes/ActiveAws_EC2_client_feature/It_has_availability_zones_.yml +68 -0
- data/fixtures/vcr_cassettes/ActiveAws_EC2_client_feature/It_has_instances_.yml +143 -0
- data/fixtures/vcr_cassettes/ActiveAws_EC2_client_feature/It_has_regions_.yml +92 -0
- data/lib/active_aws.rb +13 -0
- data/lib/active_aws/cloud_formation.rb +11 -0
- data/lib/active_aws/cloud_formation/template.rb +111 -0
- data/lib/active_aws/cloud_formation/template/dsl_block.rb +48 -0
- data/lib/active_aws/cloud_formation/template/mappings.rb +22 -0
- data/lib/active_aws/cloud_formation/template/parameter.rb +50 -0
- data/lib/active_aws/cloud_formation/template/properties.rb +80 -0
- data/lib/active_aws/cloud_formation/template/resource.rb +218 -0
- data/lib/active_aws/cloud_formation/template/resource/auto_scaling_group.rb +11 -0
- data/lib/active_aws/cloud_formation/template/resource/ec2_instance.rb +21 -0
- data/lib/active_aws/cloud_formation/template/resource/launch_config.rb +11 -0
- data/lib/active_aws/cloud_formation/template/resource/load_balancer.rb +40 -0
- data/lib/active_aws/cloud_formation/template/resource/metadata.rb +11 -0
- data/lib/active_aws/ec2.rb +27 -0
- data/lib/active_aws/parameterized_initializer.rb +15 -0
- metadata +294 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: Parameterized Initializer module
|
2
|
+
In order to write initializers that accept a hash of attribute: value pairs easier.
|
3
|
+
|
4
|
+
Scenario: Using it
|
5
|
+
Given the following code snippet:
|
6
|
+
"""ruby
|
7
|
+
class Point
|
8
|
+
include ActiveAws::ParameterizedInitializer
|
9
|
+
|
10
|
+
attr_accessor :x, :y
|
11
|
+
end
|
12
|
+
"""
|
13
|
+
When I execute `@point = Point.new x: 2, y: 3`
|
14
|
+
Then `@point.x` should be 2
|
15
|
+
And `@point.y` should be 3
|
File without changes
|
@@ -0,0 +1,79 @@
|
|
1
|
+
Feature: CloudFormation EC2 Instance Resources
|
2
|
+
In order to write CloudFormation templates that create EC2 instances using a Ruby DSL
|
3
|
+
|
4
|
+
Scenario: create a single EC2 resource using inline syntax
|
5
|
+
Given the following template snippet:
|
6
|
+
"""ruby
|
7
|
+
resources {
|
8
|
+
ec2_instance 'node1', image_id: 'ami-d8450c8a'
|
9
|
+
}
|
10
|
+
"""
|
11
|
+
Then the template in JSON should be:
|
12
|
+
"""json
|
13
|
+
{
|
14
|
+
"AWSTemplateFormatVersion":"2010-09-09",
|
15
|
+
"Resources": {
|
16
|
+
"node1": {
|
17
|
+
"Type": "AWS::EC2::Instance",
|
18
|
+
"Properties": {
|
19
|
+
"ImageId": "ami-d8450c8a"
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
"""
|
25
|
+
|
26
|
+
Scenario: create a single EC2 resource using block syntax
|
27
|
+
Given the following template snippet:
|
28
|
+
"""ruby
|
29
|
+
resources {
|
30
|
+
ec2_instance('node1') {
|
31
|
+
image_id 'ami-e8f1c1ba'
|
32
|
+
}
|
33
|
+
}
|
34
|
+
"""
|
35
|
+
Then the template in JSON should be:
|
36
|
+
"""json
|
37
|
+
{
|
38
|
+
"AWSTemplateFormatVersion":"2010-09-09",
|
39
|
+
"Resources": {
|
40
|
+
"node1": {
|
41
|
+
"Type": "AWS::EC2::Instance",
|
42
|
+
"Properties": {
|
43
|
+
"ImageId": "ami-e8f1c1ba"
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
"""
|
49
|
+
|
50
|
+
Scenario: create a single EC2 resource with an inline EBS block device mapping
|
51
|
+
Given the following template snippet:
|
52
|
+
"""ruby
|
53
|
+
resources {
|
54
|
+
ec2_instance('node1') {
|
55
|
+
image_id 'ami-e8f1c1ba'
|
56
|
+
block_device_mapping '/dev/sdb', ebs: { volume_size: "1" }
|
57
|
+
}
|
58
|
+
}
|
59
|
+
"""
|
60
|
+
Then the template in JSON should be:
|
61
|
+
"""json
|
62
|
+
{
|
63
|
+
"AWSTemplateFormatVersion":"2010-09-09",
|
64
|
+
"Resources": {
|
65
|
+
"node1": {
|
66
|
+
"Type": "AWS::EC2::Instance",
|
67
|
+
"Properties": {
|
68
|
+
"ImageId": "ami-e8f1c1ba",
|
69
|
+
"BlockDeviceMappings" : [
|
70
|
+
{
|
71
|
+
"DeviceName": "/dev/sdb",
|
72
|
+
"Ebs": { "VolumeSize" : "1" }
|
73
|
+
}
|
74
|
+
]
|
75
|
+
}
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
"""
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Feature: ActiveAws EC2 client feature
|
2
|
+
In order to have a better EC2 client
|
3
|
+
|
4
|
+
@ec2
|
5
|
+
Scenario: It has `.regions`
|
6
|
+
Given An ActiveAws EC2 client
|
7
|
+
Then it should have 9 regions
|
8
|
+
|
9
|
+
@ec2
|
10
|
+
Scenario: It has `.instances`
|
11
|
+
Given An ActiveAws EC2 client
|
12
|
+
Then it should have 1 instances
|
13
|
+
|
14
|
+
@ec2
|
15
|
+
Scenario: It has `.availability_zones`
|
16
|
+
Given An ActiveAws EC2 client
|
17
|
+
Then it should have 2 availability zones
|
18
|
+
And the first availability zone's zone_name should be "ap-southeast-1a"
|
19
|
+
And the last availability zone's zone_name should be "ap-southeast-1b"
|
@@ -0,0 +1,79 @@
|
|
1
|
+
WORKING_DIR = File.join %w(tmp aruba)
|
2
|
+
|
3
|
+
def in_dir(dir, &block)
|
4
|
+
pwd = Dir.pwd
|
5
|
+
begin
|
6
|
+
Dir.chdir dir
|
7
|
+
block.call
|
8
|
+
ensure
|
9
|
+
Dir.chdir pwd
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Given(/^the following code snippet:$/) do |snippet|
|
14
|
+
in_dir WORKING_DIR do
|
15
|
+
eval snippet
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Given(/^the following template snippet:$/) do |snippet|
|
20
|
+
@template = ActiveAws::CloudFormation::Template.new do
|
21
|
+
eval snippet
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
When(/^I execute `([^`]+)`/) do |snippet|
|
26
|
+
eval(snippet)
|
27
|
+
end
|
28
|
+
|
29
|
+
Then(/^it should have (\d+) (.+)$/) do |value, something|
|
30
|
+
expect(@it.send(something.gsub(/\s+/,'_').tableize.intern).count).to eq(value.to_i)
|
31
|
+
end
|
32
|
+
|
33
|
+
Then(/^`(\S+)` should have (\d+) (\S+)$/) do |subject, value, something|
|
34
|
+
step "`#{subject}.#{something.pluralize}.count` should be #{value}"
|
35
|
+
end
|
36
|
+
|
37
|
+
Then(/^the (first|last) ([^']+)'s (\S+) should be `"([^"]*)"`$/) do |first_or_last, collection, attribute, expected|
|
38
|
+
step %Q{`#{collection.gsub(/\s+/,'_').tableize}.#{first_or_last}.#{attribute}` should be "#{expected}"}
|
39
|
+
end
|
40
|
+
|
41
|
+
Then(/^the "(\S+)" (\S+)'s `.([^`]+)` should be `"([^"]*)"`$/) do |element_name, collection, attribute, expected|
|
42
|
+
step %Q{`#{collection.pluralize}['#{element_name}'].#{attribute}` should be `"#{expected}"`}
|
43
|
+
end
|
44
|
+
|
45
|
+
Then(/^the "(\S+)" (\S+)'s ([^`]\S*) should be `"([^"]*)"`$/) do |element_name, collection, attribute, expected|
|
46
|
+
step %Q{the "#{element_name}" #{collection}'s `.#{attribute}` should be `"#{expected}"`'}
|
47
|
+
end
|
48
|
+
|
49
|
+
Then(/^the (first|last) (\S+) should have (\d+) (\S+)$/) do |first_or_last, collection, n, sub_collection|
|
50
|
+
step %Q{`#{collection.pluralize}.#{first_or_last}.#{sub_collection.pluralize}.count` should be #{n}}
|
51
|
+
end
|
52
|
+
|
53
|
+
Then(/^the "(\S+)" (\S+) should have (\d+) (\S+)$/) do |element_name, collection, n, sub_collection|
|
54
|
+
step %Q{`#{collection.pluralize}['#{element_name}'].#{sub_collection.pluralize}.count` should be #{n}}
|
55
|
+
end
|
56
|
+
|
57
|
+
Then(/^the `([^`]+)` should be:$/) do |something, expected|
|
58
|
+
actual = eval(something)
|
59
|
+
expect(actual).to eq(expected)
|
60
|
+
end
|
61
|
+
|
62
|
+
Then(/^the template in JSON should be:$/) do |text|
|
63
|
+
actual_json = @template.to_json
|
64
|
+
expected_equivalent = JSON::parse!(text).to_json
|
65
|
+
expect(actual_json).to eq(expected_equivalent)
|
66
|
+
end
|
67
|
+
|
68
|
+
Then(/^`([^`]+)` should be "([^"]+)"$/) do |something, string|
|
69
|
+
# Yes, we use eval. It should be safe (do we need a test for that?)
|
70
|
+
actual = eval(something).to_s
|
71
|
+
expect(actual).to eq(string)
|
72
|
+
end
|
73
|
+
|
74
|
+
Then(/^`([^`]+)` should be (\d+)$/) do |something, value|
|
75
|
+
# Yes, we use eval. It should be safe (do we need a test for that?)
|
76
|
+
actual = eval(something).to_i
|
77
|
+
expected = value.to_i
|
78
|
+
expect(actual).to eq(expected)
|
79
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Given(/^An ActiveAws EC2 client$/) do
|
2
|
+
@it = @ec2 = ActiveAws::EC2::Client.new
|
3
|
+
end
|
4
|
+
|
5
|
+
Then(/^(?:it's|the) (first|last) ([^']+)'s ([^ ]+) should be "([^"]*)"$/) do |first_or_last, collection, attribute, expected|
|
6
|
+
step %Q{`@it.#{collection.gsub(/\s+/,'_').tableize}.#{first_or_last}.#{attribute}` should be "#{expected}"}
|
7
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
if ENV['COVERAGE']
|
2
|
+
require 'simplecov'
|
3
|
+
SimpleCov.start
|
4
|
+
end
|
5
|
+
|
6
|
+
# Add this gem's lib path to the $LOAD_PATH
|
7
|
+
$: << File.expand_path(File.join('..', '..', '..', 'lib'), __FILE__)
|
8
|
+
|
9
|
+
require 'dotenv'
|
10
|
+
|
11
|
+
Dotenv.load
|
12
|
+
|
13
|
+
require 'active_aws'
|
14
|
+
|
15
|
+
require 'aruba/cucumber'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'vcr'
|
2
|
+
|
3
|
+
VCR.configure do |c|
|
4
|
+
c.cassette_library_dir = 'fixtures/vcr_cassettes'
|
5
|
+
c.hook_into :webmock # or :fakeweb
|
6
|
+
c.allow_http_connections_when_no_cassette = true
|
7
|
+
end
|
8
|
+
|
9
|
+
VCR.cucumber_tags do |t|
|
10
|
+
t.tag '@ec2', allow_unused_http_interactions: false, use_scenario_name: true
|
11
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://ec2.ap-southeast-1.amazonaws.com/
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: Action=DescribeAvailabilityZones&Version=2015-04-15
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/x-www-form-urlencoded; charset=utf-8
|
12
|
+
Accept-Encoding:
|
13
|
+
- ''
|
14
|
+
User-Agent:
|
15
|
+
- aws-sdk-ruby2/2.0.43 ruby/2.2.2 x86_64-darwin14
|
16
|
+
X-Amz-Date:
|
17
|
+
- 20150610T051058Z
|
18
|
+
Host:
|
19
|
+
- ec2.ap-southeast-1.amazonaws.com
|
20
|
+
X-Amz-Content-Sha256:
|
21
|
+
- a4541cc6cd06d90dbf380a65d6eaab5b64476077df590c1b7d34985c7100f489
|
22
|
+
Authorization:
|
23
|
+
- AWS4-HMAC-SHA256 Credential=AKIAIBEZVV2CZ3CDJ77Q/20150610/ap-southeast-1/ec2/aws4_request,
|
24
|
+
SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date,
|
25
|
+
Signature=c4d5fd2f29122f57d4a4756a17b02874cd8dec82b7948ba20a0d2d4f11db49fb
|
26
|
+
Content-Length:
|
27
|
+
- '51'
|
28
|
+
Accept:
|
29
|
+
- "*/*"
|
30
|
+
response:
|
31
|
+
status:
|
32
|
+
code: 200
|
33
|
+
message: OK
|
34
|
+
headers:
|
35
|
+
Content-Type:
|
36
|
+
- text/xml;charset=UTF-8
|
37
|
+
Transfer-Encoding:
|
38
|
+
- chunked
|
39
|
+
Vary:
|
40
|
+
- Accept-Encoding
|
41
|
+
Date:
|
42
|
+
- Wed, 10 Jun 2015 05:11:00 GMT
|
43
|
+
Server:
|
44
|
+
- AmazonEC2
|
45
|
+
body:
|
46
|
+
encoding: UTF-8
|
47
|
+
string: |-
|
48
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
49
|
+
<DescribeAvailabilityZonesResponse xmlns="http://ec2.amazonaws.com/doc/2015-04-15/">
|
50
|
+
<requestId>c81feb66-ad26-47c1-95f8-455ada6cef28</requestId>
|
51
|
+
<availabilityZoneInfo>
|
52
|
+
<item>
|
53
|
+
<zoneName>ap-southeast-1a</zoneName>
|
54
|
+
<zoneState>available</zoneState>
|
55
|
+
<regionName>ap-southeast-1</regionName>
|
56
|
+
<messageSet/>
|
57
|
+
</item>
|
58
|
+
<item>
|
59
|
+
<zoneName>ap-southeast-1b</zoneName>
|
60
|
+
<zoneState>available</zoneState>
|
61
|
+
<regionName>ap-southeast-1</regionName>
|
62
|
+
<messageSet/>
|
63
|
+
</item>
|
64
|
+
</availabilityZoneInfo>
|
65
|
+
</DescribeAvailabilityZonesResponse>
|
66
|
+
http_version:
|
67
|
+
recorded_at: Wed, 10 Jun 2015 05:11:01 GMT
|
68
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,143 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://ec2.ap-southeast-1.amazonaws.com/
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: Action=DescribeInstances&Version=2015-04-15
|
9
|
+
headers:
|
10
|
+
Content-Type:
|
11
|
+
- application/x-www-form-urlencoded; charset=utf-8
|
12
|
+
Accept-Encoding:
|
13
|
+
- ''
|
14
|
+
User-Agent:
|
15
|
+
- aws-sdk-ruby2/2.0.43 ruby/2.2.2 x86_64-darwin14
|
16
|
+
X-Amz-Date:
|
17
|
+
- 20150607T012355Z
|
18
|
+
Host:
|
19
|
+
- ec2.ap-southeast-1.amazonaws.com
|
20
|
+
X-Amz-Content-Sha256:
|
21
|
+
- 5cf362095e1c4a19ec76902847415d1ebb7d43beaf47280960f29c059a1ed2d3
|
22
|
+
Authorization:
|
23
|
+
- AWS4-HMAC-SHA256 Credential=AKIAIO3PFOLM7KKTQZJQ/20150607/ap-southeast-1/ec2/aws4_request,
|
24
|
+
SignedHeaders=content-type;host;user-agent;x-amz-content-sha256;x-amz-date,
|
25
|
+
Signature=677f3cccee6b9ef78399ebd2b44594c6a981e7f426bf1c363a9ff71718015c41
|
26
|
+
Content-Length:
|
27
|
+
- '43'
|
28
|
+
Accept:
|
29
|
+
- "*/*"
|
30
|
+
response:
|
31
|
+
status:
|
32
|
+
code: 200
|
33
|
+
message: OK
|
34
|
+
headers:
|
35
|
+
Content-Type:
|
36
|
+
- text/xml;charset=UTF-8
|
37
|
+
Transfer-Encoding:
|
38
|
+
- chunked
|
39
|
+
Vary:
|
40
|
+
- Accept-Encoding
|
41
|
+
Date:
|
42
|
+
- Sun, 07 Jun 2015 01:23:55 GMT
|
43
|
+
Server:
|
44
|
+
- AmazonEC2
|
45
|
+
body:
|
46
|
+
encoding: UTF-8
|
47
|
+
string: |-
|
48
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
49
|
+
<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2015-04-15/">
|
50
|
+
<requestId>be56b9e5-f938-4398-a8e0-969e3dd566b0</requestId>
|
51
|
+
<reservationSet>
|
52
|
+
<item>
|
53
|
+
<reservationId>r-009ef4cd</reservationId>
|
54
|
+
<ownerId>908941582419</ownerId>
|
55
|
+
<groupSet>
|
56
|
+
<item>
|
57
|
+
<groupId>sg-c5ce9590</groupId>
|
58
|
+
<groupName>solarch-stage1-Stage1SecGrp-1ICNCY2FEZSD9</groupName>
|
59
|
+
</item>
|
60
|
+
</groupSet>
|
61
|
+
<instancesSet>
|
62
|
+
<item>
|
63
|
+
<instanceId>i-7291bcbf</instanceId>
|
64
|
+
<imageId>ami-e8f1c1ba</imageId>
|
65
|
+
<instanceState>
|
66
|
+
<code>16</code>
|
67
|
+
<name>running</name>
|
68
|
+
</instanceState>
|
69
|
+
<privateDnsName>ip-10-144-24-114.ap-southeast-1.compute.internal</privateDnsName>
|
70
|
+
<dnsName>ec2-54-179-51-18.ap-southeast-1.compute.amazonaws.com</dnsName>
|
71
|
+
<reason/>
|
72
|
+
<keyName>aisrael</keyName>
|
73
|
+
<amiLaunchIndex>0</amiLaunchIndex>
|
74
|
+
<productCodes/>
|
75
|
+
<instanceType>t1.micro</instanceType>
|
76
|
+
<launchTime>2015-06-05T19:02:52.000Z</launchTime>
|
77
|
+
<placement>
|
78
|
+
<availabilityZone>ap-southeast-1a</availabilityZone>
|
79
|
+
<groupName/>
|
80
|
+
<tenancy>default</tenancy>
|
81
|
+
</placement>
|
82
|
+
<kernelId>aki-503e7402</kernelId>
|
83
|
+
<monitoring>
|
84
|
+
<state>disabled</state>
|
85
|
+
</monitoring>
|
86
|
+
<privateIpAddress>10.144.24.114</privateIpAddress>
|
87
|
+
<ipAddress>54.179.51.18</ipAddress>
|
88
|
+
<groupSet>
|
89
|
+
<item>
|
90
|
+
<groupId>sg-c5ce9590</groupId>
|
91
|
+
<groupName>solarch-stage1-Stage1SecGrp-1ICNCY2FEZSD9</groupName>
|
92
|
+
</item>
|
93
|
+
</groupSet>
|
94
|
+
<architecture>x86_64</architecture>
|
95
|
+
<rootDeviceType>ebs</rootDeviceType>
|
96
|
+
<rootDeviceName>/dev/sda1</rootDeviceName>
|
97
|
+
<blockDeviceMapping>
|
98
|
+
<item>
|
99
|
+
<deviceName>/dev/sda1</deviceName>
|
100
|
+
<ebs>
|
101
|
+
<volumeId>vol-e038c808</volumeId>
|
102
|
+
<status>attached</status>
|
103
|
+
<attachTime>2015-06-05T19:02:55.000Z</attachTime>
|
104
|
+
<deleteOnTermination>true</deleteOnTermination>
|
105
|
+
</ebs>
|
106
|
+
</item>
|
107
|
+
<item>
|
108
|
+
<deviceName>/dev/sdb</deviceName>
|
109
|
+
<ebs>
|
110
|
+
<volumeId>vol-ff38c817</volumeId>
|
111
|
+
<status>attached</status>
|
112
|
+
<attachTime>2015-06-05T19:02:55.000Z</attachTime>
|
113
|
+
<deleteOnTermination>true</deleteOnTermination>
|
114
|
+
</ebs>
|
115
|
+
</item>
|
116
|
+
</blockDeviceMapping>
|
117
|
+
<virtualizationType>paravirtual</virtualizationType>
|
118
|
+
<clientToken>solar-Stage-AM7UD4S3SDMI</clientToken>
|
119
|
+
<tagSet>
|
120
|
+
<item>
|
121
|
+
<key>aws:cloudformation:stack-name</key>
|
122
|
+
<value>solarch-stage1</value>
|
123
|
+
</item>
|
124
|
+
<item>
|
125
|
+
<key>aws:cloudformation:stack-id</key>
|
126
|
+
<value>arn:aws:cloudformation:ap-southeast-1:908941582419:stack/solarch-stage1/625f7f80-0bb5-11e5-8b38-50018233b2b4</value>
|
127
|
+
</item>
|
128
|
+
<item>
|
129
|
+
<key>aws:cloudformation:logical-id</key>
|
130
|
+
<value>Stage1Instance</value>
|
131
|
+
</item>
|
132
|
+
</tagSet>
|
133
|
+
<hypervisor>xen</hypervisor>
|
134
|
+
<networkInterfaceSet/>
|
135
|
+
<ebsOptimized>false</ebsOptimized>
|
136
|
+
</item>
|
137
|
+
</instancesSet>
|
138
|
+
</item>
|
139
|
+
</reservationSet>
|
140
|
+
</DescribeInstancesResponse>
|
141
|
+
http_version:
|
142
|
+
recorded_at: Sun, 07 Jun 2015 01:23:56 GMT
|
143
|
+
recorded_with: VCR 2.9.3
|