akashi 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +39 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +66 -0
  7. data/Rakefile +1 -0
  8. data/akashi.gemspec +27 -0
  9. data/config/application_enviroment.yml.example +43 -0
  10. data/config/aws.yml.exapmle +3 -0
  11. data/lib/akashi/aws.rb +37 -0
  12. data/lib/akashi/base.rb +50 -0
  13. data/lib/akashi/ec2/ami.rb +14 -0
  14. data/lib/akashi/ec2/base.rb +19 -0
  15. data/lib/akashi/ec2/instance.rb +43 -0
  16. data/lib/akashi/ec2/key_pair.rb +22 -0
  17. data/lib/akashi/ec2/monkey_patch.rb +7 -0
  18. data/lib/akashi/ec2.rb +10 -0
  19. data/lib/akashi/elb/base.rb +11 -0
  20. data/lib/akashi/elb/load_balancer.rb +53 -0
  21. data/lib/akashi/elb/ssl_certificate.rb +44 -0
  22. data/lib/akashi/elb.rb +8 -0
  23. data/lib/akashi/rds/base.rb +11 -0
  24. data/lib/akashi/rds/db_instance.rb +43 -0
  25. data/lib/akashi/rds/subnet_group.rb +18 -0
  26. data/lib/akashi/rds.rb +8 -0
  27. data/lib/akashi/version.rb +3 -0
  28. data/lib/akashi/vpc/base.rb +6 -0
  29. data/lib/akashi/vpc/instance.rb +33 -0
  30. data/lib/akashi/vpc/internet_gateway.rb +20 -0
  31. data/lib/akashi/vpc/route_table.rb +14 -0
  32. data/lib/akashi/vpc/security_group/base.rb +47 -0
  33. data/lib/akashi/vpc/security_group/elb.rb +18 -0
  34. data/lib/akashi/vpc/security_group/gateway.rb +22 -0
  35. data/lib/akashi/vpc/security_group/rds.rb +21 -0
  36. data/lib/akashi/vpc/security_group/web.rb +35 -0
  37. data/lib/akashi/vpc/security_group.rb +13 -0
  38. data/lib/akashi/vpc/subnet/base.rb +98 -0
  39. data/lib/akashi/vpc/subnet/elb.rb +13 -0
  40. data/lib/akashi/vpc/subnet/gateway.rb +13 -0
  41. data/lib/akashi/vpc/subnet/rds.rb +13 -0
  42. data/lib/akashi/vpc/subnet/web.rb +13 -0
  43. data/lib/akashi/vpc/subnet.rb +13 -0
  44. data/lib/akashi/vpc.rb +11 -0
  45. data/lib/akashi.rb +110 -0
  46. metadata +160 -0
