capistrano_winrm 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +2 -0
- data/Rakefile +66 -0
- data/VERSION +1 -0
- data/capistrano_winrm.gemspec +30 -0
- data/examples/capfile +42 -0
- data/lib/capistrano_winrm/configuration/connections.rb +2 -4
- data/lib/winrm_connection.rb +27 -19
- metadata +15 -27
data/README
CHANGED
@@ -13,6 +13,8 @@ BLOG: http://distributed-frostbite.blogspot.com/
|
|
13
13
|
Add me in LinkedIn: http://www.linkedin.com/in/danwanek
|
14
14
|
|
15
15
|
--------------------------------------------------------------------------
|
16
|
+
INSTALL (Resides on rubygems.org):
|
17
|
+
gem install -r capistrano_winrm
|
16
18
|
|
17
19
|
TO USE:
|
18
20
|
require 'capistrano_winrm'
|
data/Rakefile
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
CLEAN.include("pkg")
|
7
|
+
CLEAN.include("doc")
|
8
|
+
|
9
|
+
GEMSPEC = Gem::Specification.new do |gem|
|
10
|
+
gem.name = "capistrano_winrm"
|
11
|
+
gem.version = File.open('VERSION').readline.chomp
|
12
|
+
gem.date = Date.today.to_s
|
13
|
+
gem.platform = Gem::Platform::RUBY
|
14
|
+
gem.rubyforge_project = nil
|
15
|
+
|
16
|
+
gem.author = "Dan Wanek"
|
17
|
+
gem.email = "dan.wanek@gmail.com"
|
18
|
+
gem.homepage = "http://github.com/zenchild/capistrano_winrm"
|
19
|
+
|
20
|
+
gem.summary = 'WinRM extensions for Capistrano'
|
21
|
+
gem.description = <<-EOF
|
22
|
+
WinRM extensions for Capistrano
|
23
|
+
EOF
|
24
|
+
|
25
|
+
gem.files = %w{ lib/capistrano_winrm.rb lib/capistrano_winrm/command.rb lib/capistrano_winrm/configuration/connections.rb lib/winrm_connection.rb }
|
26
|
+
gem.require_path = "lib"
|
27
|
+
gem.rdoc_options = %w(-x test/ -x examples/)
|
28
|
+
gem.extra_rdoc_files = %w(README)
|
29
|
+
|
30
|
+
gem.required_ruby_version = '>= 1.8.7'
|
31
|
+
gem.add_runtime_dependency 'capistrano'
|
32
|
+
gem.add_runtime_dependency 'winrm', '>=0.0.4'
|
33
|
+
end
|
34
|
+
|
35
|
+
Rake::GemPackageTask.new(GEMSPEC) do |pkg|
|
36
|
+
pkg.need_tar = true
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => [:buildgem]
|
40
|
+
|
41
|
+
desc "Build the gem without a version change"
|
42
|
+
task :buildgem => [:clean, :repackage]
|
43
|
+
|
44
|
+
desc "Build the gem, but increment the version first"
|
45
|
+
task :newrelease => [:versionup, :clean, :repackage]
|
46
|
+
|
47
|
+
|
48
|
+
desc "Increment the version by 1 minor release"
|
49
|
+
task :versionup do
|
50
|
+
ver = up_min_version
|
51
|
+
puts "New version: #{ver}"
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def up_min_version
|
56
|
+
f = File.open('VERSION', 'r+')
|
57
|
+
ver = f.readline.chomp
|
58
|
+
v_arr = ver.split(/\./).map do |v|
|
59
|
+
v.to_i
|
60
|
+
end
|
61
|
+
v_arr[2] += 1
|
62
|
+
ver = v_arr.join('.')
|
63
|
+
f.rewind
|
64
|
+
f.write(ver)
|
65
|
+
ver
|
66
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
version = File.read(File.expand_path("../VERSION", __FILE__)).strip
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.name = 'capistrano_winrm'
|
9
|
+
s.version = version
|
10
|
+
s.date = Date.today.to_s
|
11
|
+
|
12
|
+
s.author = 'Dan Wanek'
|
13
|
+
s.email = 'dan.wanek@gmail.com'
|
14
|
+
s.homepage = "https://github.com/zenchild/capistrano_winrm"
|
15
|
+
|
16
|
+
s.summary = "Extends Capistrano with WinRM support."
|
17
|
+
s.description = <<-EOF
|
18
|
+
This gem extends Capistrano's base functionality to support WinRM which
|
19
|
+
allows one to run commands across Windows boxes with the "winrm_run" method.
|
20
|
+
EOF
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split(/\n/)
|
23
|
+
s.require_path = "lib"
|
24
|
+
s.rdoc_options = %w(-x test/ -x examples/)
|
25
|
+
s.extra_rdoc_files = %w(README)
|
26
|
+
|
27
|
+
s.required_ruby_version = '>= 1.9.0'
|
28
|
+
s.add_runtime_dependency 'capistrano', '>= 2.5.18'
|
29
|
+
s.add_runtime_dependency 'winrm', '>= 1.0.0rc1'
|
30
|
+
end
|
data/examples/capfile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'capistrano_winrm'
|
2
|
+
|
3
|
+
# The ssl port will either be 443 for older WinRM implementations or 5986 for new versions.
|
4
|
+
role :win_domain, 'myhost:5985'
|
5
|
+
role :win_standalone, 'myhost-allalone:5985'
|
6
|
+
|
7
|
+
def winrm_netstat
|
8
|
+
host_data = {}
|
9
|
+
cmd = 'netstat -an'
|
10
|
+
winrm cmd do |channel, stream, data|
|
11
|
+
host_data[channel[:host]] = "" unless host_data[channel[:host]].is_a?(String)
|
12
|
+
host_data[channel[:host]] << data
|
13
|
+
end
|
14
|
+
|
15
|
+
host_data.each_pair do |host,data|
|
16
|
+
puts "HOST: #{host}"
|
17
|
+
puts "---------------------------------------"
|
18
|
+
puts data
|
19
|
+
puts "---------------------------------------"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
task :winrm_krb5, :roles => :win_domain do
|
24
|
+
set :winrm_krb5_realm, 'EXAMPLE.COM'
|
25
|
+
winrm_netstat
|
26
|
+
unset :winrm_krb5_realm
|
27
|
+
end
|
28
|
+
|
29
|
+
task :winrm_plain, :roles => :win_standalone do
|
30
|
+
set :winrm_user, 'myuser'
|
31
|
+
set :winrm_password, 'mypass'
|
32
|
+
#set :winrm_ssl_ca_store, '/etc/ssl/certs'
|
33
|
+
winrm_netstat
|
34
|
+
#unset :winrm_ssl_ca_store
|
35
|
+
unset :winrm_user
|
36
|
+
unset :winrm_password
|
37
|
+
end
|
38
|
+
|
39
|
+
task :allwinrm do
|
40
|
+
winrm_krb5
|
41
|
+
winrm_plain
|
42
|
+
end
|
@@ -4,16 +4,14 @@ module Capistrano
|
|
4
4
|
class WinRMConnectionFactory #:nodoc:
|
5
5
|
def initialize(options)
|
6
6
|
@options = options
|
7
|
-
@winrm = WINRM.new(options[:winrm_user], options[:winrm_password], nil, options[:winrm_ssl_ca_store])
|
8
7
|
end
|
9
8
|
|
10
9
|
def connect_to(server)
|
11
|
-
|
12
|
-
@winrm
|
10
|
+
WINRM.new(server, @options)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
|
16
|
-
# Returns the object responsible for establishing new
|
14
|
+
# Returns the object responsible for establishing new connections.
|
17
15
|
# The factory will respond to #connect_to, which can be used to
|
18
16
|
# establish connections to servers defined via ServerDefinition objects.
|
19
17
|
def connection_factory
|
data/lib/winrm_connection.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
require 'winrm'
|
2
2
|
|
3
3
|
class WINRM
|
4
|
+
|
4
5
|
attr_reader :server
|
5
6
|
alias :xserver :server
|
6
7
|
|
7
|
-
def initialize(
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@ssl_ca_store = ssl_ca_store
|
12
|
-
@int_hash = {}
|
8
|
+
def initialize(server, opts)
|
9
|
+
@server = server
|
10
|
+
@int_hash = {:options => opts, :server => server}
|
11
|
+
@winrm = establish_winrm(opts)
|
13
12
|
end
|
14
13
|
|
15
14
|
def [](key)
|
@@ -20,24 +19,12 @@ class WINRM
|
|
20
19
|
@int_hash[key.to_sym] = value
|
21
20
|
end
|
22
21
|
|
23
|
-
def setup_connection(server, options)
|
24
|
-
@server = server
|
25
|
-
@int_hash[:options] = options
|
26
|
-
@int_hash[:server] = server
|
27
|
-
end
|
28
|
-
|
29
22
|
def open_channel
|
30
23
|
yield self
|
31
24
|
end
|
32
25
|
|
33
26
|
def exec(cmd)
|
34
|
-
|
35
|
-
endpoint = @endpoint ? @endpoint : "#{http_method}://#{server}/wsman"
|
36
|
-
WinRM::WinRM.endpoint = endpoint
|
37
|
-
WinRM::WinRM.set_auth(@user, @pass)
|
38
|
-
WinRM::WinRM.set_ca_trust_path(@ssl_ca_store) unless @ssl_ca_store.nil?
|
39
|
-
inst = WinRM::WinRM.instance
|
40
|
-
@ios = inst.cmd(cmd)
|
27
|
+
@ios = @winrm.cmd(cmd)
|
41
28
|
end
|
42
29
|
|
43
30
|
def process_data
|
@@ -54,4 +41,25 @@ class WINRM
|
|
54
41
|
def on_request(req_type); self; end
|
55
42
|
def on_close; self; end
|
56
43
|
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# Create a new WinRM instance
|
48
|
+
# @param [Hash] opts the option hash that was passed to initialize
|
49
|
+
# @return [WinRM] a new WinRM connection for a particular endpoint
|
50
|
+
def establish_winrm(opts)
|
51
|
+
http_method = ( server.port.to_s=~/(443|5986)/ ? 'https' : 'http' )
|
52
|
+
endpoint = "#{http_method}://#{server}/wsman"
|
53
|
+
if opts[:winrm_krb5_realm]
|
54
|
+
inst = WinRM::WinRMWebService.new(endpoint, :kerberos, :realm => opts[:winrm_krb5_realm])
|
55
|
+
else
|
56
|
+
unless opts[:winrm_ssl_ca_store]
|
57
|
+
inst = WinRM::WinRMWebService.new(endpoint, :plaintext, :user => opts[:winrm_user], :pass => opts[:winrm_password])
|
58
|
+
else
|
59
|
+
inst = WinRM::WinRMWebService.new(endpoint, :ssl, :user => opts[:winrm_user], :pass => opts[:winrm_password], :ca_trust_path => opts[:winrm_ssl_ca_store])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
inst
|
63
|
+
end
|
64
|
+
|
57
65
|
end
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano_winrm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
version: 0.0.1
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Dan Wanek
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-03-03 00:00:00 -06:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,9 +21,7 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
24
|
+
version: 2.5.18
|
31
25
|
type: :runtime
|
32
26
|
version_requirements: *id001
|
33
27
|
- !ruby/object:Gem::Dependency
|
@@ -38,14 +32,10 @@ dependencies:
|
|
38
32
|
requirements:
|
39
33
|
- - ">="
|
40
34
|
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
- 0
|
43
|
-
- 0
|
44
|
-
- 4
|
45
|
-
version: 0.0.4
|
35
|
+
version: 1.0.0rc1
|
46
36
|
type: :runtime
|
47
37
|
version_requirements: *id002
|
48
|
-
description: "
|
38
|
+
description: " This gem extends Capistrano's base functionality to support WinRM which\n allows one to run commands across Windows boxes with the \"winrm_run\" method.\n"
|
49
39
|
email: dan.wanek@gmail.com
|
50
40
|
executables: []
|
51
41
|
|
@@ -54,13 +44,17 @@ extensions: []
|
|
54
44
|
extra_rdoc_files:
|
55
45
|
- README
|
56
46
|
files:
|
47
|
+
- README
|
48
|
+
- Rakefile
|
49
|
+
- VERSION
|
50
|
+
- capistrano_winrm.gemspec
|
51
|
+
- examples/capfile
|
57
52
|
- lib/capistrano_winrm.rb
|
58
53
|
- lib/capistrano_winrm/command.rb
|
59
54
|
- lib/capistrano_winrm/configuration/connections.rb
|
60
55
|
- lib/winrm_connection.rb
|
61
|
-
- README
|
62
56
|
has_rdoc: true
|
63
|
-
homepage:
|
57
|
+
homepage: https://github.com/zenchild/capistrano_winrm
|
64
58
|
licenses: []
|
65
59
|
|
66
60
|
post_install_message:
|
@@ -76,25 +70,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
70
|
requirements:
|
77
71
|
- - ">="
|
78
72
|
- !ruby/object:Gem::Version
|
79
|
-
|
80
|
-
- 1
|
81
|
-
- 8
|
82
|
-
- 7
|
83
|
-
version: 1.8.7
|
73
|
+
version: 1.9.0
|
84
74
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
75
|
none: false
|
86
76
|
requirements:
|
87
77
|
- - ">="
|
88
78
|
- !ruby/object:Gem::Version
|
89
|
-
segments:
|
90
|
-
- 0
|
91
79
|
version: "0"
|
92
80
|
requirements: []
|
93
81
|
|
94
82
|
rubyforge_project:
|
95
|
-
rubygems_version: 1.
|
83
|
+
rubygems_version: 1.5.0
|
96
84
|
signing_key:
|
97
85
|
specification_version: 3
|
98
|
-
summary:
|
86
|
+
summary: Extends Capistrano with WinRM support.
|
99
87
|
test_files: []
|
100
88
|
|