lib/chef/provisioning/convergence_strategy/install_msi.rb in chef-provisioning-2.0.0 vs lib/chef/provisioning/convergence_strategy/install_msi.rb in chef-provisioning-2.0.1
- old
+ new
@@ -1,71 +1,71 @@
-require 'chef/provisioning/convergence_strategy/precreate_chef_objects'
-require 'mixlib/install/script_generator'
-require 'pathname'
-
-class Chef
-module Provisioning
- class ConvergenceStrategy
- class InstallMsi < PrecreateChefObjects
- def initialize(convergence_options, config)
- super
- @chef_version ||= convergence_options[:chef_version]
- @prerelease ||= convergence_options[:prerelease]
- @chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
- end
-
- attr_reader :chef_version
- attr_reader :prerelease
- attr_reader :install_msi_url
- attr_reader :install_msi_path
-
- def setup_convergence(action_handler, machine)
- if !convergence_options.has_key?(:client_rb_path) || !convergence_options.has_key?(:client_pem_path)
- system_drive = machine.system_drive
- @convergence_options = Cheffish::MergedConfig.new(convergence_options, {
- :client_rb_path => "#{system_drive}\\chef\\client.rb",
- :client_pem_path => "#{system_drive}\\chef\\client.pem",
- :install_script_path => "#{system_drive}\\chef\\\install.ps1"
- })
- end
-
- opts = {"prerelease" => prerelease}
- if convergence_options[:bootstrap_proxy]
- opts["http_proxy"] = convergence_options[:bootstrap_proxy]
- opts["https_proxy"] = convergence_options[:bootstrap_proxy]
- end
- opts["install_msi_url"] = convergence_options[:install_msi_url] if convergence_options[:install_msi_url]
- super
-
- install_command = Mixlib::Install::ScriptGenerator.new(chef_version, true, opts).install_command
- machine.write_file(action_handler, convergence_options[:install_script_path], install_command)
-
- action_handler.open_stream(machine.node['name']) do |stdout|
- action_handler.open_stream(machine.node['name']) do |stderr|
- machine.execute(action_handler, "powershell.exe -ExecutionPolicy Unrestricted -NoProfile \"& \"\"#{convergence_options[:install_script_path]}\"\"\"",
- :raw => true,
- :stream_stdout => stdout,
- :stream_stderr => stderr)
- end
- end
- end
-
- def converge(action_handler, machine)
- super
-
- action_handler.open_stream(machine.node['name']) do |stdout|
- action_handler.open_stream(machine.node['name']) do |stderr|
- command_line = "chef-client"
- command_line << " -l #{config[:log_level].to_s}" if config[:log_level]
- machine.execute(action_handler, command_line,
- :raw => true,
- :stream_stdout => stdout,
- :stream_stderr => stderr,
- :timeout => @chef_client_timeout)
- end
- end
- end
-
- end
- end
-end
-end
+require 'chef/provisioning/convergence_strategy/precreate_chef_objects'
+require 'mixlib/install/script_generator'
+require 'pathname'
+
+class Chef
+module Provisioning
+ class ConvergenceStrategy
+ class InstallMsi < PrecreateChefObjects
+ def initialize(convergence_options, config)
+ super
+ @chef_version ||= convergence_options[:chef_version]
+ @prerelease ||= convergence_options[:prerelease]
+ @chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
+ end
+
+ attr_reader :chef_version
+ attr_reader :prerelease
+ attr_reader :install_msi_url
+ attr_reader :install_msi_path
+
+ def setup_convergence(action_handler, machine)
+ if !convergence_options.has_key?(:client_rb_path) || !convergence_options.has_key?(:client_pem_path)
+ system_drive = machine.system_drive
+ @convergence_options = Cheffish::MergedConfig.new(convergence_options, {
+ :client_rb_path => "#{system_drive}\\chef\\client.rb",
+ :client_pem_path => "#{system_drive}\\chef\\client.pem",
+ :install_script_path => "#{system_drive}\\chef\\\install.ps1"
+ })
+ end
+
+ opts = {"prerelease" => prerelease}
+ if convergence_options[:bootstrap_proxy]
+ opts["http_proxy"] = convergence_options[:bootstrap_proxy]
+ opts["https_proxy"] = convergence_options[:bootstrap_proxy]
+ end
+ opts["install_msi_url"] = convergence_options[:install_msi_url] if convergence_options[:install_msi_url]
+ super
+
+ install_command = Mixlib::Install::ScriptGenerator.new(chef_version, true, opts).install_command
+ machine.write_file(action_handler, convergence_options[:install_script_path], install_command)
+
+ action_handler.open_stream(machine.node['name']) do |stdout|
+ action_handler.open_stream(machine.node['name']) do |stderr|
+ machine.execute(action_handler, "& \"#{convergence_options[:install_script_path]}\"",
+ :stream_stdout => stdout,
+ :stream_stderr => stderr)
+ end
+ end
+ end
+
+ def converge(action_handler, machine)
+ super
+
+ action_handler.open_stream(machine.node['name']) do |stdout|
+ action_handler.open_stream(machine.node['name']) do |stderr|
+ # We just installed chef in this shell so refresh PATH from System.Environment
+ command_line = "$env:path = [System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE');"
+ command_line << "chef-client"
+ command_line << " -l #{config[:log_level].to_s}" if config[:log_level]
+ machine.execute(action_handler, command_line,
+ :stream_stdout => stdout,
+ :stream_stderr => stderr,
+ :timeout => @chef_client_timeout)
+ end
+ end
+ end
+
+ end
+ end
+end
+end