NetScaler ADC - Enable or Disable Service

Octopus.Script exported 2015-01-29 by jasper@sovs.net belongs to ‘NetScaler’ category.

Enables or disables a load balancing service i Citrix NetScaler ADC. For documentation, see https://github.com/jnus/NetScalerPSLib

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Service status

EnableOrDisable = enable

Option whether to disable og enable a Load Balancing Service

LB Service Name

ServiceName =

Load Balancing Service Name to enable or diable

NetScaler ADC host name

HostName =

Address of the primary NetScaler ADC instance

NetScaler ADC username

Username

null

NetScaler ADC password

Password

null

Graceful shutdown

Graceful = Yes

The service is disabled only when all the current active client connections are closed by either the server or the client

Graceful Delay (s)

GracefulDelay = 300

The time in seconds after which the service is marked as OUT OF SERVICE.

Script body

Steps based on this template will execute the following PowerShell script.

param(
        [string]$NSAddress,
        [string]$ServiceName,
        [string]$Action,
        [string]$NSUserName,
        [string]$NSPassword,
        [string]$NSProtocol
)


$ErrorActionPreference = "Stop"

function Connect-NSAppliance {
    <#
    .SYNOPSIS
        Connect to NetScaler Appliance
    .DESCRIPTION
        Connect to NetScaler Appliance. A custom web request session object will be returned
    .PARAMETER NSAddress
        NetScaler Management IP address
    .PARAMETER NSName
        NetScaler DNS name or FQDN
    .PARAMETER NSUserName
        UserName to access the NetScaler appliance
    .PARAMETER NSPassword
        Password to access the NetScaler appliance
    .PARAMETER Timeout
        Timeout in seconds to for the token of the connection to the NetScaler appliance. 900 is the default admin configured value.
    .EXAMPLE
         $Session = Connect-NSAppliance -NSAddress 10.108.151.1
    .EXAMPLE
         $Session = Connect-NSAppliance -NSName mynetscaler.mydomain.com
    .OUTPUTS
        CustomPSObject
    .NOTES
        Copyright (c) Citrix Systems, Inc. All rights reserved.
    #>
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true,ParameterSetName='Address')] [string]$NSAddress,
        [Parameter(Mandatory=$true,ParameterSetName='Name')] [string]$NSName,
        [Parameter(Mandatory=$false)] [string]$NSUserName="nsroot",
        [Parameter(Mandatory=$false)] [string]$NSPassword="nsroot",
        [Parameter(Mandatory=$false)] [int]$Timeout=900
    )
    Write-Verbose "$($MyInvocation.MyCommand): Enter"

    if ($PSCmdlet.ParameterSetName -eq 'Address') {
        Write-Verbose "Validating IP Address"
        $IPAddressObj = New-Object -TypeName System.Net.IPAddress -ArgumentList 0
        if (-not [System.Net.IPAddress]::TryParse($NSAddress,[ref]$IPAddressObj)) {
            throw "'$NSAddress' is an invalid IP address"
        }
        $nsEndpoint = $NSAddress
    } elseif ($PSCmdlet.ParameterSetName -eq 'Name') {
        $nsEndpoint = $NSName
    }


    $login = @{"login" = @{"username"=$NSUserName;"password"=$NSPassword;"timeout"=$Timeout}}
    $loginJson = ConvertTo-Json $login

    try {
        Write-Verbose "Calling Invoke-RestMethod for login"
        $response = Invoke-RestMethod -Uri "$($Script:NSURLProtocol)://$nsEndpoint/nitro/v1/config/login" -Body $loginJson -Method POST -SessionVariable saveSession -ContentType application/json

        if ($response.severity -eq "ERROR") {
            throw "Error. See response: `n$($response | fl * | Out-String)"
        } else {
            Write-Verbose "Response:`n$(ConvertTo-Json $response | Out-String)"
        }
    }
    catch [Exception] {
        throw $_
    }


    $nsSession = New-Object -TypeName PSObject
    $nsSession | Add-Member -NotePropertyName Endpoint -NotePropertyValue $nsEndpoint -TypeName String
    $nsSession | Add-Member -NotePropertyName WebSession  -NotePropertyValue $saveSession -TypeName Microsoft.PowerShell.Commands.WebRequestSession

    Write-Verbose "$($MyInvocation.MyCommand): Exit"

    return $nsSession
}

