Update cookbooks and add wordpress cookbook

This commit is contained in:
Greg Karékinian
2016-02-19 18:09:49 +01:00
parent 9ba973e3ac
commit 820b0ab3f8
606 changed files with 22421 additions and 14084 deletions

View File

@@ -25,6 +25,7 @@ require 'rexml/document'
include Chef::Mixin::ShellOut
include REXML
include Opscode::IIS::Helper
include Opscode::IIS::Processors
action :add do
if !@current_resource.exists
@@ -33,6 +34,7 @@ action :add do
cmd << " /applicationPool:\"#{new_resource.application_pool}\"" if new_resource.application_pool
cmd << " /physicalPath:\"#{windows_cleanpath(new_resource.physical_path)}\"" if new_resource.physical_path
cmd << " /enabledProtocols:\"#{new_resource.enabled_protocols}\"" if new_resource.enabled_protocols
cmd << " /commit:\"MACHINE/WEBROOT/APPHOST\""
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
@@ -43,7 +45,7 @@ action :add do
end
action :config do
was_updated = false
@was_updated = false
cmd_current_values = "#{appcmd(node)} list app \"#{site_identifier}\" /config:* /xml"
Chef::Log.debug(cmd_current_values)
cmd_current_values = shell_out(cmd_current_values)
@@ -56,9 +58,9 @@ action :config do
is_new_physical_path = new_or_empty_value?(doc.root, 'APP/application/virtualDirectory/@physicalPath', new_resource.physical_path.to_s)
# only get the beginning of the command if there is something that changeds
cmd = "#{appcmd(node)} set app \"#{site_identifier}\"" if ((new_resource.path && is_new_path) ||
(new_resource.application_pool && is_new_application_pool) ||
(new_resource.enabled_protocols && is_new_enabled_protocols))
cmd = "#{appcmd(node)} set app \"#{site_identifier}\"" if (new_resource.path && is_new_path) ||
(new_resource.application_pool && is_new_application_pool) ||
(new_resource.enabled_protocols && is_new_enabled_protocols)
# adds path to the cmd
cmd << " /path:\"#{new_resource.path}\"" if new_resource.path && is_new_path
# adds applicationPool to the cmd
@@ -67,27 +69,27 @@ action :config do
cmd << " /enabledProtocols:\"#{new_resource.enabled_protocols}\"" if new_resource.enabled_protocols && is_new_enabled_protocols
Chef::Log.debug(cmd)
if (cmd.nil?)
if cmd.nil?
Chef::Log.debug("#{new_resource} application - nothing to do")
else
shell_out!(cmd)
was_updated = true
@was_updated = true
end
if ((new_resource.path && is_new_path) ||
(new_resource.application_pool && is_new_application_pool) ||
(new_resource.enabled_protocols && is_new_enabled_protocols))
was_updated = true
if (new_resource.path && is_new_path) ||
(new_resource.application_pool && is_new_application_pool) ||
(new_resource.enabled_protocols && is_new_enabled_protocols)
@was_updated = true
end
if new_resource.physical_path && is_new_physical_path
was_updated = true
@was_updated = true
cmd = "#{appcmd(node)} set vdir /vdir.name:\"#{vdir_identifier}\""
cmd << " /physicalPath:\"#{windows_cleanpath(new_resource.physical_path)}\""
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if was_updated
if @was_updated
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} configured application")
else

View File

@@ -23,9 +23,23 @@ require 'chef/mixin/shell_out'
include Chef::Mixin::ShellOut
include Opscode::IIS::Helper
include Opscode::IIS::Processors
# :config deprecated, use :set instead
action :config do
cmd = "#{appcmd(node)} set config #{new_resource.cfg_cmd}"
config
end
action :set do
config
end
action :clear do
config(:clear)
end
def config(action = :set)
cmd = "#{appcmd(node)} #{action} config #{new_resource.cfg_cmd}"
Chef::Log.debug(cmd)
shell_out!(cmd, returns: new_resource.returns)
Chef::Log.info('IIS Config command run')

View File

