nephele 0.1.5 → 0.1.6
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.
- data/README.md +58 -4
- data/VERSION +1 -1
- data/bin/neph +27 -7
- data/bin/nephele +27 -7
- data/lib/nephele/rackspace.rb +2 -1
- data/nephele.gemspec +2 -2
- metadata +4 -4
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
Nephele
|
2
2
|
========
|
3
|
-
Nephele is a thin administration layer around major cloud service API's.
|
4
|
-
Its main goals are simplicity and a unified command line interface for common tasks.
|
5
|
-
|
6
|
-
Planned support:
|
3
|
+
Nephele is a thin administration layer around major cloud service API's. Its main goals are simplicity and a unified command line interface for common tasks.
|
7
4
|
|
5
|
+
Planned support
|
6
|
+
----------------
|
8
7
|
* Rackspace
|
9
8
|
* EC2
|
10
9
|
|
@@ -16,6 +15,61 @@ Currently, Nephele expects environment variables to set your service keys.
|
|
16
15
|
RACKSPACE_USER=your_user_name
|
17
16
|
NEPHELE_SERVICE_DEFAULT=rackspace
|
18
17
|
|
18
|
+
Examples
|
19
|
+
--------
|
20
|
+
Here's an example of someone inspecting available images and flavors on a Rackspace account, deciding to create and save various 'foo' images based on roles and recipes from joeuser's chef git repo:
|
21
|
+
|
22
|
+
neph images | grep lucid
|
23
|
+
|
24
|
+
neph flavors | grep 512
|
25
|
+
|
26
|
+
neph create foo 'Ubuntu 10.04 LTS (lucid)' '512 server'
|
27
|
+
|
28
|
+
neph create foo 'Ubuntu 10.04 LTS (lucid)' '512 server'
|
29
|
+
|
30
|
+
neph bootstrap foo 'Ubuntu 10.04 LTS (lucid)' '512 server' -r webserver -c git@github.com:joeuser/cookbooks.git
|
31
|
+
|
32
|
+
neph save foo lucid-webserver
|
33
|
+
|
34
|
+
neph restrap foo lucid-webserver '512 server' -r webserver-prod -c git@github.com:joeuser/cookbooks.git
|
35
|
+
|
36
|
+
neph save foo 'lucid-webserver-prod'
|
37
|
+
|
38
|
+
neph destroy foo
|
39
|
+
|
40
|
+
Usage
|
41
|
+
-----
|
42
|
+
Example usage at time of writing:
|
43
|
+
|
44
|
+
<pre>
|
45
|
+
$ neph --help
|
46
|
+
Commands
|
47
|
+
|
48
|
+
list # Display a list of servers
|
49
|
+
images # Display available images
|
50
|
+
flavors # List available flavors
|
51
|
+
status # Display server status
|
52
|
+
create [name] [image] [flavor] # Creates a node with name, image name, flavor
|
53
|
+
-C/--count=[NUMERIC] # create foo, foo2, foo3, ...
|
54
|
+
save [nodename] [savename] # Save an image of the node
|
55
|
+
destroy [name] # Destroy a given node
|
56
|
+
password [node] [password] # Change a password on given node
|
57
|
+
delete [image] # Delete an image
|
58
|
+
bootstrap [name] [image] [flavor] # Create a VM and run a chef bootstrapper, optional recipe, bootstrap, cookbooks args
|
59
|
+
restrap [name] [image] [flavor] # Destroy and bootstrap
|
60
|
+
archive [name] [image] [flavor] [savename] # Boostrap a VM and save an image of it
|
61
|
+
|
62
|
+
Global options
|
63
|
+
|
64
|
+
-c/--cookbooks=[STRING] # optional cookbooks URI
|
65
|
+
-p/--personality=[STRING] # comma-separated tuple of contents,targetfile to be placed at startup
|
66
|
+
-b/--bootstrap=[STRING] # optional bootstrapper URI, defaults to https://github.com/jodell/cookbooks/raw/master/bin/bootstrap.sh
|
67
|
+
-r/--recipe=[STRING] # run this recipe after bootstrapping
|
68
|
+
-v/--vpn-credential-file=[STRING] # specify a vpnpass file to seed the target vm
|
69
|
+
-P/--prestrap=[STRING] # Executes a command or the contents of a file on a VM prior to bootstrapping
|
70
|
+
-?/--help # Print help message
|
71
|
+
</pre>
|
72
|
+
|
19
73
|
LICENSE
|
20
74
|
-------
|
21
75
|
SEE LICENSE
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/bin/neph
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'optitron'
|
5
5
|
|
6
|
-
if __FILE__ =~ /bin\/neph
|
6
|
+
if __FILE__ =~ /bin\/neph$/
|
7
7
|
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
8
8
|
require 'nephele'
|
9
9
|
else
|
@@ -14,11 +14,12 @@ end
|
|
14
14
|
|
15
15
|
class Nephele::Runner < Optitron::CLI
|
16
16
|
JODELL_CHEF_BOOTSTRAPPER = 'https://github.com/jodell/cookbooks/raw/master/bin/bootstrap.sh'
|
17
|
-
class_opt 'cookbooks',
|
18
|
-
class_opt 'personality',
|
19
|
-
class_opt 'bootstrap',
|
20
|
-
class_opt 'recipe',
|
17
|
+
class_opt 'cookbooks', 'optional cookbooks URI', :type => :string
|
18
|
+
class_opt 'personality', 'comma-separated tuple of contents,targetfile to be placed at startup', :type => :string
|
19
|
+
class_opt 'bootstrap', "optional bootstrapper URI, defaults to #{JODELL_CHEF_BOOTSTRAPPER}", :type => :string
|
20
|
+
class_opt 'recipe', 'run this recipe after bootstrapping', :type => :string
|
21
21
|
class_opt 'vpn-credential-file', 'specify a vpnpass file to seed the target vm', :type => :string
|
22
|
+
class_opt 'prestrap', 'Executes a command or the contents of a file on a VM prior to bootstrapping', :type => :string
|
22
23
|
|
23
24
|
desc 'Display a list of servers'
|
24
25
|
def list
|
@@ -55,6 +56,7 @@ class Nephele::Runner < Optitron::CLI
|
|
55
56
|
:flavor => flavor,
|
56
57
|
:personality => personality
|
57
58
|
end
|
59
|
+
sleep 5
|
58
60
|
end
|
59
61
|
|
60
62
|
desc 'Save an image of the node'
|
@@ -80,13 +82,31 @@ class Nephele::Runner < Optitron::CLI
|
|
80
82
|
service.delete_image image
|
81
83
|
end
|
82
84
|
|
85
|
+
##
|
86
|
+
# neph bootstrap ramsay lucid '512 server' -P "export CHEF_LOG_LEVEL=debug; export CHEF_LOG_LOCATION='chef.log'"
|
87
|
+
#
|
83
88
|
desc 'Create a VM and run a chef bootstrapper, optional recipe, bootstrap, cookbooks args'
|
84
89
|
def bootstrap(name, image, flavor)
|
85
90
|
puts "Bootstrapping: #{name}..."
|
86
91
|
create name, image, flavor
|
87
92
|
bootstrap = params['bootstrap'] || JODELL_CHEF_BOOTSTRAPPER
|
88
|
-
|
89
|
-
|
93
|
+
node_run "curl #{bootstrap} > boot && chmod +x boot && ./boot #{params['cookbooks'] || ''}"
|
94
|
+
# This is inaccurate. Prestrapping is just for changing chef-solo's verbosity.
|
95
|
+
#
|
96
|
+
recipe_cmd = [
|
97
|
+
"#{params['prestrap'] ? prestrap_cmd + ' && ' : ''}",
|
98
|
+
"cd -P /var/chef/cookbooks && (bundle check || bundle install) && rake update && rake run[#{params['recipe']}]"
|
99
|
+
].join
|
100
|
+
node_run recipe_cmd if params['recipe']
|
101
|
+
end
|
102
|
+
|
103
|
+
def node_run(cmd)
|
104
|
+
puts "Running #{cmd}" if ENV['verbose']
|
105
|
+
system %-time ssh root@#{@node.addresses[:public]} "#{cmd}"-
|
106
|
+
end
|
107
|
+
|
108
|
+
def prestrap_cmd
|
109
|
+
File.exists?(params['prestrap']) ? File.read(params['prestrap']) : params['prestrap']
|
90
110
|
end
|
91
111
|
|
92
112
|
desc 'Destroy and bootstrap'
|
data/bin/nephele
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'optitron'
|
5
5
|
|
6
|
-
if __FILE__ =~ /bin\/neph
|
6
|
+
if __FILE__ =~ /bin\/neph$/
|
7
7
|
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
8
8
|
require 'nephele'
|
9
9
|
else
|
@@ -14,11 +14,12 @@ end
|
|
14
14
|
|
15
15
|
class Nephele::Runner < Optitron::CLI
|
16
16
|
JODELL_CHEF_BOOTSTRAPPER = 'https://github.com/jodell/cookbooks/raw/master/bin/bootstrap.sh'
|
17
|
-
class_opt 'cookbooks',
|
18
|
-
class_opt 'personality',
|
19
|
-
class_opt 'bootstrap',
|
20
|
-
class_opt 'recipe',
|
17
|
+
class_opt 'cookbooks', 'optional cookbooks URI', :type => :string
|
18
|
+
class_opt 'personality', 'comma-separated tuple of contents,targetfile to be placed at startup', :type => :string
|
19
|
+
class_opt 'bootstrap', "optional bootstrapper URI, defaults to #{JODELL_CHEF_BOOTSTRAPPER}", :type => :string
|
20
|
+
class_opt 'recipe', 'run this recipe after bootstrapping', :type => :string
|
21
21
|
class_opt 'vpn-credential-file', 'specify a vpnpass file to seed the target vm', :type => :string
|
22
|
+
class_opt 'prestrap', 'Executes a command or the contents of a file on a VM prior to bootstrapping', :type => :string
|
22
23
|
|
23
24
|
desc 'Display a list of servers'
|
24
25
|
def list
|
@@ -55,6 +56,7 @@ class Nephele::Runner < Optitron::CLI
|
|
55
56
|
:flavor => flavor,
|
56
57
|
:personality => personality
|
57
58
|
end
|
59
|
+
sleep 5
|
58
60
|
end
|
59
61
|
|
60
62
|
desc 'Save an image of the node'
|
@@ -80,13 +82,31 @@ class Nephele::Runner < Optitron::CLI
|
|
80
82
|
service.delete_image image
|
81
83
|
end
|
82
84
|
|
85
|
+
##
|
86
|
+
# neph bootstrap ramsay lucid '512 server' -P "export CHEF_LOG_LEVEL=debug; export CHEF_LOG_LOCATION='chef.log'"
|
87
|
+
#
|
83
88
|
desc 'Create a VM and run a chef bootstrapper, optional recipe, bootstrap, cookbooks args'
|
84
89
|
def bootstrap(name, image, flavor)
|
85
90
|
puts "Bootstrapping: #{name}..."
|
86
91
|
create name, image, flavor
|
87
92
|
bootstrap = params['bootstrap'] || JODELL_CHEF_BOOTSTRAPPER
|
88
|
-
|
89
|
-
|
93
|
+
node_run "curl #{bootstrap} > boot && chmod +x boot && ./boot #{params['cookbooks'] || ''}"
|
94
|
+
# This is inaccurate. Prestrapping is just for changing chef-solo's verbosity.
|
95
|
+
#
|
96
|
+
recipe_cmd = [
|
97
|
+
"#{params['prestrap'] ? prestrap_cmd + ' && ' : ''}",
|
98
|
+
"cd -P /var/chef/cookbooks && (bundle check || bundle install) && rake update && rake run[#{params['recipe']}]"
|
99
|
+
].join
|
100
|
+
node_run recipe_cmd if params['recipe']
|
101
|
+
end
|
102
|
+
|
103
|
+
def node_run(cmd)
|
104
|
+
puts "Running #{cmd}" if ENV['verbose']
|
105
|
+
system %-time ssh root@#{@node.addresses[:public]} "#{cmd}"-
|
106
|
+
end
|
107
|
+
|
108
|
+
def prestrap_cmd
|
109
|
+
File.exists?(params['prestrap']) ? File.read(params['prestrap']) : params['prestrap']
|
90
110
|
end
|
91
111
|
|
92
112
|
desc 'Destroy and bootstrap'
|
data/lib/nephele/rackspace.rb
CHANGED
data/nephele.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{nephele}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jeffrey O'Dell"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-28}
|
13
13
|
s.description = %q{Light administration utility for popular cloud services}
|
14
14
|
s.email = %q{jeffrey.odell@gmail.com}
|
15
15
|
s.executables = ["neph", "nephele"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nephele
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 6
|
10
|
+
version: 0.1.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jeffrey O'Dell
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-28 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|