@@ -0,0 +1,33 @@
1
+ module Akashi
2
+ class Vpc
3
+ class Instance < Akashi::Vpc::Base
4
+ def_delegators :@object, :cidr_block, :instance_tenancy, :state
5
+
6
+ def internet_gateway=(internet_gateway)
7
+ @object.internet_gateway = internet_gateway.id
8
+ puts "Attached an InternetGateway (#{internet_gateway.id}) to a VPC (#{id})."
9
+ end
10
+ alias attach_internet_gateway internet_gateway=
11
+
12
+ class << self
13
+ def create
14
+ response = Akashi::Aws.ec2.client.create_vpc(
15
+ cidr_block: "10.0.0.0/16",
16
+ instance_tenancy: "default",
17
+ )
18
+
19
+ new(response[:vpc][:vpc_id]).tap do |instance|
20
+ instance.name = Akashi.name
21
+
22
+ route_table = Akashi::Vpc::RouteTable.find_by(vpc_id: instance.id)
23
+ puts "Created a VPC (#{instance.id}). RouteTable is \"#{route_table.id}\"."
24
+ end
25
+ end
26
+
27
+ def object_class
28
+ @object_class ||= "VPC"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ module Akashi
2
+ class Vpc
3
+ class InternetGateway < Akashi::Vpc::Base
4
+ def attach(vpc)
5
+ @object.attach(vpc.id)
6
+ end
7
+
8
+ class << self
9
+ def create
10
+ response = Akashi::Aws.ec2.client.create_internet_gateway
11
+
12
+ new(response[:internet_gateway][:internet_gateway_id]).tap do |instance|
13
+ instance.name = Akashi.name
14
+ puts "Created an InternetGateway (#{instance.id})."
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ module Akashi
2
+ class Vpc
3
+ class RouteTable < Akashi::Vpc::Base
4
+ def vpc_id
5
+ @object.vpc.id
6
+ end
7
+
8
+ def create_route(internet_gateway:)
9
+ @object.create_route("0.0.0.0/0", internet_gateway: internet_gateway.id)
10
+ puts "Created a Route to an InternetGateway (#{internet_gateway.id}) on a RouteTable (#{id})."
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,47 @@
1
+ module Akashi
2
+ class Vpc
3
+ class SecurityGroup
4
+ class Base < Akashi::Vpc::Base
5
+ def_delegators :@object, :description, :name, :vpc_id, :authorize_ingress
6
+
7
+ class << self
8
+ def all
9
+ super.select { |security_group| security_group.name.end_with?("-#{role}") }
10
+ end
11
+
12
+ def create(vpc:)
13
+ response = Akashi::Aws.ec2.client.create_security_group(
14
+ vpc_id: vpc.id,
15
+ group_name: name,
16
+ description: name,
17
+ )
18
+
19
+ new(response[:group_id]).tap do |instance|
20
+ ingress_ip_permissions.each do |ip_permission|
21
+ instance.authorize_ingress(
22
+ ip_permission[:protocol],
23
+ ip_permission[:port],
24
+ *ip_permission[:sources],
25
+ )
26
+ end
27
+ instance.name = name
28
+ puts "Created a SecurityGroup (#{instance.id}) whose role is \"#{role}\"."
29
+ end
30
+ end
31
+
32
+ def name
33
+ "#{Akashi.name}-#{role}"
34
+ end
35
+
36
+ def role
37
+ self.to_s.demodulize.underscore.dasherize
38
+ end
39
+
40
+ def object_class
41
+ @object_class ||= "SecurityGroup"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,18 @@
1
+ module Akashi
2
+ class Vpc
3
+ class SecurityGroup
4
+ class Elb < Akashi::Vpc::SecurityGroup::Base
5
+ class << self
6
+ def ingress_ip_permissions
7
+ @ingress_ip_permissions ||= [
8
+ {
9
+ protocol: :tcp,
10
+ port: 443,
11
+ }
12
+ ]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module Akashi
2
+ class Vpc
3
+ class SecurityGroup
4
+ class Gateway < Akashi::Vpc::SecurityGroup::Base
5
+ class << self
6
+ def ingress_ip_permissions
7
+ @ingress_ip_permissions ||= [
8
+ {
9
+ protocol: :tcp,
10
+ port: 9922,
11
+ },
12
+ {
13
+ protocol: :icmp,
14
+ port: -1,
15
+ },
16
+ ]
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module Akashi
2
+ class Vpc
3
+ class SecurityGroup
4
+ class Rds < Akashi::Vpc::SecurityGroup::Base
5
+ class << self
6
+ def ingress_ip_permissions
7
+ @ingress_ip_permissions ||= [
8
+ {
9
+ protocol: :tcp,
10
+ port: 3306,
11
+ sources: [
12
+ "10.0.96.0/19",
13
+ ],
14
+ },
15
+ ]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ module Akashi
2
+ class Vpc
3
+ class SecurityGroup
4
+ class Web < Akashi::Vpc::SecurityGroup::Base
5
+ class << self
6
+ def ingress_ip_permissions
7
+ @ingress_ip_permissions ||= [
8
+ {
9
+ protocol: :tcp,
10
+ port: 80,
11
+ sources: [
12
+ "10.0.0.0/19",
13
+ ],
14
+ },
15
+ {
16
+ protocol: :tcp,
17
+ port: 9922,
18
+ sources: [
19
+ "10.0.32.0/19",
20
+ ],
21
+ },
22
+ {
23
+ protocol: :icmp,
24
+ port: -1,
25
+ sources: [
26
+ "10.0.32.0/19",
27
+ ],
28
+ },
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ require "akashi/vpc/security_group/base"
2
+ require "akashi/vpc/security_group/elb"
3
+ require "akashi/vpc/security_group/gateway"
4
+ require "akashi/vpc/security_group/rds"
5
+ require "akashi/vpc/security_group/web"
6
+
7
+ module Akashi
8
+ class Vpc
9
+ # Not implemented
10
+ class SecurityGroup
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,98 @@
1
+ require "ipaddr"
2
+
3
+ module Akashi
4
+ class Vpc
5
+ class Subnet
6
+ class Base < Akashi::Vpc::Base
7
+ def_delegators :@object, :availability_zone_name,
8
+ :available_ip_address_count, :state, :vpc_id
9
+
10
+ def cidr_block
11
+ IPAddr.new(@object.cidr_block)
12
+ end
13
+
14
+ def number
15
+ name.slice(/(?<=-)\d{2}\Z/)
16
+ end
17
+
18
+ def route_table=(route_table)
19
+ @object.route_table = route_table.id
20
+ puts "A Subnet (#{id}) associated with a RouteTable (#{route_table.id})."
21
+ end
22
+
23
+ class << self
24
+ def all
25
+ super.select { |subnet| base_cidr_block.include?(subnet.cidr_block) }
26
+ end
27
+
28
+ def create(vpc:, availability_zone:)
29
+ response = Akashi::Aws.ec2.client.create_subnet(
30
+ vpc_id: vpc.id,
31
+ availability_zone: availability_zone,
32
+ cidr_block: next_cidr_block(vpc: vpc).to_s + "/#{cidr}",
33
+ )
34
+
35
+ new(response[:subnet][:subnet_id]).tap do |instance|
36
+ instance.name = name(vpc: vpc)
37
+ puts <<-EOS
38
+ Created a Subnet (#{instance.id}) whose role is "#{role}". Availability zone is "#{instance.availability_zone_name}".
39
+ EOS
40
+ end
41
+ end
42
+
43
+ def current_number(vpc:)
44
+ "%02d" % where(vpc_id: vpc.id).count
45
+ end
46
+
47
+ def next_cidr_block(vpc:)
48
+ _latest_cidr_block = latest_cidr_block(vpc: vpc)
49
+
50
+ IPAddr.new(
51
+ _latest_cidr_block ? _latest_cidr_block.to_i + step : base_cidr_block.to_s,
52
+ Socket::AF_INET,
53
+ )
54
+ end
55
+
56
+ def latest_cidr_block(vpc:)
57
+ where(vpc_id: vpc.id).map(&:cidr_block).max
58
+ end
59
+
60
+ # netmask #=> IPAddr.new(4294967040, Socket::AF_INET)
61
+ # step #=> 256
62
+ def step
63
+ @step ||= (~netmask).succ.to_i
64
+ end
65
+
66
+ # netmask_binary #=> "11111111111111111111111100000000"
67
+ # netmask #=> IPAddr.new(4294967040, Socket::AF_INET)
68
+ # netmask.to_s #=> "255.255.255.0"
69
+ def netmask
70
+ @netmask ||= IPAddr.new("0b#{netmask_binary}".oct, Socket::AF_INET)
71
+ end
72
+
73
+ # cidr #=> 24
74
+ # netmask_binary #=> "11111111111111111111111100000000"
75
+ def netmask_binary
76
+ @netmask_binary ||= ("1" * cidr).ljust(32, "0")
77
+ end
78
+
79
+ def cidr
80
+ @cidr ||= 24
81
+ end
82
+
83
+ def name(vpc:)
84
+ "#{Akashi.name}-#{role}-#{current_number(vpc: vpc)}"
85
+ end
86
+
87
+ def role
88
+ self.to_s.demodulize.underscore.dasherize
89
+ end
90
+
91
+ def object_class
92
+ @object_class ||= "Subnet"
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,13 @@
1
+ module Akashi
2
+ class Vpc
3
+ class Subnet
4
+ class Elb < Akashi::Vpc::Subnet::Base
5
+ class << self
6
+ def base_cidr_block
7
+ @base_cidr_block ||= IPAddr.new("10.0.0.0/19")
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Akashi
2
+ class Vpc
3
+ class Subnet
4
+ class Gateway < Akashi::Vpc::Subnet::Base
5
+ class << self
6
+ def base_cidr_block
7
+ @base_cidr_block ||= IPAddr.new("10.0.32.0/19")
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Akashi
2
+ class Vpc
3
+ class Subnet
4
+ class Rds < Akashi::Vpc::Subnet::Base
5
+ class << self
6
+ def base_cidr_block
7
+ @base_cidr_block ||= IPAddr.new("10.0.64.0/19")
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Akashi
2
+ class Vpc
3
+ class Subnet
4
+ class Web < Akashi::Vpc::Subnet::Base
5
+ class << self
6
+ def base_cidr_block
7
+ @base_cidr_block ||= IPAddr.new("10.0.96.0/19")
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "akashi/vpc/subnet/base"
2
+ require "akashi/vpc/subnet/elb"
3
+ require "akashi/vpc/subnet/gateway"
4
+ require "akashi/vpc/subnet/rds"
5
+ require "akashi/vpc/subnet/web"
6
+
7
+ module Akashi
8
+ class Vpc
9
+ # Not implemented
10
+ class Subnet
11
+ end
12
+ end
13
+ end
data/lib/akashi/vpc.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "akashi/vpc/base"
2
+ require "akashi/vpc/instance"
3
+ require "akashi/vpc/internet_gateway"
4
+ require "akashi/vpc/route_table"
5
+ require "akashi/vpc/security_group"
6
+ require "akashi/vpc/subnet"
7
+
8
+ module Akashi
9
+ class Vpc
10
+ end
11
+ end
data/lib/akashi.rb ADDED
@@ -0,0 +1,110 @@
1
+ require "active_support/core_ext"
2
+ require "hashie/mash"
3
+ require "akashi/aws"
4
+ require "akashi/base"
5
+ require "akashi/ec2"
6
+ require "akashi/elb"
7
+ require "akashi/rds"
8
+ require "akashi/vpc"
9
+ require "akashi/version"
10
+
11
+ module Akashi
12
+ class << self
13
+ attr_accessor :application, :environment
14
+ attr_reader :manifest
15
+
16
+ def manifest=(new_value)
17
+ @manifest = Hashie::Mash.new(new_value)
18
+ unless @manifest.role.all? { |role_name, _| role_names.include?(role_name.intern) }
19
+ fail "Unknown role exists"
20
+ end
21
+ end
22
+
23
+ def build
24
+ vpc = Akashi::Vpc::Instance.create
25
+
26
+ route_table = Akashi::Vpc::RouteTable.find_by(vpc_id: vpc.id)
27
+ route_table.name = Akashi.name
28
+
29
+ internet_gateway = Akashi::Vpc::InternetGateway.create
30
+ vpc.attach_internet_gateway(internet_gateway)
31
+ route_table.create_route(internet_gateway: internet_gateway)
32
+
33
+ ssl_certificate = Akashi::Elb::SslCertificate.create
34
+
35
+ Akashi::Ec2::KeyPair.create
36
+
37
+ manifest.role.each do |role_name, role|
38
+ subnets[role_name] = []
39
+ subnet_class = klass(:vpc, :subnet, role_name)
40
+ security_group_class = klass(:vpc, :security_group, role_name)
41
+
42
+ security_group[role_name] = security_group_class.create(vpc: vpc)
43
+
44
+ role.subnets.each do |subnet|
45
+ _subnet = subnet_class.create(vpc: vpc, availability_zone: subnet.availability_zone)
46
+ subnets[role_name] << _subnet
47
+
48
+ if !!subnet.instance
49
+ ami = Akashi::Ec2::Ami.find(subnet.instance.ami_id)
50
+
51
+ (subnet.instance.number_of_instances || 1).times do
52
+ Akashi::Ec2::Instance.create(
53
+ ami: ami,
54
+ instance_class: subnet.instance.instance_class,
55
+ security_group: security_group[role_name],
56
+ subnet: _subnet,
57
+ allocated_storage: subnet.instance.allocated_storage,
58
+ )
59
+ end
60
+ end
61
+ end
62
+
63
+ if !!role.internet_connection
64
+ subnets[role_name].each { |subnet| subnet.route_table = route_table }
65
+ end
66
+ end
67
+
68
+ Akashi::Rds::SubnetGroup.create(subnets: subnets[:rds])
69
+ Akashi::Rds::DbInstance.create(security_group: security_group[:rds])
70
+
71
+ Akashi::Elb::LoadBalancer.create(
72
+ security_group: security_group[:elb],
73
+ subnets: subnets[:elb],
74
+ ssl_certificate: ssl_certificate,
75
+ )
76
+ end
77
+
78
+ def destroy
79
+ fail "Not implemented"
80
+ end
81
+
82
+ def name(separator: "-")
83
+ fail "Invalid configurations" unless (!!application && !!environment)
84
+ application + separator + environment
85
+ end
86
+
87
+ def klass(service, object, role = nil)
88
+ context = "Akashi::#{service.to_s.camelize}::#{object.to_s.camelize}"
89
+ context << "::#{role.to_s.camelize}" if !!role
90
+ context.constantize
91
+ end
92
+
93
+ def subnets
94
+ @subnets ||= Hashie::Mash.new
95
+ end
96
+
97
+ def security_group
98
+ @security_group ||= Hashie::Mash.new
99
+ end
100
+
101
+ def role_names
102
+ @role_names ||= [
103
+ :elb,
104
+ :gateway,
105
+ :rds,
106
+ :web,
107
+ ]
108
+ end
109
+ end
110
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: akashi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - asonas
8
+ - int_remain
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-06-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: aws-sdk
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: hashie
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '1.3'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.3'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: Wrapping aws-sdk
85
+ email:
86
+ - hzw1258@gmail.com
87
+ - ponde.ponde.ponde@gmail.com
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - LICENSE.txt
96
+ - README.md
97
+ - Rakefile
98
+ - akashi.gemspec
99
+ - config/application_enviroment.yml.example
100
+ - config/aws.yml.exapmle
101
+ - lib/akashi.rb
102
+ - lib/akashi/aws.rb
103
+ - lib/akashi/base.rb
104
+ - lib/akashi/ec2.rb
105
+ - lib/akashi/ec2/ami.rb
106
+ - lib/akashi/ec2/base.rb
107
+ - lib/akashi/ec2/instance.rb
108
+ - lib/akashi/ec2/key_pair.rb
109
+ - lib/akashi/ec2/monkey_patch.rb
110
+ - lib/akashi/elb.rb
111
+ - lib/akashi/elb/base.rb
112
+ - lib/akashi/elb/load_balancer.rb
113
+ - lib/akashi/elb/ssl_certificate.rb
114
+ - lib/akashi/rds.rb
115
+ - lib/akashi/rds/base.rb
116
+ - lib/akashi/rds/db_instance.rb
117
+ - lib/akashi/rds/subnet_group.rb
118
+ - lib/akashi/version.rb
119
+ - lib/akashi/vpc.rb
120
+ - lib/akashi/vpc/base.rb
121
+ - lib/akashi/vpc/instance.rb
122
+ - lib/akashi/vpc/internet_gateway.rb
123
+ - lib/akashi/vpc/route_table.rb
124
+ - lib/akashi/vpc/security_group.rb
125
+ - lib/akashi/vpc/security_group/base.rb
126
+ - lib/akashi/vpc/security_group/elb.rb
127
+ - lib/akashi/vpc/security_group/gateway.rb
128
+ - lib/akashi/vpc/security_group/rds.rb
129
+ - lib/akashi/vpc/security_group/web.rb
130
+ - lib/akashi/vpc/subnet.rb
131
+ - lib/akashi/vpc/subnet/base.rb
132
+ - lib/akashi/vpc/subnet/elb.rb
133
+ - lib/akashi/vpc/subnet/gateway.rb
134
+ - lib/akashi/vpc/subnet/rds.rb
135
+ - lib/akashi/vpc/subnet/web.rb
136
+ homepage: https://github.com/spice-life/akashi
137
+ licenses:
138
+ - MIT
139
+ metadata: {}
140
+ post_install_message:
141
+ rdoc_options: []
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 2.2.0
157
+ signing_key:
158
+ specification_version: 4
159
+ summary: Wrapping awd-sdk
160
+ test_files: []