@@ -21,6 +21,7 @@
require 'chef/mixin/shell_out'
include Chef::Mixin::ShellOut
include Opscode::IIS::Helper
include Opscode::IIS::Processors
# Support whyrun
def whyrun_supported?
@@ -38,15 +39,13 @@ action :add do
cmd << " /app.name:\"#{new_resource.application}\""
end
if new_resource.type
cmd << " /type:\"#{new_resource.type}\""
end
cmd << " /type:\"#{new_resource.type}\"" if new_resource.type
if new_resource.precondition
cmd << " /preCondition:\"#{new_resource.precondition}\""
end
shell_out!(cmd, returns: [0, 42])
shell_out!(cmd, returns: [0, 42])
Chef::Log.info("#{new_resource} added module '#{new_resource.module_name}'")
end
@@ -63,7 +62,7 @@ action :delete do
cmd << " /app.name:\"#{new_resource.application}\""
end
shell_out!(cmd, returns: [0, 42])
shell_out!(cmd, returns: [0, 42])
end
Chef::Log.info("#{new_resource} deleted")
@@ -72,6 +71,40 @@ action :delete do
end
end
# appcmd syntax for installing native modules
# appcmd install module /name:string /add:string(true|false) /image:string
action :install do
if !@current_resource.exists
converge_by("install IIS module #{new_resource.module_name}") do
cmd = "#{appcmd(node)} install module /name:\"#{new_resource.module_name}\""
cmd << " /add:\"#{new_resource.add}\"" unless new_resource.add.nil?
cmd << " /image:\"#{new_resource.image}\"" if new_resource.image
shell_out!(cmd, returns: [0, 42])
Chef::Log.info("#{new_resource} installed module '#{new_resource.module_name}'")
end
else
Chef::Log.debug("#{new_resource} module already exists - nothing to do")
end
end
# appcmd syntax for uninstalling native modules
# appcmd uninstall module <name>
action :uninstall do
if @current_resource.exists
converge_by("uninstall IIS module #{new_resource.module_name}") do
cmd = "#{appcmd(node)} uninstall module \"#{new_resource.module_name}\""
shell_out!(cmd, returns: [0, 42])
end
Chef::Log.info("#{new_resource} uninstalled module '#{new_resource.module_name}'")
else
Chef::Log.debug("#{new_resource} module does not exists - nothing to do")
end
end
def load_current_resource
@current_resource = Chef::Resource::IisModule.new(new_resource.name)
@current_resource.module_name(new_resource.module_name)

View File

@@ -25,13 +25,18 @@ require 'rexml/document'
include Chef::Mixin::ShellOut
include REXML
include Opscode::IIS::Helper
include Opscode::IIS::Processors
action :add do
if !@current_resource.exists
cmd = "#{appcmd(node)} add apppool /name:\"#{new_resource.pool_name}\""
cmd << ' /managedRuntimeVersion:' if new_resource.runtime_version || new_resource.no_managed_code
cmd << "v#{new_resource.runtime_version}" if new_resource.runtime_version && !new_resource.no_managed_code
if new_resource.no_managed_code
cmd << ' /managedRuntimeVersion:'
else
cmd << " /managedRuntimeVersion:v#{new_resource.runtime_version}" if new_resource.runtime_version
end
cmd << " /managedPipelineMode:#{new_resource.pipeline_mode.capitalize}" if new_resource.pipeline_mode
cmd << " /commit:\"MACHINE/WEBROOT/APPHOST\""
Chef::Log.debug(cmd)
shell_out!(cmd)
configure
@@ -43,7 +48,7 @@ action :add do
end
action :config do
configure
new_resource.updated_by_last_action(true) if configure
end
action :delete do
@@ -98,7 +103,7 @@ def load_current_resource
Chef::Log.debug("#{new_resource} list apppool command output: #{cmd.stdout}")
if cmd.stderr.empty?
result = cmd.stdout.gsub(/\r\n?/, "\n") # ensure we have no carriage returns
result = result.match(/^APPPOOL\s\"(#{new_resource.pool_name})\"\s\(MgdVersion:(.*),MgdMode:(.*),state:(.*)\)$/)
result = result.match(/^APPPOOL\s\"(#{new_resource.pool_name})\"\s\(MgdVersion:(.*),MgdMode:(.*),state:(.*)\)$/i)
Chef::Log.debug("#{new_resource} current_resource match output: #{result}")
if result
@current_resource.exists = true
@@ -108,7 +113,7 @@ def load_current_resource
@current_resource.running = false
end
else
log "Failed to run iis_pool action :load_current_resource, #{cmd_current_values.stderr}" do
log "Failed to run iis_pool action :load_current_resource, #{cmd.stderr}" do
level :warn
end
end
@@ -131,23 +136,36 @@ def configure
# root items
is_new_managed_runtime_version = new_value?(doc.root, 'APPPOOL/@RuntimeVersion', "v#{new_resource.runtime_version}")
is_new_pipeline_mode = new_value?(doc.root, 'APPPOOL/@PipelineMode'.capitalize, "#{new_resource.pipeline_mode}".to_s.capitalize)
is_new_pipeline_mode = new_value?(doc.root, 'APPPOOL/@PipelineMode', new_resource.pipeline_mode)
# add items
is_new_start_mode = new_value?(doc.root, 'APPPOOL/add/@startMode', new_resource.start_mode.to_s)
is_new_auto_start = new_value?(doc.root, 'APPPOOL/add/@autoStart', new_resource.auto_start.to_s)
if iis_version >= '7.0'
is_new_auto_start = new_value?(doc.root, 'APPPOOL/add/@autoStart', new_resource.auto_start.to_s)
end
if iis_version > '7.0'
is_new_start_mode = new_value?(doc.root, 'APPPOOL/add/@startMode', new_resource.start_mode.to_s)
end
is_new_queue_length = new_value?(doc.root, 'APPPOOL/add/@queueLength', new_resource.queue_length.to_s)
is_new_enable_32_bit_app_on_win_64 = new_value?(doc.root, 'APPPOOL/add/@enable32BitAppOnWin64', new_resource.thirty_two_bit.to_s)
# processModel items
is_new_max_processes = new_or_empty_value?(doc.root, 'APPPOOL/add/processModel/@maxProcesses', new_resource.max_proc.to_s)
is_new_load_user_profile = new_value?(doc.root, 'APPPOOL/add/processModel/@loadUserProfile', new_resource.load_user_profile.to_s)
is_new_identity_type = new_value?(doc.root, 'APPPOOL/add/processModel/@identityType', new_resource.pool_identity.to_s)
if iis_version > '7.0'
is_new_identity_type = new_value?(doc.root, 'APPPOOL/add/processModel/@identityType', new_resource.pool_identity.to_s)
end
is_new_user_name = new_or_empty_value?(doc.root, 'APPPOOL/add/processModel/@userName', new_resource.pool_username.to_s)
is_new_password = new_or_empty_value?(doc.root, 'APPPOOL/add/processModel/@password', new_resource.pool_password.to_s)
is_new_logon_type = new_value?(doc.root, 'APPPOOL/add/processModel/@logonType', new_resource.logon_type.to_s)
if iis_version > '7.0'
is_new_logon_type = new_value?(doc.root, 'APPPOOL/add/processModel/@logonType', new_resource.logon_type.to_s)
end
is_new_manual_group_membership = new_value?(doc.root, 'APPPOOL/add/processModel/@manualGroupMembership', new_resource.manual_group_membership.to_s)
is_new_idle_timeout = new_value?(doc.root, 'APPPOOL/add/processModel/@idleTimeout', new_resource.idle_timeout.to_s)
if iis_version >= '8.5'
is_new_idle_timeout_action = new_value?(doc.root, 'APPPOOL/add/processModel/@idleTimeoutAction', new_resource.idle_timeout_action)
end
is_new_shutdown_time_limit = new_value?(doc.root, 'APPPOOL/add/processModel/@shutdownTimeLimit', new_resource.shutdown_time_limit.to_s)
is_new_startup_time_limit = new_value?(doc.root, 'APPPOOL/add/processModel/@startupTimeLimit', new_resource.startup_time_limit.to_s)
is_new_pinging_enabled = new_value?(doc.root, 'APPPOOL/add/processModel/@pingingEnabled', new_resource.pinging_enabled.to_s)
@@ -169,7 +187,7 @@ def configure
is_new_disallow_overlapping_rotation = new_value?(doc.root, 'APPPOOL/add/recycling/@disallowOverlappingRotation', new_resource.disallow_overlapping_rotation.to_s)
is_new_disallow_rotation_on_config_change = new_value?(doc.root, 'APPPOOL/add/recycling/@disallowRotationOnConfigChange', new_resource.disallow_rotation_on_config_change.to_s)
is_new_recycle_after_time = new_or_empty_value?(doc.root, 'APPPOOL/add/recycling/periodicRestart/@time', new_resource.recycle_after_time.to_s)
is_new_recycle_at_time = new_or_empty_value?(doc.root, 'APPPOOL/add/recycling/periodicRestart/schedule/add/@value', new_resource.recycle_at_time.to_s)
is_new_recycle_at_time = new_or_empty_value?(doc.root, "APPPOOL/add/recycling/periodicRestart/schedule/add[@value='#{new_resource.recycle_at_time}']/@value", new_resource.recycle_at_time.to_s)
is_new_private_memory = new_or_empty_value?(doc.root, 'APPPOOL/add/recycling/periodicRestart/@privateMemory', new_resource.private_mem.to_s)
is_new_log_event_on_recycle = new_value?(doc.root, 'APPPOOL/add/recycling/@logEventOnRecycle', 'Time, Requests, Schedule, Memory, IsapiUnhealthy, OnDemand, ConfigChange, PrivateMemory')
@@ -185,9 +203,19 @@ def configure
@cmd = "#{appcmd(node)} set config /section:applicationPools"
# root items
configure_application_pool(is_new_auto_start, "autoStart:#{new_resource.auto_start}")
configure_application_pool(is_new_start_mode, "startMode:#{new_resource.start_mode}")
configure_application_pool(new_resource.runtime_version && is_new_managed_runtime_version, "managedRuntimeVersion:v#{new_resource.runtime_version}")
if iis_version >= '7.0'
configure_application_pool(is_new_auto_start, "autoStart:#{new_resource.auto_start}")
end
if iis_version >= '7.5'
configure_application_pool(is_new_start_mode, "startMode:#{new_resource.start_mode}")
end
if new_resource.no_managed_code
configure_application_pool(is_new_managed_runtime_version, 'managedRuntimeVersion:')
else
configure_application_pool(new_resource.runtime_version && is_new_managed_runtime_version, "managedRuntimeVersion:v#{new_resource.runtime_version}")
end
configure_application_pool(new_resource.pipeline_mode && is_new_pipeline_mode, "managedPipelineMode:#{new_resource.pipeline_mode}")
configure_application_pool(new_resource.thirty_two_bit && is_new_enable_32_bit_app_on_win_64, "enable32BitAppOnWin64:#{new_resource.thirty_two_bit}")
configure_application_pool(new_resource.queue_length && is_new_queue_length, "queueLength:#{new_resource.queue_length}")
@@ -198,20 +226,28 @@ def configure
configure_application_pool(is_new_logon_type, "processModel.logonType:#{new_resource.logon_type}")
configure_application_pool(is_new_manual_group_membership, "processModel.manualGroupMembership:#{new_resource.manual_group_membership}")
configure_application_pool(is_new_idle_timeout, "processModel.idleTimeout:#{new_resource.idle_timeout}")
if iis_version >= '8.5'
configure_application_pool(is_new_idle_timeout_action, "processModel.idleTimeoutAction:#{new_resource.idle_timeout_action}")
end
configure_application_pool(is_new_shutdown_time_limit, "processModel.shutdownTimeLimit:#{new_resource.shutdown_time_limit}")
configure_application_pool(is_new_startup_time_limit, "processModel.startupTimeLimit:#{new_resource.startup_time_limit}")
configure_application_pool(is_new_pinging_enabled, "processModel.pingingEnabled:#{new_resource.pinging_enabled}")
configure_application_pool(is_new_ping_interval, "processModel.pingInterval:#{new_resource.ping_interval}")
configure_application_pool(is_new_ping_response_time, "processModel.pingResponseTime:#{new_resource.ping_response_time}")
node_array = XPath.match(doc.root, 'APPPOOL/add/recycling/periodicRestart/schedule/add')
should_clear_apppool_schedules = (new_resource.recycle_at_time && is_new_recycle_at_time) || node_array.length > 1
# recycling items
## Special case this collection removal for now.
if (new_resource.recycle_at_time && is_new_recycle_at_time)
if should_clear_apppool_schedules
@was_updated = true
cmd = "#{appcmd(node)} set config /section:applicationPools \"/-[name='#{new_resource.pool_name}'].recycling.periodicRestart.schedule\""
Chef::Log.debug(@cmd)
shell_out!(@cmd)
is_new_recycle_at_time = true
clear_pool_schedule_cmd = "#{appcmd(node)} set config /section:applicationPools \"/-[name='#{new_resource.pool_name}'].recycling.periodicRestart.schedule\""
Chef::Log.debug(clear_pool_schedule_cmd)
shell_out!(clear_pool_schedule_cmd)
end
configure_application_pool(new_resource.recycle_after_time && is_new_recycle_after_time, "recycling.periodicRestart.time:#{new_resource.recycle_after_time}")
configure_application_pool(new_resource.recycle_at_time && is_new_recycle_at_time, "recycling.periodicRestart.schedule.[value='#{new_resource.recycle_at_time}']", '+')
configure_application_pool(is_new_log_event_on_recycle, 'recycling.logEventOnRecycle:PrivateMemory,Memory,Schedule,Requests,Time,ConfigChange,OnDemand,IsapiUnhealthy')
@@ -244,17 +280,17 @@ def configure
end
# Application Pool Identity Settings
if ((new_resource.pool_username && new_resource.pool_username != '') && (is_new_user_name || is_new_password))
if (new_resource.pool_username && new_resource.pool_username != '') && (is_new_user_name || is_new_password)
@was_updated = true
cmd = "#{appcmd(node)} set config /section:applicationPools"
cmd << " \"/[name='#{new_resource.pool_name}'].processModel.identityType:SpecificUser\""
cmd << " \"/[name='#{new_resource.pool_name}'].processModel.userName:#{new_resource.pool_username}\""
cmd << " \"/[name='#{new_resource.pool_name}'].processModel.password:#{new_resource.pool_password}\"" if (new_resource.pool_password && new_resource.pool_password != '' && is_new_password)
cmd << " \"/[name='#{new_resource.pool_name}'].processModel.password:#{new_resource.pool_password}\"" if new_resource.pool_password && new_resource.pool_password != '' && is_new_password
Chef::Log.debug(cmd)
shell_out!(cmd)
elsif ((new_resource.pool_username.nil? || new_resource.pool_username == '') &&
(new_resource.pool_password.nil? || new_resource.pool_username == '') &&
(is_new_identity_type && new_resource.pool_identity != 'SpecificUser'))
elsif (new_resource.pool_username.nil? || new_resource.pool_username == '') &&
(new_resource.pool_password.nil? || new_resource.pool_username == '') &&
(is_new_identity_type && new_resource.pool_identity != 'SpecificUser')
@was_updated = true
cmd = "#{appcmd(node)} set config /section:applicationPools"
cmd << " \"/[name='#{new_resource.pool_name}'].processModel.identityType:#{new_resource.pool_identity}\""
@@ -263,7 +299,6 @@ def configure
end
if @was_updated
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} configured application pool")
else
Chef::Log.debug("#{new_resource} application pool - nothing to do")
@@ -273,14 +308,14 @@ def configure
level :warn
end
end
@was_updated
end
private
def configure_application_pool(condition, config, add_remove = '')
unless condition
return
end
return unless condition
@was_updated = true
@cmd << " \"/#{add_remove}[name='#{new_resource.pool_name}'].#{config}\""

View File

@@ -0,0 +1,68 @@
#
# Author:: Justin Schuhmann (<jmschu02@gmail.com>)
# Cookbook Name:: iis
# Provider:: root
#
# Copyright:: Justin Schuhmann
#
# 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.
#
include Opscode::IIS::Helper
include Opscode::IIS::Processors
action :add do
@was_updated = false
@was_updated = default_documents(new_resource.add_default_documents, new_resource.default_documents_enabled, true, false) | @was_updated
@was_updated = mime_maps(new_resource.add_mime_maps, true, false) | @was_updated
if @was_updated
new_resource.updated_by_last_action(true)
else
Chef::Log.debug("#{new_resource} - nothing to do")
end
end
action :delete do
@was_updated = false
@was_updated = default_documents(new_resource.delete_default_documents, new_resource.default_documents_enabled, false) | @was_updated
@was_updated = mime_maps(new_resource.delete_mime_maps, false) | @was_updated
if @was_updated
new_resource.updated_by_last_action(true)
else
Chef::Log.debug("#{new_resource} - nothing to do")
end
end
action :config do
@was_updated = false
@was_updated = default_documents(new_resource.default_documents, new_resource.default_documents_enabled) | @was_updated
@was_updated = mime_maps(new_resource.mime_maps) | @was_updated
if @was_updated
new_resource.updated_by_last_action(true)
else
Chef::Log.debug("#{new_resource} - nothing to do")
end
end
def load_current_resource
@current_resource = Chef::Resource::IisRoot.new(new_resource.name)
@current_resource.default_documents(new_resource.default_documents)
@current_resource.default_documents_enabled(new_resource.default_documents_enabled)
@current_resource.mime_maps(new_resource.mime_maps)
end

View File

@@ -24,11 +24,12 @@ require 'rexml/document'
include Chef::Mixin::ShellOut
include REXML
include Opscode::IIS::Helper
include Opscode::IIS::Processors
action :lock do
@current_resource.exists = new_value?(doc.root, 'CONFIG/@overrideMode', 'Deny')
if !@current_resource.exists
if @current_resource.exists
cmd = "#{appcmd(node)} lock config -section:\"#{new_resource.section}\" -commit:apphost"
Chef::Log.debug(cmd)
shell_out!(cmd, returns: new_resource.returns)
@@ -42,7 +43,7 @@ end
action :unlock do
@current_resource.exists = new_value?(doc.root, 'CONFIG/@overrideMode', 'Allow')
if !@current_resource.exists
if @current_resource.exists
cmd = "#{appcmd(node)} unlock config -section:\"#{new_resource.section}\" -commit:apphost"
Chef::Log.debug(cmd)
shell_out!(cmd, returns: new_resource.returns)
@@ -59,7 +60,7 @@ def load_current_resource
end
def doc
cmd_current_values = "#{appcmd(node)} list config \"\" -section:#{new_resource.section} /config:* /xml"
cmd_current_values = "#{appcmd(node)} list config -section:#{new_resource.section} /config:* /xml"
Chef::Log.debug(cmd_current_values)
cmd_current_values = shell_out(cmd_current_values)
if cmd_current_values.stderr.empty?

View File

@@ -24,6 +24,7 @@ require 'rexml/document'
include Chef::Mixin::ShellOut
include REXML
include Opscode::IIS::Helper
include Opscode::IIS::Processors
action :add do
if !@current_resource.exists
@@ -39,15 +40,13 @@ action :add do
end
# support for additional options -logDir, -limits, -ftpServer, etc...
if new_resource.options
cmd << " #{new_resource.options}"
end
shell_out!(cmd, returns: [0, 42])
cmd << " #{new_resource.options}" if new_resource.options
shell_out!(cmd, returns: [0, 42])
configure
if new_resource.application_pool
shell_out!("#{appcmd(node)} set app \"#{new_resource.site_name}/\" /applicationPool:\"#{new_resource.application_pool}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} set app \"#{new_resource.site_name}/\" /applicationPool:\"#{new_resource.application_pool}\"", returns: [0, 42])
end
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} added new site '#{new_resource.site_name}'")
@@ -57,13 +56,13 @@ action :add do
end
action :config do
configure
new_resource.updated_by_last_action(true) if configure
end
action :delete do
if @current_resource.exists
Chef::Log.info("#{appcmd(node)} stop site /site.name:\"#{new_resource.site_name}\"")
shell_out!("#{appcmd(node)} delete site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} delete site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} deleted")
else
@@ -73,7 +72,7 @@ end
action :start do
if !@current_resource.running
shell_out!("#{appcmd(node)} start site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} start site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} started")
else
@@ -84,7 +83,7 @@ end
action :stop do
if @current_resource.running
Chef::Log.info("#{appcmd(node)} stop site /site.name:\"#{new_resource.site_name}\"")
shell_out!("#{appcmd(node)} stop site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} stop site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} stopped")
else
@@ -93,9 +92,9 @@ action :stop do
end
action :restart do
shell_out!("#{appcmd(node)} stop site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} stop site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
sleep 2
shell_out!("#{appcmd(node)} start site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} start site /site.name:\"#{new_resource.site_name}\"", returns: [0, 42])
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} restarted")
end
@@ -109,7 +108,7 @@ def load_current_resource
Chef::Log.debug("#{new_resource} list site command output: #{cmd.stdout}")
if cmd.stderr.empty?
result = cmd.stdout.gsub(/\r\n?/, "\n") # ensure we have no carriage returns
result = result.match(/^SITE\s\"(#{new_resource.site_name})\"\s\(id:(.*),bindings:(.*),state:(.*)\)$/)
result = result.match(/^SITE\s\"(#{new_resource.site_name})\"\s\(id:(.*),bindings:(.*),state:(.*)\)$/i)
Chef::Log.debug("#{new_resource} current_resource match output: #{result}")
if result
@current_resource.site_id(result[2].to_i)
@@ -128,94 +127,100 @@ def load_current_resource
end
private
def configure
was_updated = false
cmd_current_values = "#{appcmd(node)} list site \"#{new_resource.site_name}\" /config:* /xml"
Chef::Log.debug(cmd_current_values)
cmd_current_values = shell_out(cmd_current_values)
if cmd_current_values.stderr.empty?
xml = cmd_current_values.stdout
doc = Document.new(xml)
is_new_bindings = new_value?(doc.root, 'SITE/@bindings', new_resource.bindings.to_s)
is_new_physical_path = new_or_empty_value?(doc.root, 'SITE/site/application/virtualDirectory/@physicalPath', new_resource.path.to_s)
is_new_port_host_provided = !"#{XPath.first(doc.root, 'SITE/@bindings')},".include?("#{new_resource.protocol}/*:#{new_resource.port}:#{new_resource.host_header},")
is_new_site_id = new_value?(doc.root, 'SITE/site/@id', new_resource.site_id.to_s)
is_new_log_directory = new_or_empty_value?(doc.root, 'SITE/logFiles/@directory', new_resource.log_directory.to_s)
is_new_log_period = new_or_empty_value?(doc.root, 'SITE/logFile/@period', new_resource.log_period.to_s)
is_new_log_trunc = new_or_empty_value?(doc.root, 'SITE/logFiles/@truncateSize', new_resource.log_truncsize.to_s)
is_new_application_pool = new_value?(doc.root, 'SITE/site/application/@applicationPool', new_resource.application_pool)
if (new_resource.bindings && is_new_bindings)
was_updated = true
cmd = "#{appcmd(node)} set site /site.name:\"#{new_resource.site_name}\""
cmd << " /bindings:\"#{new_resource.bindings}\""
shell_out!(cmd)
new_resource.updated_by_last_action(true)
elsif (((new_resource.port || new_resource.host_header || new_resource.protocol) && is_new_port_host_provided) && !new_resource.bindings)
was_updated = true
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /bindings:#{new_resource.protocol}/*:#{new_resource.port}:#{new_resource.host_header}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
def configure
@was_updated = false
cmd_current_values = "#{appcmd(node)} list site \"#{new_resource.site_name}\" /config:* /xml"
Chef::Log.debug(cmd_current_values)
cmd_current_values = shell_out(cmd_current_values)
if cmd_current_values.stderr.empty?
xml = cmd_current_values.stdout
doc = Document.new(xml)
is_new_bindings = new_value?(doc.root, 'SITE/@bindings', new_resource.bindings.to_s)
is_new_physical_path = new_or_empty_value?(doc.root, 'SITE/site/application/virtualDirectory/@physicalPath', new_resource.path.to_s)
is_new_port_host_provided = !"#{XPath.first(doc.root, 'SITE/@bindings')},".include?("#{new_resource.protocol}/*:#{new_resource.port}:#{new_resource.host_header},")
is_new_site_id = new_value?(doc.root, 'SITE/site/@id', new_resource.site_id.to_s)
is_new_log_directory = new_or_empty_value?(doc.root, 'SITE/logFiles/@directory', new_resource.log_directory.to_s)
is_new_log_period = new_or_empty_value?(doc.root, 'SITE/logFile/@period', new_resource.log_period.to_s)
is_new_log_trunc = new_or_empty_value?(doc.root, 'SITE/logFiles/@truncateSize', new_resource.log_truncsize.to_s)
is_new_application_pool = new_value?(doc.root, 'SITE/site/application/@applicationPool', new_resource.application_pool)
if new_resource.application_pool && is_new_application_pool
was_updated = true
cmd = "#{appcmd(node)} set app \"#{new_resource.site_name}/\" /applicationPool:\"#{new_resource.application_pool}\""
Chef::Log.debug(cmd)
shell_out!(cmd, returns: [0, 42])
end
if new_resource.path && is_new_physical_path
was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{new_resource.site_name}/\""
cmd << " /physicalPath:\"#{windows_cleanpath(new_resource.path)}\""
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if new_resource.bindings && is_new_bindings
@was_updated = true
cmd = "#{appcmd(node)} set site /site.name:\"#{new_resource.site_name}\""
cmd << " /bindings:\"#{new_resource.bindings}\""
shell_out!(cmd)
new_resource.updated_by_last_action(true)
elsif ((new_resource.port || new_resource.host_header || new_resource.protocol) && is_new_port_host_provided) && !new_resource.bindings
@was_updated = true
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /bindings:#{new_resource.protocol}/*:#{new_resource.port}:#{new_resource.host_header}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.site_id && is_new_site_id
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /id:#{new_resource.site_id}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.application_pool && is_new_application_pool
@was_updated = true
cmd = "#{appcmd(node)} set app \"#{new_resource.site_name}/\" /applicationPool:\"#{new_resource.application_pool}\""
Chef::Log.debug(cmd)
shell_out!(cmd, returns: [0, 42])
end
if new_resource.log_directory && is_new_log_directory
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /logFile.directory:#{windows_cleanpath(new_resource.log_directory)}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.path && is_new_physical_path
@was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{new_resource.site_name}/\""
cmd << " /physicalPath:\"#{windows_cleanpath(new_resource.path)}\""
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if new_resource.log_period && is_new_log_period
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /logFile.period:#{new_resource.log_period}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.site_id && is_new_site_id
@was_updated = true
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /id:#{new_resource.site_id}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.log_truncsize && is_new_log_trunc
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /logFile.truncateSize:#{new_resource.log_truncsize}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.log_directory && is_new_log_directory
@was_updated = true
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /logFile.directory:#{windows_cleanpath(new_resource.log_directory)}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if was_updated
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} configured site '#{new_resource.site_name}'")
else
Chef::Log.debug("#{new_resource} site - nothing to do")
end
if new_resource.log_period && is_new_log_period
@was_updated = true
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /logFile.period:#{new_resource.log_period}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if new_resource.log_truncsize && is_new_log_trunc
@was_updated = true
cmd = "#{appcmd(node)} set site \"#{new_resource.site_name}\""
cmd << " /logFile.truncateSize:#{new_resource.log_truncsize}"
Chef::Log.debug(cmd)
shell_out!(cmd)
new_resource.updated_by_last_action(true)
end
if @was_updated
Chef::Log.info("#{new_resource} configured site '#{new_resource.site_name}'")
else
log "Failed to run iis_site action :config, #{cmd_current_values.stderr}" do
level :warn
end
Chef::Log.debug("#{new_resource} site - nothing to do")
end
else
log "Failed to run iis_site action :config, #{cmd_current_values.stderr}" do
level :warn
end
end
@was_updated
end

View File

@@ -24,6 +24,7 @@ require 'rexml/document'
include Chef::Mixin::ShellOut
include REXML
include Opscode::IIS::Helper
include Opscode::IIS::Processors
action :add do
if !@current_resource.exists
@@ -34,9 +35,10 @@ action :add do
cmd << " /password:\"#{new_resource.password}\"" if new_resource.password
cmd << " /logonMethod:#{new_resource.logon_method}" if new_resource.logon_method
cmd << " /allowSubDirConfig:#{new_resource.allow_sub_dir_config}" if new_resource.allow_sub_dir_config
cmd << " /commit:\"MACHINE/WEBROOT/APPHOST\""
Chef::Log.info(cmd)
shell_out!(cmd, returns: [0, 42, 183])
shell_out!(cmd, returns: [0, 42, 183])
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} added new virtual directory to application: '#{new_resource.application_name}'")
else
@@ -45,7 +47,7 @@ action :add do
end
action :config do
was_updated = false
@was_updated = false
cmd_current_values = "#{appcmd(node)} list vdir \"#{application_identifier}\" /config:* /xml"
Chef::Log.debug(cmd_current_values)
cmd_current_values = shell_out!(cmd_current_values)
@@ -59,41 +61,41 @@ action :config do
is_new_allow_sub_dir_config = new_or_empty_value?(doc.root, 'VDIR/virtualDirectory/@allowSubDirConfig', new_resource.allow_sub_dir_config.to_s)
if new_resource.physical_path && is_new_physical_path
was_updated = true
@was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{application_identifier}\" /physicalPath:\"#{new_resource.physical_path}\""
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if new_resource.username && is_new_user_name
was_updated = true
@was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{application_identifier}\" /userName:\"#{new_resource.username}\""
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if new_resource.password && is_new_password
was_updated = true
@was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{application_identifier}\" /password:\"#{new_resource.password}\""
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if new_resource.logon_method && is_new_logon_method
was_updated = true
@was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{application_identifier}\" /logonMethod:#{new_resource.logon_method}"
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if new_resource.allow_sub_dir_config && is_new_allow_sub_dir_config
was_updated = true
@was_updated = true
cmd = "#{appcmd(node)} set vdir \"#{application_identifier}\" /allowSubDirConfig:#{new_resource.allow_sub_dir_config}"
Chef::Log.debug(cmd)
shell_out!(cmd)
end
if was_updated
if @was_updated
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} configured virtual directory to application: '#{new_resource.application_name}'")
else
@@ -108,7 +110,7 @@ end
action :delete do
if @current_resource.exists
shell_out!("#{appcmd(node)} delete vdir \"#{application_identifier}\"", returns: [0, 42])
shell_out!("#{appcmd(node)} delete vdir \"#{application_identifier}\"", returns: [0, 42])
new_resource.updated_by_last_action(true)
Chef::Log.info("#{new_resource} deleted")
else
@@ -121,13 +123,13 @@ def load_current_resource
@current_resource.application_name(application_name_check)
@current_resource.path(new_resource.path)
@current_resource.physical_path(new_resource.physical_path)
cmd = shell_out("#{ appcmd(node) } list vdir \"#{application_identifier}\"")
Chef::Log.debug("#{ new_resource } list vdir command output: #{ cmd.stdout }")
cmd = shell_out("#{appcmd(node)} list vdir \"#{application_identifier}\"")
Chef::Log.debug("#{new_resource} list vdir command output: #{cmd.stdout}")
if cmd.stderr.empty?
# VDIR "Testfu Site/Content/Test"
result = cmd.stdout.match(/^VDIR\s\"#{Regexp.escape(application_identifier)}\"/)
Chef::Log.debug("#{ new_resource } current_resource match output: #{ result }")
Chef::Log.debug("#{new_resource} current_resource match output: #{result}")
if result
@current_resource.exists = true
else