Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.compute.models import RunCommandInput, VirtualMachineExtension
import json
subscription_id = "your subscription ID"
resource_group_name = "WorkSpace"
vm_name = "nginx-demo-vm"
location = "southindia"
credential = DefaultAzureCredential()
compute_client = ComputeManagementClient(credential, subscription_id)
# Run shell command to install Python on the VM
command = RunCommandInput(
command_id='RunShellScript',
script=[
'apt install python2 -y',
'python3 --version'
]
)
install_python = compute_client.virtual_machines.begin_run_command(
resource_group_name, vm_name, command
)
result = install_python.result()
output_messages = []
for message in result.value:
stdout_start = message.message.find("[stdout]") + len("[stdout]\n")
stderr_start = message.message.find("[stderr]") + len("[stderr]\n")
stdout = message.message[stdout_start:stderr_start - len("[stderr]\n")].strip()
stderr = message.message[stderr_start:].strip()
output_message = {
"code": message.code,
"stdout": stdout,
"stderr": stderr
}
output_messages.append(output_message)
result_dict = {"output": output_messages}
print(json.dumps(result_dict, indent=4))
settings = {
"StorageAccount": "logsofthevm",
"ladCfg": {
"diagnosticMonitorConfiguration": {
"eventVolume": "Medium",
"metrics": {
"metricAggregation": [
{ "scheduledTransferPeriod": "PT1M" },
{ "scheduledTransferPeriod": "PT1H" }
],
"resourceId": "{your vm resource_id}"
},
"syslogEvents": {
"syslogEventConfiguration": {
"LOG_AUTH": "LOG_DEBUG",
"LOG_AUTHPRIV": "LOG_DEBUG",
"LOG_CRON": "LOG_DEBUG",
"LOG_DAEMON": "LOG_DEBUG",
"LOG_FTP": "LOG_DEBUG",
"LOG_KERN": "LOG_DEBUG",
"LOG_LOCAL0": "LOG_DEBUG",
"LOG_LOCAL1": "LOG_DEBUG",
"LOG_LOCAL2": "LOG_DEBUG",
"LOG_LOCAL3": "LOG_DEBUG",
"LOG_LOCAL4": "LOG_DEBUG",
"LOG_LOCAL5": "LOG_DEBUG",
"LOG_LOCAL6": "LOG_DEBUG",
"LOG_LOCAL7": "LOG_DEBUG",
"LOG_LPR": "LOG_DEBUG",
"LOG_MAIL": "LOG_DEBUG",
"LOG_NEWS": "LOG_DEBUG",
"LOG_SYSLOG": "LOG_DEBUG",
"LOG_USER": "LOG_DEBUG",
"LOG_UUCP": "LOG_DEBUG"
}
},
"performanceCounters": {
"performanceCounterConfiguration": [
{
"annotation": [{ "displayName": "CPU IO wait time", "locale": "en-us" }],
"class": "processor",
"condition": "IsAggregate=TRUE",
"counter": "percentiowaittime",
"counterSpecifier": "/builtin/processor/percentiowaittime",
"type": "builtin",
"unit": "Percent",
"sampleRate": "PT15S"
},
{
"annotation": [{ "displayName": "CPU user time", "locale": "en-us" }],
"class": "processor",
"condition": "IsAggregate=TRUE",
"counter": "percentusertime",
"counterSpecifier": "/builtin/processor/percentusertime",
"type": "builtin",
"unit": "Percent",
"sampleRate": "PT15S"
},
{
"annotation": [{ "displayName": "CPU nice time", "locale": "en-us" }],
"class": "processor",
"condition": "IsAggregate=TRUE",
"counter": "percentnicetime",
"counterSpecifier": "/builtin/processor/percentnicetime",
"type": "builtin",
"unit": "Percent",
"sampleRate": "PT15S"
},
{
"annotation": [{ "displayName": "CPU percentage guest OS", "locale": "en-us" }],
"class": "processor",
"condition": "IsAggregate=TRUE",
"counter": "percentprocessortime",
"counterSpecifier": "/builtin/processor/percentprocessortime",
"type": "builtin",
"unit": "Percent",
"sampleRate": "PT15S"
},
{
"annotation": [{ "displayName": "Memory available", "locale": "en-us" }],
"class": "memory",
"counter": "availablememory",
"counterSpecifier": "/builtin/memory/availablememory",
"type": "builtin",
"unit": "Bytes",
"sampleRate": "PT15S"
},
{
"annotation": [{ "displayName": "Swap percent used", "locale": "en-us" }],
"class": "memory",
"counter": "percentusedswap",
"counterSpecifier": "/builtin/memory/percentusedswap",
"type": "builtin",
"unit": "Percent",
"sampleRate": "PT15S"
},
{
"annotation": [{ "displayName": "Filesystem % used space", "locale": "en-us" }],
"class": "filesystem",
"condition": "IsAggregate=TRUE",
"counter": "percentusedspace",
"counterSpecifier": "/builtin/filesystem/percentusedspace",
"type": "builtin",
"unit": "Percent",
"sampleRate": "PT15S"
}
]
}
}
}
}
protected_settings = {
"storageAccountName": "your storage account name",
"storageAccountSasToken": "your sas token"
}
# print current install extensions
list_result = compute_client.virtual_machine_extensions.list(resource_group_name, vm_name)
for extension in list_result.value:
print(f"{extension.location}")
print(f"{extension.tags}")
print(f"{extension.force_update_tag}")
print(f"{extension.publisher}")
print(f"{extension.type_properties_type}")
print(f"{extension.type_handler_version}")
print(f"{extension.auto_upgrade_minor_version}")
print(f"{extension.settings}")
print(f"{extension.protected_settings}")
print(f"{extension.instance_view}")
print(f"{extension.name}")
print("Installation for VirtualMachineExtension Started")
vmExt = VirtualMachineExtension(location="southindia", publisher= "Microsoft.Azure.Diagnostics", type_handler_version="3.0", type_properties_type="LinuxDiagnostic", auto_upgrade_minor_version=True, settings=settings, protected_settings=protected_settings)
result = compute_client.virtual_machine_extensions.begin_create_or_update(resource_group_name="WorkSpace", vm_name="nginx-demo-vm", vm_extension_name="LinuxDiagnostic", extension_parameters=vmExt, content_type="application/json")
result = result.result()
print(result)
print("Installation for VirtualMachineExtension Completed")
# print current install extensions
list_result = compute_client.virtual_machine_extensions.list(resource_group_name, vm_name)
for extension in list_result.value:
print(f"{extension.location}")
print(f"{extension.tags}")
print(f"{extension.force_update_tag}")
print(f"{extension.publisher}")
print(f"{extension.type_properties_type}")
print(f"{extension.type_handler_version}")
print(f"{extension.auto_upgrade_minor_version}")
print(f"{extension.settings}")
print(f"{extension.protected_settings}")
print(f"{extension.instance_view}")
print(f"{extension.name}")
Import Statements:
azure.identity
, azure.mgmt.compute
).json
for handling JSON data.Azure Credentials and Compute Client Setup:
DefaultAzureCredential()
, which attempts multiple methods of authentication (like environment variables, managed identity, etc.).ComputeManagementClient
using the credentials and subscription ID.Run Command on VM:
apt install python2 -y
, python2 --version
).RunCommandInput
to specify the command and runs it on the VM (begin_run_command
).stdout
and stderr
) for further processing or logging.Diagnostic Extension Settings:
settings
) for the VM to collect metrics and syslog events.Protected Settings:
protected_settings
which include sensitive information (like SAS tokens) needed for the diagnostic extension.Manage VM Extensions:
VirtualMachineExtension
) for diagnostic monitoring (LinuxDiagnostic
) with specified settings and protected settings.begin_create_or_update
), waits for completion (result()
), and prints the result.Final VM Extension Details:
Output: