summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2018-11-27 09:57:35 -0800
committerGitHub <noreply@github.com>2018-11-27 09:57:35 -0800
commit1722dab78ed9e80683f0e56363e4baef1444bea8 (patch)
tree0f89c8776aae4c8d663763917d5d6a711c36af42
parentb0ed32858be7c393d32debf3b98e5fa19a733218 (diff)
parent5e86f0834156f9533d3462c13c27581d78a585f2 (diff)
downloadchef-1722dab78ed9e80683f0e56363e4baef1444bea8.tar.gz
Merge pull request #7806 from username-is-already-taken2/gb/windows_timezone
Added windows support for the timezone resource
-rw-r--r--lib/chef/resource/timezone.rb16
-rw-r--r--spec/functional/resource/timezone_spec.rb39
2 files changed, 55 insertions, 0 deletions
diff --git a/lib/chef/resource/timezone.rb b/lib/chef/resource/timezone.rb
index da3cb70bb9..29c65b696c 100644
--- a/lib/chef/resource/timezone.rb
+++ b/lib/chef/resource/timezone.rb
@@ -95,6 +95,12 @@ class Chef
shell_out!("sudo systemsetup -settimezone #{new_resource.timezone}")
end
end
+ when "windows"
+ unless current_windows_tz.casecmp?(new_resource.timezone)
+ converge_by("setting timezone to \"#{new_resource.timezone}\"") do
+ shell_out!("tzutil /s \"#{new_resource.timezone}\"")
+ end
+ end
end
end
end
@@ -112,6 +118,16 @@ class Chef
/Time Zone: (.*)/.match(tz_shellout.stdout)[1]
end
end
+
+ # detect the current timezone on windows hosts
+ #
+ # @since 14.7
+ # @return [String] timezone id
+ def current_windows_tz
+ tz_shellout = shell_out("tzutil /g")
+ raise "There was an error running the tzutil command" if tz_shellout.exitstatus == 1
+ tz_shellout.stdout.strip
+ end
end
end
end
diff --git a/spec/functional/resource/timezone_spec.rb b/spec/functional/resource/timezone_spec.rb
new file mode 100644
index 0000000000..27e705e5da
--- /dev/null
+++ b/spec/functional/resource/timezone_spec.rb
@@ -0,0 +1,39 @@
+#
+# Author:: Gary Bright (<digitalgaz@hotmail.com>)
+# Copyright:: Copyright 2011-2016, Chef Software 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 "spec_helper"
+
+describe Chef::Resource::Timezone, :windows_only do
+ let(:timezone) { "GMT Standard Time" }
+
+ def timezone_resource
+ Chef::Resource::Timezone.new(timezone, run_context)
+ end
+
+ describe "when a timezone is provided on windows" do
+ it "should set a timezone" do
+ timezone_resource.run_action(:set)
+ end
+ end
+
+ describe "when a timezone is not provided on windows" do
+ let(:timezone) { nil }
+ it "raises an exception" do
+ expect { timezone_resource.run_action(:set) }.to raise_error(Chef::Exceptions::ValidationFailed)
+ end
+ end
+end