sshkit_addon 1.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 646bed166f7237a05479be5c16db53ef4b7d4544
4
+ data.tar.gz: a2247967ece7259e48510e37c3fdc4dfc6b71cc2
5
+ SHA512:
6
+ metadata.gz: aa77e0c45d9303a9d2a61819371c2bf7c7631f37c505f0af345d7d4ed63657651c1395745327de3664418de56408f99adb73fff04c9bf5048cb46ba24b05885b
7
+ data.tar.gz: 8175e2d4c4e13689efad3a605f06dd1eb49e0cbb4c31727a9b86b18919da46da5e7c898cabe6ffc52dc5b9de8a26632f37ba66ebbd55b95e160852d00d8a4879
@@ -0,0 +1,33 @@
1
+ require "sshkit"
2
+ require "sshkit/dsl"
3
+ include SSHKit::DSL
4
+
5
+ require File.dirname(__FILE__) + "/sshkit_monkey_patch"
6
+
7
+ class CapBase
8
+ attr_reader :servers, :servers_by_hash
9
+ def initialize server_hash
10
+ @servers = []
11
+ @servers_by_hash = {}
12
+
13
+ server_hash.each do |name, hash|
14
+ args = [:host,:user,:port,:password].each_with_object({}) do |key, h|
15
+ if key == :host
16
+ h[:hostname] = hash[key]
17
+ else
18
+ h[key] = hash[key] if hash.has_key? key
19
+ end
20
+ end
21
+
22
+ # host = SSHKit::Host.new :hostname => hash[:host], :user => hash[:user], :password => hash[:password]
23
+ host = SSHKit::Host.new args
24
+ host.key = hash[:key] if hash.has_key? :key #use ssh private key file
25
+
26
+ host.properties.options = hash
27
+
28
+ @servers.push host
29
+
30
+ @servers_by_hash[name] = host
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,16 @@
1
+ module ShellCommandConstructor
2
+ def self.construct_command strings_or_list, connector = " && "
3
+ list = case strings_or_list
4
+ when Array
5
+ strings_or_list
6
+ when String
7
+ strings_or_list.split(/\n/)
8
+ end
9
+ list.each_with_object([]) do |line, obj|
10
+ line.strip!
11
+ next if line.empty?
12
+ next if line =~ /^#/
13
+ obj.push line
14
+ end.join connector
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ #take out the support of ssh gateway as the upload/download is not really supported
2
+ require File.dirname(__FILE__) + "/sshkit_my_formatter"
3
+ SSHKit.config.use_format :myformatter
4
+
5
+ module SSHKit; module Backend; class Netssh
6
+ def put strings, remote, options = {}
7
+ local = StringIO.new strings
8
+ upload! local, remote, options
9
+ end
10
+
11
+ def su_run user, cmd
12
+ execute %Q(su - #{user} -c "#{cmd}")
13
+ end
14
+ alias_method :su_execute, :su_run
15
+
16
+ def sudo cmd
17
+ SSHKit::Backend::Netssh.config.pty = true
18
+ # p host
19
+ password = host.password
20
+ execute %Q( echo #{password} | sudo -kS bash -c "#{cmd}" )
21
+
22
+ # execute %Q(sudo bash -c "#{cmd}"), interaction_handler: {
23
+ # /\(yes\/no\)/i => "yes\n",
24
+ # /[sudo] password/i => "#{password}\n",
25
+ # }
26
+
27
+ end
28
+
29
+ end;end;end
30
+
31
+ SSHKit.config.output_verbosity = SSHKit::Logger::DEBUG
@@ -0,0 +1,58 @@
1
+ module SSHKit
2
+ module Formatter
3
+ class MyFormatter < Abstract
4
+ LEVEL_NAMES = %w{ DEBUG INFO WARN ERROR FATAL }.freeze
5
+ LEVEL_COLORS = [:black, :blue, :yellow, :red, :red].freeze
6
+
7
+ def write(obj)
8
+ if obj.kind_of?(SSHKit::LogMessage)
9
+ write_message(obj.verbosity, obj.to_s)
10
+ else
11
+ raise "write only supports formatting SSHKit::LogMessage, called with #{obj.class}: #{obj.inspect}"
12
+ end
13
+ end
14
+
15
+ def log_command_start(command)
16
+ host_prefix = command.host.user ? "as #{colorize(command.host.user, :blue)}@" : 'on '
17
+ message = "Running #{colorize(command, :yellow, :bold)} #{host_prefix}#{colorize(command.host, :blue)}"
18
+ write_message(command.verbosity, message, command.uuid)
19
+ write_message(Logger::DEBUG, "Command: #{colorize(command.to_command, :blue)}", command.uuid)
20
+ end
21
+
22
+ def log_command_data(command, stream_type, stream_data)
23
+ color = \
24
+ case stream_type
25
+ when :stdout then :green
26
+ when :stderr then :red
27
+ else raise "Unrecognised stream_type #{stream_type}, expected :stdout or :stderr"
28
+ end
29
+ uuid = "#{command.host}: (#{command.uuid})"
30
+ write_message(Logger::DEBUG, colorize("\t#{stream_data}".chomp, color), uuid)
31
+ end
32
+
33
+ def log_command_exit(command)
34
+ runtime = sprintf('%5.3f seconds', command.runtime)
35
+ successful_or_failed = command.failure? ? colorize('failed', :red, :bold) : colorize('successful', :green, :bold)
36
+ message = "Finished in #{runtime} with exit status #{command.exit_status} (#{successful_or_failed})."
37
+ write_message(command.verbosity, message, command.uuid)
38
+ end
39
+
40
+ protected
41
+
42
+ def format_message(verbosity, message, uuid=nil)
43
+ message = "[#{colorize(uuid, :green)}] #{message}" unless uuid.nil?
44
+ level = colorize(LEVEL_NAMES[verbosity].rjust(6), LEVEL_COLORS[verbosity])
45
+ "#{level} #{message}"
46
+ end
47
+
48
+ private
49
+
50
+ def write_message(verbosity, message, uuid=nil)
51
+ original_output << "#{format_message(verbosity, message, uuid)}\n" if verbosity >= SSHKit.config.output_verbosity
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,9 @@
1
+ require "sshkit"
2
+ require "sshkit/dsl"
3
+ include SSHKit::DSL
4
+
5
+ require File.dirname(__FILE__) + "/addon/sshkit_monkey_patch"
6
+ require File.dirname(__FILE__) + "/addon/cap_base"
7
+ require File.dirname(__FILE__) + "/addon/shell_command_constructor"
8
+
9
+
data/readme.md ADDED
@@ -0,0 +1,29 @@
1
+ # An addon for sshkit
2
+
3
+ define the sshkit host with hash structure. then define tasks by choosing the host
4
+ ```
5
+ cap3 = CapBase.new({
6
+ :core1 => { :host => "192.168.5.21", :user => "core", :key => %q(mykey.openssh) },
7
+ :core2 => { :host => "192.168.5.22", :user => "core", :password => 'xxxxx' },
8
+ :core3 => { :host => "192.168.5.22", :user => "core", :password => 'xxxxx' },
9
+ })
10
+ servers = cap3.servers
11
+
12
+ desc "run command"
13
+ task :run_command, [:cmd] do |t, args|
14
+ cmd = args.cmd
15
+ on servers do |host|
16
+ execute cmd
17
+ end
18
+ end
19
+
20
+ desc "run command on a specific host"
21
+ task :run_command_on, [:host_key, :cmd] do |t, args|
22
+ cmd = args.cmd
23
+ on cap3.servers_by_hash[args.host_key] do |host|
24
+ execute cmd
25
+ end
26
+ end
27
+
28
+ ```
29
+
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sshkit_addon
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Zhimin Wen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2010-04-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sshkit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ description: Addon of the sshkit
28
+ email: zhimin.wen@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/addon/cap_base.rb
34
+ - lib/addon/shell_command_constructor.rb
35
+ - lib/addon/sshkit_monkey_patch.rb
36
+ - lib/addon/sshkit_my_formatter.rb
37
+ - lib/sshkit_addon.rb
38
+ - readme.md
39
+ homepage: http://github.com/zhiminwen/sshkit_addon
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.6.11
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: sshkit addon
63
+ test_files: []