Monday, April 6, 2015

Create a Demo env. in Azure using PowerShell (Create storage account, Cloud Service, VMS (in Availablity Set), load balanced set for HTTP, vnet, subnet; collect latest ubuntu image; assign static ip; stop vms; remove vms, subnet, vnet.)


Create a demo environment for the below deployment diagram:


###################Disclaimer########################################




# The script is provided ASIS. Feel free to modify as per your need #

#####################################################################
 
 

 
############################### USer Manual #####################

#The environment mentioned in the script has the followings:

#1. storage account: LRS

#2. Cloud Service (public url))

#3. Two VMS

# 3a. Picks up the latest stable Ubunutu images

# 3b. Sets up SSH on specific ports

#4. Availability Set

#5. Load balanced set for HTTP

#6. vnet and subnet

#7. assign static IP

#8. select default subscription and storage

#

#The script is idempotent...Run as many times you like...

#The script doesnt handle Transient Failures. Run multiple times as a workaround.

#

#Scripts prompts for:

#1. Set up an environment (*)

#2. Print Details of the environment

#3. Test High Availability of the environment

#4. Stop computation of the environment

#5. Tear Down the environment

#6. Perform all the above sequentially.

#(*) a web farm (2 web servies) in availability set, with load balanced set, in a cloud service, in a vnet, accessible over ssh.

############################### End USer Manual #####################
 
 

 
#####################Pre-requisite########

# 1. An Azure subscription

# 2. PowerShell

# 3. Putty or any SSH client

#####################End Pre-requisite########
 
 
clear screen




 
#global preference

#$ErrorActionPreference = "Stop"
 
 
$nl=[Environment]::NewLine




 
$bgcolor="Gray"

$fgcolor="Cyan"




 
###############################Set your variables##################################

# Set variables:
 
 
$prefixVariable='<initials>' #put in your initials

$cosVaraible='mycos' #put in company's initial

$workingDir='c:\dev\demo'




###############################(Optional) Set your variables##################################
 
 
$location = 'West US'

$adminname = 'MppUsWest1admin'

$adminpassword = 'MppUsWest1'

$ipaddressVnetRange='10.10.0.0/8'

$ipaddressSubNetRange='10.10.0.0/11'

$vm1IPAddress='10.10.0.2'

$vm2IPAddress='10.10.0.3'

$vm1SSHPublicPort='5001'

$vm2SSHPublicPort='5002'

$storageAccountType='Standard_LRS' #Standard_ZRS, Standard_GRS, Standard_RAGRS




###############################Set your variables##################################
 
 

 
$storageAccountName = "$prefixVariable$cosVaraible-test-storage"

$cloudsvcName = "$prefixVariable$cosVaraible-testapp-cs"

$vm1name = "$prefixVariable$cosVaraible-testapp-web-vm1"

$vm2name = "$prefixVariable$cosVaraible-testapp-web-vm2"

$vnetname = "$prefixVariable$cosVaraible-mycostest-vnet"

$subnetname = "$prefixVariable$cosVaraible-testapp-web-subnet"

$cloudappFQDN='.cloudapp.net'

$availabilitySetName="$prefixVariable$cosVaraible-myapptest-web-as"

$bkpFilePrefix="bkp$prefixVariable$cosVaraible"

$wipFilePrefix = "wip$prefixVariable$cosVaraible"




 
#vnet config string
 
 
$vnetString='<VirtualNetworkSite name="variable-vnetname" Location="variable-location">




<AddressSpace>

<AddressPrefix>variable-ipaddressvnetrange</AddressPrefix>

</AddressSpace>

<Subnets>

<Subnet name="variable-subnetname">

<AddressPrefix>variable-ipaddresssubnetrange</AddressPrefix>

</Subnet>

</Subnets>
 
 
</VirtualNetworkSite>';

$vnetString=$vnetString -replace "variable-vnetname", "$vnetname"

$vnetString=$vnetString -replace "variable-subnetname", "$subnetname"

$vnetString=$vnetString -replace "variable-ipaddressvnetrange", "$ipaddressVnetRange"

