Redgate - SQL Clone, Delete Clone
Octopus.Script exported 05/16/2019 by alex-yates belongs to 'Redgate' category.
Deletes a database clone with Redgate SQL Clone.
Requires SQL Clone.
Version date: 16th May 2019
Parameters
When steps based on the template are included in a project's deployment process, the parameters below can be set.
SQL Clone Server (required)
The URL for your SQL Clone server (e.g. http://sql-clone.example.com:14145)
SQL Clone User (optional)
User account to access SQL Clone. (If left blank Octopus tentacle account will be used.)
SQL Clone Password (optional)
User account to access SQL Clone. (If left blank Octopus tentacle account will be used.)
SQL Server Instance (required)
The SQL Server instance the clone exists on. This SQL Server instance must have already been added to the SQL Clone Server specified above.
Clone Name (required)
The name of the clone to delete.
Script body
$ErrorActionPreference = 'Stop'
Write-Debug "Entering script SQLCloneDeleteTask.ps1"
# The code for this step template is largely a copy/paste job from the
# Azure DevOps Services step template which is maintained by Redgate:
# https://github.com/red-gate/SqlCloneVSTSExtension/blob/master/ImageTask/SQLCloneImageTask.ps1
# The code was copied and adapted on 16th May 2019.
Write-Verbose "cloneServer is $cloneServer"
Write-Verbose "cloneUser is $cloneUser"
Write-Verbose "clonePassword is $clonePassword"
Write-Verbose "cloneSqlServer is $cloneSqlServer"
Write-Verbose "cloneName is $cloneName"
# This line is broken: Import-Module "$PSScriptRoot\Modules\RedGate.SQLClone.PowerShell.dll"
if($cloneUser){
$password = ConvertTo-SecureString -String $clonePassword -AsPlainText -Force
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $cloneUser,$password
}
Connect-SqlClone -ServerUrl $cloneServer -Credential $credential
Write-Output "Connected to SQL Clone server"
$sqlServerParts = $cloneSqlServer.Split('\', [System.StringSplitOptions]::RemoveEmptyEntries)
if ($sqlServerParts.Count -ge 3)
{
write-error 'SQL Server instance "' + $cloneSqlServer + '" has not been recognised, if specifying a named instance please use "machine\instance"'
exit 1
}
$cloneSqlServerHost = $sqlServerParts[0]
$instanceName = ''
if ($sqlServerParts.Count -ge 2)
{
$instanceName = $sqlServerParts[1]
}
try
{
$instance = Get-SqlCloneSqlServerInstance -MachineName $cloneSqlServerHost -InstanceName $instanceName
Write-Output "Found SQL Server instance"
}
catch
{
$instances = Get-SqlCloneSqlServerInstance
$instanceNames = "`n"
Foreach ($cInstance in $instances)
{
$instanceNames += $cInstance.Name + "`n"
}
$message = 'SQL Server instance "' + $cloneSqlServer + '" has not been added to SQL Clone, available instances:' + $instanceNames
write-error $message
exit 1
}
try
{
$clone = Get-SqlClone -Name $cloneName -Location $instance
Write-Output "Found clone"
}
catch
{
$clones = Get-SqlClone -Location $instance
$cloneNames = "`n"
Foreach ($cClone in $clones)
{
$cloneNames += $cClone.Name + "`n"
}
$message = 'SQL Clone clone ' + $cloneName + ' does not exist, available clones on SQL instance "' + $cloneSqlServer + '":' + $cloneNames
write-error $message
exit 1
}
Write-Output "Deleting clone"
Remove-SqlClone -Clone $clone | Wait-SqlCloneOperation
Write-Output "Finished deleting clone"
Write-Debug "Leaving script SQLCloneDeleteTask.ps1"To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
Show JSON{
"Id": "b13ba90b-3e67-4175-aad4-9531783c4c11",
"Name": "Redgate - SQL Clone, Delete Clone",
"Description": "Deletes a database clone with [Redgate SQL Clone](https://www.red-gate.com/products/dba/sql-clone/index).\n\nRequires SQL Clone.\n\n*Version date: 16th May 2019*",
"Version": 1,
"ExportedAt": "2019-05-16T11:37:47.360Z",
"ActionType": "Octopus.Script",
"Author": "alex-yates",
"Packages": [],
"Parameters": [
{
"Id": "8c140a4c-65a2-4341-a604-73d14775b3a0",
"Name": "cloneServer",
"Label": "SQL Clone Server (required)",
"HelpText": "The URL for your SQL Clone server (e.g. http://sql-clone.example.com:14145)",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "e5ac1d04-b8a5-440e-ba69-a5d66a53abba",
"Name": "cloneUser",
"Label": "SQL Clone User (optional)",
"HelpText": "User account to access SQL Clone. (If left blank Octopus tentacle account will be used.)",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "5f6288f2-57c9-4a11-91f2-b0c2e3cb9ccd",
"Name": "clonePassword",
"Label": "SQL Clone Password (optional)",
"HelpText": "User account to access SQL Clone. (If left blank Octopus tentacle account will be used.)",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "Sensitive"
}
},
{
"Id": "ab892024-c4b5-46c2-9434-2ad150e3e014",
"Name": "cloneSqlServer",
"Label": "SQL Server Instance (required)",
"HelpText": "The SQL Server instance the clone exists on. This SQL Server instance must have already been added to the SQL Clone Server specified above.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "a758e9de-05c6-4879-8541-d7f73215fe87",
"Name": "cloneName",
"Label": "Clone Name (required)",
"HelpText": "The name of the clone to delete.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptBody": "$ErrorActionPreference = 'Stop'\n\nWrite-Debug \"Entering script SQLCloneDeleteTask.ps1\"\n\n# The code for this step template is largely a copy/paste job from the\n# Azure DevOps Services step template which is maintained by Redgate:\n# https://github.com/red-gate/SqlCloneVSTSExtension/blob/master/ImageTask/SQLCloneImageTask.ps1\n# The code was copied and adapted on 16th May 2019.\n\nWrite-Verbose \"cloneServer is $cloneServer\"\nWrite-Verbose \"cloneUser is $cloneUser\"\nWrite-Verbose \"clonePassword is $clonePassword\"\nWrite-Verbose \"cloneSqlServer is $cloneSqlServer\"\nWrite-Verbose \"cloneName is $cloneName\"\n\n# This line is broken: Import-Module \"$PSScriptRoot\\Modules\\RedGate.SQLClone.PowerShell.dll\"\n\nif($cloneUser){\n $password = ConvertTo-SecureString -String $clonePassword -AsPlainText -Force\n $credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $cloneUser,$password\n\n}\nConnect-SqlClone -ServerUrl $cloneServer -Credential $credential\nWrite-Output \"Connected to SQL Clone server\"\n\n $sqlServerParts = $cloneSqlServer.Split('\\', [System.StringSplitOptions]::RemoveEmptyEntries)\n if ($sqlServerParts.Count -ge 3)\n {\n write-error 'SQL Server instance \"' + $cloneSqlServer + '\" has not been recognised, if specifying a named instance please use \"machine\\instance\"'\n exit 1\n }\n $cloneSqlServerHost = $sqlServerParts[0]\n $instanceName = ''\n if ($sqlServerParts.Count -ge 2)\n {\n $instanceName = $sqlServerParts[1]\n }\n try\n {\n $instance = Get-SqlCloneSqlServerInstance -MachineName $cloneSqlServerHost -InstanceName $instanceName\n Write-Output \"Found SQL Server instance\"\n }\n catch\n {\n $instances = Get-SqlCloneSqlServerInstance\n $instanceNames = \"`n\"\n Foreach ($cInstance in $instances)\n {\n $instanceNames += $cInstance.Name + \"`n\"\n }\n $message = 'SQL Server instance \"' + $cloneSqlServer + '\" has not been added to SQL Clone, available instances:' + $instanceNames\n write-error $message\n exit 1\n }\n \n try\n {\n $clone = Get-SqlClone -Name $cloneName -Location $instance\n Write-Output \"Found clone\"\n }\n catch\n {\n $clones = Get-SqlClone -Location $instance\n $cloneNames = \"`n\"\n Foreach ($cClone in $clones)\n {\n $cloneNames += $cClone.Name + \"`n\"\n }\n $message = 'SQL Clone clone ' + $cloneName + ' does not exist, available clones on SQL instance \"' + $cloneSqlServer + '\":' + $cloneNames\n write-error $message\n exit 1\n }\n \n Write-Output \"Deleting clone\"\n Remove-SqlClone -Clone $clone | Wait-SqlCloneOperation\n Write-Output \"Finished deleting clone\" \n\nWrite-Debug \"Leaving script SQLCloneDeleteTask.ps1\""
},
"Category": "Redgate",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates/redgate-sql-clone-delete-clone.json",
"Website": "/step-templates/b13ba90b-3e67-4175-aad4-9531783c4c11",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}Provided under the Apache License version 2.0.