function Set-NSMgmtProtocol {
    <#
    .SYNOPSIS
        Set $Script:NSURLProtocol, this will be used for all subsequent invocation of NITRO APIs
    .DESCRIPTION
        Set $Script:NSURLProtocol
    .PARAMETER Protocol
        Protocol, acceptable values are "http" and "https"
    .EXAMPLE
        Set-Protocol -Protocol https
    .NOTES
        Copyright (c) Citrix Systems, Inc. All rights reserved.
    #>
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)] [ValidateSet("http","https")] [string]$Protocol
    )

    Write-Verbose "$($MyInvocation.MyCommand): Enter"

    $Script:NSURLProtocol = $Protocol

    Write-Verbose "$($MyInvocation.MyCommand): Exit"
}

function Invoke-NSNitroRestApi {
    <#
    .SYNOPSIS
        Invoke NetScaler NITRO REST API
    .DESCRIPTION
        Invoke NetScaler NITRO REST API
    .PARAMETER NSSession
        An existing custom NetScaler Web Request Session object returned by Connect-NSAppliance
    .PARAMETER OperationMethod
        Specifies the method used for the web request
    .PARAMETER ResourceType
        Type of the NS appliance resource
    .PARAMETER ResourceName
        Name of the NS appliance resource, optional
    .PARAMETER Action
        Name of the action to perform on the NS appliance resource
    .PARAMETER Payload
        Payload  of the web request, in hashtable format
    .PARAMETER GetWarning
        Switch parameter, when turned on, warning message will be sent in 'message' field and 'WARNING' value is set in severity field of the response in case there is a warning.
        Turned off by default
    .PARAMETER OnErrorAction
        Use this parameter to set the onerror status for nitro request. Applicable only for bulk requests.
        Acceptable values: "EXIT", "CONTINUE", "ROLLBACK", default to "EXIT"
    .EXAMPLE
        Invoke NITRO REST API to add a DNS Server resource.
        $payload = @{ip="10.8.115.210"}
        Invoke-NSNitroRestApi -NSSession $Session -OperationMethod POST -ResourceType dnsnameserver -Payload $payload -Action add
    .OUTPUTS
        Only when the OperationMethod is GET:
        PSCustomObject that represents the JSON response content. This object can be manipulated using the ConvertTo-Json Cmdlet.
    .NOTES
        Copyright (c) Citrix Systems, Inc. All rights reserved.
    #>
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)] [PSObject]$NSSession,
        [Parameter(Mandatory=$true)] [ValidateSet("DELETE","GET","POST","PUT")] [string]$OperationMethod,
        [Parameter(Mandatory=$true)] [string]$ResourceType,
        [Parameter(Mandatory=$false)] [string]$ResourceName,
        [Parameter(Mandatory=$false)] [string]$Action,
        [Parameter(Mandatory=$false)] [ValidateScript({$OperationMethod -eq "GET"})] [hashtable]$Arguments=@{},
        [Parameter(Mandatory=$false)] [ValidateScript({$OperationMethod -ne "GET"})] [hashtable]$Payload=@{},
        [Parameter(Mandatory=$false)] [switch]$GetWarning=$false,
        [Parameter(Mandatory=$false)] [ValidateSet("EXIT", "CONTINUE", "ROLLBACK")] [string]$OnErrorAction="EXIT"
    )

    Write-Verbose "$($MyInvocation.MyCommand): Enter"

    Write-Verbose "Building URI"
    $uri = "$($Script:NSURLProtocol)://$($NSSession.Endpoint)/nitro/v1/config/$ResourceType"
    if (-not [string]::IsNullOrEmpty($ResourceName)) {
        $uri += "/$ResourceName"
    }
    if ($OperationMethod -ne "GET") {
        if (-not [string]::IsNullOrEmpty($Action)) {
            $uri += "?action=$Action"
        }
    } else {
        if ($Arguments.Count -gt 0) {
            $uri += "?args="
            $argsList = @()
            foreach ($arg in $Arguments.GetEnumerator()) {
                $argsList += "$($arg.Name):$([System.Uri]::EscapeDataString($arg.Value))"
            }
            $uri += $argsList -join ','
        }
        #TODO: Add filter, view, and pagesize
    }
    Write-Verbose "URI: $uri"

    if ($OperationMethod -ne "GET") {
        Write-Verbose "Building Payload"
        $warning = if ($GetWarning) { "YES" } else { "NO" }
        $hashtablePayload = @{}
        $hashtablePayload."params" = @{"warning"=$warning;"onerror"=$OnErrorAction;<#"action"=$Action#>}
        $hashtablePayload.$ResourceType = $Payload
        $jsonPayload = ConvertTo-Json $hashtablePayload -Depth ([int]::MaxValue)
        Write-Verbose "JSON Payload:`n$jsonPayload"
    }

    try {
        Write-Verbose "Calling Invoke-RestMethod"
        $restParams = @{
            Uri = $uri
            ContentType = "application/json"
            Method = $OperationMethod
            WebSession = $NSSession.WebSession
            ErrorVariable = "restError"
        }

        if ($OperationMethod -ne "GET") {
            $restParams.Add("Body",$jsonPayload)
        }

        $response = Invoke-RestMethod @restParams

        if ($response) {
            if ($response.severity -eq "ERROR") {
                throw "Error. See response: `n$($response | fl * | Out-String)"
            } else {
                Write-Verbose "Response:`n$(ConvertTo-Json $response | Out-String)"
            }
        }
    }
    catch [Exception] {
        if ($ResourceType -eq "reboot" -and $restError[0].Message -eq "The underlying connection was closed: The connection was closed unexpectedly.") {
            Write-Verbose "Connection closed due to reboot"
        } else {
            throw $_
        }
    }

    Write-Verbose "$($MyInvocation.MyCommand): Exit"

    if ($OperationMethod -eq "GET") {
        return $response
    }
}

