Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Azure python sdk - getting the machine state

Tags:

python

azure

Using the python api for azure, I want to get the state of one of my machines.

I can't find anywhere to access this information.

Does someone know?

After looking around, I found this:

get_with_instance_view(resource_group_name, vm_name)

https://azure-sdk-for-python.readthedocs.org/en/latest/ref/azure.mgmt.compute.computemanagement.html#azure.mgmt.compute.computemanagement.VirtualMachineOperations.get_with_instance_view

like image 278
Oliver Avatar asked Dec 10 '22 20:12

Oliver


2 Answers

if you are using the legacy api (this will work for classic virtual machines), use

from azure.servicemanagement import ServiceManagementService
sms = ServiceManagementService('your subscription id', 'your-azure-certificate.pem')

your_deployment = sms.get_deployment_by_name('service name', 'deployment name')
for role_instance in your_deployment.role_instance_list:
    print role_instance.instance_name, role_instance.instance_status

if you are using the current api (will not work for classic vm's), use

from azure.common.credentials import UserPassCredentials
from azure.mgmt.compute import ComputeManagementClient

import retry

credentials = UserPassCredentials('username', 'password')
compute_client = ComputeManagementClient(credentials, 'your subscription id')

@retry.retry(RuntimeError, tries=3)
def get_vm(resource_group_name, vm_name):
    '''
    you need to retry this just in case the credentials token expires,
    that's where the decorator comes in
    this will return all the data about the virtual machine
    '''
    return compute_client.virtual_machines.get(
        resource_group_name, vm_name, expand='instanceView')

@retry.retry((RuntimeError, IndexError,), tries=-1)
def get_vm_status(resource_group_name, vm_name):
    '''
    this will just return the status of the virtual machine
    sometime the status may be unknown as shown by the azure portal;
    in that case statuses[1] doesn't exist, hence retrying on IndexError
    also, it may take on the order of minutes for the status to become
    available so the decorator will bang on it forever
    '''
    return compute_client.virtual_machines.get(resource_group_name, vm_name, expand='instanceView').instance_view.statuses[1].display_status
like image 97
steodatus Avatar answered Dec 31 '22 14:12

steodatus


If you are using Azure Cloud Services, you should use the Role Environment API, which provides state information regarding the current instance of your current service instance. https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.serviceruntime.roleenvironment.aspx

like image 25
David Crook Avatar answered Dec 31 '22 14:12

David Crook