Не удается прочитать свойство 'virtualMachines' из неопределенного - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать приложение для узла, которое запустит (среди прочего) запуск виртуальной машины Azure.

В настоящее время я могу войти в Azure без проблем, но когда я иду, чтобы запустить виртуальную машину, как показано на странице примера ниже на github, я получаю ошибку TypeError: Cannot read property 'virtualMachines' of undefined, и я не уверен, почему, учитывая, что я практически взял код из примера Я нашел.

https://github.com/Azure/azure-sdk-for-node/blob/master/examples/ARM/compute/vm-sample.js

'use strict';

// Packages
const cron = require("cron"),
    util = require('util'),
    path = require('path'),
    async = require('async'),
    Azure = require("azure"),
    msRestAzure = require('ms-rest-azure'),
    ComputeManagementClient = require('azure-arm-compute'),
    StorageManagementClient = require('azure-arm-storage'),
    NetworkManagementClient = require('azure-arm-network'),
    ResourceManagementClient = require('azure-arm-resource').ResourceManagementClient,
    SubscriptionManagementClient = require('azure-arm-resource').SubscriptionClient;

// Config
const config = require("./config.js");
var subscriptionId = config.azure_creds.AZURE_SUBSCRIPTION_ID;    
var AZURE_USER = config.azure_creds.AZURE_USER;    
var AZURE_PASS = config.azure_creds.AZURE_PASS;    


console.log('Starting application...');

msRestAzure.loginWithUsernamePassword(AZURE_USER, AZURE_PASS, (err, credentials) => {
  if (err) throw err;

    // let storageClient = Azure.createStorageManagementClient(credentials, subscriptionId);
    var computeClient;    
    var resourceGroupName = 'testing-resourceGroup';
    var vmName = 'vm-test-1';

console.log('Logged into Azure...');

console.log('Starting VM...');

computeClient.virtualMachines.start(resourceGroupName, vmName, function (err, result) {
    if (err) {
      console.log(util.format('\n???????Error while starting the VM:\n%s', 
        util.inspect(err, { depth: null })));
        console.log(err);
        throw(err);
    } else {
      console.log(util.format('\n######Start the VM is successful.\n%s', 
        util.inspect(result, { depth: null })));
      console.log(result);
    }
});

computeClient = new ComputeManagementClient(credentials, subscriptionId);
});

Я ожидал, что программа запустится и запустит указанную мной виртуальную машину Azure, но она даже не запустит программу должным образом, чтобы запустить виртуальную машину. Ниже мой вывод, когда я запускаю свою программу

Starting application...
Logged into Azure...
Starting VM...
/home/ec2-user/environment/start-stop/app.js:43
computeClient.virtualMachines.start(resourceGroupName, vmName, function (err, result) {
             ^

TypeError: Cannot read property 'virtualMachines' of undefined
    at msRestAzure.loginWithUsernamePassword (/home/ec2-user/environment/start-stop/app.js:43:14)
    at /home/ec2-user/environment/start-stop/node_modules/ms-rest-azure/lib/login.js:361:14
    at /home/ec2-user/environment/start-stop/node_modules/async/dist/async.js:473:16
    at next (/home/ec2-user/environment/start-stop/node_modules/async/dist/async.js:5315:29)
    at /home/ec2-user/environment/start-stop/node_modules/async/dist/async.js:958:16
    at /home/ec2-user/environment/start-stop/node_modules/ms-rest-azure/lib/login.js:121:5
    at /home/ec2-user/environment/start-stop/node_modules/async/dist/async.js:473:16
    at iterateeCallback (/home/ec2-user/environment/start-stop/node_modules/async/dist/async.js:976:17)
    at /home/ec2-user/environment/start-stop/node_modules/async/dist/async.js:958:16
    at /home/ec2-user/environment/start-stop/node_modules/ms-rest-azure/lib/login.js:118:14

1 Ответ

0 голосов
/ 11 января 2019

Вот почему вы видите эту ошибку. Вот очень упрощенная версия того, что вы пытаетесь сделать, и порядок, в котором вы пытаетесь это сделать:

// initialize a variable called computeClient which is undefined at this point
var computeClient; 

// Try to access the virtualMachines attribute of undefined. 
computeClient.virtualMachines; 

// Assign computeClient to a a new instance of an object that has a virtualMachines attribute
computeClient = new ComputeManagementClient(credentials, subscriptionId); 

Когда весь промежуточный код удален, становится ясно, что вы пытаетесь получить доступ к атрибуту объекта, прежде чем назначить свою переменную объекту, имеющему этот атрибут. Я не использовал эту библиотеку раньше, но я думаю, что вы сможете исправить эту ошибку, по крайней мере, если вы делаете:

computeClient = new ComputeManagementClient(credentials, subscriptionId); 

до вы делаете:

computeClient.virtualMachines.start( ... )
...