akashi 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ca4dbff7522ca5b3a2e37ac4f2be92a443e66cb
4
- data.tar.gz: 0277b555b90816bc0ba16a64001a6e387b4ed6c4
3
+ metadata.gz: 749f6513d50475d95503f1e6deaf545893fb2a22
4
+ data.tar.gz: a2d8f02a64d1ff5c17429e88c7e19cef43952b4b
5
5
  SHA512:
6
- metadata.gz: 6eb6682215d85eb4e4402823b7ae5bdba322b2c2fcd6cab4f34d1c80ec999046a3d60264de3ad8245b6b00713628375271814ae9a9e2dfb0ba1fbbf65917c2b5
7
- data.tar.gz: 134c5f8c3a9122204b06ffaf0bfcfe1c1bebf58d77ca126bfc790f1d36fa8e7600c4c22ce4ad622c3853f1030cc4677b1b18a21370252b643e1e105f99740f89
6
+ metadata.gz: 457867906d2214162998f21d53a0ef32807a8bd803dc918b855b4ff414108be7ccac17a9dfd1a5ab8d0c8a91d2bdc6cf88bec7173c68b723736a350a37c4c700
7
+ data.tar.gz: 6341de6d3fa94655bd176f09eda10b670827ffc67e39d864decacd6d32c0dfac5c9449029de6ff06a3ce21fabc1bd17c1e74a6915af9f29c88bf476a7fae1092
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ vendor/bundle
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- akashi (0.0.1)
4
+ akashi (0.0.2)
5
5
  activesupport
6
6
  aws-sdk
7
7
  hashie
@@ -18,14 +18,21 @@ GEM
18
18
  aws-sdk (1.43.1)
19
19
  json (~> 1.4)
20
20
  nokogiri (>= 1.4.4)
21
+ coderay (1.1.0)
21
22
  hashie (3.0.0)
22
23
  i18n (0.6.9)
23
24
  json (1.8.1)
25
+ method_source (0.8.2)
24
26
  mini_portile (0.6.0)
25
27
  minitest (5.3.4)
26
28
  nokogiri (1.6.2.1)
27
29
  mini_portile (= 0.6.0)
30
+ pry (0.10.0)
31
+ coderay (~> 1.1.0)
32
+ method_source (~> 0.8.1)
33
+ slop (~> 3.4)
28
34
  rake (10.3.2)
35
+ slop (3.5.0)
29
36
  thread_safe (0.3.4)
30
37
  tzinfo (1.2.1)
31
38
  thread_safe (~> 0.1)
@@ -36,4 +43,5 @@ PLATFORMS
36
43
  DEPENDENCIES
37
44
  akashi!
38
45
  bundler (~> 1.3)
46
+ pry
39
47
  rake
data/README.md CHANGED
@@ -22,7 +22,7 @@ Or install it yourself as:
22
22
  require "yaml"
23
23
  require "akashi"
24
24
 
25
- Akashi::Aws.config = YAML.load_file("aws.yml"))
25
+ Akashi::Aws.config = YAML.load_file("aws.yml")
26
26
 
27
27
  Akashi.application = application
28
28
  Akashi.environment = environment
@@ -31,32 +31,6 @@ Akashi.manifest = YAML.load_file("#{Akashi.name(separator: "_")}.yml")
31
31
  Akashi.send(action.intern)
