2017-02-15 2 views
0

Es gibt ein Powershell-Kommando für benutzerdefinierte Skript-Erweiterungen scheint eine Reihe von netten Parameter-Optionen zu unterstützen, aber die .net Client-API für VM-Erweiterungen hat nicht so eine schöne stark typisierte Menge von Parametern zu konfigurieren, und erfordert diese publicSettings/privateSettings Dinge ... was ist der richtige Weg, um es mit. NET APIs zu tun?Wie erstelle ich eine Azure CustomScriptExtension mit dem .net SDK?

Antwort

0

das neue fließend SDK Mit dieser mein bester Versuch ist so weit ...:

var blobClient = new CloudBlobClient(
    new Uri(tenantStorageAccount.EndPoints.Primary.Blob), 
    new StorageCredentials(tenantStorageAccount.Name, tenantStorageKeys.First().Value)); 

var scriptText = @"Write-Host ""Success!"" 

„;

var bootContainer = blobClient.GetContainerReference("boot"); 
await bootContainer.CreateIfNotExistsAsync(); 
var bootstrapBlob = bootContainer.GetBlockBlobReference("bootstrap.ps1"); 
await bootstrapBlob.UploadTextAsync(scriptText); 

var sasToken = bootstrapBlob.GetSharedAccessSignature(
    new SharedAccessBlobPolicy 
    { 
     SharedAccessExpiryTime = DateTime.UtcNow.AddYears(1), 
     Permissions = SharedAccessBlobPermissions.Read 
    }); 

string bootstrapBlobSasUri = bootstrapBlob.Uri + sasToken; 

var extensionTasks = new List<Task<IVirtualMachine>>(); 
await vms.ForEachAsync(async vm => 
{ 
    await vm.Update().DefineNewExtension("bootstrapper") 
     .WithPublisher("Microsoft.Compute") 
     .WithType("CustomScriptExtension") 
     .WithVersion("1.8") 
     .WithPublicSetting("fileUris", new string[] { bootstrapBlobSasUri }) 
     .WithProtectedSetting("storageAccountName", tenantStorageAccount.Name) 
     .WithProtectedSetting("storageAccountKey", tenantStorageKeys[0]) 
     .WithProtectedSetting("commandToExecute", "powershell -ExecutionPolicy Unrestricted -File bootstrap.ps1") 
     .Attach().ApplyAsync(); 
}); 
Verwandte Themen