Octopus.Script exported 2016-05-12 by ahmedig belongs to ‘Azure’ category.
Copy blobs between specified containers across two different storage accounts
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Source Storage Account Name
SourceStorageAccountName
null
Source Storage Account Key
SourceStorageAccountKey
null
Source Container Name
SourceContainerName
null
Source Blob Prefix (Optional)
SourceBlobPrefix
null
Destination Storage Account Name
DestinationStorageAccountName
null
Destination Storage Account Key
DestinationStorageAccountKey
null
Destination Container Name
DestinationContainerName
null
Destination Blob Prefix (Optional)
DestinationBlobPrefix
null
Script body
Steps based on this template will execute the following PowerShell script.
# Define the source storage account and context
$SourceStorageAccountName = $OctopusParameters['SourceStorageAccountName'];
$SourceStorageAccountKey = $OctopusParameters['SourceStorageAccountKey'];
$SourceContainerName = $OctopusParameters['SourceContainerName'];
$SourceContext = New-AzureStorageContext -StorageAccountName $SourceStorageAccountName -StorageAccountKey $SourceStorageAccountKey
$SourceBlobPrefix = $OctopusParameters['SourceBlobPrefix'];
# Define the destination storage account and context
$DestinationStorageAccountName = $OctopusParameters['DestinationStorageAccountName'];
$DestinationStorageAccountKey = $OctopusParameters['DestinationStorageAccountKey'];
$DestinationContainerName = $OctopusParameters['DestinationContainerName'];
$DestinationContext = New-AzureStorageContext -StorageAccountName $DestinationStorageAccountName -StorageAccountKey $DestinationStorageAccountKey
$DestinationBlobPrefix = $OctopusParameters['DestinationBlobPrefix'];
# Check if container exists, otherwise create it
$isContainerExist = Get-AzureStorageContainer -Context $DestinationContext | Where-Object { $_.Name -eq $DestinationContainerName }
if($isContainerExist -eq $null)
{
New-AzureStorageContainer -Name $DestinationContainerName -Context $DestinationContext
}
# Get a reference to blobs in the source container
$blobs = $null
if ($SourceBlobPrefix -eq $null) {
$blobs = Get-AzureStorageBlob -Container $SourceContainerName -Context $SourceContext
}
else {
$blobs = Get-AzureStorageBlob -Container $SourceContainerName -Context $SourceContext -Prefix $SourceBlobPrefix
}
# Copy blobs from one container to another
if ($DestinationBlobPrefix -eq $null) {
$blobs | Start-AzureStorageBlobCopy -DestContainer $DestinationContainerName -DestContext $DestinationContext
}
else {
$uri = $SourceContext.BlobEndPoint + $SourceContainerName +"/"
$blobs | ForEach-Object `
{ Start-AzureStorageBlobCopy `
-SrcUri "$uri$($_.Name)" `
-Context $SourceContext `
-DestContext $DestinationContext `
-DestContainer $DestinationContainerName `
-DestBlob "$DestinationBlobPrefix/$($_.Name)" `
}
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "bf955a12-57ee-41b0-af58-672ca48ea07d",
"Name": "Azure - Copy Storage Account Containers",
"Description": "Copy blobs between specified containers across two different storage accounts",
"Version": 1,
"ExportedAt": "2016-05-12T03:09:48.287+00:00",
"ActionType": "Octopus.Script",
"Author": "ahmedig",
"Parameters": [
{
"Name": "SourceStorageAccountName",
"Label": "Source Storage Account Name",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SourceStorageAccountKey",
"Label": "Source Storage Account Key",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SourceContainerName",
"Label": "Source Container Name",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SourceBlobPrefix",
"Label": "Source Blob Prefix (Optional)",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "DestinationStorageAccountName",
"Label": "Destination Storage Account Name",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "DestinationStorageAccountKey",
"Label": "Destination Storage Account Key",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "DestinationContainerName",
"Label": "Destination Container Name",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "DestinationBlobPrefix",
"Label": "Destination Blob Prefix (Optional)",
"HelpText": null,
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.ScriptBody": "# Define the source storage account and context\n$SourceStorageAccountName = $OctopusParameters['SourceStorageAccountName'];\n$SourceStorageAccountKey = $OctopusParameters['SourceStorageAccountKey'];\n$SourceContainerName = $OctopusParameters['SourceContainerName'];\n$SourceContext = New-AzureStorageContext -StorageAccountName $SourceStorageAccountName -StorageAccountKey $SourceStorageAccountKey\n$SourceBlobPrefix = $OctopusParameters['SourceBlobPrefix'];\n\n# Define the destination storage account and context\n$DestinationStorageAccountName = $OctopusParameters['DestinationStorageAccountName'];\n$DestinationStorageAccountKey = $OctopusParameters['DestinationStorageAccountKey'];\n$DestinationContainerName = $OctopusParameters['DestinationContainerName'];\n$DestinationContext = New-AzureStorageContext -StorageAccountName $DestinationStorageAccountName -StorageAccountKey $DestinationStorageAccountKey\n$DestinationBlobPrefix = $OctopusParameters['DestinationBlobPrefix'];\n\n# Check if container exists, otherwise create it\n$isContainerExist = Get-AzureStorageContainer -Context $DestinationContext | Where-Object { $_.Name -eq $DestinationContainerName }\nif($isContainerExist -eq $null)\n{\n New-AzureStorageContainer -Name $DestinationContainerName -Context $DestinationContext\n}\n\n# Get a reference to blobs in the source container\n$blobs = $null\nif ($SourceBlobPrefix -eq $null) {\n $blobs = Get-AzureStorageBlob -Container $SourceContainerName -Context $SourceContext\n}\nelse {\n $blobs = Get-AzureStorageBlob -Container $SourceContainerName -Context $SourceContext -Prefix $SourceBlobPrefix\n}\n\n# Copy blobs from one container to another\nif ($DestinationBlobPrefix -eq $null) {\n\t$blobs | Start-AzureStorageBlobCopy -DestContainer $DestinationContainerName -DestContext $DestinationContext\n}\nelse {\n\t$uri = $SourceContext.BlobEndPoint + $SourceContainerName +\"/\" \n\t$blobs | ForEach-Object `\n \t{ Start-AzureStorageBlobCopy `\n\t -SrcUri \"$uri$($_.Name)\" `\n -Context $SourceContext `\n\t -DestContext $DestinationContext `\n\t -DestContainer $DestinationContainerName `\n\t -DestBlob \"$DestinationBlobPrefix/$($_.Name)\" `\n\t } \n}\n ",
"Octopus.Action.Script.ScriptFileName": null,
"Octopus.Action.Package.NuGetFeedId": null,
"Octopus.Action.Package.NuGetPackageId": null
},
"Category": "Azure",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/Azure-Container-Copy-to-another-Container.json",
"Website": "/step-templates/bf955a12-57ee-41b0-af58-672ca48ea07d",
"Logo": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNQTFRF////AHjXf7vrv931QJrh7/f8EIDaIIncMJHfYKvmz+b3n8zw3+76j8Ttr9XycLPpUKLkkKvYFAAABGZJREFUeNrsnNmCqjoQRc1MEiD8/9cer7Yt2KBJZQC8ez07sKlKTQlcLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzoUSnt8YxXlFuGHSbIaxvj+fip4btkLn1blkWLaF5v03yLhLOYlVuGYfMOMZzNGxCOzhjTJqFkXnjq3Dr1yyvPI3hGl3Ih3zzHHNKudRstRhX5O58vIcShY67Gq6EPIESlzUWvazaGAOGbvU7ArDu/g8M4o8opDZWvbvPzlL/MMBE8jT9T9W7PbAJlHPTBFRf9yVTEcs63msXz2UHLSgf650G/d5t+wjbxxB2UCMqGrk8/LFSD7uJMeNt5bcJCyQZyAe5Fo9KYfWS2flQrr4b4tpuzaeWjYs49rt9LHf9uZD7+VbyVi9EBNrjYjuq2sxQOrl+p+HuBVu45qvqfq691ttYFQ5KyKbyJgaIY/NGxrlWZwlwGvmvu1oY3PuAv0niTq6tZ78jk//9uc1r1r4lQki7y7sp2Tu4V1y2iLoqFTqi1lIGcpFiebrZNZ1dOkF0cCIlO8jQ47nCkam9Lilz9GhDF1I6XGLzfnhwDIIZVfI7+8SSgfHsijqXENOGJF5QorG4EcW0OrScqX/dDrXpr70Ut/BII+1OfECPuYz/NWxYmgrCsUskxPvyhgmrw+WGZ6lGTuOlIyCYWTFyWjpM5KIZRUIOwjRNYRQ6tZF9BXtk8hWAHPtLNJ727Fq0JSkC1FDRRF0Jalj0d5qVh2KEpM2TuSsCYTCT6ZkdmFYI9LrYp5QayWbo6NXlZwcRD/61pth5Fq5EX423QQxNjhqWvvklkljOLkYjrmphXPZOJOk6Pg7HKMsrtQKcowzZoK3rx1ZUelGMdQA/HaKkjAt2RgqpZeYqbNbH7Hp2ct4nqfSPOfe0ftiSTZJydOV6rG5bQbyLK+nRuCC0343PzDgiOXyQA5c14BTZi98uR/5KJ1SnatLdoO50WWBQZPTq0VgsklU3h932actuo17ayrHrb/3ykiegd3KbqF2wbV6RrlsJ07yLcpsWFTul9RyK6ZScr+tk7oNrFj0o7HQUlj4EiEvJ6rPLKSmlMZCrksl1OnLaRkxc+/HB1naMhNtT/6yM2bDs6azCRHrM3aVPN7aW8irD/10B8njpAMcsl8okXcdKrl4sPsLmQVy/Sj90ucPRc/d/Bxxj+dXSpCayen32D+hLi16MsIV8gfCXrYp6ySsiJKRUF0XXiLpVbFU+fNv4r7mOwhFsX4ZdwpSi1DYs2jb6ebZ9788cblTzMrYhu7sf/17IFdtuviJ2ioHA6pMHkoH4CLUeMBU7iGkxuM/YgcdderF9ibRdc7O982F1HpYhjfWUe+x5a6pjop9iNLfoePvlsdZdTSMwfxSmTY20Q0eHnUNzga1edeNmmqbg18aMVR1L9vwSXHF9TfIWBxpKLs2hj3eQeBC0USvp2HHF3eIkRdhFOd6ER8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA/I/4J8AAo/80BciBec4AAAAASUVORK5CYII=",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Thursday, May 12, 2016