$vnetString=$vnetString -replace "variable-ipaddresssubnetrange", "$ipaddressSubNetRange"

$vnetString=$vnetString -replace "variable-location", "$location"




 
$vnetSampleString = '<?xml version="1.0" encoding="utf-8"?>




<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="ttp://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">

<VirtualNetworkConfiguration>

<Dns />

<VirtualNetworkSites>

<VirtualNetworkSite name="dpmycos-mycostest-vnet" Location="West US">

<AddressSpace>

<AddressPrefix>10.10.0.0/8</AddressPrefix>

</AddressSpace>

<Subnets>

<Subnet name="dpmycos-testapp-web-subnet">

<AddressPrefix>10.10.0.0/11</AddressPrefix>

</Subnet>

</Subnets>

</VirtualNetworkSite>

</VirtualNetworkSites>

</VirtualNetworkConfiguration>

</NetworkConfiguration>'
 
 



 
###################Display message########################
 
 
function Display-Message ($message, $message2) {

Display-Message_NoLineBreak $message, $message2

$nl



}
 
function Display-ErrorMessage ($myError) {

Write-Host "Error: $myError" -BackgroundColor Red -ForegroundColor $fgcolor

#Show-ErrorDetails

$Error.Clear();

$nl



}
 
function Display-Message_NoLineBreak ($message, $message2) {

if ($message2 -ne $null) {

Write-Host $message $message2 -BackgroundColor DarkBlue -ForegroundColor $fgcolor

} else {

Write-Host $message $message2 -BackgroundColor $bgcolor -ForegroundColor $fgcolor



}

}
 
####################End of Display message################
 
 

 
################Show Error Details#########################
 
 
function Show-ErrorDetails {

param (

$ErrorRecord = $Error[0]



)


 
$ErrorRecord | Format-List * -Force

$ErrorRecord.InvocationInfo | Format-List *

$Exception = $ErrorRecord.Exception

for ($depth=0; $Exception -ne $null; $depth++)



{
 
"$depth" * 80

$Exception | Format-List -Force *

$Exception = $Exception.InnerException



}

}
 
