knife-windows 0.5.0 → 0.5.1

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.
@@ -15,8 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.description = s.summary
16
16
 
17
17
  s.required_ruby_version = ">= 1.9.1"
18
- s.add_dependency "chef", ">= 0.10.0.beta.5"
19
- s.add_dependency "em-winrm", "= 0.0.4"
18
+ s.add_dependency "em-winrm", "= 0.0.5"
20
19
 
21
20
  s.files = `git ls-files`.split("\n")
22
21
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -19,25 +19,7 @@
19
19
  mkdir C:\chef
20
20
 
21
21
  > C:\chef\wget.vbs (
22
- echo.strFileUrl = WScript.Arguments.Item^(0^)
23
- echo.strHDLocation = WScript.Arguments.Item^(1^)
24
- echo.Set objXMLHTTP = CreateObject^("MSXML2.XMLHTTP"^)
25
- echo.objXMLHTTP.open "GET", strFileURL, false
26
- echo.objXMLHTTP.send^(^)
27
- echo.If objXMLHTTP.Status = 200 Then
28
- echo.Set objADOStream = CreateObject^("ADODB.Stream"^)
29
- echo.objADOStream.Open
30
- echo.objADOStream.Type = 1
31
- echo.objADOStream.Write objXMLHTTP.ResponseBody
32
- echo.objADOStream.Position = 0
33
- echo.Set objFSO = Createobject^("Scripting.FileSystemObject"^)
34
- echo.If objFSO.Fileexists^(strHDLocation^) Then objFSO.DeleteFile strHDLocation
35
- echo.Set objFSO = Nothing
36
- echo.objADOStream.SaveToFile strHDLocation
37
- echo.objADOStream.Close
38
- echo.Set objADOStream = Nothing
39
- echo.End if
40
- echo.Set objXMLHTTP = Nothing
22
+ <%= win_wget %>
41
23
  )
42
24
 
43
25
  cscript /nologo C:\chef\wget.vbs http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/rubyinstaller-1.8.7-p334.exe %TEMP%\rubyinstaller.exe
@@ -51,50 +33,24 @@ cmd.exe /C C:\DevKit\rubydevkit.exe -y
51
33
  cmd.exe /C C:\ruby\bin\ruby c:/DevKit/dk.rb init
52
34
  cmd.exe /C C:\ruby\bin\ruby c:/DevKit/dk.rb install
53
35
 
54
- cmd.exe /C C:\ruby\bin\gem install win32-open3 ruby-wmi windows-api windows-pr --no-rdoc --no-ri --verbose
36
+ cmd.exe /C C:\ruby\bin\gem install win32-open3 rdp-ruby-wmi windows-api windows-pr --no-rdoc --no-ri --verbose
55
37
 
56
38
  @rem Install Chef gems separately to prevent 'failed to allocate memory' errors
57
- cmd.exe /C C:\ruby\bin\gem install ohai --no-rdoc --no-ri --verbose <%= '--prerelease' if @config[:prerelease] %>
58
- cmd.exe /C C:\ruby\bin\gem install chef --no-rdoc --no-ri --verbose <%= '--prerelease' if @config[:prerelease] %>
39
+ cmd.exe /C C:\ruby\bin\gem install ohai --no-rdoc --no-ri --verbose
40
+ cmd.exe /C C:\ruby\bin\gem install chef --no-rdoc --no-ri --verbose <%= bootstrap_version_string %>
59
41
 
60
42
  > C:\chef\validation.pem (
61
- <% IO.read(Chef::Config[:validation_key]).each_line do |line| -%>
62
- <%= "echo.#{line.strip}" %>
63
- <% end -%>
64
- echo.
43
+ <%= validation_key %>
65
44
  )
66
45
 
67
46
  > C:\chef\client.rb (
68
47
  echo.require 'win32ole'
69
48
  echo.WIN32OLE.codepage = WIN32OLE::CP_UTF8
70
- echo.log_level :info
71
- echo.log_location STDOUT
72
- echo.chef_server_url "<%= Chef::Config[:chef_server_url] %>"
73
- echo.validation_client_name "<%= Chef::Config[:validation_client_name] %>"
74
- echo.client_key "c:/chef/client.pem"
75
- echo.validation_key "c:/chef/validation.pem"
76
- echo.checksum_path "c:/chef/checksums"
77
- echo.file_cache_path "c:/chef/cache"
78
- echo.file_backup_path "c:/chef/backup"
79
- echo.cache_options ^( {:path, "c:/chef/cache/checksums", :skip_expires, true} ^)
80
- <% if Chef::Config[:http_proxy] != nil %>
81
- echo.http_proxy "<%= Chef::Config[:http_proxy] %>"
82
- <% end %>
83
- <% if Chef::Config[:https_proxy] != nil %>
84
- echo.https_proxy "<%= Chef::Config[:https_proxy] %>"
85
- <% end %>
86
- <% if Chef::Config[:no_proxy] != nil %>
87
- echo.no_proxy "<%= Chef::Config[:no_proxy] %>"
88
- <% end %>
89
- <% if @config[:chef_node_name] == nil %>
90
- echo.# Using default node name
91
- <% else %>
92
- echo.node_name "<%= @config[:chef_node_name] %>"
93
- <% end %>
49
+ <%= config_content %>
94
50
  )
