diff options
author | harikesh-kolekar <harikesh.kolekar@msystechnologies.com> | 2018-01-29 12:55:28 +0000 |
---|---|---|
committer | harikesh-kolekar <harikesh.kolekar@msystechnologies.com> | 2018-01-30 07:41:03 +0000 |
commit | 85ad3ee585ab50d173c083325d106967d2161dab (patch) | |
tree | ab53f9baee15101758272642479ac51b2031d5cd /lib/chef | |
parent | 4b8580ceb864961f77c87e5013eb1bf36463b895 (diff) | |
download | chef-85ad3ee585ab50d173c083325d106967d2161dab.tar.gz |
rename env resource to windows_env
Signed-off-by: harikesh-kolekar <harikesh.kolekar@msystechnologies.com>
Diffstat (limited to 'lib/chef')
-rw-r--r-- | lib/chef/exceptions.rb | 2 | ||||
-rw-r--r-- | lib/chef/provider/env/windows.rb | 80 | ||||
-rw-r--r-- | lib/chef/provider/windows_env.rb (renamed from lib/chef/provider/env.rb) | 55 | ||||
-rw-r--r-- | lib/chef/providers.rb | 5 | ||||
-rw-r--r-- | lib/chef/resource/windows_env.rb (renamed from lib/chef/resource/env.rb) | 5 | ||||
-rw-r--r-- | lib/chef/resources.rb | 3 |
6 files changed, 55 insertions, 95 deletions
diff --git a/lib/chef/exceptions.rb b/lib/chef/exceptions.rb index 5b470f574e..1ed71d2a55 100644 --- a/lib/chef/exceptions.rb +++ b/lib/chef/exceptions.rb @@ -45,7 +45,7 @@ class Chef class SigInt < RuntimeError; end class SigTerm < RuntimeError; end class Cron < RuntimeError; end - class Env < RuntimeError; end + class WindowsEnv < RuntimeError; end class Exec < RuntimeError; end class Execute < RuntimeError; end class ErlCall < RuntimeError; end diff --git a/lib/chef/provider/env/windows.rb b/lib/chef/provider/env/windows.rb deleted file mode 100644 index c74911e40f..0000000000 --- a/lib/chef/provider/env/windows.rb +++ /dev/null @@ -1,80 +0,0 @@ -# -# Author:: Doug MacEachern (<dougm@vmware.com>) -# Copyright:: Copyright 2010-2016, VMware, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "chef/mixin/windows_env_helper" - -class Chef - class Provider - class Env - class Windows < Chef::Provider::Env - include Chef::Mixin::WindowsEnvHelper - - provides :env, os: "windows" - - def whyrun_supported? - false - end - - def create_env - obj = env_obj(@new_resource.key_name) - unless obj - obj = WIN32OLE.connect("winmgmts://").get("Win32_Environment").spawninstance_ - obj.name = @new_resource.key_name - obj.username = new_resource.user - end - obj.variablevalue = @new_resource.value - obj.put_ - value = @new_resource.value - value = expand_path(value) if @new_resource.key_name.casecmp("PATH") == 0 - ENV[@new_resource.key_name] = value - broadcast_env_change - end - - def delete_env - obj = env_obj(@new_resource.key_name) - if obj - obj.delete_ - broadcast_env_change - end - if ENV[@new_resource.key_name] - ENV.delete(@new_resource.key_name) - end - end - - def env_value(key_name) - obj = env_obj(key_name) - obj.variablevalue if obj - end - - def env_obj(key_name) - return @env_obj if @env_obj - wmi = WmiLite::Wmi.new - # Note that by design this query is case insensitive with regard to key_name - environment_variables = wmi.query("select * from Win32_Environment where name = '#{key_name}'") - if environment_variables && environment_variables.length > 0 - environment_variables.each do |env| - @env_obj = env.wmi_ole_object - return @env_obj if @env_obj.username.split('\\').last.casecmp(new_resource.user) == 0 - end - end - @env_obj = nil - end - end - end - end -end diff --git a/lib/chef/provider/env.rb b/lib/chef/provider/windows_env.rb index b8b9d99846..4cbcc8a478 100644 --- a/lib/chef/provider/env.rb +++ b/lib/chef/provider/windows_env.rb @@ -17,14 +17,16 @@ # require "chef/provider" -require "chef/resource/env" +require "chef/resource/windows_env" +require "chef/mixin/windows_env_helper" class Chef class Provider - class Env < Chef::Provider + class WindowsEnv < Chef::Provider + include Chef::Mixin::WindowsEnvHelper attr_accessor :key_exists - provides :env, os: "!windows" + provides :windows_env, os: "windows" def whyrun_supported? false @@ -36,7 +38,7 @@ class Chef end def load_current_resource - @current_resource = Chef::Resource::Env.new(new_resource.name) + @current_resource = Chef::Resource::WindowsEnv.new(new_resource.name) current_resource.key_name(new_resource.key_name) if env_key_exists(new_resource.key_name) @@ -50,7 +52,7 @@ class Chef end def env_value(key_name) - raise Chef::Exceptions::Env, "#{self} provider does not implement env_value!" + raise Chef::Exceptions::WindowsEnv, "#{self} provider does not implement env_value!" end def env_key_exists(key_name) @@ -138,16 +140,34 @@ class Chef new_resource.updated_by_last_action(true) end else - raise Chef::Exceptions::Env, "Cannot modify #{new_resource} - key does not exist!" + raise Chef::Exceptions::WindowsEnv, "Cannot modify #{new_resource} - key does not exist!" end end def create_env - raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :#{new_resource.action}" + obj = env_obj(@new_resource.key_name) + unless obj + obj = WIN32OLE.connect("winmgmts://").get("Win32_Environment").spawninstance_ + obj.name = @new_resource.key_name + obj.username = new_resource.user + end + obj.variablevalue = @new_resource.value + obj.put_ + value = @new_resource.value + value = expand_path(value) if @new_resource.key_name.casecmp("PATH") == 0 + ENV[@new_resource.key_name] = value + broadcast_env_change end def delete_env - raise Chef::Exceptions::UnsupportedAction, "#{self} does not support :delete" + obj = env_obj(@new_resource.key_name) + if obj + obj.delete_ + broadcast_env_change + end + if ENV[@new_resource.key_name] + ENV.delete(@new_resource.key_name) + end end def modify_env @@ -166,6 +186,25 @@ class Chef def new_values @new_values ||= new_resource.value.split(new_resource.delim) end + + def env_value(key_name) + obj = env_obj(key_name) + obj.variablevalue if obj + end + + def env_obj(key_name) + return @env_obj if @env_obj + wmi = WmiLite::Wmi.new + # Note that by design this query is case insensitive with regard to key_name + environment_variables = wmi.query("select * from Win32_Environment where name = '#{key_name}'") + if environment_variables && environment_variables.length > 0 + environment_variables.each do |env| + @env_obj = env.wmi_ole_object + return @env_obj if @env_obj.username.split('\\').last.casecmp(new_resource.user) == 0 + end + end + @env_obj = nil + end end end end diff --git a/lib/chef/providers.rb b/lib/chef/providers.rb index 507203fd28..582f055260 100644 --- a/lib/chef/providers.rb +++ b/lib/chef/providers.rb @@ -27,7 +27,8 @@ require "chef/provider/cron/aix" require "chef/provider/directory" require "chef/provider/dsc_script" require "chef/provider/dsc_resource" -require "chef/provider/env" +require "chef/provider/windows_env" +require "chef/provider/erl_call" require "chef/provider/execute" require "chef/provider/file" require "chef/provider/git" @@ -61,8 +62,6 @@ require "chef/provider/windows_task" require "chef/provider/zypper_repository" require "chef/provider/windows_path" -require "chef/provider/env/windows" - require "chef/provider/package/apt" require "chef/provider/package/chocolatey" require "chef/provider/package/dpkg" diff --git a/lib/chef/resource/env.rb b/lib/chef/resource/windows_env.rb index 4f2919c3b2..d25fe9326b 100644 --- a/lib/chef/resource/env.rb +++ b/lib/chef/resource/windows_env.rb @@ -21,8 +21,9 @@ class Chef class Resource # Use the env resource to manage environment keys in Microsoft Windows. After an environment key is set, Microsoft # Windows must be restarted before the environment key will be available to the Task Scheduler. - class Env < Chef::Resource - resource_name :env + class WindowsEnv < Chef::Resource + resource_name :windows_env + provides :windows_env, os: "windows" provides :env, os: "windows" default_action :create diff --git a/lib/chef/resources.rb b/lib/chef/resources.rb index 9fee978432..b250d8d4d5 100644 --- a/lib/chef/resources.rb +++ b/lib/chef/resources.rb @@ -33,7 +33,7 @@ require "chef/resource/dpkg_package" require "chef/resource/dnf_package" require "chef/resource/dsc_script" require "chef/resource/dsc_resource" -require "chef/resource/env" +require "chef/resource/erl_call" require "chef/resource/execute" require "chef/resource/file" require "chef/resource/freebsd_package" @@ -89,6 +89,7 @@ require "chef/resource/user/pw_user" require "chef/resource/user/solaris_user" require "chef/resource/user/windows_user" require "chef/resource/whyrun_safe_ruby_block" +require "chef/resource/windows_env" require "chef/resource/windows_package" require "chef/resource/yum_package" require "chef/resource/yum_repository" |