################end of Show-ErrorDetails###################
 
 

 
#################create VM##########################
 
 
function Create-VM ($sshport, $vmname, $ubuntuImageName, $adminpassword, $adminname, $subnetname, $vmIPAddress, $cloudsvcName, $vnetname, $location) {

Display-Message_NoLineBreak "Going to create vm:"

Display-Message_NoLineBreak "vmname: $vmname"

Display-Message_NoLineBreak "ubuntuImageName: $ubuntuImageName"

Display-Message_NoLineBreak "adminpassword: $adminpassword"

Display-Message_NoLineBreak "adminname: $adminname"

Display-Message_NoLineBreak "subnetname: $subnetname"

Display-Message_NoLineBreak "vmIPAddress: $vmIPAddress"

Display-Message_NoLineBreak "cloudsvcName: $cloudsvcName"

Display-Message_NoLineBreak "vnetname: $vnetname"

Display-Message_NoLineBreak "location: $location"

Display-Message_NoLineBreak "sshport: $sshport"

Pause

$vmObject=New-AzureVMConfig -Name "$vmname" -InstanceSize "Small" -ImageName "$ubuntuImageName" |`

Add-AzureProvisioningConfig -Linux -Password "$adminpassword" -LinuxUser "$adminname" -NoSSHEndPoint|`

Set-AzureSubnet -SubnetNames "$subnetname" |`

Set-AzureStaticVNetIP -IPAddress "$vmIPAddress" |`

Add-AzureEndpoint -LocalPort 22 -Name SSH -Protocol tcp -PublicPort "$sshport" | `

New-AzureVM –ServiceName "$cloudsvcName" -WaitForBoot -VNetName "$vnetname" -Location "$location"

return $vmObject



}
 
#################end of create VM###################
 
 

 
#################display usage of Ubuntu###########
 
 
function Display-UbuntuMessage () {

Display-Message_NoLineBreak 'After you connect to Ubuntu'

Display-Message_NoLineBreak '1. Accept the cert'

Display-Message_NoLineBreak '2. login'

Display-Message_NoLineBreak '3. sudo su -'

Display-Message_NoLineBreak '4. apt-get install apache2'

Display-Message_NoLineBreak '4a. Answer Y when prompted to continue'

Display-Message_NoLineBreak '5. ps -ef | grep apache'

Display-Message_NoLineBreak '6 echo `hostname` >> /var/www/index.html'

Display-Message_NoLineBreak '7. curl localhost'

Display-Message_NoLineBreak '8. validate some html content is displayed'



}
 
#################end display usage of Ubuntu###########
 
 

 
##################Collect User Response################
 
 
function Collect-UserResponse ($message) {

Display-ErrorMessage $message

Read-Host 'Press <Enter> to continue or Ctrl+C to Abort'



}
 
##################end of Collecting User Response######
 
 

 
##################collect latest Ubuntu image##########
 
 
function Collect-UbuntuImage() {

Display-Message "Going to collect the latest Ubuntu Stock Image Name..."

$latestUbuntuImage=Get-AzureVMImage | Select-Object * | Where-Object {$_.ImageName -like "*Ubuntu*LTS*"} | Where-Object {$_.ImageName -notlike "*Daily*"} | ort-Object {$_.PublishedDate} -Descending | Select-Object -First 1

$ubuntuImageName=$latestUbuntuImage.ImageName

Display-Message "Going to use the following Ubunut Stock Image: $ubuntuImageName"

return $ubuntuImageName



}
 
##################end of collect latest Ubuntu image###
 
 

 
##################handle vm creation workflow#########
 
 
function Handle-VMCreateWorkFlow ($sshport, $vmname, $ubuntuImageName, $adminpassword, $adminname, $subnetname, $vmIPAddress, $cloudsvcName, $vnetname, $location) {

try



{
 
$isError=$false

$vmObject=Get-AzureVM -ServiceName $cloudsvcName -Name $vmname

if (($vmObject) -ne $null) {

Collect-UserResponse "$vmname alread exists!!!"

$isError = $true



}


 
if (!$isError) {

$vmObject=Create-VM $sshport $vmname $ubuntuImageName $adminpassword $adminname $subnetname $vmIPAddress $cloudsvcName $vnetname $location




 
Display-Message "$vmname created: $vmObject"

Display-Message "Connect to Host:$cloudsvcName$cloudappFQDN on Port $sshport using $adminname/$adminpassword in Putty"

Display-UbuntuMessage

Read-Host 'Press <Enter> to continue....'



}
 
return $vmObject



}
 
catch



{
 
Display-ErrorMessage $Error

Collect-UserResponse "Error in creating $vmname...."



}

}
 
##################end of handle vm creation workflow###
 
 

 
##################handle Availability Set workflow##########
 
 
function Handle-AvailabilitySetCreateWorkFlow ($vmName) {

$vmObject=Get-AzureVM -ServiceName $cloudsvcName -Name $vmName

$vmAvailabilitySetName=$vmObject.AvailabilitySetName

if ($vmAvailabilitySetName -eq $null) {

Display-Message "Going to create availability set $availabilitySetName and attach VM $vmObject"

Set-AzureAvailabilitySet -AvailabilitySetName $availabilitySetName -VM $vmObject | Update-AzureVM

Display-Message "Availability set $availabilitySetName for VM $vmObject is all set."

} else {

Collect-UserResponse "$vmName is already all set with Avaialbility Set!!!"



}



}
 
##################end of handle Availability Set Workflow###
 
 

 
##########set vm Http end point#############
 
 
function Handle-HttpVMEndPoint ($vmName) {

$vmObject=get-azurevm -ServiceName $cloudsvcName -Name $vmname

$vmEP=Get-AzureEndpoint -VM $vmObject -Name HttpIn

if ($vmEP -eq $null) {

Display-Message "Going to set HttpIn port 80 on $vmName"

#Add-AzureEndpoint -LocalPort 80 -Name HttpIn -Protocol tcp -VM $vmObject -PublicPort 80| Update-AzureVM

Add-AzureEndpoint -DefaultProbe -LBSetName HttpLBSet -LocalPort 80 -Name HttpIn -Protocol tcp -VM $vmObject -PublicPort 80 | Update-AzureVM

Display-Message "HttpIn port 80 set on $vmName"

} else {

Collect-UserResponse "$vmName with HttpIn(Port 80) already exposed!!!"



}

}
 
##########end set vm Http end point#########
 
 

 
####################Prompt for a folder to be selected#########
 
 
function Pick-Working-Folder($message='Select a folder (work folder)', $path = "c:\") {

$object = New-Object -comObject Shell.Application




 
$folder = $object.BrowseForFolder(0, $message, 0, $path)

#if ($folder -ne $null) {

# $folder.self.Path

#}

return $folder.self.Path



}
 
####################end Prompt for a folder to be selected#########
 
 

 
#####################Handle V-Net Creation#########################
 
 
function Handle-VNet-Create ()



{
 
#Display-Message "(Sample)Full contnet of a vnet config file only with one VNet: $vnetSampleString"

Display-Message "NEw Vnet congiguration snippet: $vnetString"




 
#prompt for Working directory

$workingDirExist=Test-Path $workingDir

if (!$workingDirExist) {

$workingDir=Pick-Working-Folder



}
 
Display-Message "Working directory: $workingDir"

$timestamp=Get-Date -Format 'yyyy-MM-dd-HH-mm-s'

#$timestamp='xyz'

$exportFileName="$workingDir\$bkpFilePrefix$timestamp.xml"

$wipFileName="$workingDir\$wipFilePrefix$timestamp.xml"

#download current vnet config file and save it with a date and timestamp

Display-Message "Going to download the current vnet configuration..."

Get-AzureVNetConfig -ExportToFile $exportFileName

Display-Message "Existing vnet configuration saved on $exportFileName."

copy $exportFileName $wipFileName




 
#check to see if the config already exists

$createVnet = $false

$vnetConfigFileText=$null




 
$wipFileNameExist=Test-Path $wipFileName

$wipFileContent=Get-Content $wipFileName

$oneVNetExists=Get-Content $wipFileName | Select-String "<VirtualNetworkSites>"

$vnetAlreadyExists=Get-Content $wipFileName | Select-String $vnetname

$whatblock=$null

if (!$wipFileNameExist -or $wipFileContent.Length -eq 0){

$whatblock="file doesn't exist"

#no file exists

$vnetConfigFileText='<?xml version="1.0" encoding="utf-8"?>




<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="ttp://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">

<VirtualNetworkConfiguration>

<Dns />

<VirtualNetworkSites>'
 
 
$vnetConfigFileText="$vnetConfigFileText

$vnetString"

$vnetConfigFileText="$vnetConfigFileText




</VirtualNetworkSites>

</VirtualNetworkConfiguration>

</NetworkConfiguration>"
 
 
} elseif ($oneVNetExists -eq $null) {

$whatblock="No wrapper exist"

#if only the wrapper exists; a variant of if file nothing exists

$vnetStringToAdd="<VirtualNetworkSites>

$vnetString




</VirtualNetworkSites>

</VirtualNetworkConfiguration>

"
 
 
$vnetConfigFileText = [IO.File]::ReadAllText($wipFileName)

$vnetConfigFileText=$vnetConfigFileText -replace " </VirtualNetworkConfiguration>", "$vnetStringToAdd"

} elseif($vnetAlreadyExists -eq $null) {

$whatblock="add only $vnetname"

#edit the file and add the vnet config string

$vnetStringToAdd="$vnetString




</VirtualNetworkSites>"
 
 
$vnetConfigFileText = [IO.File]::ReadAllText($wipFileName)

$vnetConfigFileText=$vnetConfigFileText -replace "</VirtualNetworkSites>", "$vnetStringToAdd"





}


 
if ($whatblock -ne $null -or $whatblock.Length -ne 0) {

Display-Message "Final content of vnet confir file: $vnetConfigFileText"

Set-Content $wipFileName $vnetConfigFileText




 
#set vnet and subnect

Display-Message "Going to set the network config for $vnetname $subnetname..."

Set-AzureVNetConfig -ConfigurationPath $wipFileName

Display-Message "$vnetname with $subnetname is all set now."

} else {

Collect-UserResponse "VNet $vnetname already exists!!!"



}
 
Display-Message "End of Vnet creation function."



}
 
#####################End Handle V-Net Creation#########################
 
 

 
#####################Handle V-Net Removal#########################
 
 
function Handle-VNet-Remove ()



{
 
#download current vnet file

$timestamp=Get-Date -Format 'yyyy-MM-dd-HH-mm-s'

#$timestamp='xyz'

$exportFileName="$workingDir\$bkpFilePrefix$timestamp.xml"

$wipFileName="$workingDir\$wipFilePrefix$timestamp.xml"

#download current vnet config file and save it with a date and timestamp

Display-Message "Going to download the current vnet configuration..."

Get-AzureVNetConfig -ExportToFile $exportFileName

Display-Message "Existing vnet configuration saved on $exportFileName."

copy $exportFileName $wipFileName

$wipFileContent=Get-Content $wipFileName

#edit and remove the config string

$vnetConfigFileText = [IO.File]::ReadAllText($wipFileName)

Display-Message "vnetString: $vnetString"

Pause




 
[xml]$vnetConfigNodes = Get-Content $exportFileName

$vns=$vnetConfigNodes.NetworkConfiguration.VirtualNetworkConfiguration.VirtualNetworkSites.VirtualNetworkSite

foreach ($var in $vns) { if ($var.name -eq "$vnetname") {$vnetConfigNodes.NetworkConfiguration.VirtualNetworkConfiguration.VirtualNetworkSites.RemoveChild($var)}}

$vnetConfigNodes.Save($wipFileName)




 
#set vnet

Display-Message "Going to remove the network config for $vnetname $subnetname..."

Set-AzureVNetConfig -ConfigurationPath $wipFileName

Display-Message "$vnetname with $subnetname is removed now."




 
Display-Message "End of Vnet removal"



}
 
#####################End Handle V-Net Removal#########################
 
 

 
###############setup environment############
 
 
function Setup-Environment () {

try



{
 
#check if storage account exist

$isError = $false

if ((Test-AzureName -Storage $storageAccountName)) {

Collect-UserResponse "Storage Account already exists!!!"

$isError = $true



}


 
if (!$isError) {

#create storage account

Display-Message "Going to create storage account... $storageAccountName"

$myStorageAccount=New-AzureStorageAccount -StorageAccountName $storageAccountName -Location $location -Type $storageAccountType

Display-Message "Storage Account created: " $myStorageAccount.OperationStatus



}


 
#set default subscription and the storage account

Display-Message "Going to set the default Subscription"

Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccountName $storageAccountName

Display-Message "Default Subscription and Storage Account set"

#print the subscription

Display-Message "Going to print azure subscription."

Get-AzureSubscription

Pause




 
#Handle V-Net creation

Handle-VNet-Create






 
#check if cloud service already exists

if ((Test-AzureName -Service $cloudsvcName)) {

Collect-UserResponse "Cloud Service already exists!!!"

$isError = $true



}


 
if (!$isError) {

#create a cloud service

Display-Message "Going to create the cloud service $cloudsvcName..."

New-AzureService -Location $location -ServiceName $cloudsvcName -Description "$cloudsvcName Test"

Display-Message "Cloud service $cloudsvcName created."



}


 
#collect the latest Ubuntu image

Display-Message "Going to collect the latest Ubuntu Stock Image Name..."

$latestUbuntuImage=Get-AzureVMImage | Select-Object * | Where-Object {$_.ImageName -like "*Ubuntu*LTS*"} | Where-Object {$_.ImageName -notlike "*Daily*"} ort-Object {$_.PublishedDate} -Descending | Select-Object -First 1

$ubuntuImageName=$latestUbuntuImage.ImageName

Display-Message "Going to use the following Ubunut Stock Image: $ubuntuImageName"

#$ubuntuImageName=Collect-UbuntuImage

#Display-Message "ubuntuImageName: $ubuntuImageName"

Pause




 
#create VM1

$vm1=Handle-VMCreateWorkFlow $vm1SSHPublicPort $vm1name $ubuntuImageName $adminpassword $adminname $subnetname $vm1IPAddress $cloudsvcName $vnetname $location




 
#create VM2

$vm2=Handle-VMCreateWorkFlow $vm2SSHPublicPort $vm2name $ubuntuImageName $adminpassword $adminname $subnetname $vm2IPAddress $cloudsvcName $vnetname $location




 
#create/set availability set for vm1

Handle-AvailabilitySetCreateWorkFlow $vm1name

#create/set availability set for vm2

Handle-AvailabilitySetCreateWorkFlow $vm2name




 
#set HTTP End point for VM1

Handle-HttpVMEndPoint $vm1name

#set HTTP End point for VM2

Handle-HttpVMEndPoint $vm2name



}
 
catch



{
 
Display-ErrorMessage $Error



}
 
Display-Message "End of module Setup-Environment."



}
 
###############end up setup environment############
 
 

 
###############Test module#####################
 
 
function Test-Environment() {

try {

#Get VM1

$vm1=Get-AzureVM -ServiceName $cloudsvcName -Name $vm1name

if ($vm1.instanceStatus -ne "ReadyRole") {

$vmInstanceStatus=$vm1.instanceStatus

Display-Message "Current Status of $vm1name is $vmInstanceStatus. Thus starting the vm..."

Start-AzureVM -ServiceName $cloudsvcName -Name $vm1name

Display-Message "$vm1name started."



}
 
#Get VM2

$vm2=Get-AzureVM -ServiceName $cloudsvcName -Name $vm2name

if ($vm2.instanceStatus -ne "ReadyRole") {

$vmInstanceStatus=$vm2.instanceStatus

Display-Message "Current Status of $vm2name is $vmInstanceStatus. Thus starting the vm..."

Start-AzureVM -ServiceName $cloudsvcName -Name $vm2name

Display-Message "$vm2name started."



}


 
#open browser

Display-Message "Going to Launch IE and browse to http://$cloudsvcName$cloudappFQDN?v=123..."

$ie = new-object -comobject "InternetExplorer.Application"

$ie.visible = $true

$ie.navigate("http://$cloudsvcName$cloudappFQDN\?v=123")

Display-Message "Browser launched to http://$cloudsvcName$cloudappFQDN?v=123..."

$useresponseVMUsed=Read-Host 'Select which VM do you see: vm1(1) vm2(2) followed by <Enter> [default vm1(1)]'

if ($useresponseVMUsed -eq $null -or $useresponseVMUsed.Length -eq 0) {

$useresponseVMUsed="1"



}
 
$vmtostop=$vm1name

if ($useresponseVMUsed -eq "2") {

$vmtostop=$vm2name



}
 
Display-Message "Going to stop $vmtostop..."

Stop-AzureVM -ServiceName $cloudsvcName -Name $vmtostop

Display-Message "$vmtostop stopped."




 
Display-Message "Refresh the page again in the Browser"



}
 
catch



{
 
Display-ErrorMessage $Error



}
 
Display-Message "End of module Test-Environment."



}
 
###############end of Test module#####################
 
 

 
################stop vm module###########################
 
 
function Stop-Environment() {

Display-Message "Going to stop the VMs..."

Stop-AzureVM -ServiceName $cloudsvcName -Name * -Force

Display-Message "All VMs for the $cloudsvcName stopped."

Display-Message "End of module Stop-Environment."



}
 
################end stop vm module#######################
 
 

 
################tear down the setup##########################
 
 
function Tear-Environment() {

#remove VMs

Display-Message "Going to remove $vm1name..."

Remove-AzureVM -ServiceName $cloudsvcName $vm1name -DeleteVHD -Verbose

Display-Message "Removed $vm1name."

Pause

Display-Message "Going to remove $vm2name..."

Remove-AzureVM -ServiceName $cloudsvcName $vm2name -DeleteVHD -Verbose

Display-Message "Removed $vm2name."

Pause

#remove storage account

Display-Message "Going to remove storage account $storageAccountName..."

Remove-AzureStorageAccount -StorageAccountName $storageAccountName -Verbose

Display-Message "Removed $storageAccountName."

Pause

#remove cloud service

Display-Message "Going to remove Cloud Service $cloudsvcName..."

Remove-AzureService -ServiceName $cloudsvcName -Force -Verbose

Display-Message "Removed $storageAccountName."

Pause




 
#remove VNet

Handle-VNet-Remove

Pause

Display-Message "End of module TearDown-Environment."



}
 
################end tear down the setup######################
 
 

 
################print Environment####################
 
 
function Print-Environment() {

Display-Message_NoLineBreak "Storage Account Name:" $storageAccountName

Display-Message_NoLineBreak "Default Subscription:" $subscriptionName

Display-Message_NoLineBreak "Cloud Service/Public dns name: $cloudsvcName$cloudappFQDN"

Display-Message_NoLineBreak "VM1 SSH access $cloudsvcName$cloudappFQDN : $vm1SSHPublicPort"

Display-Message_NoLineBreak "VM2 SSH access $cloudsvcName$cloudappFQDN : $vm2SSHPublicPort"

Display-Message_NoLineBreak "VM1 name: $vm1name"

Display-Message_NoLineBreak "VM2 name: $vm2name"

Display-Message_NoLineBreak "Availability Set name: $availabilitySetName"

Display-Message_NoLineBreak "Vnet name: $vnetname"

Display-Message_NoLineBreak "Subnet name: $subnetname"

Display-Message "End of module Print-Environment."



}
 
################end print Environment####################
 
 

 
#######check if there is an active azure account#########
 
 
function Handle-AzureAccount () {

$currentAzureAccount=Get-AzureAccount

if ($currentAzureAccount -eq $null) {

Add-AzureAccount



}

}
 
########end check if there is an active azure account#########
 
 



 
#add your account
 
 
Display-Message "Going to add account..."




Handle-AzureAccount
 
 
Display-Message "Added account."






 
#ensure that you are in service management mode
 
 
Display-Message "Going to switch to service management mode..."

Switch-AzureMode -Name AzureServiceManagement

Display-Message "Switched to service management mode."






 
###########Find default subscription##########
 
 
$subscriptionName = ""

foreach ($sub in Get-AzureSubscription)



{
 
if ($sub.IsDefault -eq "True")



{
 
$subscriptionName = $sub.SubscriptionName



}

}
 
Display-Message "Default Subscription:" $subscriptionName




Pause
 
 
################################
 
 



 
#cleanse the storage account name
 
 
$storageAccountName = [Regex]::Replace($storageAccountName.ToLower(), '[^(a-z0-9)]', '')

Display-Message "Storage Account Name:" $storageAccountName




 
#modularize it.
 
 
$collectModule=Read-Host 'Select Setup(1), Print (2), Test(3), Stop VMs (4), Tear Down (5), or All (6) followed by <Enter> [default All(6)]'

if ($collectModule -eq $null -or $collectModule.Length -eq 0) {

$collectModule="6"



}
 
Display-Message "You have selected $collectModule"




 
$confirmStatus=Read-Host 'Are you sure you want to continue Yes(1)/No(2) followed by <Enter> [default No(2)]'

if ($confirmStatus -eq $null -or $confirmStatus.Length -eq 0) {

$confirmStatus="2"



}


 
if ($confirmStatus -eq "2") {

Display-Message "Good Bye!!!"

break;



}


 
switch($collectModule) {

1 {Setup-Environment

break



}
 
2 {Print-Environment

break



}
 
3 {Test-Environment

break



}
 
4 {Stop-Environment

break



}
 
5 {Tear-Environment

break



}
 
6 {

Setup-Environment

Print-Environment

Pause

Test-Environment

Pause

Stop-Environment

Pause

Tear-Environment

break



}
 
default {"Invalid module"}



}
 
 

No comments:

Post a Comment