draw_cloud 0.0.1

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 (62) hide show
  1. data/README.md +22 -0
  2. data/lib/draw_cloud.rb +75 -0
  3. data/lib/draw_cloud/as_group.rb +104 -0
  4. data/lib/draw_cloud/as_group.rb~ +54 -0
  5. data/lib/draw_cloud/as_launch_configuration.rb +71 -0
  6. data/lib/draw_cloud/as_launch_configuration.rb~ +50 -0
  7. data/lib/draw_cloud/base.rb +264 -0
  8. data/lib/draw_cloud/base64_func.rb +30 -0
  9. data/lib/draw_cloud/configuration.rb +61 -0
  10. data/lib/draw_cloud/configuration.rb~ +64 -0
  11. data/lib/draw_cloud/ec2_instance.rb +141 -0
  12. data/lib/draw_cloud/ec2_instance.rb~ +78 -0
  13. data/lib/draw_cloud/ec2_instance_template.rb +29 -0
  14. data/lib/draw_cloud/ec2_instance_template.rb~ +36 -0
  15. data/lib/draw_cloud/elastic_ip.rb +97 -0
  16. data/lib/draw_cloud/elastic_ip.rb~ +19 -0
  17. data/lib/draw_cloud/get_att_func.rb +31 -0
  18. data/lib/draw_cloud/get_att_func.rb~ +19 -0
  19. data/lib/draw_cloud/iam_access_key.rb +53 -0
  20. data/lib/draw_cloud/iam_access_key.rb~ +43 -0
  21. data/lib/draw_cloud/iam_policy.rb +71 -0
  22. data/lib/draw_cloud/iam_policy.rb~ +41 -0
  23. data/lib/draw_cloud/iam_user.rb +53 -0
  24. data/lib/draw_cloud/iam_user.rb~ +44 -0
  25. data/lib/draw_cloud/internet_gateway.rb +66 -0
  26. data/lib/draw_cloud/join_func.rb +31 -0
  27. data/lib/draw_cloud/join_func.rb~ +24 -0
  28. data/lib/draw_cloud/locations.rb +25 -0
  29. data/lib/draw_cloud/locations.rb~ +53 -0
  30. data/lib/draw_cloud/map.rb +65 -0
  31. data/lib/draw_cloud/network_acl.rb +91 -0
  32. data/lib/draw_cloud/network_acl.rb~ +36 -0
  33. data/lib/draw_cloud/network_acl_entry.rb +110 -0
  34. data/lib/draw_cloud/network_acl_entry.rb~ +36 -0
  35. data/lib/draw_cloud/network_interface.rb +71 -0
  36. data/lib/draw_cloud/network_interface.rb~ +46 -0
  37. data/lib/draw_cloud/output.rb +38 -0
  38. data/lib/draw_cloud/output.rb~ +39 -0
  39. data/lib/draw_cloud/parameter.rb +58 -0
  40. data/lib/draw_cloud/parameter.rb~ +30 -0
  41. data/lib/draw_cloud/rds_instance.rb +117 -0
  42. data/lib/draw_cloud/rds_security_group.rb +57 -0
  43. data/lib/draw_cloud/route_table.rb +56 -0
  44. data/lib/draw_cloud/route_table_entry.rb +59 -0
  45. data/lib/draw_cloud/route_table_entry.rb~ +33 -0
  46. data/lib/draw_cloud/s3_bucket.rb~ +41 -0
  47. data/lib/draw_cloud/security_group.rb +85 -0
  48. data/lib/draw_cloud/security_group.rb~ +71 -0
  49. data/lib/draw_cloud/service.rb~ +75 -0
  50. data/lib/draw_cloud/simple_ref.rb +30 -0
  51. data/lib/draw_cloud/simple_ref.rb~ +17 -0
  52. data/lib/draw_cloud/sns_topic.rb +58 -0
  53. data/lib/draw_cloud/sns_topic.rb~ +39 -0
  54. data/lib/draw_cloud/subnet.rb +104 -0
  55. data/lib/draw_cloud/subnet.rb~ +56 -0
  56. data/lib/draw_cloud/utilities.rb +65 -0
  57. data/lib/draw_cloud/version.rb +3 -0
  58. data/lib/draw_cloud/vpc.rb +57 -0
  59. data/lib/draw_cloud/vpc.rb~ +55 -0
  60. data/lib/draw_cloud/wait_handle.rb +78 -0
  61. data/lib/draw_cloud/wait_handle.rb~ +10 -0
  62. metadata +195 -0
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright (c) 2012, SweetSpot Diabetes Care, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
6
+ # may not use this work except in compliance with the License. You may
7
+ # obtain a copy of the License in the LICENSE file, or at:
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied. See the License for the specific language governing
15
+ # permissions and limitations under the License.
16
+
17
+ #
18
+
19
+ module DrawCloud
20
+ class RouteTable < Base
21
+ attr_accessor :name, :routes
22
+ def initialize(name, options={}, &block)
23
+ @name = name
24
+ @routes = []
25
+ super(options, &block)
26
+ end
27
+
28
+ def route_table
29
+ self
30
+ end
31
+
32
+ def to(name, to_cidr, options={})
33
+ raise(Exeception, "No :via specified") unless options[:via]
34
+ @routes << RouteTableEntry.new(name, to_cidr, options[:via], options.merge(:parent => self))
35
+ end
36
+
37
+ def load_into_config(config)
38
+ config.cf_add_resource resource_name, self
39
+ @routes.each {|r| config.cf_add_resource(r.resource_name, r)}
40
+ super(config)
41
+ end
42
+
43
+ def resource_name
44
+ resource_style(name) + "Table"
45
+ end
46
+
47
+ def to_h
48
+ h = {
49
+ "Type" => "AWS::EC2::RouteTable",
50
+ "Properties" => {}
51
+ }
52
+ h["Properties"]["VpcId"] = DrawCloud.ref(vpc) if vpc
53
+ add_standard_properties(h)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright (c) 2012, SweetSpot Diabetes Care, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
6
+ # may not use this work except in compliance with the License. You may
7
+ # obtain a copy of the License in the LICENSE file, or at:
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied. See the License for the specific language governing
15
+ # permissions and limitations under the License.
16
+
17
+ #
18
+
19
+ module DrawCloud
20
+ class RouteTableEntry < Base
21
+ attr_accessor :name, :to, :via
22
+ def initialize(name, to, via, options={})
23
+ @name = name
24
+ @to = to
25
+ @via = via
26
+ super(options)
27
+ end
28
+
29
+ def load_into_config(config)
30
+ # FIXME: emit error if no table attached
31
+ config.cf_add_resource resource_name, self
32
+ super(config)
33
+ end
34
+
35
+ def resource_name
36
+ route_table.resource_name + "To" + resource_style(name)
37
+ end
38
+
39
+ def to_h
40
+ h = {
41
+ "Type" => "AWS::EC2::Route",
42
+ "Properties" => {
43
+ "RouteTableId" => DrawCloud.ref(route_table),
44
+ "DestinationCidrBlock" => to,
45
+ }
46
+ }
47
+ if via.nil?
48
+ throw ArgumentError, "Route #{resource_name} requires :via"
49
+ elsif via.internet_gateway
50
+ h["Properties"]["GatewayId"] = DrawCloud.ref(via.internet_gateway)
51
+ # TODO: ["NetworkInterfaceId"]
52
+ elsif via.ec2_instance
53
+ h["Properties"]["InstanceId"] = DrawCloud.ref(via.ec2_instance)
54
+ end
55
+
56
+ add_standard_properties(h)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,33 @@
1
+ module DrawCloud
2
+ class RouteTableEntry
3
+ include Base
4
+
5
+ attr_accessor :name, :to, :via, :route_table
6
+ def initialize(name, to, via, options={})
7
+ @name = name
8
+ @to = to
9
+ @via = via
10
+ @route_table = options.fetch(:route_table, nil)
11
+ end
12
+
13
+ def load_into_config(config)
14
+ # FIXME: emit error if no table attached
15
+ config.cf_add_resource resource_name, self
16
+ end
17
+
18
+ def resource_name
19
+ route_table.resource_name + "To" + resource_style(name)
20
+ end
21
+
22
+ def to_h
23
+ {
24
+ "Type" => "AWS::EC2::Route",
25
+ "Properties" => {
26
+ "RouteTableId" => route_table.ref,
27
+ "DestinationCdrBlock" => to,
28
+ "GatewayId" => via.ref,
29
+ }
30
+ }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright (c) 2012, SweetSpot Diabetes Care, Inc.
4
+ # License:: All rights reserved
5
+ #
6
+
7
+ module DrawCloud
8
+ class S3Bucket < Base
9
+ attr_accessor( :name )
10
+
11
+ def initialize(name, options={}, &block)
12
+ @name = name
13
+ @groups = []
14
+ @policies = []
15
+ super(options, &block)
16
+ end
17
+
18
+ def iam_user
19
+ self
20
+ end
21
+
22
+ def load_into_config(config)
23
+ config.cf_add_resource resource_name, self
24
+ super(config)
25
+ end
26
+
27
+ def to_h
28
+ h = {
29
+ "Type" => "AWS::IAM::User",
30
+ "Properties" => {
31
+ }
32
+ }
33
+ h["Properties"]["Path"] = path if path
34
+ h["Properties"]["Groups"] = groups.collect {|g| DrawCloud.ref(g)} if (groups && !groups.empty?)
35
+ h["Properties"]["Policies"] = policies.collect {|p| DrawCloud.ref(p)} if (policies && !policies.empty?)
36
+ h["Properties"]["LoginProfile"] = login_profile if login_profile
37
+ h["Properties"]["LoginProfile"] = {"Password" => password} if (password && !h["Properties"].key?("LoginProfile"))
38
+ add_standard_properties(h)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,85 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright (c) 2012, SweetSpot Diabetes Care, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
6
+ # may not use this work except in compliance with the License. You may
7
+ # obtain a copy of the License in the LICENSE file, or at:
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied. See the License for the specific language governing
15
+ # permissions and limitations under the License.
16
+
17
+ #
18
+
19
+ module DrawCloud
20
+ class SecurityGroup < Base
21
+
22
+ attr_accessor :name, :description, :ingress_rules
23
+ def initialize(name, description=nil, options={}, &block)
24
+ @name = name
25
+ @description = description || name.to_s
26
+ @ingress_rules = []
27
+ super(options, &block)
28
+ end
29
+
30
+ def security_group
31
+ self
32
+ end
33
+
34
+ def allow_security_group_in(protocol, source_security_group_id, from_port, to_port)
35
+ ingress_rules << {
36
+ "IpProtocol" => protocol.to_s,
37
+ "SourceSecurityGroupId" => DrawCloud.ref(source_security_group_id),
38
+ "FromPort" => from_port.to_s,
39
+ "ToPort" => to_port.to_s
40
+ }
41
+ end
42
+
43
+ def allow_cidr_in(protocol, cidr, from_port, to_port)
44
+ ingress_rules << {
45
+ "IpProtocol" => protocol.to_s,
46
+ "CidrIp" => cidr,
47
+ "FromPort" => from_port.to_s,
48
+ "ToPort" => to_port.to_s
49
+ }
50
+ end
51
+
52
+ def provides(services, options={})
53
+ end
54
+
55
+ def consumes(services, options={})
56
+ end
57
+
58
+ def load_into_config(config)
59
+ config.cf_add_resource resource_name, self
60
+ super(config)
61
+ end
62
+
63
+ def resource_name
64
+ resource_style(name) + "SecurityGroup"
65
+ end
66
+
67
+ def check_validity
68
+ raise(ArgumentError, "Bad description for #{name.inspect} => #{description.inspect}. Must be [a-zA-Z0-9_ -]{0,255}") unless description =~ /^[a-zA-Z0-9_ -]{0,255}$/
69
+ end
70
+
71
+ def to_h
72
+ check_validity
73
+ h = {
74
+ "Type" => "AWS::EC2::SecurityGroup",
75
+ "Properties" => {
76
+ "GroupDescription" => description,
77
+ "SecurityGroupIngress" => ingress_rules,
78
+ "SecurityGroupEgress" => [],
79
+ }
80
+ }
81
+ h["Properties"]["VpcId"] = DrawCloud.ref(vpc) if vpc
82
+ add_standard_properties(h)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,71 @@
1
+ module DrawCloud
2
+ class SecurityGroup
3
+ include Base
4
+
5
+ attr_accessor :vpc, :name, :description
6
+ def initialize(name, options={}, &block)
7
+ @name = name
8
+ @vpc = options.fetch(:vpc, nil)
9
+ @entries = []
10
+ self.instance_exec(self, &block) if block
11
+ end
12
+
13
+ def allow_in(protocol, cidr=:any, ports_or_types=[])
14
+ add_entry :allow, protocol, :ingress, cidr, ports_or_types
15
+ end
16
+
17
+ def allow_out(protocol, cidr=:any, ports_or_types=[])
18
+ add_entry :allow, protocol, :egress, cidr, ports_or_types
19
+ end
20
+
21
+ def deny_in(protocol, cidr=:any, ports_or_types=[])
22
+ add_entry :deny, protocol, :ingress, cidr, ports_or_types
23
+ end
24
+
25
+ def deny_out(protocol, cidr=:any, ports_or_types=[])
26
+ add_entry :deny, protocol, :egress, cidr, ports_or_types
27
+ end
28
+
29
+ def provides(service)
30
+ end
31
+
32
+ def consumes(service)
33
+ end
34
+
35
+ def add_entry(action, protocol, direction, cidr, ports_or_types)
36
+ #entries.concat NetworkAclEntry.entries_from_spec(action, protocol, direction,
37
+ # cidr, ports_or_types, :network_acl => self)
38
+ end
39
+ private :add_entry
40
+
41
+ def load_into_config(config)
42
+ config.cf_add_resource resource_name, self
43
+ # ingress_index = 1
44
+ # egress_index = 1
45
+ # entries.each do |e|
46
+ # if e.outgoing?
47
+ # e.index = egress_index * 10
48
+ # egress_index += 1
49
+ # else
50
+ # e.index = ingress_index * 10
51
+ # ingress_index += 1
52
+ # end
53
+
54
+ # e.load_into_config(config)
55
+ # end
56
+ end
57
+
58
+ def resource_name
59
+ resource_style(name) + "SecurityGroup"
60
+ end
61
+
62
+ def to_h
63
+ h = {
64
+ "Type" => "AWS::EC2::SecurityGroup",
65
+ "Properties" => {}
66
+ }
67
+ h["Properties"]["VpcId"] = vpc.ref if vpc
68
+ h
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright (c) 2012, SweetSpot Diabetes Care, Inc.
4
+ # License:: All rights reserved
5
+ #
6
+
7
+ module DrawCloud
8
+ class Service
9
+ attr_accessor :name, :description
10
+ def initialize(name, description=nil, options={}, &block)
11
+ @name = name
12
+ @description = description || name.to_s
13
+ @entries = []
14
+ super(options, &block)
15
+ end
16
+
17
+ def security_group
18
+ self
19
+ end
20
+
21
+ def allow_in(protocol, cidr=:any, ports_or_types=[])
22
+ add_entry :allow, protocol, :ingress, cidr, ports_or_types
23
+ end
24
+
25
+ def allow_out(protocol, cidr=:any, ports_or_types=[])
26
+ add_entry :allow, protocol, :egress, cidr, ports_or_types
27
+ end
28
+
29
+ def provides(services, options={})
30
+ end
31
+
32
+ def consumes(services, options={})
33
+ end
34
+
35
+ def add_entry(action, protocol, direction, cidr, ports_or_types)
36
+ #entries.concat NetworkAclEntry.entries_from_spec(action, protocol, direction,
37
+ # cidr, ports_or_types, :network_acl => self)
38
+ end
39
+ private :add_entry
40
+
41
+ def load_into_config(config)
42
+ config.cf_add_resource resource_name, self
43
+ super(config)
44
+ end
45
+
46
+ def resource_name
47
+ resource_style(name) + "SecurityGroup"
48
+ end
49
+
50
+ def check_validity
51
+ raise(ArgumentError, "Bad description for #{name.inspect} => #{description.inspect}. Must be [a-zA-Z0-9_ -]{0,255}") unless description =~ /^[a-zA-Z0-9_ -]{0,255}$/
52
+ end
53
+
54
+ def to_h
55
+ check_validity
56
+ h = {
57
+ "Type" => "AWS::EC2::SecurityGroup",
58
+ "Properties" => {
59
+ "GroupDescription" => description,
60
+ "SecurityGroupIngress" => [],
61
+ "SecurityGroupEgress" => [],
62
+ }
63
+ }
64
+ h["Properties"]["VpcId"] = DrawCloud.ref(vpc) if vpc
65
+ # HACK HACK HACK
66
+ h["Properties"]["SecurityGroupIngress"] << {
67
+ "IpProtocol" => "-1",
68
+ "CidrIp" => "0.0.0.0/0",
69
+ "FromPort" => "-1",
70
+ "ToPort" => "-1",
71
+ }
72
+ add_standard_properties(h)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright:: Copyright (c) 2012, SweetSpot Diabetes Care, Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
6
+ # may not use this work except in compliance with the License. You may
7
+ # obtain a copy of the License in the LICENSE file, or at:
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14
+ # implied. See the License for the specific language governing
15
+ # permissions and limitations under the License.
16
+
17
+ #
18
+
19
+ module DrawCloud
20
+ class SimpleRef
21
+ attr_accessor :literal
22
+ def initialize(literal)
23
+ @literal = literal
24
+ end
25
+
26
+ def ref
27
+ {"Ref" => literal}
28
+ end
29
+ end
30
+ end