Azure - Copy Storage Account Containers

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.

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": "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"
  }
}

History

Page updated on Thursday, May 12, 2016