knife-stormondemand 0.0.3
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 +15 -0
- data/knife-stormondemand.gemspec +16 -0
- data/lib/chef/knife/storm_base.rb +71 -0
- data/lib/chef/knife/storm_server_delete.rb +44 -0
- data/lib/chef/knife/storm_server_list.rb +43 -0
- data/lib/chef/knife/storm_server_reboot.rb +44 -0
- data/lib/knife-stormondemand/version.rb +6 -0
- metadata +68 -0
data/README.md
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
knife-stormondemand
|
2
|
+
===================
|
3
|
+
Knife plugin for interacting with stormondemand api
|
4
|
+
|
5
|
+
https://www.stormondemand.com/
|
6
|
+
|
7
|
+
|
8
|
+
Currently supported commands:
|
9
|
+
|
10
|
+
knife storm server list
|
11
|
+
|
12
|
+
knife storm server delete
|
13
|
+
|
14
|
+
knife storm server reboot
|
15
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "knife-stormondemand/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "knife-stormondemand"
|
6
|
+
s.version = Knife::Linode::VERSION
|
7
|
+
s.has_rdoc = false
|
8
|
+
s.authors = ["Josh Blancett"]
|
9
|
+
s.email = ["JoshBlancet@gmail.com"]
|
10
|
+
s.summary = "StormOnDemand support for Chef's Knife Command"
|
11
|
+
s.description = s.summary
|
12
|
+
s.homepage = "http://github.com/jblancett/knife-stormondemand"
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.add_dependency "fog", "~> 1.0"
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Josh Blancett
|
3
|
+
#
|
4
|
+
|
5
|
+
require 'chef/knife'
|
6
|
+
|
7
|
+
class Chef
|
8
|
+
class Knife
|
9
|
+
module StormBase
|
10
|
+
|
11
|
+
def self.included(includer)
|
12
|
+
includer.class_eval do
|
13
|
+
|
14
|
+
deps do
|
15
|
+
require 'fog'
|
16
|
+
require 'readline'
|
17
|
+
require 'chef/json_compat'
|
18
|
+
end
|
19
|
+
|
20
|
+
option :storm_on_demand_username,
|
21
|
+
:short => "-U USERNAME",
|
22
|
+
:long => "--storm-user",
|
23
|
+
:description => "StormOnDemand api username",
|
24
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:storm_on_demand_username] = key }
|
25
|
+
|
26
|
+
option :storm_on_demand_password,
|
27
|
+
:short => "-P PASSWORD",
|
28
|
+
:long => "--storm-pass",
|
29
|
+
:description => "StormOnDemand api password",
|
30
|
+
:proc => Proc.new { |key| Chef::Config[:knife][:storm_on_demand_password] = key }
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def connection
|
36
|
+
@connection ||= begin
|
37
|
+
connection = Fog::Compute.new({
|
38
|
+
:provider => 'stormondemand',
|
39
|
+
:storm_on_demand_username => locate_config_value(:storm_on_demand_username),
|
40
|
+
:storm_on_demand_password => locate_config_value(:storm_on_demand_password)
|
41
|
+
})
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def locate_config_value(key)
|
46
|
+
key = key.to_sym
|
47
|
+
config[key] || Chef::Config[:knife][key]
|
48
|
+
end
|
49
|
+
|
50
|
+
def msg_pair(label, value, color=:cyan)
|
51
|
+
if value && !value.to_s.empty?
|
52
|
+
puts "#{ui.color(label, color)}: #{value}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def validate!(keys=[:storm_on_demand_username, :storm_on_demand_password])
|
57
|
+
errors = []
|
58
|
+
|
59
|
+
keys.each do |k|
|
60
|
+
pretty_key = k.to_s.gsub(/_/, ' ').gsub(/\w+/){ |w| w.capitalize }
|
61
|
+
if Chef::Config[:knife][k].nil?
|
62
|
+
errors << "You did not provide a valid '#{pretty_key}' value."
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
exit 1 if errors.each{ |e| ui.error(e) }.any?
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#
|
2
|
+
# Author: Josh Blancett
|
3
|
+
#
|
4
|
+
|
5
|
+
class Chef
|
6
|
+
class Knife
|
7
|
+
class StormServerDelete < Knife
|
8
|
+
|
9
|
+
include Knife::StormBase
|
10
|
+
|
11
|
+
banner "knife storm server delete STORM_ID|STORM_FQDN (options)"
|
12
|
+
|
13
|
+
def run
|
14
|
+
|
15
|
+
validate!
|
16
|
+
ui.warn("Nothing to do because no server id or fqdn is specified") if @name_args.empty?
|
17
|
+
|
18
|
+
@name_args.each do |storm_id|
|
19
|
+
|
20
|
+
begin
|
21
|
+
server = connection.servers.detect do |s|
|
22
|
+
s.uniq_id == storm_id || s.domain == storm_id
|
23
|
+
end
|
24
|
+
|
25
|
+
msg_pair("Storm ID", server.uniq_id)
|
26
|
+
msg_pair("FQDN", server.domain)
|
27
|
+
msg_pair("IP", server.ip)
|
28
|
+
msg_pair("Status", server.status['status'])
|
29
|
+
|
30
|
+
puts "\n"
|
31
|
+
confirm("Do you really want to delete this server")
|
32
|
+
|
33
|
+
server.destroy
|
34
|
+
ui.warn("Deleted server #{storm_id}")
|
35
|
+
rescue Fog::Compute::StormOnDemand::NotFound
|
36
|
+
ui.error("Could note locate server #{storm_id}")
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Author: Josh Blancett
|
3
|
+
#
|
4
|
+
|
5
|
+
class Chef
|
6
|
+
class Knife
|
7
|
+
class StormServerList < Knife
|
8
|
+
|
9
|
+
include Knife::StormBase
|
10
|
+
|
11
|
+
banner "knife storm server list (options)"
|
12
|
+
|
13
|
+
def run
|
14
|
+
|
15
|
+
$stdout.sync = true
|
16
|
+
|
17
|
+
validate!
|
18
|
+
|
19
|
+
server_list = [
|
20
|
+
ui.color('Storm ID', :bold),
|
21
|
+
ui.color('FQDN', :bold),
|
22
|
+
ui.color('IP', :bold),
|
23
|
+
ui.color('Region', :bold),
|
24
|
+
ui.color('Zone', :bold),
|
25
|
+
ui.color('Flavor', :bold)
|
26
|
+
]
|
27
|
+
column_count = server_list.count
|
28
|
+
|
29
|
+
connection.servers.each do |server|
|
30
|
+
server_list << server.uniq_id
|
31
|
+
server_list << server.domain
|
32
|
+
server_list << server.ip
|
33
|
+
server_list << server.zone["region"]["name"]
|
34
|
+
server_list << server.zone["name"]
|
35
|
+
server_list << server.config_description
|
36
|
+
end
|
37
|
+
|
38
|
+
puts ui.list(server_list, :uneven_columns_across, column_count)
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#
|
2
|
+
# Author: Josh Blancett
|
3
|
+
#
|
4
|
+
|
5
|
+
class Chef
|
6
|
+
class Knife
|
7
|
+
class StormServerReboot < Knife
|
8
|
+
|
9
|
+
include Knife::StormBase
|
10
|
+
|
11
|
+
banner "knife storm server reboot STORM_ID|STORM_FQDN (options)"
|
12
|
+
|
13
|
+
def run
|
14
|
+
|
15
|
+
validate!
|
16
|
+
ui.warn("Nothing to do because no server id or fqdn is specified") if @name_args.empty?
|
17
|
+
|
18
|
+
@name_args.each do |storm_id|
|
19
|
+
|
20
|
+
begin
|
21
|
+
server = connection.servers.detect do |s|
|
22
|
+
s.uniq_id == storm_id || s.domain == storm_id
|
23
|
+
end
|
24
|
+
|
25
|
+
msg_pair("Storm ID", server.uniq_id)
|
26
|
+
msg_pair("FQDN", server.domain)
|
27
|
+
msg_pair("IP", server.ip)
|
28
|
+
msg_pair("Status", server.status['status'])
|
29
|
+
|
30
|
+
puts "\n"
|
31
|
+
confirm("Do you really want to reboot this server")
|
32
|
+
|
33
|
+
server.reboot
|
34
|
+
ui.warn("Rebooted server #{storm_id}")
|
35
|
+
rescue Fog::Compute::StormOnDemand::NotFound
|
36
|
+
ui.error("Could note locate server #{storm_id}")
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knife-stormondemand
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Josh Blancett
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-12-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fog
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
description: StormOnDemand support for Chef's Knife Command
|
31
|
+
email:
|
32
|
+
- JoshBlancet@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- README.md
|
38
|
+
- knife-stormondemand.gemspec
|
39
|
+
- lib/chef/knife/storm_base.rb
|
40
|
+
- lib/chef/knife/storm_server_delete.rb
|
41
|
+
- lib/chef/knife/storm_server_list.rb
|
42
|
+
- lib/chef/knife/storm_server_reboot.rb
|
43
|
+
- lib/knife-stormondemand/version.rb
|
44
|
+
homepage: http://github.com/jblancett/knife-stormondemand
|
45
|
+
licenses: []
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 1.8.23
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: StormOnDemand support for Chef's Knife Command
|
68
|
+
test_files: []
|