knife-stormondemand 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []