Last active
August 29, 2015 13:59
-
-
Save SyntaxC4/10935798 to your computer and use it in GitHub Desktop.
Revisions
-
Cory Fowler revised this gist
Apr 17, 2014 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -23,4 +23,4 @@ Invoke-AzureEnvironmentSetup -EnvironmentSubscriptionName $EnvironmentSubscripti -EnvironmentStagingSites $EnvironmentStagingSites ` -EnvironmentStorageAccount $EnvironmentStorageAccount ` -StorageContainers $StorageContainers ` -PublishSettingsFile $PublishSettingsFile -
Cory Fowler created this gist
Apr 16, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,26 @@ function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Value Split-Path $Invocation.MyCommand.Path } $FunctionToRegister = Join-Path (Get-ScriptDirectory) "setup\Invoke-AzureEnvironmentSetup.ps1" . "$FunctionToRegister" #### Primary Environment $EnvironmentSubscriptionName = "Primary Subscription Name" $EnvironmentPrimaryLocation = "West US" $StorageEnvironmentLocation = "West US" $EnvironmentWebSites = @{"mysite"=$EnvironmentPrimaryLocation;"mysite-ne"="North Europe";"mysite-je"="Japan East"} $EnvironmentStagingSites = @{"mysite"=$EnvironmentPrimaryLocation} $EnvironmentStorageAccount = "mysitestorage" $StorageContainers = @('uploads','thumbnails') $PublishSettingsFile = Join-Path (Get-ScriptDirectory) "setup\assets\publishSettings\primary.publishsettings" Invoke-AzureEnvironmentSetup -EnvironmentSubscriptionName $EnvironmentSubscriptionName ` -EnvironmentPrimaryLocation $EnvironmentPrimaryLocation ` -StorageEnvironmentLocation $StorageEnvironmentLocation ` -EnvironmentWebSites $EnvironmentWebSites ` -EnvironmentStagingSites $EnvironmentStagingSites ` -EnvironmentStorageAccount $EnvironmentStorageAccount ` -StorageContainers $StorageContainers ` -PublishSettingsFile $PublishSettingsFile This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,117 @@ function Invoke-AzureEnvironmentSetup { [CmdletBinding()] param([Parameter(Mandatory=$true)]$EnvironmentSubscriptionName, [Parameter(Mandatory=$true)]$EnvironmentPrimaryLocation, [Parameter(Mandatory=$true)]$StorageEnvironmentLocation, [Parameter(Mandatory=$true)]$EnvironmentWebSites, [Parameter(Mandatory=$true)]$EnvironmentStagingSites, [Parameter(Mandatory=$true)]$EnvironmentStorageAccount, [Parameter(Mandatory=$true)]$StorageContainers, [Parameter(Mandatory=$false)]$publishSettingsFile) begin { Write-Host "Importing Publish Settings file: " (Get-Date) if ($publishSettingsFile) { Import-AzurePublishSettingsFile -PublishSettingsFile $publishSettingsFile azure account import $publishSettingsFile } Select-AzureSubscription -Default $EnvironmentSubscriptionName azure account set $EnvironmentSubscriptionName Write-Host "Start Deleting Services: " (Get-Date) Write-Host "Deleting Staging WebSites: " (Get-Date) $DeleteStagingWebSitesJobs = @() $EnvironmentStagingSites.GetEnumerator() | % { $DeleteStagingWebSitesJobs += Start-Job -ScriptBlock { if(Test-AzureName -WebSite ($args[0] + "-staging")) { Remove-AzureWebsite -Name $args[0] -Slot Staging -Force } } -ArgumentList $_.Name } Wait-Job -Job $DeleteStagingWebSitesJobs Write-Host "Deleting WebSites: " (Get-Date) $DeleteWebSitesJobs = @() $EnvironmentWebSites.GetEnumerator() | % { $DeleteWebSitesJobs += Start-Job -ScriptBlock { if(Test-AzureName -WebSite $args[0]) { Remove-AzureWebsite -Name $args[0] -Force } } -ArgumentList $_.Name } Wait-Job -Job $DeleteWebSitesJobs if ((Test-AzureName -Storage $EnvironmentStorageAccount)) { Write-Host "Deleting Storage Containers: " (Get-Date) $StorageAccountKey = (Get-AzureStorageKey -StorageAccountName $EnvironmentStorageAccount).Primary $StorageContainerJobs = @() $StorageContainers | % { $StorageContainerJobs += Start-Job -ScriptBlock { param($container,$storageName,$storageKey) Invoke-Expression -Command "azure storage container delete --container $container --account-name $storageName --account-key $storageKey -q" } -ArgumentList $_, $EnvironmentStorageAccount, $StorageAccountKey } Wait-Job $StorageContainerJobs } Write-Host "Finished Deleting Services: " (Get-Date) } process { Write-Host "Starting to Provision Services: " (Get-Date) ############################ ### Web Sites Operations ### ############################ Write-Host "Creating Web Sites: " (Get-Date) $SiteCreateJobs = @() $EnvironmentWebSites.GetEnumerator() | % { #PowerShell doesn't support Scale Mode... Xplat to the rescue! $SiteCreateJobs += Start-Job -ScriptBlock { azure site create --location $args[1] $args[0]; azure site scale mode 'standard' $args[0] } -ArgumentList $_.Name, $_.Value } Wait-Job -Job $SiteCreateJobs Write-Host "Finished Changing Web Sites Mode" ## azure site create --slot Write-Host "Adding Site Slot to Web Sites" $StagingCreateJobs = @() $EnvironmentStagingSites.GetEnumerator() | % { $StagingCreateJobs += Start-Job -ScriptBlock { New-AzureWebsite -Name $args[0] -Location $args[1] -Slot "Staging" } -ArgumentList $_.Name, $_.Value } Wait-Job -Job $StagingCreateJobs Write-Host "Finished Web Sites Creation" ########################## ### Storage Operations ### ########################## ## create storage account if it does not exist if (!(Test-AzureName -Storage $EnvironmentStorageAccount)) { Write-Host "Creating Storage Account: " (Get-Date) $StorageCreateJob = Start-Job -ScriptBlock { New-AzureStorageAccount -StorageAccountName $args[0] -Label $args[0] -Location $args[1] } -ArgumentList $EnvironmentStorageAccount, $StorageEnvironmentLocation Wait-Job -Job $StorageCreateJob; # if ($StorageCreateJob.HasMoreData) { Receive-Job -Job $StorageCreateJob }; Write-Host "Finished Storage Account Creation: " (Get-Date) } $StorageContainerJobs = @() $StorageAccountKey = (Get-AzureStorageKey -StorageAccountName $EnvironmentStorageAccount).Primary $StorageContainers | % { $StorageContainerJobs += Start-Job -ScriptBlock {param($container,$storageName,$storageKey) Invoke-Expression -Command "azure storage container create --permission 'Blob' --container $container --account-name $storageName --account-key $storageKey" } -ArgumentList $_, $EnvironmentStorageAccount, $StorageAccountKey } Wait-Job $StorageContainerJobs ######################### ### Shared Operations ### ######################### ## azure site connectionstring add $StorageConnectionString = "DefaultEndpointsProtocol=https;AccountName=$EnvironmentStorageAccount;AccountKey=$StorageAccountKey" $WebSitesConnectionStrings = @(@{Name="AzureJobsRuntime";ConnectionString=$StorageConnectionString;Type="Custom"},@{Name="AzureJobsData";ConnectionString=$StorageConnectionString;Type="Custom"},@{Name="StorageConnectionString";ConnectionString=$StorageConnectionString;Type="Custom"}) Write-Host "Inject Connection Strings into Web Sites (Async)" $EnvironmentWebSites.GetEnumerator() | % { Start-Job -ScriptBlock { Set-AzureWebsite -ConnectionStrings $args[2] -AppSettings @{"TrafficManagerRegion"=$args[1]} -Name $args[0] } -ArgumentList $_.Name, $_.Value, $WebSitesConnectionStrings } $EnvironmentStagingSites.GetEnumerator() | % { Start-Job -ScriptBlock { Set-AzureWebsite -ConnectionStrings $args[1] -Name $args[0] -Slot 'Staging' } -ArgumentList $_.Name, $WebSitesConnectionStrings } Write-Host "Finished Provisioning Services: " (Get-Date) } }