rig 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/conf/accounts/default.yml +29 -2
- data/conf/config.yml +26 -3
- data/lib/rig/capistrano.rb +5 -5
- data/lib/rig/command.rb +1 -1
- data/lib/rig/command/balancer/destroy.rb +1 -1
- data/lib/rig/command/balancer/list.rb +1 -1
- data/lib/rig/command/balancer/view.rb +1 -1
- data/lib/rig/command/dns/create.rb +1 -1
- data/lib/rig/command/dns/destroy.rb +1 -1
- data/lib/rig/command/dns/edit.rb +2 -2
- data/lib/rig/command/dns/list.rb +2 -2
- data/lib/rig/command/environment/create.rb +2 -2
- data/lib/rig/command/environment/destroy.rb +1 -1
- data/lib/rig/command/environment/list.rb +2 -2
- data/lib/rig/command/instance/destroy.rb +2 -2
- data/lib/rig/command/instance/list.rb +1 -1
- data/lib/rig/command/instance/tag/get.rb +1 -1
- data/lib/rig/command/instance/tag/remove.rb +1 -1
- data/lib/rig/command/instance/tag/set.rb +1 -1
- data/lib/rig/command/instance/view.rb +1 -1
- data/lib/rig/command/keypair/list.rb +1 -1
- data/lib/rig/command/main.rb +9 -1
- data/lib/rig/command/ssh.rb +1 -1
- data/lib/rig/config.rb +11 -17
- data/lib/rig/model.rb +3 -0
- data/lib/rig/model/account.rb +25 -0
- data/lib/rig/{cloud → model}/balancer.rb +4 -4
- data/lib/rig/{cloud → model}/connection.rb +1 -1
- data/lib/rig/{cloud → model}/dns.rb +7 -7
- data/lib/rig/{cloud → model}/environment.rb +68 -42
- data/lib/rig/{cloud → model}/instance.rb +8 -8
- data/lib/rig/model/template.rb +34 -0
- data/lib/rig/{cloud → model}/userdata.rb +18 -16
- data/lib/rig/version.rb +1 -1
- metadata +13 -11
- data/lib/rig/cloud.rb +0 -3
data/conf/accounts/default.yml
CHANGED
@@ -1,14 +1,41 @@
|
|
1
|
+
# The region for this account.
|
2
|
+
# Each account can have a different region, so you can
|
3
|
+
# manage deployments in different regions easily.
|
4
|
+
region: us-east-1
|
1
5
|
|
6
|
+
# The DNS zone to manage.
|
7
|
+
# Generally this will be different for each account,
|
8
|
+
# but it is possible to have all of your accounts
|
9
|
+
# managed under a single zone... IF you are using
|
10
|
+
# the same DNS provider for all of your accounts.
|
11
|
+
dns_zone: blah.com
|
12
|
+
|
13
|
+
# this is the key that you will use to SSH to the server
|
14
|
+
keypair: keyname
|
15
|
+
|
16
|
+
# Common settings.
|
17
|
+
# In most cases, you will be using the same provider
|
18
|
+
# for all of the different components within your
|
19
|
+
# infrastructure (Compute, DNS, Balancers, etc).
|
20
|
+
# You can store the common keys and secrets here.
|
2
21
|
common: &common
|
3
22
|
aws_access_key_id: aws_key
|
4
23
|
aws_secret_access_key: aws_secret
|
24
|
+
|
25
|
+
# Compute settings
|
26
|
+
# These are passed to Fog when creating a connection
|
5
27
|
compute:
|
6
28
|
<<: *common
|
7
29
|
provider: AWS
|
8
|
-
region:
|
30
|
+
region: *region
|
31
|
+
|
32
|
+
# DNS settings
|
33
|
+
# These are passed to Fog when creating a connection
|
9
34
|
dns:
|
10
35
|
<<: *common
|
11
36
|
provider: AWS
|
12
|
-
|
37
|
+
|
38
|
+
# Balancer settings
|
39
|
+
# These are passed to Fog when creating a connection
|
13
40
|
balancer:
|
14
41
|
<<: *common
|
data/conf/config.yml
CHANGED
@@ -11,7 +11,8 @@ rig:
|
|
11
11
|
|
12
12
|
ssh:
|
13
13
|
# user to connect as, when ssh'ing to server
|
14
|
-
user
|
14
|
+
# AWS defaults to the user "ubuntu"
|
15
|
+
user: ubuntu
|
15
16
|
|
16
17
|
# the account to use if one is not specified
|
17
18
|
default_account: default
|
@@ -22,6 +23,28 @@ rig:
|
|
22
23
|
# - default
|
23
24
|
# - production
|
24
25
|
|
26
|
+
# configuration overrides
|
27
|
+
# these values override those in the templates
|
25
28
|
|
26
|
-
|
27
|
-
#
|
29
|
+
# DNS zone to manage
|
30
|
+
# generally, this should be set in the account
|
31
|
+
#dns_zone: blah.com
|
32
|
+
|
33
|
+
# the default region to use
|
34
|
+
# accounts can specify different regions
|
35
|
+
# meaning you can have a different rig account
|
36
|
+
# file for each deployment region
|
37
|
+
region: us-east-1
|
38
|
+
|
39
|
+
# AWS images (AMI's) are different per region
|
40
|
+
# for ubuntu, go to: http://cloud.ubuntu.com/ami/
|
41
|
+
image:
|
42
|
+
us-east-1: ami-8baa73e2 # ubuntu 11.10, non-ebs storage
|
43
|
+
|
44
|
+
# this is the key that you will use to SSH to the server
|
45
|
+
# keypair in account takes precedence
|
46
|
+
keypair: keyname
|
47
|
+
|
48
|
+
# specifying a flavor here will force all instances to
|
49
|
+
# be that flavor, overrides flavor in template
|
50
|
+
#flavor: m1.large
|
data/lib/rig/capistrano.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# host lists for capistrano to use.
|
4
4
|
|
5
5
|
require 'rig'
|
6
|
-
require 'rig/
|
6
|
+
require 'rig/model'
|
7
7
|
require 'capistrano'
|
8
8
|
|
9
9
|
module Rig
|
@@ -11,12 +11,12 @@ module Rig
|
|
11
11
|
def servers
|
12
12
|
env = ENV['ENVIRONMENT'] || Rig.config.environment
|
13
13
|
role = ENV['ROLE'] || Rig.config.role
|
14
|
-
servers = Rig::
|
14
|
+
servers = Rig::Model::Environment.find(env).servers
|
15
15
|
list = servers.select { |s| s.tags['Role'] == role }
|
16
16
|
|
17
17
|
raise "Rig could not find any servers matching environment=#{env} and role=#{role}" unless list && list.count > 0
|
18
18
|
list.each do |s|
|
19
|
-
server "#{s.tags['Name']}.#{Rig.
|
19
|
+
server "#{s.tags['Name']}.#{Rig.get_config(:dns_zone)}", :web, :app
|
20
20
|
end
|
21
21
|
rescue => e
|
22
22
|
puts "*** servers not found: #{e.message}"
|
@@ -34,8 +34,8 @@ configuration.load do
|
|
34
34
|
|
35
35
|
puts " * reading rig information..."
|
36
36
|
|
37
|
-
set :environments, Rig::
|
38
|
-
set :servers, Rig::
|
37
|
+
set :environments, Rig::Model::Environment.list
|
38
|
+
set :servers, Rig::Model::Instance.running
|
39
39
|
set :rigroles, servers.collect { |s| s.tags['Role'] }.compact
|
40
40
|
|
41
41
|
Rig.config.environment = ARGV[0]
|
data/lib/rig/command.rb
CHANGED
data/lib/rig/command/dns/edit.rb
CHANGED
data/lib/rig/command/dns/list.rb
CHANGED
@@ -5,8 +5,8 @@ module Rig
|
|
5
5
|
module Dns
|
6
6
|
class List < Abstract
|
7
7
|
def execute
|
8
|
-
zone = Rig.
|
9
|
-
records = Rig::
|
8
|
+
zone = Rig.get_config(:dns_zone)
|
9
|
+
records = Rig::Model::Dns.records("#{zone}")
|
10
10
|
rows = []
|
11
11
|
records.each do |record|
|
12
12
|
rows << [zone, record.type, record.ttl, record.name, record.value]
|
@@ -12,8 +12,8 @@ module Rig
|
|
12
12
|
parameter "TEMPLATE", "the template to use (solo, multi, etc)", :default => "solo"
|
13
13
|
|
14
14
|
def execute
|
15
|
-
#connection = Rig::
|
16
|
-
env = Rig::
|
15
|
+
#connection = Rig::Connection.compute
|
16
|
+
env = Rig::Model::Environment.create(name, template.to_sym)
|
17
17
|
#ap env.servers
|
18
18
|
end
|
19
19
|
end
|
@@ -9,14 +9,14 @@ module Rig
|
|
9
9
|
option %w{-s --simple}, :flag, "just show list of names"
|
10
10
|
|
11
11
|
def execute
|
12
|
-
envs = Rig::
|
12
|
+
envs = Rig::Model::Environment.list
|
13
13
|
|
14
14
|
if simple?
|
15
15
|
print_table(%w{Name}, envs)
|
16
16
|
else
|
17
17
|
rows = []
|
18
18
|
envs.each do |e|
|
19
|
-
env = Rig::
|
19
|
+
env = Rig::Model::Environment.find(e)
|
20
20
|
rows << [env.name, env.template, env.region, env.servers.count, env.balancers.count]
|
21
21
|
end
|
22
22
|
print_table(%w{Name Template Region Servers# Balancers#}, rows)
|
@@ -9,8 +9,8 @@ module Rig
|
|
9
9
|
parameter "NAME", "the name of the instance to connect to"
|
10
10
|
|
11
11
|
def execute
|
12
|
-
list = Rig::
|
13
|
-
Rig::
|
12
|
+
list = Rig::Model::Instance.find(name)
|
13
|
+
Rig::Model::Instance.destroy(list)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/lib/rig/command/main.rb
CHANGED
@@ -11,13 +11,21 @@ module Rig
|
|
11
11
|
|
12
12
|
subcommand "accounts", "show account list" do
|
13
13
|
def execute
|
14
|
-
list = Rig.
|
14
|
+
list = Rig::Model::Account.list
|
15
15
|
list.each do |n, f|
|
16
16
|
puts " #{n} => #{f}"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
def merge_file(src, dest)
|
22
|
+
old = YAML.load_file(dest)
|
23
|
+
FileUtils.mv(dest, "#{dest}.bak.#{Time.now.to_i}")
|
24
|
+
new = YAML.load_file(src)
|
25
|
+
new.merge!(old)
|
26
|
+
File.open(dest, "w") {|f| f.write(new.to_yaml)}
|
27
|
+
end
|
28
|
+
|
21
29
|
subcommand "init", "initialize configuration directory" do
|
22
30
|
option %w{-f --force}, :flag, "force creation of files", :default => false
|
23
31
|
option %w{-d --directory}, "DIRECTORY", "configuration directory", :default => "~/.rig"
|
data/lib/rig/command/ssh.rb
CHANGED
data/lib/rig/config.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
|
2
2
|
module Rig
|
3
3
|
class << self
|
4
|
+
@templates = []
|
5
|
+
@accounts = []
|
6
|
+
@cache_config = []
|
7
|
+
|
4
8
|
def configdir
|
5
9
|
@configdir ||= File.expand_path(ENV["RIG_CONFIG"] || "~/.rig")
|
6
10
|
end
|
@@ -15,26 +19,16 @@ module Rig
|
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
18
|
-
def
|
19
|
-
|
20
|
-
accountdir = "#{configdir}/accounts"
|
21
|
-
Dir["#{accountdir}/*"].inject({}) do |h, e|
|
22
|
-
f = e.gsub("#{accountdir}/", "")
|
23
|
-
f = File.basename(f, ".yml")
|
24
|
-
h[f.to_sym] = e
|
25
|
-
h
|
26
|
-
end
|
27
|
-
end
|
22
|
+
def account(name=get_account)
|
23
|
+
Rig::Model::Account.load(name)
|
28
24
|
end
|
29
25
|
|
30
|
-
def
|
31
|
-
|
32
|
-
Oconfig.load_yaml_file("#{configdir}/accounts/#{get_account}.yml")
|
33
|
-
end
|
26
|
+
def get_config(name)
|
27
|
+
Rig.account[name] || Rig.config[name] || nil
|
34
28
|
end
|
35
29
|
|
36
|
-
def
|
37
|
-
|
30
|
+
def get_template(name)
|
31
|
+
Rig::Model::Template.load(name)
|
38
32
|
end
|
39
33
|
|
40
34
|
def get_account
|
@@ -52,7 +46,7 @@ module Rig
|
|
52
46
|
raise "Configuration not found: #{path} (#{file})" unless File.exists?(file)
|
53
47
|
yaml = YAML.load_file(file)
|
54
48
|
yaml = yaml[yaml.keys.first] if yaml.keys.count == 1
|
55
|
-
|
49
|
+
self.new(yaml)
|
56
50
|
end
|
57
51
|
end
|
58
52
|
|
data/lib/rig/model.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rig
|
2
|
+
module Model
|
3
|
+
class Account < Rig::Oconfig
|
4
|
+
class << self
|
5
|
+
def load(name)
|
6
|
+
self.load_yaml_file("#{dir}/#{name}.yml")
|
7
|
+
end
|
8
|
+
|
9
|
+
def list
|
10
|
+
Dir["#{dir}/*"].inject({ }) do |h, e|
|
11
|
+
f = e.gsub("#{dir}/", "")
|
12
|
+
f = File.basename(f, ".yml")
|
13
|
+
h[f.to_sym] = e
|
14
|
+
h
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def dir
|
20
|
+
"#{Rig.configdir}/accounts"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
|
2
2
|
module Rig
|
3
|
-
module
|
3
|
+
module Model
|
4
4
|
class Balancer
|
5
5
|
class << self
|
6
6
|
def all
|
7
|
-
Rig::
|
7
|
+
Rig::Connection.balancer.load_balancers.all
|
8
8
|
end
|
9
9
|
|
10
10
|
def new(name)
|
11
|
-
Rig::
|
11
|
+
Rig::Connection.balancer.load_balancers.new({ :id => name })
|
12
12
|
end
|
13
13
|
|
14
14
|
def create(name)
|
@@ -19,7 +19,7 @@ module Rig
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def find(name)
|
22
|
-
Rig::
|
22
|
+
Rig::Connection.balancer.load_balancers.get(name)
|
23
23
|
end
|
24
24
|
|
25
25
|
def find_by_environment(name)
|
@@ -2,15 +2,15 @@ require 'rig'
|
|
2
2
|
require 'ipaddress'
|
3
3
|
|
4
4
|
module Rig
|
5
|
-
module
|
5
|
+
module Model
|
6
6
|
class Dns
|
7
7
|
class << self
|
8
8
|
def all
|
9
|
-
Rig::
|
9
|
+
Rig::Connection.dns.zones.all
|
10
10
|
end
|
11
11
|
|
12
12
|
def zone(zone)
|
13
|
-
Rig::
|
13
|
+
Rig::Connection.dns.zones.find(zone).first
|
14
14
|
end
|
15
15
|
|
16
16
|
def records(zone)
|
@@ -18,27 +18,27 @@ module Rig
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def zone_create(name)
|
21
|
-
Rig::
|
21
|
+
Rig::Connection.dns.zones.create(
|
22
22
|
:domain => name
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
26
26
|
def create(name, value)
|
27
|
-
zone = zone(Rig.
|
27
|
+
zone = zone(Rig.get_config(:dns_zone))
|
28
28
|
|
29
29
|
if IPAddress.valid?(value)
|
30
30
|
#A record
|
31
31
|
o = {:name => name, :value => value, :type => 'A', :ttl => 86400}
|
32
32
|
else
|
33
33
|
#CNAME record
|
34
|
-
#name = name.gsub(/\.#{Rig.
|
34
|
+
#name = name.gsub(/\.#{Rig.get_config(:dns_zone)}/,'')
|
35
35
|
o = {:name => name, :value => value, :type => 'CNAME', :ttl => 300}
|
36
36
|
end
|
37
37
|
zone.records.create(o)
|
38
38
|
end
|
39
39
|
|
40
40
|
def destroy(name)
|
41
|
-
zone = zone(Rig.
|
41
|
+
zone = zone(Rig.get_config(:dns_zone))
|
42
42
|
name = name.gsub(/\.$/, '')
|
43
43
|
# cant seem to make zone.records#get or zone.records#find work correctly
|
44
44
|
list = zone.records.all.select {|e| e.attributes[:name] == "#{name}."}
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module Rig
|
2
|
-
module
|
2
|
+
module Model
|
3
3
|
class Environment
|
4
4
|
attr_reader :servers
|
5
5
|
attr_reader :balancers
|
6
6
|
attr_reader :name
|
7
7
|
attr_reader :template
|
8
|
+
attr_reader :template_name
|
8
9
|
attr_reader :image
|
9
10
|
attr_reader :region
|
10
11
|
attr_reader :flavor
|
@@ -36,7 +37,7 @@ module Rig
|
|
36
37
|
def list
|
37
38
|
filters = { }
|
38
39
|
|
39
|
-
list = Rig::
|
40
|
+
list = Rig::Connection.compute.servers.all(filters)
|
40
41
|
list.inject([]) { |a, e| a << e.tags["Environment"] }.compact.uniq.sort
|
41
42
|
end
|
42
43
|
|
@@ -70,51 +71,53 @@ module Rig
|
|
70
71
|
:region => Rig.config.region,
|
71
72
|
}.merge(opts)
|
72
73
|
|
73
|
-
@name
|
74
|
-
@
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
@servers
|
81
|
-
@balancers
|
74
|
+
@name = name
|
75
|
+
@template_name = template
|
76
|
+
#@region = @options[:region]
|
77
|
+
##TODO: allow global config setting for image (in AWS, the ami)
|
78
|
+
#@image = @options[:image] # || Rig.config.compute.image[@region] || Rig.config.compute.image
|
79
|
+
##TODO: allow global config setting for flavor (in AWS, the size, like: m1.large)
|
80
|
+
#@flavor = @options[:flavor] # || Rig.config.flavor[@region] || Rig.config.flavor
|
81
|
+
@servers = []
|
82
|
+
@balancers = []
|
82
83
|
end
|
83
84
|
|
84
85
|
def save
|
85
86
|
puts "creating instances"
|
86
87
|
|
87
|
-
|
88
|
-
template
|
89
|
-
raise "unknown template #{template}" unless template
|
88
|
+
#@template = TEMPLATES[@template_name]
|
89
|
+
@template = Rig.get_template(@template_name)
|
90
|
+
raise "unknown template #{template}" unless @template
|
91
|
+
load_config
|
90
92
|
|
91
|
-
template[:instances].each do |inst|
|
93
|
+
@template[:instances].each do |inst|
|
92
94
|
setinstances = []
|
93
95
|
inst.each do |role, tmpl|
|
94
|
-
count
|
95
|
-
image = tmpl[:image] || @image
|
96
|
-
flavor = tmpl[:flavor] || @flavor
|
97
|
-
keypair = Rig.config.keypair
|
96
|
+
count = tmpl[:count] || 1
|
98
97
|
count.times do |i|
|
99
98
|
n = "#{role}#{i+1}.#{name}.env"
|
100
99
|
chef = Rig.config.chef ? true : false
|
101
100
|
|
102
101
|
o = {
|
103
|
-
:image_id => image,
|
104
|
-
:flavor_id => flavor,
|
105
|
-
:key_name => keypair,
|
106
|
-
:groups => tmpl[:groups] || template[:groups],
|
107
|
-
:user_data => Rig::
|
102
|
+
:image_id => tmpl[:image] || @image,
|
103
|
+
:flavor_id => tmpl[:flavor] || @flavor,
|
104
|
+
:key_name => tmpl[:keypair] || @keypair,
|
105
|
+
:groups => tmpl[:groups] || @template[:groups] || @groups,
|
106
|
+
:user_data => Rig::Model::Userdata.create(n, role, name, :chef => chef)
|
108
107
|
}
|
109
108
|
|
110
|
-
|
109
|
+
# throw this error, because Fog and AWS don't care if you don't set a keypair
|
110
|
+
# but you won't be able to easily connect to it
|
111
|
+
raise "No key_name (keypair) set." unless o[:key_name]
|
112
|
+
|
113
|
+
server = Rig::Model::Instance.create(o, 'Name' => n, 'Environment' => name, 'Role' => role)
|
111
114
|
@servers << server
|
112
115
|
setinstances << server
|
113
116
|
end
|
114
117
|
|
115
118
|
if tmpl[:balance]
|
116
119
|
puts "creating balancer"
|
117
|
-
balancer = Rig::
|
120
|
+
balancer = Rig::Model::Balancer.create("#{name}-#{role}")
|
118
121
|
balancer.register_instances(setinstances.collect { |e| e.id })
|
119
122
|
balancer.save
|
120
123
|
|
@@ -125,14 +128,14 @@ module Rig
|
|
125
128
|
# if there are 3 servers with the harvester role
|
126
129
|
# in the environment test
|
127
130
|
# then the dns would be harvester.test.env.inqlabs.com
|
128
|
-
puts ".. dns: #{role}.#{name}.env
|
129
|
-
Rig::
|
131
|
+
puts ".. dns: #{role}.#{name}.env.#@zone #{balancer.attributes[:dns_name]}"
|
132
|
+
Rig::Model::Dns.create("#{role}.#{name}.env.#@zone", balancer.attributes[:dns_name])
|
130
133
|
|
131
134
|
# set primary dns for environment (<name>.env.inqlabs.com)
|
132
135
|
# to point to this load balancer
|
133
136
|
if tmpl[:primary]
|
134
|
-
puts ".. primary: #{name}.env
|
135
|
-
Rig::
|
137
|
+
puts ".. primary: #{name}.env.#@zone #{balancer.attributes[:dns_name]}"
|
138
|
+
Rig::Model::Dns.create("#{name}.env.#@zone", balancer.attributes[:dns_name])
|
136
139
|
end
|
137
140
|
end
|
138
141
|
end
|
@@ -155,43 +158,43 @@ module Rig
|
|
155
158
|
|
156
159
|
puts "associating servers' DNS"
|
157
160
|
@servers.each do |server|
|
158
|
-
record = "#{server.tags['Name']}.#{Rig.
|
161
|
+
record = "#{server.tags['Name']}.#{Rig.get_config(:dns_zone)}"
|
159
162
|
dns = server.attributes[:dns_name]
|
160
163
|
ip = server.attributes[:public_ip_address]
|
161
164
|
|
162
165
|
puts ".. #{record} dns=#{dns} ip=#{ip}"
|
163
166
|
if dns
|
164
|
-
Rig::
|
167
|
+
Rig::Model::Dns.create(record, dns)
|
165
168
|
else
|
166
169
|
puts "server #{server.id} doesn't have public_ip_address"
|
167
170
|
end
|
168
171
|
end
|
169
172
|
rescue => e
|
170
|
-
puts "error creating environment
|
173
|
+
puts "error creating environment:\n#{e.message} at #{e.backtrace.join("\n")}"
|
171
174
|
destroy
|
172
|
-
raise "error creating environment: #{e.message}"
|
175
|
+
raise "error creating environment: #{e.message} at #{e.backtrace.first}"
|
173
176
|
end
|
174
177
|
|
175
178
|
def destroy
|
176
179
|
puts "removing dns from servers"
|
177
180
|
@servers.each do |server|
|
178
|
-
Rig::
|
181
|
+
Rig::Model::Dns.destroy("#{server.tags['Name']}.#{Rig.get_config(:dns_zone)}") if server.tags['Name']
|
179
182
|
end
|
180
183
|
|
181
|
-
roles = @servers.collect {|s| s.tags['Role'] }.compact
|
184
|
+
roles = @servers.collect { |s| s.tags['Role'] }.compact
|
182
185
|
roles.each do |r|
|
183
186
|
puts "removing role balancer dns"
|
184
|
-
Rig::
|
187
|
+
Rig::Model::Dns.destroy("#{r}.#{name}.env.#{Rig.get_config(:dns_zone)}")
|
185
188
|
end
|
186
189
|
|
187
190
|
puts "removing primary dns"
|
188
|
-
Rig::
|
191
|
+
Rig::Model::Dns.destroy("#{name}.env.#{Rig.get_config(:dns_zone)}")
|
189
192
|
|
190
193
|
puts "destroying servers"
|
191
|
-
Rig::
|
194
|
+
Rig::Model::Instance.destroy(@servers)
|
192
195
|
|
193
196
|
puts "destroying balancers"
|
194
|
-
Rig::
|
197
|
+
Rig::Model::Balancer.destroy(@balancers)
|
195
198
|
|
196
199
|
if Rig.config.chef
|
197
200
|
puts "destroying chef environment"
|
@@ -205,12 +208,35 @@ module Rig
|
|
205
208
|
end
|
206
209
|
|
207
210
|
private
|
211
|
+
|
212
|
+
def load_config
|
213
|
+
@region = @options[:region] ||
|
214
|
+
Rig.get_config(:region) ||
|
215
|
+
nil
|
216
|
+
@image = @options[:image] ||
|
217
|
+
Rig.account.image ||
|
218
|
+
Rig.config.image.kind_of?(Oconfig) ? Rig.config.image[@region] : Rig.config.image ||
|
219
|
+
nil
|
220
|
+
@flavor = @options[:flavor] ||
|
221
|
+
Rig.get_config(:flavor) ||
|
222
|
+
nil
|
223
|
+
@zone = @options[:dns_zone] ||
|
224
|
+
Rig.get_config(:dns_zone) ||
|
225
|
+
nil
|
226
|
+
@keypair = @options[:keypair] ||
|
227
|
+
Rig.get_config(:keypair) ||
|
228
|
+
nil
|
229
|
+
@groups = @options[:groups] ||
|
230
|
+
Rig.get_config(:groups) ||
|
231
|
+
nil
|
232
|
+
end
|
233
|
+
|
208
234
|
def find_servers
|
209
|
-
@servers = Rig::
|
235
|
+
@servers = Rig::Model::Instance.find_by_environment(@name) || []
|
210
236
|
end
|
211
237
|
|
212
238
|
def find_balancers
|
213
|
-
@balancers = Rig::
|
239
|
+
@balancers = Rig::Model::Balancer.find_by_environment(@name) || []
|
214
240
|
end
|
215
241
|
end
|
216
242
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'fog'
|
2
2
|
|
3
3
|
module Rig
|
4
|
-
module
|
4
|
+
module Model
|
5
5
|
class Instance
|
6
6
|
class << self
|
7
7
|
def all(filters={})
|
8
|
-
Rig::
|
8
|
+
Rig::Connection.compute.servers.all(filters)
|
9
9
|
end
|
10
10
|
|
11
11
|
def running
|
@@ -14,18 +14,18 @@ module Rig
|
|
14
14
|
|
15
15
|
def find(id)
|
16
16
|
if id =~ /^i-/
|
17
|
-
Rig::
|
17
|
+
Rig::Connection.compute.servers.find(id)
|
18
18
|
else
|
19
19
|
# must be tag:Name
|
20
|
-
Rig::
|
20
|
+
Rig::Connection.compute.servers.all({"tag:Name"=>id})
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
def find_by_environment(env)
|
25
|
-
Rig::
|
25
|
+
Rig::Connection.compute.servers.all({"tag:Environment"=>env})
|
26
26
|
end
|
27
27
|
def find_by_role_and_environment(role, env)
|
28
|
-
Rig::
|
28
|
+
Rig::Connection.compute.servers.all({"tag:Environment"=> env, "tag:Role" => role})
|
29
29
|
end
|
30
30
|
|
31
31
|
def find_by_nick(name)
|
@@ -34,7 +34,7 @@ module Rig
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def create(opts, tags={})
|
37
|
-
fog = Rig::
|
37
|
+
fog = Rig::Connection.compute
|
38
38
|
server = fog.servers.create(opts)
|
39
39
|
fog.create_tags(server.id, tags) if tags.count > 0
|
40
40
|
puts ".. created: #{server.id}"
|
@@ -45,7 +45,7 @@ module Rig
|
|
45
45
|
list = [*list]
|
46
46
|
|
47
47
|
if list.count > 0
|
48
|
-
compute = Rig::
|
48
|
+
compute = Rig::Connection.compute
|
49
49
|
ids = list.map {|e| e.kind_of?(String) ? e : e.id}
|
50
50
|
puts ".. destroying: #{ids.inspect}"
|
51
51
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Rig
|
2
|
+
module Model
|
3
|
+
class Template
|
4
|
+
class << self
|
5
|
+
def load(name)
|
6
|
+
self.load_yaml_file("#{dir}/#{name}.yml")
|
7
|
+
end
|
8
|
+
|
9
|
+
def load_yaml_file(path)
|
10
|
+
file = File.expand_path(path)
|
11
|
+
raise "Configuration not found: #{path} (#{file})" unless File.exists?(file)
|
12
|
+
yaml = YAML.load_file(file)
|
13
|
+
yaml = yaml[yaml.keys.first] if yaml.keys.count == 1
|
14
|
+
|
15
|
+
yaml
|
16
|
+
end
|
17
|
+
|
18
|
+
def list
|
19
|
+
Dir["#{dir}/*"].inject({ }) do |h, e|
|
20
|
+
f = e.gsub("#{dir}/", "")
|
21
|
+
f = File.basename(f, ".yml")
|
22
|
+
h[f.to_sym] = e
|
23
|
+
h
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def dir
|
29
|
+
"#{Rig.configdir}/templates"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,20 +1,21 @@
|
|
1
1
|
require 'erubis'
|
2
2
|
|
3
3
|
module Rig
|
4
|
-
module
|
5
|
-
class
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
4
|
+
module Model
|
5
|
+
class Userdata
|
6
|
+
class << self
|
7
|
+
def create(name, role, environment, opts={ })
|
8
|
+
data = {
|
9
|
+
:name => name,
|
10
|
+
:role => role,
|
11
|
+
:environment => environment,
|
12
|
+
:zone => Rig.get_config(:dns_zone),
|
13
|
+
:dependencies => %w{ ruby1.9.3 ruby1.9.1-dev rubygems ruby-switch libopenssl-ruby1.9.1 rdoc1.9.1 ri1.9.1 irb1.9.1
|
13
14
|
build-essential wget ssl-cert curl },
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
:gems => %w{chef},
|
16
|
+
:chef => false,
|
17
|
+
}.merge(opts)
|
18
|
+
template = <<-EOF
|
18
19
|
#!/bin/bash
|
19
20
|
set -e -x
|
20
21
|
exec > ~/userdata.log 2>&1
|
@@ -102,9 +103,10 @@ tRv2ngXlc2sYh9RbnlWSdaK0g+U7V8l2wSsQjcPQ1J2vbIGjwBHDSzjc
|
|
102
103
|
VALID
|
103
104
|
|
104
105
|
chef-client -N <%= @name %> <%= @chef && @environment ? "-E " + @environment : "" %> --once -j /etc/chef/bootstrap.json 2>&1
|
105
|
-
|
106
|
-
|
107
|
-
|
106
|
+
EOF
|
107
|
+
erb = Erubis::Eruby.new(template)
|
108
|
+
out = erb.evaluate(data)
|
109
|
+
end
|
108
110
|
end
|
109
111
|
end
|
110
112
|
end
|
data/lib/rig/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 4
|
10
|
+
version: 0.3.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Shawn Catanzarite
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-04-
|
18
|
+
date: 2012-04-26 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: clamp
|
@@ -124,13 +124,6 @@ files:
|
|
124
124
|
- lib/rig.rb
|
125
125
|
- lib/rig/capistrano.rb
|
126
126
|
- lib/rig/chef.rb
|
127
|
-
- lib/rig/cloud.rb
|
128
|
-
- lib/rig/cloud/balancer.rb
|
129
|
-
- lib/rig/cloud/connection.rb
|
130
|
-
- lib/rig/cloud/dns.rb
|
131
|
-
- lib/rig/cloud/environment.rb
|
132
|
-
- lib/rig/cloud/instance.rb
|
133
|
-
- lib/rig/cloud/userdata.rb
|
134
127
|
- lib/rig/command.rb
|
135
128
|
- lib/rig/command/abstract.rb
|
136
129
|
- lib/rig/command/balancer/destroy.rb
|
@@ -161,6 +154,15 @@ files:
|
|
161
154
|
- lib/rig/command/options.rb
|
162
155
|
- lib/rig/command/ssh.rb
|
163
156
|
- lib/rig/config.rb
|
157
|
+
- lib/rig/model.rb
|
158
|
+
- lib/rig/model/account.rb
|
159
|
+
- lib/rig/model/balancer.rb
|
160
|
+
- lib/rig/model/connection.rb
|
161
|
+
- lib/rig/model/dns.rb
|
162
|
+
- lib/rig/model/environment.rb
|
163
|
+
- lib/rig/model/instance.rb
|
164
|
+
- lib/rig/model/template.rb
|
165
|
+
- lib/rig/model/userdata.rb
|
164
166
|
- lib/rig/version.rb
|
165
167
|
- rig.gemspec
|
166
168
|
homepage: https://github.com/shawncatz/rig
|
data/lib/rig/cloud.rb
DELETED