summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2020-01-29 16:30:52 -0800
committerGitHub <noreply@github.com>2020-01-29 16:30:52 -0800
commit7b8239d176e51b58522ccd9959451317e380fcef (patch)
tree4a797e3ff4b2f64280a7d22d9664c5b48c3f66e9
parent6aa9d8a8a3bcfd383ce3c336d4f4f866cae5afc4 (diff)
parent47aacfbd847516f1b2fbd30e2cf3af6219cc9d5e (diff)
downloadchef-7b8239d176e51b58522ccd9959451317e380fcef.tar.gz
Merge pull request #9297 from chef/more_windows_helpers
Add windows_nt_version and powershell_version helpers to chef-utils
-rw-r--r--chef-utils/lib/chef-utils/dsl/windows.rb22
-rw-r--r--chef-utils/spec/unit/dsl/windows_spec.rb42
2 files changed, 53 insertions, 11 deletions
diff --git a/chef-utils/lib/chef-utils/dsl/windows.rb b/chef-utils/lib/chef-utils/dsl/windows.rb
index 86d8fb00bc..904e9ef126 100644
--- a/chef-utils/lib/chef-utils/dsl/windows.rb
+++ b/chef-utils/lib/chef-utils/dsl/windows.rb
@@ -20,6 +20,8 @@ require_relative "../internal"
module ChefUtils
module DSL
module Windows
+ require "chef-utils/version_string"
+
include Internal
# Determine if the current node is Windows Server Core.
@@ -52,6 +54,26 @@ module ChefUtils
node["kernel"]["product_type"] == "Server"
end
+ # Determine the current Windows NT version. The NT version often differs from the marketing version, but offers a good way to find desktop and server releases that are based on the same codebase. IE: NT 6.3 is Windows 8.1 and Windows 2012 R2.
+ #
+ # @param [Chef::Node] node
+ #
+ # @return [ChefUtils::VersionString]
+ #
+ def windows_nt_version(node = __getnode)
+ ChefUtils::VersionString.new(node["os_version"])
+ end
+
+ # Determine the installed version of PowerShell
+ #
+ # @param [Chef::Node] node
+ #
+ # @return [ChefUtils::VersionString]
+ #
+ def powershell_version(node = __getnode)
+ ChefUtils::VersionString.new(node["languages"]["powershell"]["version"])
+ end
+
extend self
end
end
diff --git a/chef-utils/spec/unit/dsl/windows_spec.rb b/chef-utils/spec/unit/dsl/windows_spec.rb
index e069c175ee..08ddb9c118 100644
--- a/chef-utils/spec/unit/dsl/windows_spec.rb
+++ b/chef-utils/spec/unit/dsl/windows_spec.rb
@@ -17,13 +17,15 @@
require "spec_helper"
+WINDOWS_BOOL_HELPERS = %i{windows_server_core? windows_server? windows_workstation?}.freeze
+
def windows_reports_true_for(*args)
args.each do |method|
it "reports true for #{method}" do
expect(described_class.send(method, node)).to be true
end
end
- (WINDOWS_HELPERS - args).each do |method|
+ (WINDOWS_BOOL_HELPERS - args).each do |method|
it "reports false for #{method}" do
expect(described_class.send(method, node)).to be false
end
@@ -43,21 +45,39 @@ RSpec.describe ChefUtils::DSL::Windows do
end
end
- context "on Windows Server Core" do
- let(:node) { { "kernel" => { "server_core" => true } } }
+ context "windows boolean helpers" do
+ context "on Windows Server Core" do
+ let(:node) { { "kernel" => { "server_core" => true } } }
- windows_reports_true_for(:windows_server_core?)
- end
+ windows_reports_true_for(:windows_server_core?)
+ end
+
+ context "on Windows Workstation" do
+ let(:node) { { "kernel" => { "product_type" => "Workstation" } } }
+
+ windows_reports_true_for(:windows_workstation?)
+ end
- context "on Windows Workstation" do
- let(:node) { { "kernel" => { "product_type" => "Workstation" } } }
+ context "on Windows Server" do
+ let(:node) { { "kernel" => { "product_type" => "Server" } } }
- windows_reports_true_for(:windows_workstation?)
+ windows_reports_true_for(:windows_server?)
+ end
end
- context "on Windows Server" do
- let(:node) { { "kernel" => { "product_type" => "Server" } } }
+ context "#windows_nt_version on Windows Server 2012 R2" do
+ let(:node) { { "os_version" => "6.3.9600" } }
+ it "it returns a ChefUtils::VersionString object with 6.3.9600" do
+ expect(described_class.send(:windows_nt_version, node)).to eq "6.3.9600"
+ expect(described_class.send(:windows_nt_version, node)).to be_a_kind_of ChefUtils::VersionString
+ end
+ end
- windows_reports_true_for(:windows_server?)
+ context "#powershell_version on Windows Server 2012 R2" do
+ let(:node) { { "languages" => { "powershell" => { "version" => "4.0" } } } }
+ it "it returns a ChefUtils::VersionString object with 4.0" do
+ expect(described_class.send(:powershell_version, node)).to eq "4.0"
+ expect(described_class.send(:powershell_version, node)).to be_a_kind_of ChefUtils::VersionString
+ end
end
end