befog 0.1.0 → 0.2.0
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/lib/befog/cli.rb +16 -4
- data/lib/befog/commands/add.rb +8 -6
- data/lib/befog/commands/configure.rb +8 -5
- data/lib/befog/commands/list.rb +2 -1
- data/lib/befog/commands/mixins/bank.rb +3 -3
- data/lib/befog/commands/mixins/configurable.rb +1 -0
- data/lib/befog/commands/mixins/provider.rb +2 -2
- data/lib/befog/commands/run.rb +10 -5
- data/lib/befog/commands/start.rb +8 -1
- data/lib/befog/commands/stop.rb +8 -1
- metadata +3 -3
data/lib/befog/cli.rb
CHANGED
@@ -7,7 +7,10 @@ require "befog/commands/list"
|
|
7
7
|
require "befog/commands/configure"
|
8
8
|
|
9
9
|
module Befog
|
10
|
+
|
10
11
|
module CLI
|
12
|
+
|
13
|
+
class Error < RuntimeError ; end
|
11
14
|
|
12
15
|
COMMANDS = {
|
13
16
|
"add" => Befog::Commands::Add,
|
@@ -30,8 +33,12 @@ module Befog
|
|
30
33
|
# differentiate between expected exceptions
|
31
34
|
# (just display the error message) and un-
|
32
35
|
# expected (display the backtrace)
|
33
|
-
rescue => e
|
36
|
+
rescue Befog::CLI::Error => e
|
34
37
|
$stderr.puts "befog: #{e.message}"
|
38
|
+
exit(-1)
|
39
|
+
rescue => e # uh-oh
|
40
|
+
$stderr.puts "Unexpected error"
|
41
|
+
$stderr.puts "#{e.class}: #{e.message}"
|
35
42
|
$stderr.puts e.backtrace
|
36
43
|
exit(-1)
|
37
44
|
end
|
@@ -50,11 +57,16 @@ module Befog
|
|
50
57
|
|
51
58
|
Usage: befog <subcommand> [<bank>] [<options>]
|
52
59
|
|
53
|
-
The befog command allows you to manage your cloud servers from the command line.
|
60
|
+
The befog command allows you to manage your cloud servers from the command line.
|
61
|
+
You reference these sets of servers as banks. A bank can have one or many servers.
|
62
|
+
|
63
|
+
Example: befog add web-servers --count 3
|
64
|
+
|
65
|
+
Adds 3 servers to the bank "web-servers"
|
54
66
|
|
55
67
|
Valid commands:
|
56
68
|
|
57
|
-
configure
|
69
|
+
configure Configure a bank of servers
|
58
70
|
config
|
59
71
|
add Provision new servers for a bank of servers
|
60
72
|
remove De-provision servers for a bank of servers
|
@@ -69,4 +81,4 @@ eos
|
|
69
81
|
|
70
82
|
end
|
71
83
|
end
|
72
|
-
end
|
84
|
+
end
|
data/lib/befog/commands/add.rb
CHANGED
@@ -24,9 +24,7 @@ module Befog
|
|
24
24
|
:long => "--count COUNT",
|
25
25
|
:required => true,
|
26
26
|
:description => "The number of machines to provision"
|
27
|
-
|
28
|
-
# TODO: Add support for machine type
|
29
|
-
|
27
|
+
|
30
28
|
def run
|
31
29
|
count = options[:count].to_i
|
32
30
|
if count <= 0
|
@@ -35,10 +33,14 @@ module Befog
|
|
35
33
|
end
|
36
34
|
servers = []
|
37
35
|
count.times do |i|
|
38
|
-
$stdout.puts "Provisioning server #{i+1} ..."
|
36
|
+
$stdout.puts "Provisioning server #{i+1} for bank '#{options[:bank]}'..."
|
39
37
|
# TODO: Figure out how to give the server a name
|
40
|
-
|
41
|
-
|
38
|
+
# TODO: Check for values for all crucial configuration properties
|
39
|
+
servers << compute.servers.create(
|
40
|
+
:tags => {"Name" => options[:bank]}, :region => bank["region"],
|
41
|
+
:flavor_id => bank["type"], :image_id => bank["image"],
|
42
|
+
:security_group_ids => [options[:group]||"default"],
|
43
|
+
:key_name => bank["keypair"])
|
42
44
|
end
|
43
45
|
$stdout.puts "This may take a few minutes ..."
|
44
46
|
servers.each do |server|
|
@@ -53,6 +53,11 @@ module Befog
|
|
53
53
|
:short => "-g GROUP",
|
54
54
|
:long => "--group GROUP",
|
55
55
|
:description => "The security group to use for new instances"
|
56
|
+
|
57
|
+
option :type,
|
58
|
+
:short => "-t TYPE",
|
59
|
+
:long => "--type TYPE",
|
60
|
+
:description => "The number of machines to provision"
|
56
61
|
|
57
62
|
def self.run(args)
|
58
63
|
self.new(args).run
|
@@ -67,11 +72,9 @@ module Befog
|
|
67
72
|
_key = key.to_sym
|
68
73
|
provider[key] = options[_key] if options[_key]
|
69
74
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
bank[key] = options[_key] if options[_key]
|
74
|
-
end
|
75
|
+
%w( provider region image keypair group type ).each do |key|
|
76
|
+
_key = key.to_sym
|
77
|
+
bank[key] = options[_key] if options[_key]
|
75
78
|
end
|
76
79
|
save
|
77
80
|
end
|
data/lib/befog/commands/list.rb
CHANGED
@@ -66,7 +66,8 @@ module Befog
|
|
66
66
|
out << "instances:"
|
67
67
|
banks[name]["servers"].each do |id|
|
68
68
|
c = compute(configuration["provider"])
|
69
|
-
|
69
|
+
s = c.servers.get(id)
|
70
|
+
out << "- #{s.flavor_id} #{s.public_ip_address} #{s.state}"
|
70
71
|
end
|
71
72
|
$stdout.puts out.join("\n#{indent}")
|
72
73
|
end
|
@@ -8,7 +8,7 @@ module Befog
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def _bank
|
11
|
-
raise "You must specify a bank to do this" unless options[:bank]
|
11
|
+
raise Befog::CLI::Error.new("You must specify a bank to do this") unless options[:bank]
|
12
12
|
banks[options[:bank]] ||= {}
|
13
13
|
end
|
14
14
|
|
@@ -22,13 +22,13 @@ module Befog
|
|
22
22
|
|
23
23
|
def process_arguments(arguments)
|
24
24
|
_bank,*rest = arguments
|
25
|
-
if _bank =~ /^\-/
|
25
|
+
if _bank.nil? or _bank =~ /^\-/
|
26
26
|
super
|
27
27
|
else
|
28
28
|
super(rest)
|
29
29
|
options[:bank] = _bank
|
30
30
|
bank.each do |key,value|
|
31
|
-
options[key.to_sym]
|
31
|
+
options[key.to_sym] ||= value
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -14,7 +14,7 @@ module Befog
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def provider
|
17
|
-
raise "You must specify a provider (with --provider or -q) to do this" unless options[:provider]
|
17
|
+
raise Befog::CLI::Error.new("You must specify a provider (with --provider or -q) to do this") unless options[:provider]
|
18
18
|
providers[options[:provider]] ||= {}
|
19
19
|
end
|
20
20
|
|
@@ -23,7 +23,7 @@ module Befog
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def region
|
26
|
-
raise "Please set the region using -r or --region." unless options[:region]
|
26
|
+
raise Befog::CLI::Error.new("Please set the region using -r or --region.") unless options[:region]
|
27
27
|
regions[options[:region]] ||= {}
|
28
28
|
end
|
29
29
|
|
data/lib/befog/commands/run.rb
CHANGED
@@ -33,11 +33,16 @@ module Befog
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def run_for_server(id)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
server = get_server(id)
|
37
|
+
if server.state == "running"
|
38
|
+
address = server.public_ip_address
|
39
|
+
$stdout.puts "Running command '#{options[:command]}' for #{address} ..."
|
40
|
+
result = Fog::SSH.new(address, "root").run(options[:command]).first
|
41
|
+
$stdout.puts "[#{address}: STDOUT] #{result.stdout}"
|
42
|
+
$stderr.puts "[#{address}: STDERR] #{result.stderr}"
|
43
|
+
else
|
44
|
+
$stdout.puts "Server #{id} isn't running - skipping"
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
end
|
data/lib/befog/commands/start.rb
CHANGED
@@ -19,13 +19,20 @@ module Befog
|
|
19
19
|
include Mixins::Help
|
20
20
|
|
21
21
|
command "befog start <bank>",
|
22
|
-
:default_to_help =>
|
22
|
+
:default_to_help => false
|
23
23
|
|
24
24
|
def run
|
25
25
|
run_for_each_server
|
26
26
|
end
|
27
27
|
|
28
28
|
def run_for_server(id)
|
29
|
+
server = get_server(id)
|
30
|
+
if server.state == "stopped"
|
31
|
+
$stdout.puts "Starting server #{id} ..."
|
32
|
+
server.start
|
33
|
+
else
|
34
|
+
$stdout.puts "Server #{id} is already (or still) running"
|
35
|
+
end
|
29
36
|
end
|
30
37
|
|
31
38
|
end
|
data/lib/befog/commands/stop.rb
CHANGED
@@ -20,13 +20,20 @@ module Befog
|
|
20
20
|
include Mixins::Help
|
21
21
|
|
22
22
|
command "befog stop <bank>",
|
23
|
-
:default_to_help =>
|
23
|
+
:default_to_help => false
|
24
24
|
|
25
25
|
def run
|
26
26
|
run_for_each_server
|
27
27
|
end
|
28
28
|
|
29
29
|
def run_for_server(id)
|
30
|
+
server = get_server(id)
|
31
|
+
if server.state == "running"
|
32
|
+
$stdout.puts "Stopping server #{id} ..."
|
33
|
+
server.stop
|
34
|
+
else
|
35
|
+
$stdout.puts "Server #{id} is not (yet) running"
|
36
|
+
end
|
30
37
|
end
|
31
38
|
|
32
39
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: befog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Carlo Flores carlo@spire.io
|