119 lines
3.5 KiB
Ruby
119 lines
3.5 KiB
Ruby
#
|
|
# Cookbook:: iis
|
|
# Library:: helper
|
|
#
|
|
# Copyright:: 2017, Chef Software, Inc.
|
|
#
|
|
# 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.
|
|
#
|
|
|
|
module Opscode
|
|
module IIS
|
|
# Contains functions that are used throughout this cookbook
|
|
module Helper
|
|
@iis_version = nil
|
|
|
|
if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
|
require 'chef/win32/version'
|
|
require 'win32/registry'
|
|
end
|
|
|
|
require 'rexml/document'
|
|
require 'chef/mixin/shell_out'
|
|
|
|
include Chef::Mixin::ShellOut
|
|
include REXML
|
|
include Windows::Helper
|
|
|
|
def self.older_than_windows2008r2?
|
|
if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
|
win_version = Chef::ReservedNames::Win32::Version.new
|
|
win_version.windows_server_2008? ||
|
|
win_version.windows_vista? ||
|
|
win_version.windows_server_2003_r2? ||
|
|
win_version.windows_home_server? ||
|
|
win_version.windows_server_2003? ||
|
|
win_version.windows_xp? ||
|
|
win_version.windows_2000?
|
|
end
|
|
end
|
|
|
|
def self.older_than_windows2012?
|
|
if RUBY_PLATFORM =~ /mswin|mingw32|windows/
|
|
win_version = Chef::ReservedNames::Win32::Version.new
|
|
win_version.windows_7? ||
|
|
win_version.windows_server_2008_r2? ||
|
|
win_version.windows_server_2008? ||
|
|
win_version.windows_vista? ||
|
|
win_version.windows_server_2003_r2? ||
|
|
win_version.windows_home_server? ||
|
|
win_version.windows_server_2003? ||
|
|
win_version.windows_xp? ||
|
|
win_version.windows_2000?
|
|
end
|
|
end
|
|
|
|
def windows_cleanpath(path)
|
|
path = if defined?(Chef::Util::PathHelper.cleanpath).nil?
|
|
win_friendly_path(path)
|
|
else
|
|
Chef::Util::PathHelper.cleanpath(path)
|
|
end
|
|
# Remove any trailing slashes to prevent them from accidentally escaping any quotes.
|
|
path.tr('/', '\\')
|
|
end
|
|
|
|
def application_cleanname(application_name)
|
|
if application_name.count('/') == 0
|
|
"#{application_name}/"
|
|
elsif application_name.count('/') > 1
|
|
application_name.chomp('/')
|
|
else
|
|
application_name
|
|
end
|
|
end
|
|
|
|
def value(document, xpath)
|
|
XPath.first(document, xpath).to_s
|
|
end
|
|
|
|
def bool(value)
|
|
value == 'true'
|
|
end
|
|
|
|
def new_value?(document, xpath, value_to_check)
|
|
XPath.first(document, xpath).to_s != value_to_check.to_s
|
|
end
|
|
|
|
def new_or_empty_value?(document, xpath, value_to_check)
|
|
value_to_check.to_s != '' && new_value?(document, xpath, value_to_check)
|
|
end
|
|
|
|
def appcmd(node)
|
|
@appcmd ||= begin
|
|
"#{node['iis']['home']}\\appcmd.exe"
|
|
end
|
|
end
|
|
|
|
def iis_version
|
|
if @iis_version.nil?
|
|
version_string = Win32::Registry::HKEY_LOCAL_MACHINE.open('SOFTWARE\Microsoft\InetStp').read('VersionString')[1]
|
|
version_string.slice! 'Version '
|
|
@iis_version = version_string
|
|
end
|
|
@iis_version.to_f
|
|
end
|
|
end
|
|
end
|
|
end
|