From a7a90d4b9cfa0e7ab3f3d38e64f730f2999c8886 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:05:32 +0000 Subject: [PATCH 1/9] Removing unused functions. --- test/common/network/network-test.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/test/common/network/network-test.js b/test/common/network/network-test.js index 01b910aeb..bc2d41fc4 100644 --- a/test/common/network/network-test.js +++ b/test/common/network/network-test.js @@ -484,21 +484,3 @@ setupGetNetworkMock = function (client, provider, servers) { .replyWithFile(200, __dirname + '/../../fixtures/rackspace/network.json'); } }; - -serverStatusReply = function (name, status) { - - var template = helpers.loadFixture('azure/server-status-template.xml'), - params = {NAME: name, STATUS: status}; - - var result = _.template(template, params); - return result; -}; - -filterPath = function (path) { - var name = PATH.basename(path); - if (path.search('embed-detail=true') !== -1) { - return '/getStatus?name=' + name; - } - - return path; -}; From 2e5ae3c0018c2b6ffff10617cf0d43a3cb874c48 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:06:00 +0000 Subject: [PATCH 2/9] Removing old variable definition. --- lib/pkgcloud/openstack/storage/client/files.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pkgcloud/openstack/storage/client/files.js b/lib/pkgcloud/openstack/storage/client/files.js index a422b0ac7..3bd212a47 100644 --- a/lib/pkgcloud/openstack/storage/client/files.js +++ b/lib/pkgcloud/openstack/storage/client/files.js @@ -175,7 +175,6 @@ exports.upload = function (options) { */ exports.download = function (options, callback) { var self = this, - success = callback ? onDownload : null, container = options.container, inputStream, apiStream; From 6ddfca8a810fb6680c848a0a55ba8984f8ff706c Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:13:31 +0000 Subject: [PATCH 3/9] Adding undefined variables for required modules. --- examples/compute/joyent.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/compute/joyent.js b/examples/compute/joyent.js index 6164545a9..2b06895c5 100644 --- a/examples/compute/joyent.js +++ b/examples/compute/joyent.js @@ -1,4 +1,6 @@ -var pkgcloud = require('../../lib/pkgcloud'); +var fs = require('fs'), + path = require('path'), + pkgcloud = require('../../lib/pkgcloud'); // // Joyent requires a username / password or key / keyId combo. From 7737576e6b267b39057f004c43d17fec8b5ca939 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:14:28 +0000 Subject: [PATCH 4/9] Declaring variables, not just defining them. --- lib/pkgcloud/hp/identity/hpIdentity.js | 2 +- lib/pkgcloud/rackspace/identity/rackspaceIdentity.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pkgcloud/hp/identity/hpIdentity.js b/lib/pkgcloud/hp/identity/hpIdentity.js index 8d47cecb2..89d340011 100644 --- a/lib/pkgcloud/hp/identity/hpIdentity.js +++ b/lib/pkgcloud/hp/identity/hpIdentity.js @@ -11,7 +11,7 @@ var identity = require('../../openstack/context'), Identity = identity.Identity, util = require('util'); -exports.Identity = HPIdentity = function (options) { +var HPIdentity = exports.Identity = function (options) { this.options = options; this.name = 'HPIdentity'; diff --git a/lib/pkgcloud/rackspace/identity/rackspaceIdentity.js b/lib/pkgcloud/rackspace/identity/rackspaceIdentity.js index 49373f6f2..7909b8fe1 100644 --- a/lib/pkgcloud/rackspace/identity/rackspaceIdentity.js +++ b/lib/pkgcloud/rackspace/identity/rackspaceIdentity.js @@ -12,7 +12,7 @@ var identity = require('../../openstack/context'), Identity = identity.Identity, util = require('util'); -exports.Identity = RackspaceIdentity = function (options) { +var RackspaceIdentity = exports.Identity = function (options) { this.options = options; this.name = 'RackspaceIdentity'; From f8e6bbee83108541c5acb41b74e2e829c3b0e1f1 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:15:02 +0000 Subject: [PATCH 5/9] Declaring variables before defining and using them. --- lib/pkgcloud/openstack/network/client/networks.js | 3 +++ lib/pkgcloud/openstack/network/client/ports.js | 3 +++ lib/pkgcloud/openstack/network/client/subnets.js | 3 +++ 3 files changed, 9 insertions(+) diff --git a/lib/pkgcloud/openstack/network/client/networks.js b/lib/pkgcloud/openstack/network/client/networks.js index df4a51558..076c2d897 100644 --- a/lib/pkgcloud/openstack/network/client/networks.js +++ b/lib/pkgcloud/openstack/network/client/networks.js @@ -10,6 +10,9 @@ var urlJoin = require('url-join'); var networksResourcePath = '/networks'; +// Declaring variables for helper functions defined later +var _convertNetworkToWireFormat; + /** * client.getNetworks * diff --git a/lib/pkgcloud/openstack/network/client/ports.js b/lib/pkgcloud/openstack/network/client/ports.js index 2210f47e2..8193a726b 100644 --- a/lib/pkgcloud/openstack/network/client/ports.js +++ b/lib/pkgcloud/openstack/network/client/ports.js @@ -10,6 +10,9 @@ var urlJoin = require('url-join'); var portsResourcePath = '/ports'; +// Declaring variables for helper functions defined later +var _convertPortToWireFormat; + /** * client.getPorts * diff --git a/lib/pkgcloud/openstack/network/client/subnets.js b/lib/pkgcloud/openstack/network/client/subnets.js index c9b660d92..babae75f0 100644 --- a/lib/pkgcloud/openstack/network/client/subnets.js +++ b/lib/pkgcloud/openstack/network/client/subnets.js @@ -10,6 +10,9 @@ var urlJoin = require('url-join'); var subnetsResourcePath = '/subnets'; +// Declaring variables for helper functions defined later +var _convertSubnetToWireFormat; + /** * client.getSubnets * From b084fdeb26eeeedad6782243525c636457b05f09 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:16:07 +0000 Subject: [PATCH 6/9] Declaring and defining variable so it can be referenced from skipped test. --- test/common/compute/server-test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/common/compute/server-test.js b/test/common/compute/server-test.js index dfe151328..f84f5eb07 100644 --- a/test/common/compute/server-test.js +++ b/test/common/compute/server-test.js @@ -21,7 +21,7 @@ var azureOptions = require('../../fixtures/azure/azure-options.json'); // Declaring variables for helper functions defined later var setupImagesMock, setupFlavorMock, setupServerMock, setupGetServersMock, - setupGetServerMock, serverStatusReply; + setupGetServerMock, setupRebootMock, serverStatusReply; azureApi._updateMinimumPollInterval(mock ? 10 : azureApi.MINIMUM_POLL_INTERVAL); @@ -579,6 +579,10 @@ setupGetServerMock = function (client, provider, servers) { } }; +setupRebootMock = function() { + // TODO +}; + // //function batchThree(providerClient, providerName) { // var name = providerName || 'rackspace', From aab33f903f124f0f3ee93b277bde9f05aa1a7c3d Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:16:22 +0000 Subject: [PATCH 7/9] Moving helper functions towards bottom; declaring their variables at top. --- lib/pkgcloud/azure/utils/azureApi.js | 228 ++++++++++++++------------- 1 file changed, 115 insertions(+), 113 deletions(-) diff --git a/lib/pkgcloud/azure/utils/azureApi.js b/lib/pkgcloud/azure/utils/azureApi.js index 38cd405ab..7a90eaa85 100644 --- a/lib/pkgcloud/azure/utils/azureApi.js +++ b/lib/pkgcloud/azure/utils/azureApi.js @@ -32,6 +32,8 @@ var MINIMUM_POLL_INTERVAL = exports.MINIMUM_POLL_INTERVAL = 3000; // Declaring variables for helper functions defined later var createVM, createLinuxVM, createWindowsVM, validateCreateOptions, getServer, + getServers, rebootServer, deleteHostedService, destroyServer, createImage, + captureServer, destroyImage, getMediaLinkUrl, createEndpoints, makeTemplateRequest, createHostedService, addCertificate, getHostedServices, deleteServer, getOSImage, deleteOSDisk, deleteOSBlob, getServersFromServices, getServersFromService, isVM, getHostedServiceProperties, pollRequestStatus, @@ -138,119 +140,6 @@ exports.createServer = function (client, options, callback) { ); }; -createVM = function (client, options, vmOptions, callback) { - // check OS type of image to determine if we are creating a linux or windows VM - switch (vmOptions.image.OS.toLowerCase()) { - case 'linux': - createLinuxVM(client, options, vmOptions, callback); - break; - case 'windows': - createWindowsVM(client, options, vmOptions, callback); - break; - default: - callback(errs.create({message: 'Unknown Image OS: ' + vmOptions.image.OS})); - break; - } -}; - -getMediaLinkUrl = function (storageAccount, fileName) { - return 'http://' + storageAccount + '.' + STORAGE_ENDPOINT + '/vhd/' + fileName; -}; - -createEndpoints = function (ports) { - var endPoints = '', - template = templates.loadSync('endpoint.xml'); - - (ports || []).forEach(function (port) { - endPoints += templates.compileSync(template, port); - }); - return endPoints; -}; - -createLinuxVM = function (client, options, vmOptions, callback) { - var path = client.subscriptionId + '/services/hostedservices/' + options.name + '/deployments'; - var mediaLink = getMediaLinkUrl(client.config.storageAccount, options.name + '.vhd'); - var label = new Buffer(options.name).toString('base64'); - - var configParams = { - NAME: options.name, - LABEL_BASE64: label, - USERNAME: options.username, - PASSWORD: options.password, - SSH_CERTIFICATE_FINGERPRINT: vmOptions.sshCertInfo.fingerprint, - PORT: options.ssh.port || '22', - LOCAL_PORT: options.ssh.localPort || '22', - ROLESIZE: options.flavor, - ENDPOINTS: createEndpoints(options.ports), - OS_SOURCE_IMAGE_NAME: vmOptions.image.Name, - OS_IMAGE_MEDIALINK: mediaLink - }; - - makeTemplateRequest(client, path, 'linuxDeployment.xml', configParams, callback); -}; - -createWindowsVM = function (client, options, vmOptions, callback) { - var path = client.subscriptionId + '/services/hostedservices/' + options.name + '/deployments'; - var mediaLink = getMediaLinkUrl(client.config.storageAccount, options.name + '.vhd'); - var label = new Buffer(options.name).toString('base64'); - - var configParams = { - NAME: options.name, - COMPUTER_NAME: options.computerName || options.name.slice(0, 15), - LABEL_BASE64: label, - PASSWORD: options.password, - ROLESIZE: options.flavor, - ENDPOINTS: createEndpoints(options.ports), - OS_SOURCE_IMAGE_NAME: vmOptions.image.Name, - OS_IMAGE_MEDIALINK: mediaLink - }; - - makeTemplateRequest(client, path, 'windowsDeployment.xml', configParams, callback); -}; - -captureServer = function (client, serverName, targetImageName, callback) { - // /services/hostedservices//deployments//roleinstances//operations - var path = client.subscriptionId + '/services/hostedservices/' + - serverName + '/deployments/' + - serverName + '/roleInstances/' + - serverName + '/Operations'; - - var configParams = { - NAME: targetImageName - }; - - makeTemplateRequest(client, path, 'captureRole.xml', configParams, callback); -}; - -var deleteImage = function (client, image, callback) { - // https://management.core.windows.net//services/images/ - var path = client.subscriptionId + '/services/images/' + image.Name; - - var configParams = { - LABEL: image.LABEL - }; - - makeTemplateRequest(client, path, 'deleteImage.xml', configParams, callback); -}; - -validateCreateOptions = function (options, config, callback) { - if (typeof options === 'function') { - options = {}; - } - options = options || {}; // no args - - // check required options values - ['flavor', 'image', 'name', 'username', 'password', 'location'].forEach(function (member) { - if (!options[member]) { - errs.handle( - errs.create({ message: 'options.' + member + ' is a required argument.' }), - callback - ); - } - }); - callback(); -}; - /** * getServer */ @@ -681,6 +570,17 @@ createImage = exports.createImage = function (client, serverName, targetImageNam ); }; +var deleteImage = function (client, image, callback) { + // https://management.core.windows.net//services/images/ + var path = client.subscriptionId + '/services/images/' + image.Name; + + var configParams = { + LABEL: image.LABEL + }; + + makeTemplateRequest(client, path, 'deleteImage.xml', configParams, callback); +}; + /** * destroyImage() * 1. get the requested image @@ -701,6 +601,108 @@ destroyImage = exports.destroyImage = function (client, imageName, callback) { ); }; +createVM = function (client, options, vmOptions, callback) { + // check OS type of image to determine if we are creating a linux or windows VM + switch (vmOptions.image.OS.toLowerCase()) { + case 'linux': + createLinuxVM(client, options, vmOptions, callback); + break; + case 'windows': + createWindowsVM(client, options, vmOptions, callback); + break; + default: + callback(errs.create({message: 'Unknown Image OS: ' + vmOptions.image.OS})); + break; + } +}; + +getMediaLinkUrl = function (storageAccount, fileName) { + return 'http://' + storageAccount + '.' + STORAGE_ENDPOINT + '/vhd/' + fileName; +}; + +createEndpoints = function (ports) { + var endPoints = '', + template = templates.loadSync('endpoint.xml'); + + (ports || []).forEach(function (port) { + endPoints += templates.compileSync(template, port); + }); + return endPoints; +}; + +createLinuxVM = function (client, options, vmOptions, callback) { + var path = client.subscriptionId + '/services/hostedservices/' + options.name + '/deployments'; + var mediaLink = getMediaLinkUrl(client.config.storageAccount, options.name + '.vhd'); + var label = new Buffer(options.name).toString('base64'); + + var configParams = { + NAME: options.name, + LABEL_BASE64: label, + USERNAME: options.username, + PASSWORD: options.password, + SSH_CERTIFICATE_FINGERPRINT: vmOptions.sshCertInfo.fingerprint, + PORT: options.ssh.port || '22', + LOCAL_PORT: options.ssh.localPort || '22', + ROLESIZE: options.flavor, + ENDPOINTS: createEndpoints(options.ports), + OS_SOURCE_IMAGE_NAME: vmOptions.image.Name, + OS_IMAGE_MEDIALINK: mediaLink + }; + + makeTemplateRequest(client, path, 'linuxDeployment.xml', configParams, callback); +}; + +createWindowsVM = function (client, options, vmOptions, callback) { + var path = client.subscriptionId + '/services/hostedservices/' + options.name + '/deployments'; + var mediaLink = getMediaLinkUrl(client.config.storageAccount, options.name + '.vhd'); + var label = new Buffer(options.name).toString('base64'); + + var configParams = { + NAME: options.name, + COMPUTER_NAME: options.computerName || options.name.slice(0, 15), + LABEL_BASE64: label, + PASSWORD: options.password, + ROLESIZE: options.flavor, + ENDPOINTS: createEndpoints(options.ports), + OS_SOURCE_IMAGE_NAME: vmOptions.image.Name, + OS_IMAGE_MEDIALINK: mediaLink + }; + + makeTemplateRequest(client, path, 'windowsDeployment.xml', configParams, callback); +}; + +captureServer = function (client, serverName, targetImageName, callback) { + // /services/hostedservices//deployments//roleinstances//operations + var path = client.subscriptionId + '/services/hostedservices/' + + serverName + '/deployments/' + + serverName + '/roleInstances/' + + serverName + '/Operations'; + + var configParams = { + NAME: targetImageName + }; + + makeTemplateRequest(client, path, 'captureRole.xml', configParams, callback); +}; + +validateCreateOptions = function (options, config, callback) { + if (typeof options === 'function') { + options = {}; + } + options = options || {}; // no args + + // check required options values + ['flavor', 'image', 'name', 'username', 'password', 'location'].forEach(function (member) { + if (!options[member]) { + errs.handle( + errs.create({ message: 'options.' + member + ' is a required argument.' }), + callback + ); + } + }); + callback(); +}; + exports._updateMinimumPollInterval = function(interval) { MINIMUM_POLL_INTERVAL = interval; }; From ec75ea53a0329d504e1e1656d09521fec90f0501 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Sat, 6 Dec 2014 07:16:55 +0000 Subject: [PATCH 8/9] Enabling undef lint check; Turning on mocha mode. --- .jshintrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.jshintrc b/.jshintrc index c20f57fe7..c233af9b6 100644 --- a/.jshintrc +++ b/.jshintrc @@ -22,7 +22,7 @@ // true : ensure whatever is used is consistent // "single" : require single quotes // "double" : require double quotes - "undef" : false, // true: Require all non-global variables to be declared (prevents global leaks) + "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) "unused" : true, // true: Require all defined variables be used "strict" : false, // true: Requires all functions run in ES5 Strict Mode "maxparams" : false, // {int} Max number of formal params allowed per function @@ -71,7 +71,7 @@ "dojo" : false, // Dojo Toolkit "jasmine" : false, // Jasmine "jquery" : false, // jQuery - "mocha" : false, // Mocha + "mocha" : true, // Mocha "mootools" : false, // MooTools "node" : true, // Node.js "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) From de4b836e111fa5c7a3814a2765b35c1c1f325a81 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 9 Dec 2014 11:36:20 +0530 Subject: [PATCH 9/9] Missed moving a couple of variable declarations to top of file. --- lib/pkgcloud/azure/utils/azureApi.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pkgcloud/azure/utils/azureApi.js b/lib/pkgcloud/azure/utils/azureApi.js index 7a90eaa85..f3cd2b9c9 100644 --- a/lib/pkgcloud/azure/utils/azureApi.js +++ b/lib/pkgcloud/azure/utils/azureApi.js @@ -32,8 +32,8 @@ var MINIMUM_POLL_INTERVAL = exports.MINIMUM_POLL_INTERVAL = 3000; // Declaring variables for helper functions defined later var createVM, createLinuxVM, createWindowsVM, validateCreateOptions, getServer, - getServers, rebootServer, deleteHostedService, destroyServer, createImage, - captureServer, destroyImage, getMediaLinkUrl, createEndpoints, + getServers, rebootServer, stopServer, deleteHostedService, destroyServer, createImage, + captureServer, deleteImage, destroyImage, getMediaLinkUrl, createEndpoints, makeTemplateRequest, createHostedService, addCertificate, getHostedServices, deleteServer, getOSImage, deleteOSDisk, deleteOSBlob, getServersFromServices, getServersFromService, isVM, getHostedServiceProperties, pollRequestStatus, @@ -234,7 +234,7 @@ rebootServer = exports.rebootServer = function (client, serviceName, callback) { * POST https://management.core.windows.net//services/hostedservices//deployments//roleinstances//operations * A successful operation returns status code 201 (Created). Need to poll for success? */ -var stopServer = exports.stopServer = function (client, serviceName, callback) { +stopServer = exports.stopServer = function (client, serviceName, callback) { var path = client.subscriptionId + '/services/hostedservices/' + serviceName + '/deployments/' + serviceName + '/roleInstances/' + @@ -570,7 +570,7 @@ createImage = exports.createImage = function (client, serverName, targetImageNam ); }; -var deleteImage = function (client, image, callback) { +deleteImage = function (client, image, callback) { // https://management.core.windows.net//services/images/ var path = client.subscriptionId + '/services/images/' + image.Name;