95
51
 
96
52
  > C:\chef\first-boot.json (
97
- echo.<%= { "run_list" => @run_list }.to_json %>
53
+ <%= run_list %>
98
54
  )
99
55
 
100
- c:/ruby/bin/ruby c:/ruby/bin/chef-client -c c:/chef/client.rb -j c:/chef/first-boot.json -l <%= Chef::Config[:log_level] %>
56
+ <%= start_chef %>
@@ -0,0 +1,109 @@
1
+ #
2
+ # Author:: Seth Chisamore (<schisamo@opscode.com>)
3
+ # Copyright:: Copyright (c) 2011 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife/core/bootstrap_context'
20
+
21
+ class Chef
22
+ class Knife
23
+ module Core
24
+ # Instances of BootstrapContext are the context objects (i.e., +self+) for
25
+ # bootstrap templates. For backwards compatability, they +must+ set the
26
+ # following instance variables:
27
+ # * @config - a hash of knife's config values
28
+ # * @run_list - the run list for the node to boostrap
29
+ #
30
+ class WindowsBootstrapContext < BootstrapContext
31
+
32
+ def initialize(config, run_list, chef_config)
33
+ @config = config
34
+ @run_list = run_list
35
+ @chef_config = chef_config
36
+ super(config, run_list, chef_config)
37
+ end
38
+
39
+ def validation_key
40
+ val_key = escape_and_echo(super)
41
+ val_key << 'echo.'
42
+ end
43
+
44
+ def config_content
45
+ client_rb = <<-CONFIG
46
+ log_level :info
47
+ log_location STDOUT
48
+ chef_server_url "#{@chef_config[:chef_server_url]}"
49
+ validation_client_name "#{@chef_config[:validation_client_name]}"
50
+
51
+ client_key "c:/chef/client.pem"
52
+ validation_key "c:/chef/validation.pem"
53
+ checksum_path "c:/chef/checksums"
54
+ file_cache_path "c:/chef/cache"
55
+ file_backup_path "c:/chef/backup"
56
+ cache_options ( {:path => "c:/chef/cache/checksums", :skip_expires => true} )
57
+
58
+ CONFIG
59
+ if @config[:chef_node_name]
60
+ client_rb << %Q{node_name "#{@config[:chef_node_name]}"\n}
61
+ else
62
+ client_rb << "# Using default node name (fqdn)\n"
63
+ end
64
+ escape_and_echo(client_rb)
65
+ end
66
+
67
+ def start_chef
68
+ "c:/ruby/bin/ruby c:/ruby/bin/chef-client -c c:/chef/client.rb -j c:/chef/first-boot.json -E #{bootstrap_environment}"
69
+ end
70
+
71
+ def run_list
72
+ escape_and_echo({ "run_list" => @run_list }.to_json)
73
+ end
74
+
75
+ def win_wget
76
+ win_wget = <<-WGET
77
+ strFileUrl = WScript.Arguments.Item(0)
78
+ strHDLocation = WScript.Arguments.Item(1)
79
+ Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
80
+ objXMLHTTP.open "GET", strFileURL, false
81
+ objXMLHTTP.send()
82
+ If objXMLHTTP.Status = 200 Then
83
+ Set objADOStream = CreateObject("ADODB.Stream")
84
+ objADOStream.Open
85
+ objADOStream.Type = 1
86
+ objADOStream.Write objXMLHTTP.ResponseBody
87
+ objADOStream.Position = 0
88
+ Set objFSO = Createobject("Scripting.FileSystemObject")
89
+ If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
90
+ Set objFSO = Nothing
91
+ objADOStream.SaveToFile strHDLocation
92
+ objADOStream.Close
93
+ Set objADOStream = Nothing
94
+ End if
95
+ Set objXMLHTTP = Nothing
96
+ WGET
97
+ escape_and_echo(win_wget)
98
+ end
99
+
100
+ # escape WIN BATCH special chars
101
+ # and prefixes each line with an
102
+ # echo
103
+ def escape_and_echo(file_contents)
104
+ file_contents.gsub(/^(.*)$/, 'echo.\1').gsub(/([(<|>)^])/, '^\1')
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -17,18 +17,20 @@
17
17
  #
18
18
 
19
19
  require 'chef/knife'
20
+ require 'erubis'
20
21
 
21
22
  class Chef
22
23
  class Knife
23
- class WinrmBootstrap < Knife
24
+ class WinrmBootstrap < Bootstrap
24
25
 
25
26
  deps do
27
+ require 'chef/knife/core/windows_bootstrap_context'
26
28
  require 'chef/json_compat'
27
29
  require 'tempfile'
