awsum 0.5

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.
Files changed (127) hide show
  1. data/.autotest +1 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +44 -0
  6. data/LICENSE +19 -0
  7. data/README.rdoc +42 -0
  8. data/Rakefile +75 -0
  9. data/awsum.gemspec +199 -0
  10. data/lib/awsum.rb +20 -0
  11. data/lib/awsum/ec2.rb +741 -0
  12. data/lib/awsum/ec2/address.rb +67 -0
  13. data/lib/awsum/ec2/availability_zone.rb +16 -0
  14. data/lib/awsum/ec2/image.rb +62 -0
  15. data/lib/awsum/ec2/instance.rb +57 -0
  16. data/lib/awsum/ec2/keypair.rb +16 -0
  17. data/lib/awsum/ec2/parsers/address_parser.rb +61 -0
  18. data/lib/awsum/ec2/parsers/availability_zone_parser.rb +57 -0
  19. data/lib/awsum/ec2/parsers/image_parser.rb +74 -0
  20. data/lib/awsum/ec2/parsers/instance_parser.rb +90 -0
  21. data/lib/awsum/ec2/parsers/keypair_parser.rb +64 -0
  22. data/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser.rb +34 -0
  23. data/lib/awsum/ec2/parsers/region_parser.rb +56 -0
  24. data/lib/awsum/ec2/parsers/register_image_parser.rb +34 -0
  25. data/lib/awsum/ec2/parsers/reserved_instance_parser.rb +64 -0
  26. data/lib/awsum/ec2/parsers/reserved_instances_offering_parser.rb +63 -0
  27. data/lib/awsum/ec2/parsers/security_group_parser.rb +106 -0
  28. data/lib/awsum/ec2/parsers/snapshot_parser.rb +64 -0
  29. data/lib/awsum/ec2/parsers/volume_parser.rb +77 -0
  30. data/lib/awsum/ec2/region.rb +54 -0
  31. data/lib/awsum/ec2/reserved_instance.rb +24 -0
  32. data/lib/awsum/ec2/reserved_instances_offering.rb +20 -0
  33. data/lib/awsum/ec2/security_group.rb +74 -0
  34. data/lib/awsum/ec2/snapshot.rb +23 -0
  35. data/lib/awsum/ec2/volume.rb +65 -0
  36. data/lib/awsum/error.rb +53 -0
  37. data/lib/awsum/net_fix.rb +100 -0
  38. data/lib/awsum/parser.rb +18 -0
  39. data/lib/awsum/requestable.rb +216 -0
  40. data/lib/awsum/s3.rb +220 -0
  41. data/lib/awsum/s3/bucket.rb +28 -0
  42. data/lib/awsum/s3/headers.rb +24 -0
  43. data/lib/awsum/s3/object.rb +138 -0
  44. data/lib/awsum/s3/parsers/bucket_parser.rb +43 -0
  45. data/lib/awsum/support.rb +94 -0
  46. data/spec/fixtures/ec2/addresses.xml +10 -0
  47. data/spec/fixtures/ec2/allocate_address.xml +5 -0
  48. data/spec/fixtures/ec2/associate_address.xml +5 -0
  49. data/spec/fixtures/ec2/attach_volume.xml +9 -0
  50. data/spec/fixtures/ec2/authorize_ip_access.xml +5 -0
  51. data/spec/fixtures/ec2/authorize_owner_group_access.xml +5 -0
  52. data/spec/fixtures/ec2/authorize_owner_group_access_error.xml +2 -0
  53. data/spec/fixtures/ec2/availability_zones.xml +16 -0
  54. data/spec/fixtures/ec2/available_volume.xml +14 -0
  55. data/spec/fixtures/ec2/create_key_pair.xml +29 -0
  56. data/spec/fixtures/ec2/create_security_group.xml +5 -0
  57. data/spec/fixtures/ec2/create_snapshot.xml +9 -0
  58. data/spec/fixtures/ec2/create_volume.xml +10 -0
  59. data/spec/fixtures/ec2/delete_key_pair.xml +5 -0
  60. data/spec/fixtures/ec2/delete_security_group.xml +5 -0
  61. data/spec/fixtures/ec2/delete_snapshot.xml +5 -0
  62. data/spec/fixtures/ec2/delete_volume.xml +5 -0
  63. data/spec/fixtures/ec2/deregister_image.xml +5 -0
  64. data/spec/fixtures/ec2/detach_volume.xml +9 -0
  65. data/spec/fixtures/ec2/disassociate_address.xml +5 -0
  66. data/spec/fixtures/ec2/image.xml +15 -0
  67. data/spec/fixtures/ec2/images.xml +77 -0
  68. data/spec/fixtures/ec2/instance.xml +36 -0
  69. data/spec/fixtures/ec2/instances.xml +88 -0
  70. data/spec/fixtures/ec2/internal_error.xml +2 -0
  71. data/spec/fixtures/ec2/invalid_amiid_error.xml +2 -0
  72. data/spec/fixtures/ec2/invalid_request_error.xml +2 -0
  73. data/spec/fixtures/ec2/key_pairs.xml +10 -0
  74. data/spec/fixtures/ec2/purchase_reserved_instances_offering.xml +5 -0
  75. data/spec/fixtures/ec2/purchase_reserved_instances_offerings.xml +6 -0
  76. data/spec/fixtures/ec2/regions.xml +14 -0
  77. data/spec/fixtures/ec2/register_image.xml +5 -0
  78. data/spec/fixtures/ec2/release_address.xml +5 -0
  79. data/spec/fixtures/ec2/reserved_instances.xml +18 -0
  80. data/spec/fixtures/ec2/reserved_instances_offering.xml +15 -0
  81. data/spec/fixtures/ec2/reserved_instances_offerings.xml +276 -0
  82. data/spec/fixtures/ec2/revoke_ip_access.xml +5 -0
  83. data/spec/fixtures/ec2/revoke_owner_group_access.xml +5 -0
  84. data/spec/fixtures/ec2/run_instances.xml +30 -0
  85. data/spec/fixtures/ec2/security_groups.xml +159 -0
  86. data/spec/fixtures/ec2/snapshots.xml +13 -0
  87. data/spec/fixtures/ec2/terminate_instances.xml +17 -0
  88. data/spec/fixtures/ec2/unassociated_address.xml +10 -0
  89. data/spec/fixtures/ec2/volumes.xml +23 -0
  90. data/spec/fixtures/errors/invalid_parameter_value.xml +2 -0
  91. data/spec/fixtures/s3/buckets.xml +2 -0
  92. data/spec/fixtures/s3/copy_failure.xml +23 -0
  93. data/spec/fixtures/s3/invalid_request_signature.xml +5 -0
  94. data/spec/fixtures/s3/keys.xml +2 -0
  95. data/spec/lib/awsum/ec2/address_spec.rb +149 -0
  96. data/spec/lib/awsum/ec2/availability_zones_spec.rb +21 -0
  97. data/spec/lib/awsum/ec2/image_spec.rb +92 -0
  98. data/spec/lib/awsum/ec2/instance_spec.rb +125 -0
  99. data/spec/lib/awsum/ec2/keypair_spec.rb +55 -0
  100. data/spec/lib/awsum/ec2/parsers/address_parser_spec.rb +51 -0
  101. data/spec/lib/awsum/ec2/parsers/availability_zone_parser_spec.rb +28 -0
  102. data/spec/lib/awsum/ec2/parsers/image_parser_spec.rb +66 -0
  103. data/spec/lib/awsum/ec2/parsers/instance_parser_spec.rb +75 -0
  104. data/spec/lib/awsum/ec2/parsers/keypair_parser_spec.rb +74 -0
  105. data/spec/lib/awsum/ec2/parsers/purchase_reserved_instances_offering_parser_spec.rb +14 -0
  106. data/spec/lib/awsum/ec2/parsers/region_parser_spec.rb +27 -0
  107. data/spec/lib/awsum/ec2/parsers/register_image_parser_spec.rb +15 -0
  108. data/spec/lib/awsum/ec2/parsers/reserved_instance_parser_spec.rb +35 -0
  109. data/spec/lib/awsum/ec2/parsers/reserved_instances_offering_parser_spec.rb +32 -0
  110. data/spec/lib/awsum/ec2/parsers/security_group_parser_spec.rb +78 -0
  111. data/spec/lib/awsum/ec2/parsers/snapshot_parser_spec.rb +30 -0
  112. data/spec/lib/awsum/ec2/parsers/volume_parser_spec.rb +35 -0
  113. data/spec/lib/awsum/ec2/region_spec.rb +73 -0
  114. data/spec/lib/awsum/ec2/reserved_instance_spec.rb +61 -0
  115. data/spec/lib/awsum/ec2/reserved_instances_offering_spec.rb +33 -0
  116. data/spec/lib/awsum/ec2/security_group_spec.rb +179 -0
  117. data/spec/lib/awsum/ec2/snapshots_spec.rb +69 -0
  118. data/spec/lib/awsum/ec2/volume_spec.rb +107 -0
  119. data/spec/lib/awsum/ec2_spec.rb +6 -0
  120. data/spec/lib/awsum/error_spec.rb +31 -0
  121. data/spec/lib/awsum/requestable_spec.rb +126 -0
  122. data/spec/lib/awsum/s3/bucket_spec.rb +95 -0
  123. data/spec/lib/awsum/s3/object_spec.rb +128 -0
  124. data/spec/lib/awsum/s3/parsers/bucket_parser_spec.rb +41 -0
  125. data/spec/lib/awsum/s3/parsers/object_parser_spec.rb +41 -0
  126. data/spec/spec_helper.rb +16 -0
  127. metadata +240 -0
