sunzi 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +4 -1
- data/Rakefile +2 -0
- data/lib/sunzi/cloud/linode.rb +23 -19
- data/lib/sunzi/version.rb +1 -1
- data/lib/templates/setup/linode/linode.yml +11 -3
- metadata +8 -8
data/README.md
CHANGED
@@ -25,7 +25,7 @@ Install:
|
|
25
25
|
$ gem install sunzi
|
26
26
|
```
|
27
27
|
|
28
|
-
Go
|
28
|
+
Go into your project directory (if it's a Rails project, `config` would be a good place to start with), then:
|
29
29
|
|
30
30
|
```bash
|
31
31
|
$ sunzi create
|
@@ -56,6 +56,7 @@ Commands
|
|
56
56
|
|
57
57
|
```bash
|
58
58
|
$ sunzi # Show command help
|
59
|
+
$ sunzi compile # Compile Sunzi project
|
59
60
|
$ sunzi create # Create a new Sunzi project
|
60
61
|
$ sunzi deploy [user@host:port] # Deploy Sunzi project
|
61
62
|
$ sunzi setup [linode|ec2] # Setup a new VM on the Cloud services
|
@@ -129,6 +130,8 @@ recipes:
|
|
129
130
|
|
130
131
|
`rvm.sh` will be available and you can refer to that recipe by `source recipes/rvm.sh`.
|
131
132
|
|
133
|
+
You may find sample recipes in this repository useful: https://github.com/kenn/sunzi-recipes
|
134
|
+
|
132
135
|
Cloud Support
|
133
136
|
-------------
|
134
137
|
|
data/Rakefile
CHANGED
data/lib/sunzi/cloud/linode.rb
CHANGED
@@ -24,8 +24,6 @@ module Sunzi
|
|
24
24
|
# When route53 is specified for DNS, check if it's properly configured and if not, fail earlier.
|
25
25
|
setup_route53 if @config['dns'] == 'route53'
|
26
26
|
|
27
|
-
@ui = HighLine.new
|
28
|
-
|
29
27
|
@sshkey = File.read(File.expand_path(@config['root_sshkey_path'])).chomp
|
30
28
|
if @sshkey.match(/\n/)
|
31
29
|
abort_with "RootSSHKey #{@sshkey.inspect} must not be multi-line! Check inside \"#{@config['root_sshkey_path']}\""
|
@@ -74,7 +72,7 @@ module Sunzi
|
|
74
72
|
@swap_size = ask('swap size in MB? (default: 256MB): ', Integer) { |q| q.default = 256 }
|
75
73
|
|
76
74
|
# Go ahead?
|
77
|
-
moveon = ask("Are you
|
75
|
+
moveon = ask("Are you ready to go ahead and create #{@fqdn}? (y/n) ", String) {|q| q.in = ['y','n']}
|
78
76
|
exit unless moveon == 'y'
|
79
77
|
|
80
78
|
# Create
|
@@ -88,16 +86,9 @@ module Sunzi
|
|
88
86
|
|
89
87
|
# Update settings
|
90
88
|
say "Updating settings..."
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
:lpm_displayGroup => @group,
|
95
|
-
# :Alert_cpu_threshold => 90,
|
96
|
-
# :Alert_diskio_threshold => 1000,
|
97
|
-
# :Alert_bwin_threshold => 5,
|
98
|
-
# :Alert_bwout_threshold => 5,
|
99
|
-
# :Alert_bwquota_threshold => 80,
|
100
|
-
)
|
89
|
+
settings = { :LinodeID => @linodeid, :Label => @label, :lpm_displayGroup => @group }
|
90
|
+
settings.update(@config['settings']) if @config['settings']
|
91
|
+
result = @api.linode.update(settings)
|
101
92
|
|
102
93
|
# Create a root disk
|
103
94
|
say "Creating a root disk..."
|
@@ -192,23 +183,30 @@ module Sunzi
|
|
192
183
|
setup_route53 if @config['dns'] == 'route53'
|
193
184
|
|
194
185
|
@instance = YAML.load(File.read("linode/instances/#{name}.yml"))
|
186
|
+
@linode_id_hash = { :LinodeID => @instance[:linode_id] }
|
195
187
|
@api = ::Linode.new(:api_key => @config['api_key'])
|
196
188
|
|
189
|
+
# Are you sure?
|
190
|
+
moveon = ask("Are you sure about deleting #{@instance[:fqdn]} permanently? (y/n) ", String) {|q| q.in = ['y','n']}
|
191
|
+
exit unless moveon == 'y'
|
192
|
+
|
197
193
|
# Shutdown first or disk deletion will fail
|
198
194
|
say 'shutting down...'
|
199
|
-
@api.linode.shutdown(
|
200
|
-
|
195
|
+
@api.linode.shutdown(@linode_id_hash)
|
196
|
+
# Wait until linode.shutdown has completed
|
197
|
+
wait_for('linode.shutdown')
|
201
198
|
|
202
199
|
# Delete the disks. It is required - http://www.linode.com/api/linode/linode%2Edelete
|
203
200
|
say 'deleting root disk...'
|
204
|
-
@api.linode.disk.delete(
|
201
|
+
@api.linode.disk.delete(@linode_id_hash.merge(:DiskID => @instance[:root_diskid]))
|
205
202
|
say 'deleting swap disk...'
|
206
|
-
@api.linode.disk.delete(
|
207
|
-
|
203
|
+
@api.linode.disk.delete(@linode_id_hash.merge(:DiskID => @instance[:swap_diskid]))
|
204
|
+
# Wait until linode.disk.delete has completed
|
205
|
+
wait_for('fs.delete')
|
208
206
|
|
209
207
|
# Delete the instance
|
210
208
|
say 'deleting linode...'
|
211
|
-
@api.linode.delete(
|
209
|
+
@api.linode.delete(@linode_id_hash)
|
212
210
|
|
213
211
|
# Delete DNS record
|
214
212
|
case @config['dns']
|
@@ -236,6 +234,12 @@ module Sunzi
|
|
236
234
|
route53 = Route53::Connection.new(@config['route53']['key'], @config['route53']['secret'])
|
237
235
|
@route53_zone = route53.get_zones.find{|i| i.name.sub(/\.$/,'') == @config['fqdn']['zone'] }
|
238
236
|
end
|
237
|
+
|
238
|
+
def wait_for(action)
|
239
|
+
begin
|
240
|
+
sleep 3
|
241
|
+
end until @api.linode.job.list(@linode_id_hash).find{|i| i.action == action }.host_success == 1
|
242
|
+
end
|
239
243
|
end
|
240
244
|
end
|
241
245
|
end
|
data/lib/sunzi/version.rb
CHANGED
@@ -6,7 +6,7 @@ root_sshkey_path: ~/.ssh/id_rsa.pub
|
|
6
6
|
# payment_term must be 1, 12 or 24
|
7
7
|
payment_term: 1
|
8
8
|
|
9
|
-
#
|
9
|
+
# add / remove environments
|
10
10
|
environments:
|
11
11
|
- production
|
12
12
|
- staging
|
@@ -21,7 +21,7 @@ group:
|
|
21
21
|
production: example
|
22
22
|
staging: example-staging
|
23
23
|
|
24
|
-
#
|
24
|
+
# filter out large lists by keyword
|
25
25
|
distributions_filter: debian
|
26
26
|
kernels_filter: latest
|
27
27
|
|
@@ -31,4 +31,12 @@ dns: linode
|
|
31
31
|
# only used when route53 is chosen for DNS
|
32
32
|
route53:
|
33
33
|
key: your_aws_key
|
34
|
-
secret: your_aws_secret
|
34
|
+
secret: your_aws_secret
|
35
|
+
|
36
|
+
# other parameters for settings.
|
37
|
+
# settings:
|
38
|
+
# alert_cpu_threshold: 90
|
39
|
+
# alert_diskio_threshold: 1000
|
40
|
+
# alert_bwin_threshold: 5
|
41
|
+
# alert_bwout_threshold: 5
|
42
|
+
# alert_bwquota_threshold: 80
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sunzi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &2160582840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2160582840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rainbow
|
27
|
-
requirement: &
|
27
|
+
requirement: &2160582300 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2160582300
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &2160581480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2160581480
|
47
47
|
description: Server provisioning utility for minimalists
|
48
48
|
email:
|
49
49
|
- kenn.ejima@gmail.com
|