32
32
  ```
33
33
 
34
- ## Configurations
35
- ### VPC
36
- Cidr block is 10.0.0.0/16.
37
-
38
- ### Roles
39
- |Role|Cidr block
40
- |---|---|
41
- |ELB|10.0.0.0/19|
42
- |SSH Gateway|10.0.32.0/19|
43
- |RDS|10.0.64.0/19|
44
- |Web Server|10.0.96.0/19|
45
-
46
- #### Allowed input
47
- |Role|Protocol|Port|Source|
48
- |---|---|---|---|
49
- |ELB|TCP|443|0.0.0.0/0|
50
- |SSH Gateway|TCP|9922|0.0.0.0/0|
51
- ||ICMP|-|0.0.0.0/0|
52
- |RDS|TCP|3306|10.0.96.0/19|
53
- |Web Server|TCP|80|10.0.0.0/19|
54
- ||TCP|9922|10.0.32.0/19|
55
- ||ICMP|-|10.0.32.0/19|
56
-
57
- ### Subnets
58
- Cidr is 24. Create subnet from cidr block of role each availability zone.
59
- Example of ELB: 10.0.0.0/24, 10.0.1.0/24, 10.0.2.0/24...
60
34
  ## Contributing
61
35
 
62
36
  1. Fork it
data/akashi.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.3"
26
26
  spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "pry"
27
28
  end
@@ -0,0 +1,117 @@
1
+ module Akashi
2
+ class Builder
3
+ def build
4
+ create_vpc
5
+ create_internet_gateway
6
+ create_subnets
7
+ create_security_groups
8
+ create_key_pair
9
+ create_ssl_certificate
10
+ create_ec2_instances
11
+ create_subnet_group
12
+ create_db_instance
13
+ create_load_balancer
14
+ end
15
+
16
+ private
17
+
18
+ def create_vpc
19
+ @vpc = Akashi::Vpc::Instance.create
20
+
21
+ @route_table = Akashi::Vpc::RouteTable.find_by(vpc_id: @vpc.id)
22
+ @route_table.name = Akashi.name
23
+ end
24
+
25
+ def create_internet_gateway
26
+ @internet_gateway = Akashi::Vpc::InternetGateway.create
27
+
28
+ @vpc.attach_internet_gateway(@internet_gateway)
29
+ @route_table.create_route(internet_gateway: @internet_gateway)
30
+ end
31
+
32
+ def create_subnets
33
+ Akashi.manifest.role.each do |role_name, role|
34
+ role.subnets.each do |subnet|
35
+ subnets[role_name] << Akashi.klass(:vpc, :subnet, role_name).
36
+ create(vpc: @vpc, availability_zone: subnet.availability_zone)
37
+ end
38
+
39
+ if !!role.internet_connection
40
+ subnets[role_name].each { |subnet| subnet.route_table = @route_table }
41
+ end
42
+ end
43
+ end
44
+
45
+ def create_security_groups
46
+ Akashi.manifest.role.each do |role_name, role|
47
+ security_group[role_name] = Akashi.klass(:vpc, :security_group, role_name).create(vpc: @vpc)
48
+ end
49
+ end
50
+
51
+ def create_key_pair
52
+ Akashi::Ec2::KeyPair.create
53
+ end
54
+
55
+ def create_ec2_instances
56
+ Akashi.manifest.role.each do |role_name, role|
57
+ role.subnets.zip(subnets[role_name]).each do |subnet, _subnet|
58
+ if !!subnet.instance
59
+ ami = Akashi::Ec2::Ami.find(subnet.instance.ami_id)
60
+
61
+ (subnet.instance.number_of_instances || 1).times do
62
+ ec2_instances[role_name] << Akashi::Ec2::Instance.create(
63
+ ami: ami,
64
+ instance_class: subnet.instance.instance_class,
65
+ security_group: security_group[role_name],
66
+ subnet: _subnet,
67
+ allocated_storage: subnet.instance.allocated_storage || 8,
68
+ )
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ ec2_instances[:gateway].each do |ec2_instance|
75
+ eip = Akashi::Vpc::ElasticIp.create
76
+ eip.associate(instance: ec2_instance)
77
+ end
78
+ end
79
+
80
+ def create_subnet_group
81
+ @subnet_group = Akashi::Rds::SubnetGroup.create(subnets: subnets[:rds])
82
+ end
83
+
84
+ def create_db_instance
85
+ @db_instance = Akashi::Rds::DbInstance.create(security_group: security_group[:rds])
86
+ end
87
+
88
+ def create_ssl_certificate
89
+ @ssl_certificate = Akashi::Elb::SslCertificate.create
90
+ end
91
+
92
+ def create_load_balancer
93
+ @load_balancer = Akashi::Elb::LoadBalancer.create(
94
+ security_group: security_group[:elb],
95
+ subnets: subnets[:elb],
96
+ ssl_certificate: @ssl_certificate,
97
+ )
98
+ @load_balancer.register_instances(ec2_instances[:web])
99
+ end
100
+
101
+ def ec2_instances
102
+ @ec2_instances ||= Hashie::Mash.new.tap do |_ec2_instances|
103
+ Akashi.role_names.each { |role_name| _ec2_instances[role_name] = [] }
104
+ end
105
+ end
106
+
107
+ def security_group
108
+ @security_group ||= Hashie::Mash.new
109
+ end
110
+
111
+ def subnets
112
+ @subnets ||= Hashie::Mash.new.tap do |_subnets|
113
+ Akashi.role_names.each { |role_name| _subnets[role_name] = [] }
114
+ end
115
+ end
116
+ end
117
+ end
@@ -8,6 +8,10 @@ module Akashi
8
8
  modify_load_balancer_attributes(options.merge({ load_balancer_name: name }))
9
9
  end
10
10
 
11
+ def register_instances(instances)
12
+ @object.instances.register(Array.wrap(instances).map(&:id))
13
+ end
14
+
11
15
  class << self
12
16
  def create(security_group:, subnets:, ssl_certificate:)
13
17
  Akashi::Aws.elb.client.create_load_balancer(
@@ -21,7 +25,13 @@ module Akashi
21
25
  instance_protocol: "HTTP",
22
26
  instance_port: 80,
23
27
  ssl_certificate_id: ssl_certificate.arn,
24
- }
28
+ },
29
+ {
30
+ protocol: "HTTP",
31
+ load_balancer_port: 80,
32
+ instance_protocol: "HTTP",
33
+ instance_port: 80,
34
+ },
25
35
  ],
26
36
  )
27
37
 
@@ -44,7 +54,7 @@ module Akashi
44
54
  unhealthy_threshold: 2,
45
55
  healthy_threshold: 2,
46
56
  )
47
- puts "Created a LoadBalancer(#{instance.name})."
57
+ puts "Created a LoadBalancer (#{instance.name})."
48
58
  end
49
59
  end
50
60
  end
@@ -1,3 +1,3 @@
1
1
  module Akashi
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,22 @@
1
+ module Akashi
2
+ class Vpc
3
+ class ElasticIp < Akashi::Vpc::Base
4
+ def_delegators :@object, :public_ip, :associate
5
+
6
+ def associate(instance:)
7
+ @object.associate(instance: instance.id)
8
+ puts "An Elastic IP (#{public_ip}) associated with an EC2 Instance (#{instance.id})."
9
+ end
10
+
11
+ class << self
12
+ def create
13
+ response = Akashi::Aws.ec2.client.allocate_address(domain: "vpc")
14
+
15
+ new(response[:public_ip]).tap do |instance|
16
+ puts "Created an Elastic IP (#{instance.public_ip})."
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ module AWS
2
+ class EC2
3
+ class ElasticIp
4
+ alias id public_ip
5
+ end
6
+ end
7
+ end
@@ -8,7 +8,11 @@ module Akashi
8
8
  {
9
9
  protocol: :tcp,
10
10
  port: 443,
11
- }
11
+ },
12
+ {
13
+ protocol: :tcp,
14
+ port: 80,
15
+ },
12
16
  ]
13
17
  end
14
18
  end
data/lib/akashi/vpc.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "akashi/vpc/base"
2
+ require "akashi/vpc/elastic_ip"
2
3
  require "akashi/vpc/instance"
3
4
  require "akashi/vpc/internet_gateway"
5
+ require "akashi/vpc/monkey_patch"
4
6
  require "akashi/vpc/route_table"
5
7
  require "akashi/vpc/security_group"
6
8
  require "akashi/vpc/subnet"
data/lib/akashi.rb CHANGED
@@ -2,6 +2,7 @@ require "active_support/core_ext"
2
2
  require "hashie/mash"
3
3
  require "akashi/aws"
4
4
  require "akashi/base"
5
+ require "akashi/builder"
5
6
  require "akashi/ec2"
6
7
  require "akashi/elb"
7
8
  require "akashi/rds"
@@ -21,58 +22,7 @@ module Akashi
21
22
  end
22
23
 
23
24
  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
- )
25
+ Akashi::Builder.new.build
76
26
  end
77
27
 
78
28
  def destroy
@@ -90,14 +40,6 @@ module Akashi
90
40
  context.constantize
91
41
  end
92
42
 
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
43
  def role_names
102
44
  @role_names ||= [
103
45
  :elb,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akashi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - asonas
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-13 00:00:00.000000000 Z
12
+ date: 2014-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: pry
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
84
98
  description: Wrapping aws-sdk
85
99
  email:
86
100
  - hzw1258@gmail.com
@@ -101,6 +115,7 @@ files:
101
115
  - lib/akashi.rb
102
116
  - lib/akashi/aws.rb
103
117
  - lib/akashi/base.rb
118
+ - lib/akashi/builder.rb
104
119
  - lib/akashi/ec2.rb
105
120
  - lib/akashi/ec2/ami.rb
106
121
  - lib/akashi/ec2/base.rb
@@ -118,8 +133,10 @@ files:
118
133
  - lib/akashi/version.rb
119
134
  - lib/akashi/vpc.rb
120
135
  - lib/akashi/vpc/base.rb
136
+ - lib/akashi/vpc/elastic_ip.rb
121
137
  - lib/akashi/vpc/instance.rb
122
138
  - lib/akashi/vpc/internet_gateway.rb
139
+ - lib/akashi/vpc/monkey_patch.rb
123
140
  - lib/akashi/vpc/route_table.rb
124
141
  - lib/akashi/vpc/security_group.rb
125
142
  - lib/akashi/vpc/security_group/base.rb