28
- require 'erubis'
30
+ Chef::Knife::Winrm.load_deps
29
31
  end
30
32
 
31
- banner "knife winrm bootstrap FQDN [RUN LIST...] (options)"
33
+ banner "knife winrm bootstrap FQDN (options)"
32
34
 
33
35
  option :winrm_user,
34
36
  :short => "-x USERNAME",
@@ -90,6 +92,11 @@ class Chef
90
92
  :long => "--prerelease",
91
93
  :description => "Install the pre-release chef gems"
92
94
 
95
+ option :bootstrap_version,
96
+ :long => "--bootstrap-version VERSION",
97
+ :description => "The version of Chef to install",
98
+ :proc => Proc.new { |v| Chef::Config[:knife][:bootstrap_version] = v }
99
+
93
100
  option :distro,
94
101
  :short => "-d DISTRO",
95
102
  :long => "--distro DISTRO",
@@ -108,6 +115,7 @@ class Chef
108
115
  :proc => lambda { |o| o.split(",") },
109
116
  :default => []
110
117
 
118
+ # TODO: This should go away when CHEF-2193 is fixed
111
119
  def load_template(template=nil)
112
120
  # Are we bootstrapping using an already shipped template?
113
121
  if config[:template_file]
@@ -136,9 +144,7 @@ class Chef
136
144
  end
137
145
 
138
146
  def render_template(template=nil)
139
- context = {}
140
- context[:run_list] = config[:run_list]
141
- context[:config] = config
147
+ context = Knife::Core::WindowsBootstrapContext.new(config, config[:run_list], Chef::Config)
142
148
  Erubis::Eruby.new(template).evaluate(context)
143
149
  end
144
150
 
@@ -163,16 +169,16 @@ class Chef
163
169
  knife_winrm(bootstrap_command).run
164
170
  end
165
171
 
166
- def validate_name_args!
167
- if Array(@name_args).first.nil?
168
- ui.error("Must pass an FQDN or ip to bootstrap")
169
- exit 1
170
- end
171
- end
172
-
173
- def server_name
174
- Array(@name_args).first
175
- end
172
+ # def validate_name_args!
173
+ # if Array(@name_args).first.nil?
174
+ # ui.error("Must pass an FQDN or ip to bootstrap")
175
+ # exit 1
176
+ # end
177
+ # end
178
+ #
179
+ # def server_name
180
+ # Array(@name_args).first
181
+ # end
176
182
 
177
183
  def knife_winrm(command = '')
178
184
  winrm = Chef::Knife::Winrm.new
@@ -185,7 +191,7 @@ class Chef
185
191
  winrm.config[:kerberos_service] = Chef::Config[:knife][:kerberos_service] if Chef::Config[:knife][:kerberos_service]
186
192
  winrm.config[:ca_trust_file] = Chef::Config[:knife][:ca_trust_file] if Chef::Config[:knife][:ca_trust_file]
187
193
  winrm.config[:manual] = true
188
- winrm.config[:winrm_port] = Chef::Config[:knife][:winrm_port]
194
+ winrm.config[:winrm_port] = Chef::Config[:knife][:winrm_port] || config[:winrm_port]
189
195
  winrm
190
196
  end
191
197
 
@@ -212,6 +218,7 @@ class Chef
212
218
  def bootstrap_bat_file
213
219
  "%TEMP%\\bootstrap.bat"
214
220
  end
221
+
215
222
  end
216
223
  end
217
224
  end
@@ -1,6 +1,6 @@
1
1
  module Knife
2
2
  module Windows
3
- VERSION = "0.5.0"
3
+ VERSION = "0.5.1"
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
6
6
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knife-windows
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.0
5
+ version: 0.5.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Seth Chisamore
@@ -10,31 +10,20 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-31 00:00:00 -07:00
13
+ date: 2011-04-29 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: chef
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
20
- none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: 0.10.0.beta.5
25
- type: :runtime
26
- version_requirements: *id001
27
16
  - !ruby/object:Gem::Dependency
28
17
  name: em-winrm
29
18
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
19
+ requirement: &id001 !ruby/object:Gem::Requirement
31
20
  none: false
32
21
  requirements:
33
22
  - - "="
34
23
  - !ruby/object:Gem::Version
35
- version: 0.0.4
24
+ version: 0.0.5
36
25
  type: :runtime
37
- version_requirements: *id002
26
+ version_requirements: *id001
38
27
  description: Plugin that adds functionality to Chef's Knife CLI for configuring/interacting with nodes running Microsoft Windows
39
28
  email:
40
29
  - schisamo@opscode.com
@@ -53,6 +42,7 @@ files:
53
42
  - Rakefile
54
43
  - knife-windows.gemspec
55
44
  - lib/chef/knife/bootstrap/windows-shell.erb
45
+ - lib/chef/knife/core/windows_bootstrap_context.rb
56
46
  - lib/chef/knife/winrm.rb
57
47
  - lib/chef/knife/winrm_bootstrap.rb
58
48
  - lib/knife-windows/version.rb