befog 0.5.0 → 0.5.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.
@@ -30,6 +30,10 @@ module Befog
30
30
  option :type,
31
31
  :short => :t,
32
32
  :description => "The type of machines to provision"
33
+
34
+ option :spot,
35
+ :short => :s,
36
+ :description => "Provision a spot instance"
33
37
 
34
38
  def run
35
39
  provision_servers(options[:count].to_i)
@@ -71,10 +75,21 @@ module Befog
71
75
  end
72
76
 
73
77
  def provision_server
74
- compute.servers.create(
78
+ if options[:spot]
79
+ request = compute.spot_requests.create(
80
+ :price => price.to_f, :instance_count => 1,
75
81
  :tags => {"Name" => generate_server_name},
76
82
  :region => region, :flavor_id => flavor, :image_id => image,
77
- :security_group_ids => security_group, :key_name => keypair)
83
+ :groups => [ security_group ], :key_name => keypair)
84
+ server = nil
85
+ Fog.wait_for {(server = compute.servers.get(request.reload.instance_id)) rescue nil}
86
+ server
87
+ else
88
+ compute.servers.create(
89
+ :tags => {"Name" => generate_server_name},
90
+ :region => region, :flavor_id => flavor, :image_id => image,
91
+ :security_group_ids => security_group, :key_name => keypair)
92
+ end
78
93
  end
79
94
 
80
95
  def generate_server_name
@@ -51,6 +51,10 @@ module Befog
51
51
  option :type,
52
52
  :short => :t,
53
53
  :description => "The number of machines to provision"
54
+
55
+ option :price,
56
+ :short => :z,
57
+ :description => "The spot instance price"
54
58
 
55
59
  def run
56
60
  safely do
@@ -58,7 +62,7 @@ module Befog
58
62
  _key = key.to_sym
59
63
  provider[key] = options[_key] if options[_key]
60
64
  end
61
- %w( region image keypair group type ).each do |key|
65
+ %w( region image keypair group type price ).each do |key|
62
66
  _key = key.to_sym
63
67
  bank[key] = options[_key] if options[_key]
64
68
  end
@@ -89,6 +89,11 @@ module Befog
89
89
  error("Specify a keypair with --keypair or by adding one to the '#{bank_name}' bank.")
90
90
  end
91
91
 
92
+ def price
93
+ options[:price] or bank["price"] or
94
+ error("Specify a spot instance price with --price or by adding one to the '#{bank_name}' bank.")
95
+ end
96
+
92
97
  def keypair?
93
98
  !!options[:keypair] or bank["keypair"]
94
99
  end
@@ -23,7 +23,7 @@ module Befog
23
23
 
24
24
  option :group,
25
25
  :short => :g,
26
- :description => "Select servers using this group"
26
+ :description => "Select servers using this security group"
27
27
 
28
28
  option :type,
29
29
  :short => :t,
@@ -25,8 +25,11 @@ module Befog
25
25
 
26
26
  option :command,
27
27
  :short => :c,
28
- :required => true,
29
- :description => "Command to run (required)"
28
+ :description => "Command to run"
29
+
30
+ option :shell,
31
+ :short => :y,
32
+ :description => "Shell script to run remotely"
30
33
 
31
34
  option :all,
32
35
  :short => :a,
@@ -34,14 +37,25 @@ module Befog
34
37
 
35
38
 
36
39
  def run
40
+ script = if options[:command] and not options[:shell]
41
+ $stdout.puts "Running command '#{options[:command]}' ..."
42
+ options[:command]
43
+ elsif options[:shell] and not options[:command]
44
+ $stdout.puts "Running script '#{options[:shell]}' ..."
45
+ # We add the sleep in case the last command is run in the bg
46
+ File.open options[:shell] { |file| file.read + "\nsleep 1"}
47
+ else
48
+ raise "Must specify one of --shell or --command"
49
+ end
37
50
  run_for_selected do |id|
38
51
  threads = []; threads << Thread.new do
39
52
  safely do
