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.
@@ -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
@@ -0,0 +1,6 @@
1
+ module Knife
2
+ module Linode
3
+ VERSION = "0.0.3"
4
+ MAJOR, MINOR, TINY = VERSION.split('.')
5
+ end
6
+ 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: []