winrm-s 0.3.0.dev.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +9 -7
- data/lib/winrm-s/version.rb +1 -1
- data/lib/winrm/winrm_service_patch.rb +55 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fe95dd37da3da6c1086e54af81ee41a014eee5e
|
4
|
+
data.tar.gz: cb34e1952b1e46cb7ed05f06f1a48243792dd295
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2cdbb900ec5b64f22972ccac8d95da645a9018854a2ab239f582e63192298f96705421d92d2b90af2a79242fe20bec05688d900cad067c64bd40df67955d774
|
7
|
+
data.tar.gz: 38e93c9eb50579c9fb57dfdce072bf7064f5f226985fd733bd5a288ff612be7f77ed5ff1129143ca84db809a08cd55a3997f7d252bfb84d0a465f5ebdb0df6ab
|
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
# winrm-s Change Log
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
Unreleased
|
4
|
+
--------------
|
5
|
+
|
6
|
+
Release: 0.3.0
|
7
|
+
--------------
|
8
|
+
* [Issue #21](https://github.com/chef/winrm-s/issues/21): Bumps winrm dependency from 1.2 to 1.3.
|
9
|
+
* [Issue #25](https://github.com/opscode/winrm-s/pull/25): [Fix for knife-windows issue 218](https://github.com/opscode/knife-windows/issues/218)
|
5
10
|
|
6
|
-
|
7
|
-
|
11
|
+
Release: 0.2.4
|
12
|
+
--------------
|
8
13
|
* DOC change only: correct omission from CHANGELOG items in 0.2.3 release
|
9
14
|
|
10
15
|
Release: 0.2.3
|
@@ -24,6 +29,3 @@ Release: 0.2.0
|
|
24
29
|
Release: 0.1.0
|
25
30
|
--------------
|
26
31
|
* Initial implementation
|
27
|
-
|
28
|
-
|
29
|
-
|
data/lib/winrm-s/version.rb
CHANGED
@@ -30,5 +30,60 @@ module WinRM
|
|
30
30
|
@xfer = HTTP::HttpSSL.new(endpoint, opts[:user], opts[:pass], opts[:ca_trust_path], opts)
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
# Get the builder obj for output request
|
35
|
+
# @param [String] shell_id The shell id on the remote machine. See #open_shell
|
36
|
+
# @param [String] command_id The command id on the remote machine. See #run_command
|
37
|
+
# @return [Builder::XmlMarkup] Returns a Builder::XmlMarkup for request message
|
38
|
+
def get_builder_obj(shell_id, command_id, &block)
|
39
|
+
body = { "#{NS_WIN_SHELL}:DesiredStream" => 'stdout stderr',
|
40
|
+
:attributes! => {"#{NS_WIN_SHELL}:DesiredStream" => {'CommandId' => command_id}}}
|
41
|
+
builder = Builder::XmlMarkup.new
|
42
|
+
builder.instruct!(:xml, :encoding => 'UTF-8')
|
43
|
+
builder.tag! :env, :Envelope, namespaces do |env|
|
44
|
+
env.tag!(:env, :Header) { |h| h << Gyoku.xml(merge_headers(header,resource_uri_cmd,action_receive,selector_shell_id(shell_id))) }
|
45
|
+
env.tag!(:env, :Body) do |env_body|
|
46
|
+
env_body.tag!("#{NS_WIN_SHELL}:Receive") { |cl| cl << Gyoku.xml(body) }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
builder
|
50
|
+
end
|
51
|
+
|
52
|
+
# Get the Output of the given shell and command
|
53
|
+
# @param [String] shell_id The shell id on the remote machine. See #open_shell
|
54
|
+
# @param [String] command_id The command id on the remote machine. See #run_command
|
55
|
+
# @return [Hash] Returns a Hash with a key :exitcode and :data. Data is an Array of Hashes where the cooresponding key
|
56
|
+
# is either :stdout or :stderr. The reason it is in an Array so so we can get the output in the order it ocurrs on
|
57
|
+
# the console.
|
58
|
+
def get_command_output(shell_id, command_id, &block)
|
59
|
+
done_elems = []
|
60
|
+
while done_elems.empty?
|
61
|
+
resp_doc = nil
|
62
|
+
builder = get_builder_obj(shell_id, command_id, &block)
|
63
|
+
request_msg = builder.target!
|
64
|
+
resp_doc = send_get_output_message(request_msg)
|
65
|
+
|
66
|
+
output = Output.new
|
67
|
+
REXML::XPath.match(resp_doc, "//#{NS_WIN_SHELL}:Stream").each do |n|
|
68
|
+
next if n.text.nil? || n.text.empty?
|
69
|
+
stream = { n.attributes['Name'].to_sym => Base64.decode64(n.text) }
|
70
|
+
output[:data] << stream
|
71
|
+
yield stream[:stdout], stream[:stderr] if block_given?
|
72
|
+
end
|
73
|
+
|
74
|
+
# We may need to get additional output if the stream has not finished.
|
75
|
+
# The CommandState will change from Running to Done like so:
|
76
|
+
# @example
|
77
|
+
# from...
|
78
|
+
# <rsp:CommandState CommandId="..." State="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Running"/>
|
79
|
+
# to...
|
80
|
+
# <rsp:CommandState CommandId="..." State="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done">
|
81
|
+
# <rsp:ExitCode>0</rsp:ExitCode>
|
82
|
+
# </rsp:CommandState>
|
83
|
+
done_elems = REXML::XPath.match(resp_doc, "//*[@State='http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done']")
|
84
|
+
end
|
85
|
+
output[:exitcode] = REXML::XPath.first(resp_doc, "//#{NS_WIN_SHELL}:ExitCode").text.to_i
|
86
|
+
output
|
87
|
+
end
|
33
88
|
end
|
34
89
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: winrm-s
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.0
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kaustubh Deorukhkar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: winrm
|
@@ -126,9 +126,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
126
|
version: '0'
|
127
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - '
|
129
|
+
- - '>='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: '0'
|
132
132
|
requirements: []
|
133
133
|
rubyforge_project:
|
134
134
|
rubygems_version: 2.0.14
|