Skip to content

Commit

Permalink
Add list resource extensions.
Browse files Browse the repository at this point in the history
Add public ip settings when creating vm.
  • Loading branch information
huguesv committed Nov 8, 2014
1 parent eb40b2f commit bdcfba5
Show file tree
Hide file tree
Showing 4 changed files with 185 additions and 0 deletions.
3 changes: 3 additions & 0 deletions azure/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,9 @@ def _to_datetime(strtime):
'vm_image': 'VMImage',
'vm_images': 'VMImages',
'os_disk_configuration': 'OSDiskConfiguration',
'public_ips': 'PublicIPs',
'public_ip': 'PublicIP',
'supported_os': 'SupportedOS',
}


Expand Down
121 changes: 121 additions & 0 deletions azure/servicemanagement/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,93 @@ def __init__(self, name=None, label=None, description=None):
self.pricing_detail_link = None # read-only


class ResourceExtensions(WindowsAzureData):

def __init__(self):
self.resource_extensions = _list_of(ResourceExtension)

def __iter__(self):
return iter(self.resource_extensions)

def __len__(self):
return len(self.resource_extensions)

def __getitem__(self, index):
return self.resource_extensions[index]


class ResourceExtension(WindowsAzureData):

def __init__(self):
self.publisher = u''
self.name = u''
self.version = u''
self.label = u''
self.description = u''
self.public_configuration_schema = u''
self.private_configuration_schema = u''
self.sample_config = u''
self.replication_completed = False
self.eula = u''
self.privacy_uri = u''
self.homepage_uri = u''
self.is_json_extension = False
self.is_internal_extension = False
self.disallow_major_version_upgrade = False
self.company_name = u''
self.supported_os = u''
self.published_date = u''


class ResourceExtensionParameterValues(WindowsAzureData):

def __init__(self):
self.resource_extension_parameter_values = _list_of(ResourceExtensionParameterValue)

def __iter__(self):
return iter(self.resource_extension_parameter_values)

def __len__(self):
return len(self.resource_extension_parameter_values)

def __getitem__(self, index):
return self.resource_extension_parameter_values[index]


class ResourceExtensionParameterValue(WindowsAzureData):

def __init__(self):
self.key = u''
self.value = u''
self.type = u''


class ResourceExtensionReferences(WindowsAzureData):

def __init__(self):
self.resource_extension_references = _list_of(ResourceExtensionReference)

def __iter__(self):
return iter(self.resource_extension_references)

def __len__(self):
return len(self.resource_extension_references)

def __getitem__(self, index):
return self.resource_extension_references[index]


class ResourceExtensionReference(WindowsAzureData):

def __init__(self):
self.reference_name = u''
self.publisher = u''
self.version = u''
self.resource_extension_parameter_values = ResourceExtensionParameterValues()
self.state = u''
self.certificates = Certificates()


class PersistentVMDowntimeInfo(WindowsAzureData):

def __init__(self):
Expand Down Expand Up @@ -790,13 +877,36 @@ def __getitem__(self, index):
return self.configuration_sets[index]


class PublicIPs(WindowsAzureData):

def __init__(self):
self.public_ips = _list_of(PublicIP)

def __iter__(self):
return iter(self.public_ips)

def __len__(self):
return len(self.public_ips)

def __getitem__(self, index):
return self.public_ips[index]


class PublicIP(WindowsAzureData):

def __init__(self, name=u''):
self.name = name
self.idle_timeout_in_minutes = 4


class ConfigurationSet(WindowsAzureData):

def __init__(self):
self.configuration_set_type = u'NetworkConfiguration'
self.role_type = u''
self.input_endpoints = ConfigurationSetInputEndpoints()
self.subnet_names = _scalar_list_of(str, 'SubnetName')
self.public_ips = PublicIPs()


class ConfigurationSetInputEndpoints(WindowsAzureData):
Expand Down Expand Up @@ -1832,6 +1942,17 @@ def network_configuration_to_xml(configuration):
for name in configuration.subnet_names:
xml += _XmlSerializer.data_to_xml([('SubnetName', name)])
xml += '</SubnetNames>'

if configuration.public_ips:
xml += '<PublicIPs>'
for public_ip in configuration.public_ips:
xml += '<PublicIP>'
xml += _XmlSerializer.data_to_xml(
[('Name', public_ip.name),
('IdleTimeoutInMinutes', public_ip.idle_timeout_in_minutes)])
xml += '</PublicIP>'
xml += '</PublicIPs>'

return xml

@staticmethod
Expand Down
28 changes: 28 additions & 0 deletions azure/servicemanagement/servicemanagementservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
OperatingSystemFamilies,
OSImage,
PersistentVMRole,
ResourceExtensions,
RoleSize,
RoleSizes,
StorageService,
Expand Down Expand Up @@ -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):
'''
Expand Down Expand Up @@ -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) +
Expand Down
33 changes: 33 additions & 0 deletions tests/test_servicemanagementservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit bdcfba5

Please sign in to comment.