in AzureEnhancedMonitor/nodejs/setaem.js [85:302]
var setAzureVMEnhancedMonitorForLinux = function(rgpName, vmName){
var azureProfile;
var currSubscription;
var computeClient;
var storageClient;
var selectedVM;
var osdiskAccount;
var accounts = [];
var aemConfig = new AemConfig();
return getAzureProfile().then(function(profile){
azureProfile = profile;
return getDefaultSubscription(profile);
}).then(function(subscription){
console.log("[INFO]Using subscription: " + subscription.name);
debug && console.log(JSON.stringify(subscription, null, 4));
currSubscription = subscription;
var cred = getCloudCredential(subscription);
var baseUri = subscription.managementEndpointUrl;
computeClient = computeMgmt.createComputeManagementClient(cred, baseUri);
storageClient = storageMgmt.createStorageManagementClient(cred, baseUri);
}).then(function(){
return getVirtualMachine(computeClient, rgpName, vmName);
}).then(function(vm){
//Set vm role basic config
console.log("[INFO]Found VM: " + vm.oSProfile.computerName);
debug && console.log(JSON.stringify(vm, null, 4));
/*
vm:
{ extensions: [ [Object] ],
tags: {},
hardwareProfile: { virtualMachineSize: 'Standard_A1' },
storageProfile: { dataDisks: [], imageReference: [Object], oSDisk: [Object] },
oSProfile:
{ secrets: [],
computerName: 'zhongyiubuntu4',
adminUsername: 'zhongyi',
linuxConfiguration: [Object] },
networkProfile: { networkInterfaces: [Object] },
diagnosticsProfile: { bootDiagnostics: [Object] },
provisioningState: 'Succeeded',
id: '/subscriptions/4be8920b-2978-43d7-ab14-04d8549c1d05/resourceGroups/zhongyiubuntu4/providers/Microsoft.Compute/virtualMachines/zhongyiubuntu4',
name: 'zhongyiubuntu4',
type: 'Microsoft.Compute/virtualMachines',
location: 'eastasia' }}
*/
selectedVM = vm;
var cpuOverCommitted = 0;
if(selectedVM.hardwareProfile.virtualMachineSize === 'ExtralSmall'){
cpuOverCommitted = 1
}
aemConfig.setPublic('vmsize', selectedVM.hardwareProfile.virtualMachineSize);
aemConfig.setPublic('vm.role', 'IaaS');
aemConfig.setPublic('vm.memory.isovercommitted', 0);
aemConfig.setPublic('vm.cpu.isovercommitted', cpuOverCommitted);
aemConfig.setPublic('script.version', CurrentScriptVersion);
aemConfig.setPublic('verbose', '0');
aemConfig.setPublic('href', 'http://aka.ms/sapaem');
}).then(function(){
//Set vm disk config
/*
osDisk:
{ operatingSystemType: 'Linux',
name: 'zhongyiubuntu4',
virtualHardDisk: { uri: 'https://zhongyiubuntu44575.blob.core.windows.net/vhds/zhongyiubuntu4.vhd' },
caching: 'ReadWrite',
createOption: 'FromImage' }
*/
var osdisk = selectedVM.storageProfile.oSDisk;
osdiskAccount = getStorageAccountFromUri(osdisk.virtualHardDisk.uri);
console.log("[INFO]Adding configure for OS disk.");
aemConfig.setPublic('osdisk.account', osdiskAccount);
aemConfig.setPublic('osdisk.name', osdisk.name);
//aemConfig.setPublic('osdisk.caching', osdisk.caching);
aemConfig.setPublic('osdisk.connminute', osdiskAccount + ".minute");
aemConfig.setPublic('osdisk.connhour', osdiskAccount + ".hour");
accounts.push({
name: osdiskAccount,
});
/*
dataDisk:
{ lun: 0,
name: 'zhongyiubuntu4-20151112-140433',
virtualHardDisk: { uri: 'https://zhongyiubuntu44575.blob.core.windows.net/vhds/zhongyiubuntu4-20151112-140433.vhd' },
caching: 'None',
createOption: 'Empty',
diskSizeGB: 1023 }
*/
for(var i = 0; i < selectedVM.storageProfile.dataDisks.length; i++){
var dataDisk = selectedVM.storageProfile.dataDisks[i];
console.log("[INFO]Adding configure for data disk: " +
dataDisk.name);
var datadiskAccount = getStorageAccountFromUri(dataDisk.virtualHardDisk.uri);
accounts.push({
name:datadiskAccount
});
//The default lun value is 0
var lun = dataDisk.lun;
aemConfig.setPublic('disk.lun.' + i, lun);
aemConfig.setPublic('disk.name.' + i, dataDisk.name);
aemConfig.setPublic('disk.caching.' + i, dataDisk.name);
aemConfig.setPublic('disk.account.' + i, datadiskAccount);
aemConfig.setPublic('disk.connminute.' + i,
datadiskAccount + ".minute");
aemConfig.setPublic('disk.connhour.' + i, datadiskAccount + ".hour");
}
}).then(function(){
//Set storage account config
var promises = [];
var i = -2;
Object(accounts).forEach(function(account){
var promise = getResourceGroupName(storageClient, account.name)
.then(function(rgpName){
account.rgp = rgpName;
console.log("!!!!rgp",rgpName);
return getStorageAccountKey(storageClient, rgpName, account.name);
}).then(function(accountKey){
console.log("!!!!key",accountKey);
account.key = accountKey;
aemConfig.setPrivate(account.name + ".minute.key", accountKey);
aemConfig.setPrivate(account.name + ".hour.key", accountKey);
return getStorageAccountProperties(storageClient, account.rgp, account.name);
}).then(function(properties){
//ispremium
i += 1;
if (properties.accountType.startsWith("Standard")) {
if (i >= 0)
aemConfig.setPublic('disk.type.' + i, "Standard");
else
aemConfig.setPublic('osdisk.type' + i, "Standard");
} else {
if (i >= 0)
aemConfig.setPublic('disk.type.' + i, "Premium");
else
aemConfig.setPublic('osdisk.type' + i, "Premium");
aemConfig.setPublic(account.name + ".hour.ispremium", 1);
aemConfig.setPublic(account.name + ".minute.ispremium", 1);
}
//endpoints
var endpoints = properties.primaryEndpoints;
var tableEndpoint;
var blobEndpoint;
endpoints.forEach(function(endpoint){
if(endpoint.match(/.*table.*/)){
tableEndpoint = endpoint;
}else if(endpoint.match(/.*blob.*/)){
blobEndpoint = endpoint;
}
});
account.tableEndpoint = tableEndpoint;
account.blobEndpoint = blobEndpoint;
var minuteUri = tableEndpoint + BlobMetricsMinuteTable;
var hourUri = tableEndpoint + BlobMetricsHourTable;
account.minuteUri = minuteUri
aemConfig.setPublic(account.name + ".hour.uri", hourUri);
aemConfig.setsetPrivate(account.name + ".hour.key", account.key);
aemConfig.setPublic(account.name + ".minute.uri", minuteUri);
aemConfig.setsetPrivate(account.name + ".minute.key", account.key);
aemConfig.setPublic(account.name + ".hour.name", account.name);
aemConfig.setPublic(account.name + ".minute.name", account.name);
}).then(function(){
return checkStorageAccountAnalytics(account.name,
account.key,
account.blobEndpoint);
});
promises.push(promise);
});
return Promise.all(promises);
}).then(function(res){
//Set Linux diagnostic config
aemConfig.setPublic("wad.name", accounts[0].name);
aemConfig.setPublic("wad.isenabled", 1);
var ladUri = accounts[0].tableEndpoint + ladMetricesTable;
console.log("[INFO]Your endpoint is: "+accounts[0].tableEndpoint);
aemConfig.setPublic("wad.uri", ladUri);
aemConfig.setPrivate("wad.key", accounts[0].key);
}).then(function(){
//Update vm
var extensions = [];
var ladExtConfig = {
'name' : ladExtName,
'referenceName' : ladExtName,
'publisher' : ladExtPublisher,
'version' : ladExtVersion,
'state': 'Enable',
'resourceExtensionParameterValues' : [{
'key' : ladExtName + "PrivateConfigParameter",
'value' : JSON.stringify({
'storageAccountName' : accounts[0].name,
'storageAccountKey' : accounts[0].key,
'endpoint' : accounts[0].tableEndpoint.substring((accounts[0].tableEndpoint.search(/\./)) + 1, accounts[0].tableEndpoint.length)
}),
'type':'Private'
}]
};
var aemExtConfig = {
'name' : aemExtName,
'referenceName' : aemExtName,
'publisher' : aemExtPublisher,
'version' : aemExtVersion,
'state': 'Enable',
'resourceExtensionParameterValues' : [
aemConfig.getPublic(),
aemConfig.getPrivate()
]
};
extensions.push(ladExtConfig);
extensions.push(aemExtConfig);
selectedVM.provisionGuestAgent = true;
selectedVM.resourceExtensionReferences = extensions;
console.log("[INFO]Updating configuration for VM: " + selectedVM.roleName);
console.log("[INFO]This could take a few minutes. Please wait.")
debug && console.log(JSON.stringify(selectedVM, null, 4))
return updateVirtualMachine(computeClient, svcName, vmName, selectedVM);
});
}