@@ -0,0 +1,64 @@
1
+ module Awsum
2
+ class Ec2
3
+ class KeyPairParser < Awsum::Parser #:nodoc:
4
+ def initialize(ec2)
5
+ @ec2 = ec2
6
+ @key_pairs = []
7
+ @text = nil
8
+ @stack = []
9
+ end
10
+
11
+ def tag_start(tag, attributes)
12
+ #Quick hack so we can use the same parser for CreateKeyPair which doesn't use the item tag to wrap the key pair information
13
+ if tag == 'CreateKeyPairResponse'
14
+ @stack << 'keySet'
15
+ end
16
+
17
+ case tag
18
+ when 'keySet'
19
+ @stack << 'keySet'
20
+ when 'item', 'CreateKeyPairResponse'
21
+ case @stack[-1]
22
+ when 'keySet'
23
+ @current = {}
24
+ @text = ''
25
+ end
26
+ end
27
+ end
28
+
29
+ def text(text)
30
+ @text << text unless @text.nil?
31
+ end
32
+
33
+ def tag_end(tag)
34
+ case tag
35
+ when 'DescribeKeyPairsResponse'
36
+ #no-op
37
+ when 'keySet'
38
+ @stack.pop
39
+ when 'item', 'CreateKeyPairResponse'
40
+ case @stack[-1]
41
+ when 'keySet'
42
+ @key_pairs << KeyPair.new(
43
+ @ec2,
44
+ @current['keyName'],
45
+ @current['keyFingerprint'],
46
+ @current['keyMaterial']
47
+ )
48
+ @text = ''
49
+ end
50
+ else
51
+ unless @text.nil?
52
+ text = @text.strip
53
+ @current[tag] = (text == '' ? nil : text)
54
+ @text = ''
55
+ end
56
+ end
57
+ end
58
+
59
+ def result
60
+ @key_pairs
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,34 @@
1
+ require 'time'
2
+
3
+ module Awsum
4
+ class Ec2
5
+ class PurchaseReservedInstancesOfferingParser < Awsum::Parser #:nodoc:
6
+ def initialize(ec2)
7
+ @ec2 = ec2
8
+ @ids = []
9
+ @text = nil
10
+ @stack = []
11
+ end
12
+
13
+ def tag_start(tag, attributes)
14
+ @text = ''
15
+ end
16
+
17
+ def text(text)
18
+ @text << text unless @text.nil?
19
+ end
20
+
21
+ def tag_end(tag)
22
+ case tag
23
+ when 'reservedInstancesId'
24
+ text = @text.strip
25
+ @ids << (text == '' ? nil : text)
26
+ end
27
+ end
28
+
29
+ def result
30
+ @ids
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,56 @@
1
+ module Awsum
2
+ class Ec2
3
+ class RegionParser < Awsum::Parser #:nodoc:
4
+ def initialize(ec2)
5
+ @ec2 = ec2
6
+ @regions = []
7
+ @text = nil
8
+ @stack = []
9
+ end
10
+
11
+ def tag_start(tag, attributes)
12
+ case tag
13
+ when 'regionInfo'
14
+ @stack << 'regionInfo'
15
+ when 'item'
16
+ case @stack[-1]
17
+ when 'regionInfo'
18
+ @current = {}
19
+ end
20
+ end
21
+ @text = ''
22
+ end
23
+
24
+ def text(text)
25
+ @text << text unless @text.nil?
26
+ end
27
+
28
+ def tag_end(tag)
29
+ case tag
30
+ when 'DescribeRegionsResponse', 'requestId'
31
+ #no-op
32
+ when 'regionInfo'
33
+ @stack.pop
34
+ when 'item'
35
+ case @stack[-1]
36
+ when 'regionInfo'
37
+ @regions << Region.new(
38
+ @ec2,
39
+ @current['regionName'],
40
+ @current['regionEndpoint']
41
+ )
42
+ end
43
+ else
44
+ unless @text.nil? || @current.nil?
45
+ text = @text.strip
46
+ @current[tag] = (text == '' ? nil : text)
47
+ end
48
+ end
49
+ end
50
+
51
+ def result
52
+ @regions
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,34 @@
1
+ module Awsum
2
+ class Ec2
3
+ class RegisterImageParser < Awsum::Parser #:nodoc:
4
+ def initialize(ec2)
5
+ @ec2 = ec2
6
+ @image = nil
7
+ @text = nil
8
+ end
9
+
10
+ def tag_start(tag, attributes)
11
+ case tag
12
+ when 'imageId'
13
+ @text = ''
14
+ end
15
+ end
16
+
17
+ def text(text)
18
+ @text << text unless @text.nil?
19
+ end
20
+
21
+ def tag_end(tag)
22
+ case tag
23
+ when 'imageId'
24
+ @image = @text
25
+ @text = nil
26
+ end
27
+ end
28
+
29
+ def result
30
+ @image
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,64 @@
1
+ module Awsum
2
+ class Ec2
3
+ class ReservedInstanceParser < Awsum::Parser #:nodoc:
4
+ def initialize(ec2)
5
+ @ec2 = ec2
6
+ @reserved_instances = []
7
+ @text = nil
8
+ @stack = []
9
+ end
10
+
11
+ def tag_start(tag, attributes)
12
+ case tag
13
+ when 'reservedInstancesSet'
14
+ @stack << 'reservedInstancesSet'
15
+ when 'item'
16
+ case @stack[-1]
17
+ when 'reservedInstancesSet'
18
+ @current = {}
19
+ end
20
+ end
21
+ @text = ''
22
+ end
23
+
24
+ def text(text)
25
+ @text << text unless @text.nil?
26
+ end
27
+
28
+ def tag_end(tag)
29
+ case tag
30
+ when 'requestId'
31
+ #no-op
32
+ when 'reservedInstancesSet'
33
+ @stack.pop
34
+ when 'item'
35
+ case @stack[-1]
36
+ when 'reservedInstancesSet'
37
+ @reserved_instances << ReservedInstance.new(
38
+ @ec2,
39
+ @current['reservedInstancesId'],
40
+ @current['instanceType'],
41
+ @current['availabilityZone'],
42
+ Time.parse(@current['start']),
43
+ @current['duration'].to_i,
44
+ @current['fixedPrice'].to_f,
45
+ @current['usagePrice'].to_f,
46
+ @current['instanceCount'].to_i,
47
+ @current['productDescription'],
48
+ @current['state']
49
+ )
50
+ end
51
+ else
52
+ unless @text.nil? || @current.nil?
53
+ text = @text.strip
54
+ @current[tag] = (text == '' ? nil : text)
55
+ end
56
+ end
57
+ end
58
+
59
+ def result
60
+ @reserved_instances
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,63 @@
1
+ require 'time'
2
+
3
+ module Awsum
4
+ class Ec2
5
+ class ReservedInstancesOfferingParser < Awsum::Parser #:nodoc:
6
+ def initialize(ec2)
7
+ @ec2 = ec2
8
+ @offerings = []
9
+ @text = nil
10
+ @stack = []
11
+ end
12
+
13
+ def tag_start(tag, attributes)
14
+ case tag
15
+ when 'reservedInstancesOfferingsSet'
16
+ @stack << 'reservedInstancesOfferingsSet'
17
+ when 'item'
18
+ case @stack[-1]
19
+ when 'reservedInstancesOfferingsSet'
20
+ @current = {}
21
+ end
22
+ end
23
+ @text = ''
24
+ end
25
+
26
+ def text(text)
27
+ @text << text unless @text.nil?
28
+ end
29
+
30
+ def tag_end(tag)
31
+ case tag
32
+ when 'requestId'
33
+ #no-op
34
+ when 'reservedInstancesOfferingsSet'
35
+ @stack.pop
36
+ when 'item'
37
+ case @stack[-1]
38
+ when 'reservedInstancesOfferingsSet'
39
+ @offerings << ReservedInstancesOffering.new(
40
+ @ec2,
41
+ @current['reservedInstancesOfferingId'],
42
+ @current['instanceType'],
43
+ @current['availabilityZone'],
44
+ @current['duration'].to_i,
45
+ @current['fixedPrice'].to_f,
46
+ @current['usagePrice'].to_f,
47
+ @current['productDescription']
48
+ )
49
+ end
50
+ else
51
+ unless @text.nil? || @current.nil?
52
+ text = @text.strip
53
+ @current[tag] = (text == '' ? nil : text)
54
+ end
55
+ end
56
+ end
57
+
58
+ def result
59
+ @offerings
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,106 @@
1
+ module Awsum
2
+ class Ec2
3
+ class SecurityGroupParser < Awsum::Parser #:nodoc:
4
+ def initialize(ec2)
5
+ @ec2 = ec2
6
+ @security_groups = []
7
+ @text = nil
8
+ @stack = []
9
+ @group_permissions = []
10
+ @ip_permissions = []
11
+ end
12
+
13
+ def tag_start(tag, attributes)
14
+ case tag
15
+ when 'securityGroupInfo'
16
+ @stack << 'securityGroupInfo'
17
+ when 'ipPermissions'
18
+ @stack << 'ipPermissions'
19
+ when 'groups'
20
+ @stack << 'groups'
21
+ when 'ipRanges'
22
+ @stack << 'ipRanges'
23
+ when 'item'
24
+ case @stack[-1]
25
+ when 'securityGroupInfo'
26
+ @current = {}
27
+ @group_permissions = []
28
+ @ip_permissions = []
29
+ @text = ''
30
+ when 'ipPermissions'
31
+ @permissions = {}
32
+ @text = ''
33
+ when 'groups'
34
+ @group_info = {}
35
+ @text = ''
36
+ when 'ipRanges'
37
+ @ip_info = {}
38
+ @text = ''
39
+ end
40
+ end
41
+ end
42
+
43
+ def text(text)
44
+ @text << text unless @text.nil?
45
+ end
46
+
47
+ def tag_end(tag)
48
+ case tag
49
+ when 'DescribeSecurityGroupsResponse', 'requestId'
50
+ #no-op
51
+ when 'securityGroupInfo', 'ipPermissions', 'groups', 'ipRanges'
52
+ @stack.pop
53
+ when 'item'
54
+ case @stack[-1]
55
+ when 'securityGroupInfo'
56
+ @security_groups << SecurityGroup.new(
57
+ @ec2,
58
+ @current['groupName'],
59
+ @current['groupDescription'],
60
+ @current['ownerId'],
61
+ @ip_permissions,
62
+ @group_permissions
63
+ )
64
+ @text = ''
65
+ when 'groups'
66
+ @group_permissions << SecurityGroup::GroupPermission.new(
67
+ @permissions['ipProtocol'],
68
+ @permissions['fromPort'],
69
+ @permissions['toPort'],
70
+ @group_info['groupName'],
71
+ @group_info['userId']
72
+ )
73
+ when 'ipRanges'
74
+ @ip_permissions << SecurityGroup::IpPermission.new(
75
+ @permissions['ipProtocol'],
76
+ @permissions['fromPort'],
77
+ @permissions['toPort'],
78
+ @ip_info['cidrIp']
79
+ )
80
+ end
81
+ else
82
+ unless @text.nil?
83
+ text = @text.strip
84
+ text = (text == '' ? nil : text)
85
+
86
+ case @stack[-1]
87
+ when 'securityGroupInfo'
88
+ @current[tag] = text
89
+ when 'ipPermissions'
90
+ @permissions[tag] = text
91
+ when 'groups'
92
+ @group_info[tag] = text
93
+ when 'ipRanges'
94
+ @ip_info[tag] = text
95
+ end
96
+ @text = ''
97
+ end
98
+ end
99
+ end
100
+
101
+ def result
102
+ @security_groups
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,64 @@
1
+ module Awsum
2
+ class Ec2
3
+ class SnapshotParser < Awsum::Parser #:nodoc:
4
+ def initialize(ec2)
5
+ @ec2 = ec2
6
+ @snapshots = []
7
+ @text = nil
8
+ @stack = []
9
+ end
10
+
11
+ def tag_start(tag, attributes)
12
+ #Quick hack so we can use the same parser for CreateSnapshot which doesn't use the item tag to wrap the snapshot information
13
+ if tag == 'CreateSnapshotResponse'
14
+ @stack << 'snapshotSet'
15
+ end
16
+
17
+ case tag
18
+ when 'snapshotSet'
19
+ @stack << 'snapshotSet'
20
+ when 'item', 'CreateSnapshotResponse'
21
+ case @stack[-1]
22
+ when 'snapshotSet'
23
+ @current = {}
24
+ end
25
+ end
26
+ @text = ''
27
+ end
28
+
29
+ def text(text)
30
+ @text << text unless @text.nil?
31
+ end
32
+
33
+ def tag_end(tag)
34
+ case tag
35
+ when 'DescribeSnapshotsResponts'
36
+ #no-op
37
+ when 'snapshotSet'
38
+ @stack.pop
39
+ when 'item', 'CreateSnapshotResponse'
40
+ case @stack[-1]
41
+ when 'snapshotSet'
42
+ @snapshots << Snapshot.new(
43
+ @ec2,
44
+ @current['snapshotId'],
45
+ @current['volumeId'],
46
+ @current['status'],
47
+ @current['startTime'].blank? ? nil :Time.parse(@current['startTime']),
48
+ @current['progress']
49
+ )
50
+ end
51
+ else
52
+ unless @text.nil? || @current.nil?
53
+ text = @text.strip
54
+ @current[tag] = (text == '' ? nil : text)
55
+ end
56
+ end
57
+ end
58
+
59
+ def result
60
+ @snapshots
61
+ end
62
+ end
63
+ end
64
+ end