$psver = $PSVersionTable.PSVersion.Major
if ($psver -eq "1" -or $psver -eq "2") {
    Write-Error "NetScaler ADC Enable Disable Service requires PowerShell v3 or newer. Installed version v$psver"
    return -1
}

$NSAddress = $OctopusParameters['HostName']
$NSUserName = $OctopusParameters['Username']
$NSPassword = $OctopusParameters['Password']
$NSProtocol="http"
$Action = $OctopusParameters['EnableOrDisable']
$ServiceName = $OctopusParameters['ServiceName']
$GracefulShutdown = $OctopusParameters['Graceful']
$GraceFulShutdownDelay = $OctopusParameters['GracefulDelay']

if(!$NSAddress) {
    Write-Error "No NetScaler address specified. Please specify an address"
    exit -2
}

if(!$NSUserName) {
    Write-Error "No username specified. Please specify a username"
    exit -2
}

if(!$NSPassword) {
    Write-Error "No password specified. Please specify a password"
    exit -2
}

if(!$Action) {
    Write-Error "No action set. Action must either be enable or disable. Please select an action"
    exit -2
}

if(!$GracefulShutdown) {
    Write-Error "Graceful shutdown not selected. Must either be yes or no. Please select an option"
    exit -2
}

if(!$ServiceName) {
    Write-Error "Service name must be specified. Please specify service name"
    exist -2
}


Set-NSMgmtProtocol -Protocol $NSProtocol
$myNSSession = Connect-NSAppliance -NSAddress $NSAddress -NSUserName $NSUserName -NSPassword $NSPassword
$payload = @{name=$ServiceName}
if($Action -eq "disable") {
    $payload = @{name=$ServiceName;graceful=$GracefulShutdown;delay=$GraceFulShutdownDelay}
}

