diff --git a/azure/__init__.py b/azure/__init__.py index 5d42bd6355df..e302bffee954 100644 --- a/azure/__init__.py +++ b/azure/__init__.py @@ -301,8 +301,12 @@ def _to_datetime(strtime): 'persistent_vm_downtime_info': 'PersistentVMDowntimeInfo', 'copy_id': 'CopyId', 'os_state': 'OSState', - 'public_ips': 'PublicIPs', - 'public_ip': 'PublicIP', + 'vm_image': 'VMImage', + 'vm_images': 'VMImages', + 'os_disk_configuration': 'OSDiskConfiguration', + 'public_ips': 'PublicIPs', + 'public_ip': 'PublicIP', + 'supported_os': 'SupportedOS', } diff --git a/azure/servicemanagement/__init__.py b/azure/servicemanagement/__init__.py index d02807212801..a2bbe7421498 100644 --- a/azure/servicemanagement/__init__.py +++ b/azure/servicemanagement/__init__.py @@ -899,7 +899,6 @@ def __init__(self, name=u''): self.idle_timeout_in_minutes = 4 self.address = None - class ConfigurationSet(WindowsAzureData): def __init__(self): diff --git a/azure/servicemanagement/servicemanagementservice.py b/azure/servicemanagement/servicemanagementservice.py index c71ee46bda31..1b34c92acd5c 100644 --- a/azure/servicemanagement/servicemanagementservice.py +++ b/azure/servicemanagement/servicemanagementservice.py @@ -37,6 +37,7 @@ OperatingSystemFamilies, OSImage, PersistentVMRole, + ResourceExtensions, RoleSize, RoleSizes, StorageService, @@ -1385,6 +1386,26 @@ def shutdown_roles(self, service_name, deployment_name, role_names, role_names, post_shutdown_action), async=True) + def list_resource_extensions(self): + ''' + Lists the resource extensions that are available to add to a + Virtual Machine. + ''' + return self._perform_get(self._get_resource_extensions_path(), + ResourceExtensions) + + def list_resource_extension_versions(self, publisher_name, extension_name): + ''' + Lists the versions of a resource extension that are available to add + to a Virtual Machine. + + publisher_name: Name of the resource extension publisher. + extension_name: Name of the resource extension. + ''' + return self._perform_get(self._get_resource_extension_versions_path( + publisher_name, extension_name), + ResourceExtensions) + #--Operations for virtual machine images ----------------------------- def capture_vm_image(self, service_name, deployment_name, role_name, options): ''' @@ -2003,6 +2024,13 @@ def _get_roles_operations_path(self, service_name, deployment_name): '/deployments/' + deployment_name + '/roles/Operations', None) + def _get_resource_extensions_path(self): + return self._get_path('services/resourceextensions', None) + + def _get_resource_extension_versions_path(self, publisher_name, extension_name): + return self._get_path('services/resourceextensions', + publisher_name + '/' + extension_name) + def _get_capture_vm_image_path(self, service_name, deployment_name, role_name): return self._get_path('services/hostedservices/' + _str(service_name) + '/deployments/' + _str(deployment_name) + diff --git a/tests/test_servicemanagementservice.py b/tests/test_servicemanagementservice.py index ed65855947af..eba8677d2ae0 100644 --- a/tests/test_servicemanagementservice.py +++ b/tests/test_servicemanagementservice.py @@ -1561,6 +1561,39 @@ def test_capture_role(self): # Assert self.assertTrue(self._os_image_exists(self.os_image_name)) + def test_list_resource_extensions(self): + # Arrange + + # Act + result = self.sms.list_resource_extensions() + + # Assert + self.assertGreater(len(result), 0) + for ext in result: + self.assertGreater(len(ext.description), 0) + self.assertGreater(len(ext.label), 0) + self.assertGreater(len(ext.name), 0) + self.assertGreater(len(ext.publisher), 0) + self.assertGreater(len(ext.version), 0) + + def test_list_resource_extension_versions(self): + # Arrange + publisher = 'Chef.Bootstrap.WindowsAzure' + name = 'ChefClient' + + # Act + result = self.sms.list_resource_extension_versions( + publisher, name) + + # Assert + self.assertGreater(len(result), 0) + for ext in result: + self.assertEqual(ext.name, name) + self.assertEqual(ext.publisher, publisher) + self.assertGreater(len(ext.description), 0) + self.assertGreater(len(ext.label), 0) + self.assertGreater(len(ext.version), 0) + #--Test cases for virtual machine images ----------------------------- def test_capture_vm_image(self): # Arrange