I have been experimenting lately with the Azure SDK for Python, in particular with the service management API. I found some points in the documentation that were unclear to me, so I am posting what I discovered in the process.
If you want to create a virtual machine, you need to:
Note that you'll need a management certificate to interface with the Azure Service Management Service. The documentation suggests using openssl to create one, which is fine on Linux and Mac, but not on Windows. On Windows, use makecert instead:
makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
This will put the certificate into the current user's personal store and generate a .cer file for you to upload to Azure.
Also note that there is a bug in the Python SDK which affects the creation of endpoints. See https://github.com/WindowsAzure/azure-sdk-for-python/pull/83 for a description.
You will need to edit the init.py file as described on github.
You can do the rest in python:
from azure import *from azure.servicemanagement import *subscription_id = '<enter your subscription id>'# The certificate comes from the local store, not from a .pem file on Windows
certificate_path ="CURRENT_USER\\my\\<enter your certificate name>"
# instantiate a service management servicesms = ServiceManagementService(subscription_id, certificate_path)
#provide a service name and location
name = '<name of service you want>'location = 'West US'# You can either set the location or an affinity_groupsms.create_hosted_service(service_name=name, label=name,location=location)# Name of an os image as returned by list_os_images (catalog and yours)image_name = '<your image name>.vhd'# Destination url://storage account/container/blob where the VM disk will be createdmedia_link = 'http://<account name>.blob.core.windows.net/vhds/'+name+'.vhd'# The documentation shows a Linux VM. Windows is more complicated.# WindowsConfigurationSet contains metadata for a Windows VMwindows_config = WindowsConfigurationSet(<machine name>, '<admin password>')# by default the api will look for domain credentials. if you want no domain:
windows_config.domain_join = None# Here's the hard disk for the os
os_hd = OSVirtualHardDisk(image_name, media_link)# Unless you specify endpoints, you won't be able to connect to the VM.
# The documentation is unclear on the matter.
endpoint_config = ConfigurationSet()endpoint_config.configuration_set_type = 'NetworkConfiguration'endpoint1 = ConfigurationSetInputEndpoint(name = 'rdp', protocol = 'tcp', port = '33890', local_port = '3389', load_balanced_endpoint_set_name = None, enable_direct_server_return = False)endpoint2 = ConfigurationSetInputEndpoint(name = 'web', protocol = 'tcp', port = '8080', local_port = '80', load_balanced_endpoint_set_name = None, enable_direct_server_return = False)#endpoints must be specified as elements in a list
endpoint_config.input_endpoints.input_endpoints.append(endpoint1)endpoint_config.input_endpoints.input_endpoints.append(endpoint2)#Finally you can deploy the VM
sms.create_virtual_machine_deployment(service_name=name, deployment_name=name, deployment_slot='production', label=name, role_name=name, system_config=windows_config, network_config = endpoint_config, os_virtual_hard_disk=os_hd, role_size='Small')
Powered by Qumana