Invoke-NSNitroRestApi -NSSession $myNSSession -OperationMethod POST -ResourceType service -Payload $payload -Action $Action

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "1bd58988-3e56-4cfb-8f87-3769024fcdc3",
  "Name": "NetScaler ADC - Enable or Disable Service",
  "Description": "Enables or disables a load balancing service i Citrix NetScaler ADC. For documentation, see https://github.com/jnus/NetScalerPSLib\n",
  "Version": 21,
  "ExportedAt": "2015-01-29T21:49:10.234+00:00",
  "ActionType": "Octopus.Script",
  "Author": "jasper@sovs.net",
  "Parameters": [
    {
      "Name": "EnableOrDisable",
      "Label": "Service status",
      "HelpText": "Option whether to disable og enable a Load Balancing Service",
      "DefaultValue": "enable",
      "DisplaySettings": {
        "Octopus.SelectOptions": "enable|Enable\ndisable|Disable",
        "Octopus.ControlType": "Select"
      }
    },
    {
      "Name": "ServiceName",
      "Label": "LB Service Name",
      "HelpText": "Load Balancing Service Name to enable or diable",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "HostName",
      "Label": "NetScaler ADC host name",
      "HelpText": "Address of the primary NetScaler ADC instance",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "Username",
      "Label": "NetScaler ADC username",
      "HelpText": null,
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "Password",
      "Label": "NetScaler ADC password",
      "HelpText": null,
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "Graceful",
      "Label": "Graceful shutdown",
      "HelpText": "The service is disabled only when all the current active client connections are closed by either the server or the client",
      "DefaultValue": "Yes",
      "DisplaySettings": {
        "Octopus.ControlType": "Select",
        "Octopus.SelectOptions": "YES|Yes\nNO|No"
      }
    },
    {
      "Name": "GracefulDelay",
      "Label": "Graceful Delay (s)",
      "HelpText": "The time in seconds after which the service is marked as OUT OF SERVICE.",
      "DefaultValue": "300",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptBody": "param(\n        [string]$NSAddress,\n        [string]$ServiceName,\n        [string]$Action,\n        [string]$NSUserName,\n        [string]$NSPassword,\n        [string]$NSProtocol\n)\n\n\n$ErrorActionPreference = \"Stop\"\n\nfunction Connect-NSAppliance {\n    <#\n    .SYNOPSIS\n        Connect to NetScaler Appliance\n    .DESCRIPTION\n        Connect to NetScaler Appliance. A custom web request session object will be returned\n    .PARAMETER NSAddress\n        NetScaler Management IP address\n    .PARAMETER NSName\n        NetScaler DNS name or FQDN\n    .PARAMETER NSUserName\n        UserName to access the NetScaler appliance\n    .PARAMETER NSPassword\n        Password to access the NetScaler appliance\n    .PARAMETER Timeout\n        Timeout in seconds to for the token of the connection to the NetScaler appliance. 900 is the default admin configured value.\n    .EXAMPLE\n         $Session = Connect-NSAppliance -NSAddress 10.108.151.1\n    .EXAMPLE\n         $Session = Connect-NSAppliance -NSName mynetscaler.mydomain.com\n    .OUTPUTS\n        CustomPSObject\n    .NOTES\n        Copyright (c) Citrix Systems, Inc. All rights reserved.\n    #>\n    [CmdletBinding()]\n    param (\n        [Parameter(Mandatory=$true,ParameterSetName='Address')] [string]$NSAddress,\n        [Parameter(Mandatory=$true,ParameterSetName='Name')] [string]$NSName,\n        [Parameter(Mandatory=$false)] [string]$NSUserName=\"nsroot\",\n        [Parameter(Mandatory=$false)] [string]$NSPassword=\"nsroot\",\n        [Parameter(Mandatory=$false)] [int]$Timeout=900\n    )\n    Write-Verbose \"$($MyInvocation.MyCommand): Enter\"\n\n    if ($PSCmdlet.ParameterSetName -eq 'Address') {\n        Write-Verbose \"Validating IP Address\"\n        $IPAddressObj = New-Object -TypeName System.Net.IPAddress -ArgumentList 0\n        if (-not [System.Net.IPAddress]::TryParse($NSAddress,[ref]$IPAddressObj)) {\n            throw \"'$NSAddress' is an invalid IP address\"\n        }\n        $nsEndpoint = $NSAddress\n    } elseif ($PSCmdlet.ParameterSetName -eq 'Name') {\n        $nsEndpoint = $NSName\n    }\n\n\n    $login = @{\"login\" = @{\"username\"=$NSUserName;\"password\"=$NSPassword;\"timeout\"=$Timeout}}\n    $loginJson = ConvertTo-Json $login\n\n    try {\n        Write-Verbose \"Calling Invoke-RestMethod for login\"\n        $response = Invoke-RestMethod -Uri \"$($Script:NSURLProtocol)://$nsEndpoint/nitro/v1/config/login\" -Body $loginJson -Method POST -SessionVariable saveSession -ContentType application/json\n\n        if ($response.severity -eq \"ERROR\") {\n            throw \"Error. See response: `n$($response | fl * | Out-String)\"\n        } else {\n            Write-Verbose \"Response:`n$(ConvertTo-Json $response | Out-String)\"\n        }\n    }\n    catch [Exception] {\n        throw $_\n    }\n\n\n    $nsSession = New-Object -TypeName PSObject\n    $nsSession | Add-Member -NotePropertyName Endpoint -NotePropertyValue $nsEndpoint -TypeName String\n    $nsSession | Add-Member -NotePropertyName WebSession  -NotePropertyValue $saveSession -TypeName Microsoft.PowerShell.Commands.WebRequestSession\n\n    Write-Verbose \"$($MyInvocation.MyCommand): Exit\"\n\n    return $nsSession\n}\n\nfunction Set-NSMgmtProtocol {\n    <#\n    .SYNOPSIS\n        Set $Script:NSURLProtocol, this will be used for all subsequent invocation of NITRO APIs\n    .DESCRIPTION\n        Set $Script:NSURLProtocol\n    .PARAMETER Protocol\n        Protocol, acceptable values are \"http\" and \"https\"\n    .EXAMPLE\n        Set-Protocol -Protocol https\n    .NOTES\n        Copyright (c) Citrix Systems, Inc. All rights reserved.\n    #>\n    [CmdletBinding()]\n    param (\n        [Parameter(Mandatory=$true)] [ValidateSet(\"http\",\"https\")] [string]$Protocol\n    )\n\n    Write-Verbose \"$($MyInvocation.MyCommand): Enter\"\n\n    $Script:NSURLProtocol = $Protocol\n\n    Write-Verbose \"$($MyInvocation.MyCommand): Exit\"\n}\n\nfunction Invoke-NSNitroRestApi {\n    <#\n    .SYNOPSIS\n        Invoke NetScaler NITRO REST API\n    .DESCRIPTION\n        Invoke NetScaler NITRO REST API\n    .PARAMETER NSSession\n        An existing custom NetScaler Web Request Session object returned by Connect-NSAppliance\n    .PARAMETER OperationMethod\n        Specifies the method used for the web request\n    .PARAMETER ResourceType\n        Type of the NS appliance resource\n    .PARAMETER ResourceName\n        Name of the NS appliance resource, optional\n    .PARAMETER Action\n        Name of the action to perform on the NS appliance resource\n    .PARAMETER Payload\n        Payload  of the web request, in hashtable format\n    .PARAMETER GetWarning\n        Switch parameter, when turned on, warning message will be sent in 'message' field and 'WARNING' value is set in severity field of the response in case there is a warning.\n        Turned off by default\n    .PARAMETER OnErrorAction\n        Use this parameter to set the onerror status for nitro request. Applicable only for bulk requests.\n        Acceptable values: \"EXIT\", \"CONTINUE\", \"ROLLBACK\", default to \"EXIT\"\n    .EXAMPLE\n        Invoke NITRO REST API to add a DNS Server resource.\n        $payload = @{ip=\"10.8.115.210\"}\n        Invoke-NSNitroRestApi -NSSession $Session -OperationMethod POST -ResourceType dnsnameserver -Payload $payload -Action add\n    .OUTPUTS\n        Only when the OperationMethod is GET:\n        PSCustomObject that represents the JSON response content. This object can be manipulated using the ConvertTo-Json Cmdlet.\n    .NOTES\n        Copyright (c) Citrix Systems, Inc. All rights reserved.\n    #>\n    [CmdletBinding()]\n    param (\n        [Parameter(Mandatory=$true)] [PSObject]$NSSession,\n        [Parameter(Mandatory=$true)] [ValidateSet(\"DELETE\",\"GET\",\"POST\",\"PUT\")] [string]$OperationMethod,\n        [Parameter(Mandatory=$true)] [string]$ResourceType,\n        [Parameter(Mandatory=$false)] [string]$ResourceName,\n        [Parameter(Mandatory=$false)] [string]$Action,\n        [Parameter(Mandatory=$false)] [ValidateScript({$OperationMethod -eq \"GET\"})] [hashtable]$Arguments=@{},\n        [Parameter(Mandatory=$false)] [ValidateScript({$OperationMethod -ne \"GET\"})] [hashtable]$Payload=@{},\n        [Parameter(Mandatory=$false)] [switch]$GetWarning=$false,\n        [Parameter(Mandatory=$false)] [ValidateSet(\"EXIT\", \"CONTINUE\", \"ROLLBACK\")] [string]$OnErrorAction=\"EXIT\"\n    )\n\n    Write-Verbose \"$($MyInvocation.MyCommand): Enter\"\n\n    Write-Verbose \"Building URI\"\n    $uri = \"$($Script:NSURLProtocol)://$($NSSession.Endpoint)/nitro/v1/config/$ResourceType\"\n    if (-not [string]::IsNullOrEmpty($ResourceName)) {\n        $uri += \"/$ResourceName\"\n    }\n    if ($OperationMethod -ne \"GET\") {\n        if (-not [string]::IsNullOrEmpty($Action)) {\n            $uri += \"?action=$Action\"\n        }\n    } else {\n        if ($Arguments.Count -gt 0) {\n            $uri += \"?args=\"\n            $argsList = @()\n            foreach ($arg in $Arguments.GetEnumerator()) {\n                $argsList += \"$($arg.Name):$([System.Uri]::EscapeDataString($arg.Value))\"\n            }\n            $uri += $argsList -join ','\n        }\n        #TODO: Add filter, view, and pagesize\n    }\n    Write-Verbose \"URI: $uri\"\n\n    if ($OperationMethod -ne \"GET\") {\n        Write-Verbose \"Building Payload\"\n        $warning = if ($GetWarning) { \"YES\" } else { \"NO\" }\n        $hashtablePayload = @{}\n        $hashtablePayload.\"params\" = @{\"warning\"=$warning;\"onerror\"=$OnErrorAction;<#\"action\"=$Action#>}\n        $hashtablePayload.$ResourceType = $Payload\n        $jsonPayload = ConvertTo-Json $hashtablePayload -Depth ([int]::MaxValue)\n        Write-Verbose \"JSON Payload:`n$jsonPayload\"\n    }\n\n    try {\n        Write-Verbose \"Calling Invoke-RestMethod\"\n        $restParams = @{\n            Uri = $uri\n            ContentType = \"application/json\"\n            Method = $OperationMethod\n            WebSession = $NSSession.WebSession\n            ErrorVariable = \"restError\"\n        }\n\n        if ($OperationMethod -ne \"GET\") {\n            $restParams.Add(\"Body\",$jsonPayload)\n        }\n\n        $response = Invoke-RestMethod @restParams\n\n        if ($response) {\n            if ($response.severity -eq \"ERROR\") {\n                throw \"Error. See response: `n$($response | fl * | Out-String)\"\n            } else {\n                Write-Verbose \"Response:`n$(ConvertTo-Json $response | Out-String)\"\n            }\n        }\n    }\n    catch [Exception] {\n        if ($ResourceType -eq \"reboot\" -and $restError[0].Message -eq \"The underlying connection was closed: The connection was closed unexpectedly.\") {\n            Write-Verbose \"Connection closed due to reboot\"\n        } else {\n            throw $_\n        }\n    }\n\n    Write-Verbose \"$($MyInvocation.MyCommand): Exit\"\n\n    if ($OperationMethod -eq \"GET\") {\n        return $response\n    }\n}\n\n$psver = $PSVersionTable.PSVersion.Major\nif ($psver -eq \"1\" -or $psver -eq \"2\") {\n    Write-Error \"NetScaler ADC Enable Disable Service requires PowerShell v3 or newer. Installed version v$psver\"\n    return -1\n}\n\n$NSAddress = $OctopusParameters['HostName']\n$NSUserName = $OctopusParameters['Username']\n$NSPassword = $OctopusParameters['Password']\n$NSProtocol=\"http\"\n$Action = $OctopusParameters['EnableOrDisable']\n$ServiceName = $OctopusParameters['ServiceName']\n$GracefulShutdown = $OctopusParameters['Graceful']\n$GraceFulShutdownDelay = $OctopusParameters['GracefulDelay']\n\nif(!$NSAddress) {\n    Write-Error \"No NetScaler address specified. Please specify an address\"\n    exit -2\n}\n\nif(!$NSUserName) {\n    Write-Error \"No username specified. Please specify a username\"\n    exit -2\n}\n\nif(!$NSPassword) {\n    Write-Error \"No password specified. Please specify a password\"\n    exit -2\n}\n\nif(!$Action) {\n    Write-Error \"No action set. Action must either be enable or disable. Please select an action\"\n    exit -2\n}\n\nif(!$GracefulShutdown) {\n    Write-Error \"Graceful shutdown not selected. Must either be yes or no. Please select an option\"\n    exit -2\n}\n\nif(!$ServiceName) {\n    Write-Error \"Service name must be specified. Please specify service name\"\n    exist -2\n}\n\n\nSet-NSMgmtProtocol -Protocol $NSProtocol\n$myNSSession = Connect-NSAppliance -NSAddress $NSAddress -NSUserName $NSUserName -NSPassword $NSPassword\n$payload = @{name=$ServiceName}\nif($Action -eq \"disable\") {\n    $payload = @{name=$ServiceName;graceful=$GracefulShutdown;delay=$GraceFulShutdownDelay}\n}\n\nInvoke-NSNitroRestApi -NSSession $myNSSession -OperationMethod POST -ResourceType service -Payload $payload -Action $Action\n",
    "Octopus.Action.Script.Syntax": "PowerShell"
  },
  "Category": "NetScaler",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/netscaler-adc-enable-or-disable-service.json",
  "Website": "/step-templates/1bd58988-3e56-4cfb-8f87-3769024fcdc3",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Thursday, January 29, 2015