nephele 0.1.0 → 0.1.1
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 +14 -4
- data/Rakefile +0 -68
- data/TODO +2 -0
- data/VERSION +1 -1
- data/bin/neph +91 -0
- data/bin/nephele +2 -1
- data/nephele.gemspec +7 -5
- metadata +9 -5
data/README.md
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
Nephele
|
2
2
|
========
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
Its main goals are simplicity and the unification of common tasks for the sake of working with a set of services.
|
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.
|
7
5
|
|
8
6
|
Planned support:
|
9
7
|
|
10
8
|
* Rackspace
|
11
9
|
* EC2
|
12
10
|
|
11
|
+
Setting Your Credentials
|
12
|
+
------------------------
|
13
|
+
Currently, Nephele expects environment variables to set your service keys.
|
14
|
+
|
15
|
+
RACKSPACE_KEY=your_api_key
|
16
|
+
RACKSPACE_USER=your_user_name
|
17
|
+
NEPHELE_SERVICE_DEFAULT=rackspace
|
18
|
+
|
19
|
+
LICENSE
|
20
|
+
-------
|
21
|
+
SEE LICENSE
|
22
|
+
|
13
23
|
Other Interesting Projects
|
14
24
|
--------------------------
|
15
25
|
* Fog - https://github.com/geemus/fog
|
data/Rakefile
CHANGED
@@ -24,7 +24,6 @@ Jeweler::Tasks.new do |gem|
|
|
24
24
|
gem.description = %-Light administration utility for popular cloud services-
|
25
25
|
gem.email = 'jeffrey.odell@gmail.com'
|
26
26
|
gem.authors = ["Jeffrey O'Dell"]
|
27
|
-
gem.executables = ['nephele']
|
28
27
|
gem.homepage = 'https://github.com/jodell/nephele'
|
29
28
|
end
|
30
29
|
|
@@ -40,32 +39,6 @@ Rake::TestTask.new('test:unit') do |t|
|
|
40
39
|
t.verbose = true
|
41
40
|
end
|
42
41
|
|
43
|
-
def default
|
44
|
-
@@default ||= Nephele.new :service => :default
|
45
|
-
end
|
46
|
-
|
47
|
-
desc 'List available servers'
|
48
|
-
task :servers do
|
49
|
-
ap default.servers.map { |i| i[:name] }
|
50
|
-
end
|
51
|
-
|
52
|
-
task :list => :servers
|
53
|
-
|
54
|
-
desc 'List available images'
|
55
|
-
task :images do
|
56
|
-
ap default.images.map { |i| i[:name] }
|
57
|
-
end
|
58
|
-
|
59
|
-
desc 'List available flavors'
|
60
|
-
task :flavors do
|
61
|
-
ap default.flavors.map { |i| i[:name] }
|
62
|
-
end
|
63
|
-
|
64
|
-
desc 'Show node statuses'
|
65
|
-
task :status do
|
66
|
-
puts default.status
|
67
|
-
end
|
68
|
-
|
69
42
|
desc 'Key a host'
|
70
43
|
task :key, [:host] do |t, args|
|
71
44
|
host = args[:host] =~ /(.*)@(.*)/ ? args[:host] : "root@#{args[:host]}"
|
@@ -79,47 +52,6 @@ EoC
|
|
79
52
|
sh cmd
|
80
53
|
end
|
81
54
|
|
82
|
-
desc 'Reset the node password (performs a reoot)'
|
83
|
-
task :password, [:node, :pass] do |t, args|
|
84
|
-
default.server_objs.find { |s| s.name == args[:node] }.update(:adminPass => args[:pass])
|
85
|
-
end
|
86
|
-
|
87
|
-
desc 'Save an image of the node'
|
88
|
-
task :save, [:node, :name] do |t, args|
|
89
|
-
default.server_objs.find { |s| s.name == args[:node] }.create_image args[:name]
|
90
|
-
end
|
91
|
-
|
92
|
-
desc "Creates a node with name, image name, flavor, optional count: `rake create[mybox,oberon,'512 server'] count=4`"
|
93
|
-
task :create, [:name, :image, :flavor] do |t, args|
|
94
|
-
(ENV['count'] || 1).to_i.times do |i|
|
95
|
-
@node = default.create \
|
96
|
-
:name => args[:name] + "#{ENV['count'] ? i + 1 : ''}",
|
97
|
-
:image => Nephele::Rackspace.image_lookup(args[:image]),
|
98
|
-
:flavor => args[:flavor],
|
99
|
-
:personality => Nephele::Rackspace::Util.personality(ENV['personality'] || :default)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
JODELL_CHEF_BOOTSTRAPPER = 'https://github.com/jodell/cookbooks/raw/master/bin/bootstrap.sh'
|
104
|
-
|
105
|
-
desc 'Create a VM and run a chef bootstrapper, optional recipe, bootstrap, cookbooks args'
|
106
|
-
task :bootstrap, [:name, :image, :flavor] => :create do |t, args|
|
107
|
-
puts "Bootstrapping: #{args[:name]}..."
|
108
|
-
bootstrapper = ENV['bootstrap'] || JODELL_CHEF_BOOTSTRAPPER
|
109
|
-
alt = ENV['cookbooks']
|
110
|
-
sh %-time ssh root@#{@node.addresses[:public]} "curl #{bootstrapper} > boot && chmod +x boot && ./boot #{alt}"-
|
111
|
-
sh %{time ssh root@#{@node.addresses[:public]} "cd -P /var/chef/cookbooks && rake run[#{ENV['recipe']}]"} if ENV['recipe']
|
112
|
-
end
|
113
|
-
|
114
|
-
desc 'Destroy, bootstrap'
|
115
|
-
task :restrap, [:name, :image, :flavor] => [:destroy, :bootstrap]
|
116
|
-
|
117
|
-
desc 'Destroy a node with name `rake destroy[foo]`'
|
118
|
-
task :destroy, [:name] do |t, args|
|
119
|
-
puts "Destroying: #{args[:name]}"
|
120
|
-
default.server_objs.find { |s| s.name == args[:name] }.delete!
|
121
|
-
end
|
122
|
-
|
123
55
|
desc 'Start IRB with the relevant env'
|
124
56
|
task :console do
|
125
57
|
ARGV.clear and IRB.start
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/bin/neph
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'optitron'
|
5
|
+
begin
|
6
|
+
require 'nephele'
|
7
|
+
rescue LoadError
|
8
|
+
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
9
|
+
require 'nephele'
|
10
|
+
end
|
11
|
+
# awesome_print doesn't seem to play nice with optitron?
|
12
|
+
#require 'ap'
|
13
|
+
|
14
|
+
class Nephele::Runner < Optitron::CLI
|
15
|
+
JODELL_CHEF_BOOTSTRAPPER = 'https://github.com/jodell/cookbooks/raw/master/bin/bootstrap.sh'
|
16
|
+
class_opt 'cookbooks', "optional cookbooks URI", :type => :string
|
17
|
+
class_opt 'personality', 'comma-separated tuple of contents,targetfile to be placed at startup', :type => :string
|
18
|
+
class_opt 'bootstrap', "optional bootstrapper URI, defaults to #{JODELL_CHEF_BOOTSTRAPPER}", :type => :string
|
19
|
+
class_opt 'recipe', "run this recipe after bootstrapping", :type => :string
|
20
|
+
|
21
|
+
desc 'Display a list of servers'
|
22
|
+
def list
|
23
|
+
puts service.servers.map { |i| i[:name] }
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Display available images'
|
27
|
+
def images
|
28
|
+
puts service.images.map { |i| i[:name] }
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'List available flavors'
|
32
|
+
def flavors
|
33
|
+
puts service.flavors.map { |i| i[:name] }
|
34
|
+
end
|
35
|
+
|
36
|
+
desc 'Display server status'
|
37
|
+
def status
|
38
|
+
puts service.status
|
39
|
+
end
|
40
|
+
|
41
|
+
desc 'Change a password on given node'
|
42
|
+
def password(node_string, password_string)
|
43
|
+
service.server_objs.find { |s| s.name == node_string }.update(:adminPass => password_string)
|
44
|
+
end
|
45
|
+
|
46
|
+
desc 'Save an image of the node'
|
47
|
+
def save(node_string, savename_string)
|
48
|
+
service.server_objs.find { |s| s.name == node_string }.create_image name_string
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Creates a node with name, image name, flavor"
|
52
|
+
opt 'count', 'create foo, foo2, foo3, ...', :type => :numeric
|
53
|
+
def create(name, image, flavor)
|
54
|
+
(params['count'] || 1).to_i.times do |i|
|
55
|
+
@node = service.create \
|
56
|
+
:name => name + "#{params['count'] ? i + 1 : ''}",
|
57
|
+
:image => Nephele::Rackspace.image_lookup(image),
|
58
|
+
:flavor => flavor,
|
59
|
+
:personality => Nephele::Rackspace::Util.personality(params['personality'] || :default)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
desc 'Create a VM and run a chef bootstrapper, optional recipe, bootstrap, cookbooks args'
|
64
|
+
def bootstrap(name, image, flavor)
|
65
|
+
puts "Bootstrapping: #{name}..."
|
66
|
+
create name, image, flavor
|
67
|
+
bootstrap = params['bootstrap'] || JODELL_CHEF_BOOTSTRAPPER
|
68
|
+
system %-time ssh root@#{@node.addresses[:public]} "curl #{bootstrap} > boot && chmod +x boot && ./boot #{params['cookbooks'] || ''}"-
|
69
|
+
system %{time ssh root@#{@node.addresses[:public]} "cd -P /var/chef/cookbooks && rake run[#{params['recipe']}]"} if params['recipe']
|
70
|
+
end
|
71
|
+
|
72
|
+
desc 'Destroy and bootstrap'
|
73
|
+
def restrap(name, image, flavor)
|
74
|
+
destroy name
|
75
|
+
bootstrap name, image, flavor
|
76
|
+
end
|
77
|
+
|
78
|
+
desc 'Destroy a given node'
|
79
|
+
def destroy(name_string)
|
80
|
+
if node = service.server_objs.find { |s| s.name == name_string }
|
81
|
+
puts "Destroying: #{name_string}"
|
82
|
+
node.delete!
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def service
|
87
|
+
@@service ||= Nephele.new(:service => :default)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
Nephele::Runner.dispatch
|
data/bin/nephele
CHANGED
@@ -8,6 +8,7 @@ rescue LoadError
|
|
8
8
|
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
9
9
|
require 'nephele'
|
10
10
|
end
|
11
|
+
# awesome_print doesn't seem to play nice with optitron?
|
11
12
|
#require 'ap'
|
12
13
|
|
13
14
|
class Nephele::Runner < Optitron::CLI
|
@@ -24,7 +25,7 @@ class Nephele::Runner < Optitron::CLI
|
|
24
25
|
|
25
26
|
desc 'Display available images'
|
26
27
|
def images
|
27
|
-
puts
|
28
|
+
puts service.images.map { |i| i[:name] }
|
28
29
|
end
|
29
30
|
|
30
31
|
desc 'List available flavors'
|
data/nephele.gemspec
CHANGED
@@ -5,18 +5,18 @@
|
|
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.1"
|
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-
|
13
|
-
s.default_executable = %q{nephele}
|
12
|
+
s.date = %q{2011-04-11}
|
14
13
|
s.description = %q{Light administration utility for popular cloud services}
|
15
14
|
s.email = %q{jeffrey.odell@gmail.com}
|
16
|
-
s.executables = ["nephele"]
|
15
|
+
s.executables = ["neph", "nephele"]
|
17
16
|
s.extra_rdoc_files = [
|
18
17
|
"LICENSE",
|
19
|
-
"README.md"
|
18
|
+
"README.md",
|
19
|
+
"TODO"
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".autotest",
|
@@ -24,7 +24,9 @@ Gem::Specification.new do |s|
|
|
24
24
|
"LICENSE",
|
25
25
|
"README.md",
|
26
26
|
"Rakefile",
|
27
|
+
"TODO",
|
27
28
|
"VERSION",
|
29
|
+
"bin/neph",
|
28
30
|
"bin/nephele",
|
29
31
|
"lib/nephele.rb",
|
30
32
|
"lib/nephele/base.rb",
|
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: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jeffrey O'Dell
|
@@ -15,8 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-04-11 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: rake
|
@@ -191,19 +191,23 @@ dependencies:
|
|
191
191
|
description: Light administration utility for popular cloud services
|
192
192
|
email: jeffrey.odell@gmail.com
|
193
193
|
executables:
|
194
|
+
- neph
|
194
195
|
- nephele
|
195
196
|
extensions: []
|
196
197
|
|
197
198
|
extra_rdoc_files:
|
198
199
|
- LICENSE
|
199
200
|
- README.md
|
201
|
+
- TODO
|
200
202
|
files:
|
201
203
|
- .autotest
|
202
204
|
- Gemfile
|
203
205
|
- LICENSE
|
204
206
|
- README.md
|
205
207
|
- Rakefile
|
208
|
+
- TODO
|
206
209
|
- VERSION
|
210
|
+
- bin/neph
|
207
211
|
- bin/nephele
|
208
212
|
- lib/nephele.rb
|
209
213
|
- lib/nephele/base.rb
|