Intro

This project provides a Ruby gem for easy access to the Azure ARM Compute API. With this gem you can create/update/list/delete virtual machines, virtual machine images and virtual machine extensions.

Supported Ruby Versions

  • Ruby 2+

Note: x64 Ruby for Windows is known to have some compatibility issues.

Getting started

Setting up the service principal

First of all to start interacting with the ARM compute you will need to setup a service principal. Service principal is an Azure application which allows you to authenticate to Azure and access Azure services. The detailed steps of how to setup a service principal can be found in this article: http://aka.ms/cli-service-principal. In the result of setting up service principal you will get tenant id, client id and client secret data.

Installation

install the appropriate gem:

gem install azure_mgmt_compute

and reference it in your code:

require 'azure_mgmt_compute'

After that you should be ready to start using SDK!

Authentication

# Create authentication objects
token_provider = MsRestAzure::ApplicationTokenProvider.new(tenant_id, client_id, secret)
credentials = MsRest::TokenCredentials.new(token_provider)

To get tenant_id, client_id and secret for your Azure application visit Azure portal or copy them from the powershell script from the article mentioned above.

Creating new virtual machine

# Include SDK modules to ease access to compute classes.
include Azure::ARM::Compute
include Azure::ARM::Compute::Models

# Create a client - a point of access to the API and set the subscription id
client = ComputeManagementClient.new(credentials)
client.subscription_id = subscription_id

windows_config = WindowsConfiguration.new
windows_config.provision_vmagent = true
windows_config.enable_automatic_updates = true

os_profile = OSProfile.new
os_profile.computer_name = 'testvm1'
os_profile.admin_username = 'testvm1'
os_profile.admin_password = 'P@ssword1'
os_profile.windows_configuration = windows_config
os_profile.secrets = []

hardware_profile = HardwareProfile.new
hardware_profile.vm_size = 'Standard_A0'

# create_storage_profile is hypothetical helper method which creates storage
# profile by means of ARM Storage SDK.
params.storage_profile = create_storage_profile

# create_network_profile is hypothetical helper method which creates network
# profile my means of ARM Network SDK.
params.network_profile = create_network_profile

params = VirtualMachine.new
params.type = 'Microsoft.Compute/virtualMachines'
params.os_profile = os_profile
params.hardware_profile = hardware_profile
params.location = 'westus'

promise = client.virtual_machines.create_or_update_async('existing_resource_group_name', 'name_of_new_vm', params)

The SDK method returns a promise which you can utilize depending on your needs. E.g. if you need to get result immediately via sync blocking call - do the following:

result = promise.value!

If you need to follow async flow - provide a block which will be executed in off main thread:

promise = promise.then do |result|
  # Handle the result
end

In both cases you're returned an instance of MsRestAzure::AzureOperationResponse which contains HTTP requests/response objects and response body. Response body is a deserialized object representing the received information. In case of code above - newly created virtual machine. To get data from it:

vm = result.body

p vm.name # name of the new vm
p vm.vm_id # id of the new vm

Congrats, you've create new virtual machine. We encourage you to try more stuff and let us know your feedback! For advanced SDK usage please reference to the spec files.