53
+ # TODO: Add check to see if we have a bad ID in the config
40
54
  server = get_server(id)
41
55
  if server.state == "running"
42
56
  address = server.public_ip_address
43
- $stdout.puts "Running command '#{options[:command]}' for #{address} ..."
44
- result = Fog::SSH.new(address, "root").run(options[:command]).first
57
+ $stdout.puts "... for '#{address}'"
58
+ result = Fog::SSH.new(address, "root").run(script).first
45
59
  $stdout.puts "#{address} STDOUT: #{result.stdout}"
46
60
  $stderr.puts "#{address} STDERR: #{result.stderr}" unless result.stderr.empty?
47
61
  else
metadata CHANGED
@@ -1,63 +1,77 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: befog
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
4
5
  prerelease:
5
- version: 0.5.0
6
6
  platform: ruby
7
- authors:
8
- - Carlo Flores carlo@spire.io
9
- - Dan Yoder dan@spire.io
7
+ authors:
8
+ - Lance Lakey lancelakey@gmail.com
9
+ - Carlo Flores lo@js.la
10
+ - Dan Yoder danielyoder@gmail.com
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
-
14
- date: 2012-09-12 00:00:00 Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
14
+ date: 2012-11-12 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
17
  name: fog
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: !ruby/object:Gem::Requirement
20
19
  none: false
21
- requirements:
20
+ requirements:
22
21
  - - ~>
23
- - !ruby/object:Gem::Version
24
- version: "1.3"
22
+ - !ruby/object:Gem::Version
23
+ version: '1.3'
25
24
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
25
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
26
+ version_requirements: !ruby/object:Gem::Requirement
31
27
  none: false
32
- requirements:
28
+ requirements:
33
29
  - - ~>
34
- - !ruby/object:Gem::Version
35
- version: "2.7"
30
+ - !ruby/object:Gem::Version
31
+ version: '1.3'
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '2.7'
36
40
  type: :development
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: yard
40
41
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
42
+ version_requirements: !ruby/object:Gem::Requirement
42
43
  none: false
43
- requirements:
44
+ requirements:
44
45
  - - ~>
45
- - !ruby/object:Gem::Version
46
- version: "0.7"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.7'
48
+ - !ruby/object:Gem::Dependency
49
+ name: yard
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '0.7'
47
56
  type: :development
48
- version_requirements: *id003
49
- description: "\t\tThe befog gem allows you to manage your cloud servers\n\
50
- \t\tdirectly from the command-line. \n"
51
- email:
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: '0.7'
64
+ description: ! "\t\tThe befog gem allows you to manage your cloud servers\n\t\tdirectly
65
+ from the command-line. \n"
66
+ email:
67
+ -
52
68
  -
53
69
  -
54
- executables:
70
+ executables:
55
71
  - befog
56
72
  extensions: []
57
-
58
73
  extra_rdoc_files: []
59
-
60
- files:
74
+ files:
61
75
  - lib/befog/cli.rb
62
76
  - lib/befog/commands/add.rb
63
77
  - lib/befog/commands/configure.rb
@@ -76,33 +90,29 @@ files:
76
90
  - lib/befog/commands.rb
77
91
  - lib/befog.rb
78
92
  - bin/befog
79
- homepage: https://github.com/spire-io/befog
93
+ homepage: https://github.com/dyoder/befog
80
94
  licenses: []
81
-
82
95
  post_install_message:
83
96
  rdoc_options: []
84
-
85
- require_paths:
97
+ require_paths:
86
98
  - lib
87
- required_ruby_version: !ruby/object:Gem::Requirement
99
+ required_ruby_version: !ruby/object:Gem::Requirement
88
100
  none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: "0"
93
- required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
106
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- version: "0"
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
99
111
  requirements: []
100
-
101
112
  rubyforge_project:
102
113
  rubygems_version: 1.8.23
103
114
  signing_key:
104
115
  specification_version: 3
105
116
  summary: Cloud provisioning CLI
106
117
  test_files: []
107
-
108
118
  has_rdoc: