diff --git a/step-templates/iis-apppool-create.json b/step-templates/iis-apppool-create.json index 4bb8349b6..fae4a857d 100644 --- a/step-templates/iis-apppool-create.json +++ b/step-templates/iis-apppool-create.json @@ -1,11 +1,11 @@ { - "Id": "ActionTemplates-2", + "Id": "ActionTemplates-99", "Name": "IIS AppPool - Create", "Description": "Creates or Reconfigures an IIS Application Pool", "ActionType": "Octopus.Script", - "Version": 9, + "Version": 4, "Properties": { - "Octopus.Action.Script.ScriptBody": "## --------------------------------------------------------------------------------------\n## Input\n## --------------------------------------------------------------------------------------\n\n$appPoolName = $OctopusParameters['AppPoolName']\n\n$appPoolIdentityType = $OctopusParameters['AppPoolIdentityType']\nIF ($appPoolIdentityType -eq 3)\n{\n $appPoolIdentityUser = $OctopusParameters['AppPoolIdentityUser']\n $appPoolIdentityPassword = $OctopusParameters['AppPoolIdentityPassword']\n}\n\n$appPoolAutoStart = [boolean]::Parse($OctopusParameters['AppPoolAutoStart'])\n$appPoolEnable32BitAppOnWin64 = [boolean]::Parse($OctopusParameters['AppPoolEnable32BitAppOnWin64'])\n\n$appPoolManagedRuntimeVersion = $OctopusParameters['AppPoolManagedRuntimeVersion']\n$appPoolManagedPipelineMode = $OctopusParameters['AppPoolManagedPipelineMode']\n\n$appPoolIdleTimeout = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolIdleTimeoutMinutes'])\n$appPoolMaxProcesses = [int]$OctopusParameters['AppPoolMaxProcesses']\n$appPoolRegularTimeInterval = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolRegularTimeInterval'])\n$appPoolQueueLength = [int]$OctopusParameters['AppPoolQueueLength']\n\n\n## --------------------------------------------------------------------------------------\n## Helpers\n## --------------------------------------------------------------------------------------\n# Helper for validating input parameters\nfunction Validate-Parameter([string]$foo, [string[]]$validInput, $parameterName) {\n IF (! $parameterName -contains \"Password\") \n { \n Write-Host \"${parameterName}: $foo\" \n }\n if (! $foo) {\n Write-Host \"No value was set for $($parameterName), and it cannot be empty\"\n }\n}\n\n## --------------------------------------------------------------------------------------\n## Configuration\n## --------------------------------------------------------------------------------------\nValidate-Parameter $appPoolName -parameterName \"Application Pool Name\"\nValidate-Parameter $appPoolIdentityType -parameterName \"Identity Type\"\nIF ($appPoolIdentityType -eq 3)\n{\n Validate-Parameter $appPoolIdentityUser -parameterName \"Identity UserName\"\n Validate-Parameter $appPoolIdentityPassword -parameterName \"Identity Password\"\n}\nValidate-Parameter $appPoolAutoStart -parameterName \"AutoStart\"\nValidate-Parameter $appPoolEnable32BitAppOnWin64 -parameterName \"Enable 32-Bit Apps on 64-bit Windows\"\n\nValidate-Parameter $appPoolManagedRuntimeVersion -parameterName \"Managed Runtime Version\"\nValidate-Parameter $appPoolManagedPipelineMode -parameterName \"Managed Pipeline Mode\"\n\nValidate-Parameter $appPoolIdleTimeout -parameterName \"Process Idle Timeout\"\nValidate-Parameter $appPoolMaxProcesses -parameterName \"Maximum Worker Processes\"\n\n#Load Web Admin DLL\n[System.Reflection.Assembly]::LoadFrom( \"C:\\windows\\system32\\inetsrv\\Microsoft.Web.Administration.dll\" )\n\nAdd-PSSnapin WebAdministration -ErrorAction SilentlyContinue\nImport-Module WebAdministration -ErrorAction SilentlyContinue\n\n\n## --------------------------------------------------------------------------------------\n## Run\n## --------------------------------------------------------------------------------------\n\n$iis = (New-Object Microsoft.Web.Administration.ServerManager)\n\n$pool = $iis.ApplicationPools | Where {$_.Name -eq $appPoolName} | Select-Object -First 1\n\nIF ($pool -eq $null)\n{\n Write-Output \"Creating Application Pool '$appPoolName'\"\n $iis.ApplicationPools.Add($appPoolName)\n $iis.CommitChanges()\n}\nELSE\n{\n Write-Output \"Application Pool '$appPoolName' already exists, reconfiguring.\"\n}\n\n$pool = $iis.ApplicationPools | Where {$_.Name -eq $appPoolName} | Select-Object -First 1\n\nWrite-Output \"Setting: AutoStart = $appPoolAutoStart\"\n$pool.AutoStart = $appPoolAutoStart;\n\nWrite-Output \"Setting: Enable32BitAppOnWin64 = $appPoolEnable32BitAppOnWin64\"\n$pool.Enable32BitAppOnWin64 = $appPoolEnable32BitAppOnWin64;\n\nWrite-Output \"Setting: IdentityType = $appPoolIdentityType\"\n$pool.ProcessModel.IdentityType = $appPoolIdentityType\n\nIF ($appPoolIdentityType -eq 3)\n{\n Write-Output \"Setting: UserName = $appPoolIdentityUser\"\n $pool.ProcessModel.UserName = $appPoolIdentityUser\n \n Write-Output \"Setting: Password = [Omitted For Security]\"\n $pool.ProcessModel.Password = $appPoolIdentityPassword\n}\n\nWrite-Output \"Setting: ManagedRuntimeVersion = $appPoolManagedRuntimeVersion\"\n$pool.ManagedRuntimeVersion = $appPoolManagedRuntimeVersion\n\nWrite-Output \"Setting: ManagedPipelineMode = $appPoolManagedPipelineMode\"\n$pool.ManagedPipelineMode = $appPoolManagedPipelineMode\n\nWrite-Output \"Setting: IdleTimeout = $appPoolIdleTimeout\"\n$pool.ProcessModel.IdleTimeout = $appPoolIdleTimeout\n\nWrite-Output \"Setting: MaxProcesses = $appPoolMaxProcesses\"\n$pool.ProcessModel.MaxProcesses = $appPoolMaxProcesses\n\nWrite-Output \"Setting: RegularTimeInterval = $appPoolRegularTimeInterval\"\n$pool.Recycling.PeriodicRestart.Time = $appPoolRegularTimeInterval\n\nWrite-Output \"Setting: QueueLength = $appPoolQueueLength\"\n$pool.QueueLength = $appPoolQueueLength\n\n$iis.CommitChanges()\n" + "Octopus.Action.Script.ScriptBody": "## --------------------------------------------------------------------------------------\n## Input\n## --------------------------------------------------------------------------------------\n\n$appPoolName = $OctopusParameters['AppPoolName']\n\n$appPoolIdentityType = $OctopusParameters['AppPoolIdentityType']\nIF ($appPoolIdentityType -eq 3)\n{\n $appPoolIdentityUser = $OctopusParameters['AppPoolIdentityUser']\n $appPoolIdentityPassword = $OctopusParameters['AppPoolIdentityPassword']\n}\n\n$appPoolAutoStart = [boolean]::Parse($OctopusParameters['AppPoolAutoStart'])\n$appPoolEnable32BitAppOnWin64 = [boolean]::Parse($OctopusParameters['AppPoolEnable32BitAppOnWin64'])\n\n$appPoolManagedRuntimeVersion = $OctopusParameters['AppPoolManagedRuntimeVersion']\n$appPoolManagedPipelineMode = $OctopusParameters['AppPoolManagedPipelineMode']\n\n$appPoolIdleTimeout = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolIdleTimeoutMinutes'])\n$appPoolMaxProcesses = [int]$OctopusParameters['AppPoolMaxProcesses']\n$appPoolRegularTimeInterval = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolRegularTimeInterval'])\n$appPoolQueueLength = [int]$OctopusParameters['AppPoolQueueLength']\n\n\n## --------------------------------------------------------------------------------------\n## Helpers\n## --------------------------------------------------------------------------------------\n# Helper for validating input parameters\nfunction Validate-Parameter([string]$foo, [string[]]$validInput, $parameterName) {\n IF (! $parameterName -contains \"Password\") \n { \n Write-Host \"${parameterName}: $foo\" \n }\n if (! $foo) {\n Write-Host \"No value was set for $($parameterName), and it cannot be empty\"\n }\n}\n\n# Helper to run a block with a retry if things go wrong\n$maxFailures = 5\n$sleepBetweenFailures = Get-Random -minimum 1 -maximum 4\nfunction Execute-WithRetry([ScriptBlock] $command) {\n\t$attemptCount = 0\n\t$operationIncomplete = $true\n\n\twhile ($operationIncomplete -and $attemptCount -lt $maxFailures) {\n\t\t$attemptCount = ($attemptCount + 1)\n\n\t\tif ($attemptCount -ge 2) {\n\t\t\tWrite-Output \"Waiting for $sleepBetweenFailures seconds before retrying...\"\n\t\t\tStart-Sleep -s $sleepBetweenFailures\n\t\t\tWrite-Output \"Retrying...\"\n\t\t}\n\n\t\ttry {\n\t\t\t& $command\n\n\t\t\t$operationIncomplete = $false\n\t\t} catch [System.Exception] {\n\t\t\tif ($attemptCount -lt ($maxFailures)) {\n\t\t\t\tWrite-Output (\"Attempt $attemptCount of $maxFailures failed: \" + $_.Exception.Message)\n\t\t\t\n\t\t\t}\n\t\t\telse {\n\t\t\t throw \"Failed to execute command\"\n\t\t\t}\n\t\t}\n\t}\n}\n\n## --------------------------------------------------------------------------------------\n## Configuration\n## --------------------------------------------------------------------------------------\nValidate-Parameter $appPoolName -parameterName \"Application Pool Name\"\nValidate-Parameter $appPoolIdentityType -parameterName \"Identity Type\"\nIF ($appPoolIdentityType -eq 3)\n{\n Validate-Parameter $appPoolIdentityUser -parameterName \"Identity UserName\"\n Validate-Parameter $appPoolIdentityPassword -parameterName \"Identity Password\"\n}\nValidate-Parameter $appPoolAutoStart -parameterName \"AutoStart\"\nValidate-Parameter $appPoolEnable32BitAppOnWin64 -parameterName \"Enable 32-Bit Apps on 64-bit Windows\"\n\nValidate-Parameter $appPoolManagedRuntimeVersion -parameterName \"Managed Runtime Version\"\nValidate-Parameter $appPoolManagedPipelineMode -parameterName \"Managed Pipeline Mode\"\n\nValidate-Parameter $appPoolIdleTimeout -parameterName \"Process Idle Timeout\"\nValidate-Parameter $appPoolMaxProcesses -parameterName \"Maximum Worker Processes\"\n\n#Load Web Admin DLL\n[System.Reflection.Assembly]::LoadFrom( \"C:\\windows\\system32\\inetsrv\\Microsoft.Web.Administration.dll\" )\n\nAdd-PSSnapin WebAdministration -ErrorAction SilentlyContinue\nImport-Module WebAdministration -ErrorAction SilentlyContinue\n\n\n## --------------------------------------------------------------------------------------\n## Run\n## --------------------------------------------------------------------------------------\n\n$iis = (New-Object Microsoft.Web.Administration.ServerManager)\n\n$pool = $iis.ApplicationPools | Where {$_.Name -eq $appPoolName} | Select-Object -First 1\n\nIF ($pool -eq $null)\n{\n Write-Output \"Creating Application Pool '$appPoolName'\"\n Execute-WithRetry {\n $iis.ApplicationPools.Add($appPoolName)\n $iis.CommitChanges()\n }\n}\nELSE\n{\n Write-Output \"Application Pool '$appPoolName' already exists, reconfiguring.\"\n}\n\nExecute-WithRetry {\n $pool = $iis.ApplicationPools | Where {$_.Name -eq $appPoolName} | Select-Object -First 1\n\n Write-Output \"Setting: AutoStart = $appPoolAutoStart\"\n $pool.AutoStart = $appPoolAutoStart;\n \n Write-Output \"Setting: Enable32BitAppOnWin64 = $appPoolEnable32BitAppOnWin64\"\n $pool.Enable32BitAppOnWin64 = $appPoolEnable32BitAppOnWin64;\n \n Write-Output \"Setting: IdentityType = $appPoolIdentityType\"\n $pool.ProcessModel.IdentityType = $appPoolIdentityType\n \n IF ($appPoolIdentityType -eq 3)\n {\n Write-Output \"Setting: UserName = $appPoolIdentityUser\"\n $pool.ProcessModel.UserName = $appPoolIdentityUser\n \n Write-Output \"Setting: Password = [Omitted For Security]\"\n $pool.ProcessModel.Password = $appPoolIdentityPassword\n }\n \n Write-Output \"Setting: ManagedRuntimeVersion = $appPoolManagedRuntimeVersion\"\n $pool.ManagedRuntimeVersion = $appPoolManagedRuntimeVersion\n \n Write-Output \"Setting: ManagedPipelineMode = $appPoolManagedPipelineMode\"\n $pool.ManagedPipelineMode = $appPoolManagedPipelineMode\n \n Write-Output \"Setting: IdleTimeout = $appPoolIdleTimeout\"\n $pool.ProcessModel.IdleTimeout = $appPoolIdleTimeout\n \n Write-Output \"Setting: MaxProcesses = $appPoolMaxProcesses\"\n $pool.ProcessModel.MaxProcesses = $appPoolMaxProcesses\n \n Write-Output \"Setting: RegularTimeInterval = $appPoolRegularTimeInterval\"\n $pool.Recycling.PeriodicRestart.Time = $appPoolRegularTimeInterval\n \n Write-Output \"Setting: QueueLength = $appPoolQueueLength\"\n $pool.QueueLength = $appPoolQueueLength\n\n $iis.CommitChanges()\n}" }, "SensitiveProperties": {}, "Parameters": [ @@ -104,8 +104,8 @@ }, { "Name": "AppPoolRegularTimeInterval", - "Label": "Regular Time Interval (Minutes)", - "HelpText": "[time] Period of time (in minutes) after which an application pool will recycle. A value of 0 means the application pool does not recycle on a regular interval.", + "Label": "Regular Time Interval", + "HelpText": "Period of time (in minutes) after which an application pool will recycle. A value of 0 means the application pool does not recycle on a regular interval.", "DefaultValue": "1740", "DisplaySettings": { "Octopus.ControlType": "SingleLineText" @@ -113,19 +113,19 @@ }, { "Name": "AppPoolQueueLength", - "Label": "QueueLength", - "HelpText": "[queueLength] Maximum number of requests that HTTP.sys will queue for the application pool. When the queue is full, new requests receive a 504 \"Service Unavailable\" response.", + "Label": "Queue Length", + "HelpText": "Maximum number of requests that HTTP.sys will queue for the application pool. When the queue is full, new requests receive a 504 \"Service Unavailable\" response.", "DefaultValue": "1000", "DisplaySettings": { "Octopus.ControlType": "SingleLineText" } } ], - "LastModifiedOn": "2015-08-05T19:24:27.131+00:00", - "LastModifiedBy": "josh3ennett", + "LastModifiedOn": "2015-09-03T23:11:10.375+00:00", + "LastModifiedBy": "active-low", "$Meta": { - "ExportedAt": "2015-08-05T19:37:49.384Z", - "OctopusVersion": "2.6.4.951", + "ExportedAt": "2015-09-03T23:13:53.326Z", + "OctopusVersion": "2.6.5.1010", "Type": "ActionTemplate" } }