agent: |
iOzlwjLVTOFEhG429T5vCollect list of patches to be deployed.
Collect list of patches to be deployed.
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task involves fetching a comprehensive list of patches awaiting deployment on Azure Virtual Machines. This ensures the VMs are up-to-date with the latest security and performance improvements.
inputs
outputs
import json
def assess_patches_for_vms(processed_vms):
patches_list = []
for vm in processed_vms:
vm_name = vm['vm_name']
resource_group = vm['resource_group']
# Constructing the Azure CLI command
command = f"az vm assess-patches -g {resource_group} -n {vm_name}"
try:
# Execute the command
result = _exe(None, command)
patches_info = json.loads(result)
#print(f"Raw Patches for {vm_name}: {patches_info}")
# Store the patches info with VM name
patches_list.append({
'vm_name': vm_name,
'patches_info': patches_info
})
print(f"Patches assessed for VM: {vm_name}")
print("=" * 50)
except json.JSONDecodeError:
print(f"Error decoding JSON response for VM: {vm_name} as the VM maybe stopped or deallocated")
except Exception as e:
print(f"An error occurred while assessing patches for VM: {vm_name}: {str(e)}")
return patches_list
# Example VM details obtained from previous steps
#processed_vms = [{'vm_name': 'test-update-manager', 'resource_group': 'DEFAULTRESOURCEGROUP-EUS', 'location': 'eastus', 'vm_size': 'Standard_B1s', 'os_type': 'Linux', 'os_disk_name': 'test-update-manager_disk1_9ca2728077904a74a8a09a9d40efc938', 'os_disk_id': '/subscriptions/955ecf93-74f8-4728-bd2a-31094aa55629/resourceGroups/DEFAULTRESOURCEGROUP-EUS/providers/Microsoft.Compute/disks/test-update-manager_disk1_9ca2728077904a74a8a09a9d40efc938'}, {'vm_name': 'test-update-manager-customer-managed', 'resource_group': 'RG-VMINSTANCES-EASTUS', 'location': 'eastus', 'vm_size': 'Standard_D2s_v3', 'os_type': 'Linux', 'os_disk_name': 'test-update-manager-customer-managed_disk1_8db9f76765ff459c8084f5949c4fd8aa', 'os_disk_id': '/subscriptions/955ecf93-74f8-4728-bd2a-31094aa55629/resourceGroups/rg-vminstances-eastus/providers/Microsoft.Compute/disks/test-update-manager-customer-managed_disk1_8db9f76765ff459c8084f5949c4fd8aa'}]
patches_list = assess_patches_for_vms(processed_vms)
# Iterate through each VM's patch list
for item in patches_list:
print(f"VM Name: {item['vm_name']}")
data = item['patches_info'] # This is where the patch information is stored.
# Display the overall assessment status and patch counts.
print(f"Assessment Status: {data['status']}")
print(f"Critical and Security Patch Count: {data['criticalAndSecurityPatchCount']}")
print(f"Other Patch Count: {data['otherPatchCount']}")
print(f"Reboot Pending: {'Yes' if data['rebootPending'] else 'No'}")
print("-" * 50)
# Display detailed information for each available patch.
for patch in data["availablePatches"]:
print(f"Name: {patch['name']}")
print(f"KBID: {patch['kbId']}") # Added KBID as it seems important.
print(f"Classification: {', '.join(patch['classifications'])}")
print(f"Reboot Behavior: {patch['rebootBehavior']}")
print(f"Last Modified: {patch['lastModifiedDateTime']}")
print(f"Published Date: {patch.get('publishedDate', 'N/A')}") # Using .get in case the key doesn't exist.
print("-" * 50)
'''
# Example: Printing the patches list
for item in patches_list:
print(json.dumps(item, indent=4))
'''
#context.proceed=False
copied