UNPKG

azure-api

Version:

A really simple promise-based NodeJS API for creation and configuration of Azure resources.

157 lines (123 loc) 4.25 kB
# azure-api A really simple [promise-based](https://blog.domenic.me/youre-missing-the-point-of-promises/) NodeJS API for creation and configuration of Azure resources. You must have [azure-cli](https://www.npmjs.com/package/azure-cli) [installed](https://www.npmjs.com/package/azure-cli#installation) and [authenticated](https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-connect/) to use this. This API is used in my [MEAN stack provisioning script](https://github.com/codecapers/provision-azure-mean-stack). It's a good example of how to use this. Todo (please join the effort!): - Support for certificates/keys. - Functions to delete networks and VMs. To install: npm install --save azure-api Then in your NodeJS script: var config = { verbose: true }; var azure = require('azure-api')(config); To create a network: var networkName = "somenetwork"; var location = "Australia East"; azure.createNetwork(networkName, location) .then(function () { // network was created sucessfully. }) .catch(function (err) { // some error occurred. }); To create a VM: var vm = { name: "somevm", networkName: "somenetwork", imageName: "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu_DAILY_BUILD-trusty-14_04_2-LTS-amd64-server-20150708-en-us-30GB", user: "username", // User name for the VM. pass: "password", // Password for the VM. endpoints: ... list of end points ... }; azure.createVM(vm) .then(function () { // VM was created sucessfully. }) .catch(function (err) { // some error occurred. }); End points are specified as follows: var endpoints = [ { name: 'HTTP', externalPort: 80, internalPort: 3000, }, // etc, etc ], To run a provisioning shell script on the remote machine: var host = "somevm.cloudapp.net"; var user = "username"; var pass = "password"; var scriptFile = "provision.sh"; // The named script must exist on the local machine. azure.runSshScript(host, user, pass, scriptFile) .then(function () { // the script completed successfully. }) .catch(function (err) { // some error occurred. }); You can also call a function that waits for you VM to have started: var vmName = "somevm"; azure.waitVmRunning(vmName) .then(function () { // vm has started. }) .catch(function (err) { // some error occurred. }); The end result is you can wire all these functions together to provision your cloud: var networkName = "somenetwork"; var location = "Australia East"; var host = vmName + ".cloudapp.net"; var vm = { name: "somevm", networkName: networkName, imageName: "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu_DAILY_BUILD-trusty-14_04_2-LTS-amd64-server-20150708-en-us-30GB", user: "username", // User name for the VM. pass: "password", // Password for the VM. endpoints: ... list of end points ... }; var provisionScriptFile = "provision.sh"; azure.createNetwork(networkName, location) .then(function () { return azure.createVM(vm); }) .then(function () { return azure.waitVmRunning(vm.name); }) .then(function () { return azure.runSshScript(host, vm.user, vm.pass, provisionScriptFile) }) .then(function () { // provisioning completed successfully. }) .catch(function (err) { // some error occurred. }); Or you could just call *provisionVM*: var networkName = "somenetwork"; var location = "Australia East"; var vm = { name: "somevm", networkName: networkName, imageName: "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu_DAILY_BUILD-trusty-14_04_2-LTS-amd64-server-20150708-en-us-30GB", user: "username", // User name for the VM. pass: "password", // Password for the VM. endpoints: ... list of end points ... provisionScript: "provision.sh", }; var provisionScriptFile = "provision.sh"; azure.createNetwork(networkName, location) .then(function () { return azure.provisionVM(vm); }) .then(function () { // provisioning completed successfully. }) .catch(function (err) { // some error occurred. }); Have fun! Thanks for coming to the party.