Ejecutar comando PowerShell al crear la maquina virtual de Azure


En la anterior entrada vimos la posibilidad de crear una maquina de Azure mediante Powershell. En esta nueva maquina nos puede resultar interesante que se ejecute un comando PowerShell para acabar de configurar ciertos aspectos de la misma. Así dispondríamos de la maquina lista para nuestro uso; sin necesidad de realizar nosotros ninguna tarea repetitiva.

Ejecutando el comando en la creación de la maquina

  • 1.- Creamos el script a ejecutar en la maquina virtual. Por ejemplo test.ps1.
    #Script that creates a directory 
    mkdir("c:\basura2");
    
  • 2.- Ejecutamos NewMachineOnAzure con el nuevo parámetro RunScript donde se indica el script a ejecutar.
    ./NewMachineOnAzure -RunScript "test.ps1"
    
  • 3.- De esta manera al crear la maquina nos ejecutará nuestro script. Podemos visualizar, si lo vemos necesario el log de ejecución en el fichero
    C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.2\CustomScriptHandler.log de la maquina virtual.
    Log de Ejecución Script

    Log de Ejecución Script

Como funciona

Hay un comando de PowerShell Set-AzureVMCustomScriptExtension que permite indicar un script a ejecutar. El script debe estar disponible en una url.

  • 1.- Creamos un contenedor publico donde subir el script.
    $containerStorage = "scripts";	
    New-AzureStorageContainer $containerStorage -Permission Blob
    
  • 2.- Subimos el fichero de script al contenedor.
    $file = ".\" + $RunScript
    Set-AzureStorageBlobContent -Blob $RunScript -Container $containerStorage -File $file
    
  • 3.- Indicamos el script a ejecutar, indicando la url del fichero subido en el paso anterior.
    $fileUri = "https://" + $StorageAccountName + ".blob.core.windows.net/" + $containerStorage + "/" + $RunScript;
    $vmConfig = $vmConfig | Set-AzureVMCustomScriptExtension -FileUri $fileUri -Run $RunScript
    

Nuevo Script NewMachineOnAzure

Os adjunto el nuevo script actualizado 😉

################################################################################################################################################################  
# This script Create a Virtual Machine on Azure
#
# To run the script
#  
# ./NewMachineOnAzure -NameMachine "testrodrijp"
################################################################################################################################################################  
Param(  
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $NameMachine = "",
# Specifies the size of the instance. Allowed values are ExtraSmall, Small, Medium, Large, ExtraLarge, A5, A6,
# A7, A8, A9, Basic_A0, Basic_A1, Basic_A2, Basic_A3, Basic_A4, Standard_D1, Standard_D2, Standard_D3,
# Standard_D4, Standard_D11, Standard_D12, Standard_D13, Standard_D14.	
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $InstanceSize = "Small",
# ImagesFor Example to Search Windows 2008 images
# Get-AzureVMImage | Where { $_.ImageName -like "*2008*" } 
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $Image = "bd507d3a70934695bc2128e3e5a255ba__RightImage-Windows-2008R2-SP1-x64-iis75-v5.8.8",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $User = "administrador",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $Password = "Poner1Passw",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $TimeZone = "GMT Standard Time",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $ServiceName = "",
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $Location = "West Europe",
#The storage account name must be unique to Azure and must be between 3 and 24 characters in length and use lowercase letters and numbers only.	
	[Parameter(ValueFromPipeline=$true)]  	
	[string] $StorageAccountName = "",
        [Parameter(ValueFromPipeline=$true)]
	[string] $RunScript = ""
)

#Setting Default Parameters
if ($NameMachine -eq "") {
	$NameMachine = "a" + [guid]::NewGuid().ToString("N").substring(0,14);
}
if ($ServiceName -eq "") {
	$ServiceName = $NameMachine;
}
if ($StorageAccountName -eq "") {
	$StorageAccountName = $NameMachine;	
}
$StorageLabel = $NameMachine + "Storage";

#Log-in on Subscription
Add-AzureAccount

#Create Storage Account needed by Azure Virtual Machine & Setting it on AzureSubscription
New-AzureStorageAccount -StorageAccountName $StorageAccountName -Label $StorageLabel -Location $Location
$SubscriptionName =  (Get-AzureSubscription -Current).SubscriptionName
Set-AzureSubscription -SubscriptionName $SubscriptionName -CurrentStorageAccountName $StorageAccountName

#Create Virtual Machine
$vmConfig = New-AzureVMConfig -Name $NameMachine -InstanceSize $InstanceSize -Image $Image
$vmConfig = $vmConfig | Add-AzureProvisioningConfig -Windows -AdminUserName $User -Password $Password -TimeZone $TimeZone
if ($RunScript -ne "") {
	$containerStorage = "scripts";	
    New-AzureStorageContainer $containerStorage -Permission Blob
	$file = ".\" + $RunScript
    Set-AzureStorageBlobContent -Blob $RunScript -Container $containerStorage -File $file
	$fileUri = "https://" + $StorageAccountName + ".blob.core.windows.net/" + $containerStorage + "/" + $RunScript;
	$vmConfig = $vmConfig | Set-AzureVMCustomScriptExtension -FileUri $fileUri -Run $RunScript
}
$vmConfig | New-AzureVM -ServiceName $ServiceName -Location $Location

Write-Host "Virtual Machine: " $NameMachine " creatted!!!"
Anuncios
Esta entrada fue publicada en Azure, PowerShell y etiquetada . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s