|
|
@@ -67,15 +67,24 @@ class AzureVMFirewallService(BaseVMFirewallService):
|
|
|
for fw in self.provider.azure_client.list_vm_firewall()]
|
|
|
return ClientPagedResultList(self.provider, fws, limit, marker)
|
|
|
|
|
|
- def create(self, name, description, network_id=None):
|
|
|
- AzureVMFirewall.assert_valid_resource_name(name)
|
|
|
- parameters = {"location": self.provider.region_name,
|
|
|
- 'tags': {'Name': name}}
|
|
|
+ def create(self, label=None, description=None, network_id=None):
|
|
|
+ parameters = {"location": self.provider.region_name}
|
|
|
+ if label:
|
|
|
+ AzureVMFirewall.assert_valid_resource_name(label)
|
|
|
+ parameters.update({'tags': {'Label': label}})
|
|
|
+ else:
|
|
|
+ label = "cb-fw"
|
|
|
|
|
|
if description:
|
|
|
- parameters['tags'].update(Description=description)
|
|
|
+ tags = parameters.get('tags')
|
|
|
+ if tags:
|
|
|
+ tags.update(Description=description)
|
|
|
+ else:
|
|
|
+ parameters.update({'tags': {'Description': description}})
|
|
|
|
|
|
- fw = self.provider.azure_client.create_vm_firewall(name, parameters)
|
|
|
+ name = "{0}-{1}".format(label, uuid.uuid4().hex[:6])
|
|
|
+ fw = self.provider.azure_client.create_vm_firewall(name,
|
|
|
+ parameters)
|
|
|
|
|
|
# Add default rules to negate azure default rules.
|
|
|
# See: https://github.com/CloudVE/cloudbridge/issues/106
|
|
|
@@ -86,7 +95,7 @@ class AzureVMFirewallService(BaseVMFirewallService):
|
|
|
# only 0-4096 are allowed for custom rules
|
|
|
rule.priority = rule.priority - 61440
|
|
|
rule.access = "Deny"
|
|
|
- self._provider.azure_client.create_vm_firewall_rule(
|
|
|
+ self.provider.azure_client.create_vm_firewall_rule(
|
|
|
fw.id, rule_name, rule)
|
|
|
|
|
|
# Add a new custom rule allowing all outbound traffic to the internet
|
|
|
@@ -98,7 +107,7 @@ class AzureVMFirewallService(BaseVMFirewallService):
|
|
|
"destination_address_prefix": "Internet",
|
|
|
"access": "Allow",
|
|
|
"direction": "Outbound"}
|
|
|
- result = self._provider.azure_client.create_vm_firewall_rule(
|
|
|
+ result = self.provider.azure_client.create_vm_firewall_rule(
|
|
|
fw.id, "cb-default-internet-outbound", parameters)
|
|
|
fw.security_rules.append(result)
|
|
|
|
|
|
@@ -106,18 +115,18 @@ class AzureVMFirewallService(BaseVMFirewallService):
|
|
|
return cb_fw
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['label', 'name']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- filters = {'Name': name}
|
|
|
- fws = [AzureVMFirewall(self.provider, vm_firewall)
|
|
|
- for vm_firewall in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_vm_firewall(), filters)]
|
|
|
- return ClientPagedResultList(self.provider, fws)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def delete(self, group_id):
|
|
|
self.provider.azure_client.delete_vm_firewall(group_id)
|
|
|
@@ -153,16 +162,18 @@ class AzureKeyPairService(BaseKeyPairService):
|
|
|
data=results)
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- key_pair = self.get(name)
|
|
|
return ClientPagedResultList(self.provider,
|
|
|
- [key_pair] if key_pair else [])
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def create(self, name, public_key_material=None):
|
|
|
AzureKeyPair.assert_valid_resource_name(name)
|
|
|
@@ -207,17 +218,18 @@ class AzureBucketService(BaseBucketService):
|
|
|
return None
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- buckets = [AzureBucket(self.provider, bucket)
|
|
|
- for bucket in
|
|
|
- self.provider.azure_client.list_containers(prefix=name)]
|
|
|
- return ClientPagedResultList(self.provider, buckets)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def list(self, limit=None, marker=None):
|
|
|
"""
|
|
|
@@ -276,18 +288,18 @@ class AzureVolumeService(BaseVolumeService):
|
|
|
return None
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name', 'label']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- filters = {'Name': name}
|
|
|
- cb_vols = [AzureVolume(self.provider, volume)
|
|
|
- for volume in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_disks(), filters)]
|
|
|
- return ClientPagedResultList(self.provider, cb_vols)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def list(self, limit=None, marker=None):
|
|
|
"""
|
|
|
@@ -298,18 +310,29 @@ class AzureVolumeService(BaseVolumeService):
|
|
|
return ClientPagedResultList(self.provider, cb_vols,
|
|
|
limit=limit, marker=marker)
|
|
|
|
|
|
- def create(self, name, size, zone=None, snapshot=None, description=None):
|
|
|
+ def create(self, size, label=None, description=None,
|
|
|
+ zone=None, snapshot=None):
|
|
|
"""
|
|
|
Creates a new volume.
|
|
|
"""
|
|
|
- AzureVolume.assert_valid_resource_name(name)
|
|
|
+ AzureVolume.assert_valid_resource_name(label)
|
|
|
+ if label:
|
|
|
+ AzureVolume.assert_valid_resource_name(label)
|
|
|
+ tags = {'Label': label}
|
|
|
+ else:
|
|
|
+ label = "cb-vol"
|
|
|
+
|
|
|
+ disk_name = "{0}-{1}".format(label, uuid.uuid4().hex[:6])
|
|
|
+
|
|
|
zone_id = zone.id if isinstance(zone, PlacementZone) else zone
|
|
|
snapshot = (self.provider.storage.snapshots.get(snapshot)
|
|
|
if snapshot and isinstance(snapshot, str) else snapshot)
|
|
|
- disk_name = "{0}-{1}".format(name, uuid.uuid4().hex[:6])
|
|
|
- tags = {'Name': name}
|
|
|
+
|
|
|
if description:
|
|
|
+ if not tags:
|
|
|
+ tags = {}
|
|
|
tags.update(Description=description)
|
|
|
+
|
|
|
if snapshot:
|
|
|
params = {
|
|
|
'location':
|
|
|
@@ -317,10 +340,12 @@ class AzureVolumeService(BaseVolumeService):
|
|
|
'creation_data': {
|
|
|
'create_option': DiskCreateOption.copy,
|
|
|
'source_uri': snapshot.resource_id
|
|
|
- },
|
|
|
- 'tags': tags
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ if tags:
|
|
|
+ params.update(tags=tags)
|
|
|
+
|
|
|
disk = self.provider.azure_client.create_snapshot_disk(disk_name,
|
|
|
params)
|
|
|
|
|
|
@@ -331,8 +356,11 @@ class AzureVolumeService(BaseVolumeService):
|
|
|
'disk_size_gb': size,
|
|
|
'creation_data': {
|
|
|
'create_option': DiskCreateOption.empty
|
|
|
- },
|
|
|
- 'tags': tags}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if tags:
|
|
|
+ params.update(tags=tags)
|
|
|
|
|
|
disk = self.provider.azure_client.create_empty_disk(disk_name,
|
|
|
params)
|
|
|
@@ -360,18 +388,18 @@ class AzureSnapshotService(BaseSnapshotService):
|
|
|
return None
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name', 'label']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- filters = {'Name': name}
|
|
|
- cb_snapshots = [AzureSnapshot(self.provider, snapshot)
|
|
|
- for snapshot in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_snapshots(), filters)]
|
|
|
- return ClientPagedResultList(self.provider, cb_snapshots)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def list(self, limit=None, marker=None):
|
|
|
"""
|
|
|
@@ -382,18 +410,24 @@ class AzureSnapshotService(BaseSnapshotService):
|
|
|
self.provider.azure_client.list_snapshots()]
|
|
|
return ClientPagedResultList(self.provider, snaps, limit, marker)
|
|
|
|
|
|
- def create(self, name, volume, description=None):
|
|
|
+ def create(self, volume, label=None, description=None):
|
|
|
"""
|
|
|
Creates a new snapshot of a given volume.
|
|
|
"""
|
|
|
- AzureSnapshot.assert_valid_resource_name(name)
|
|
|
volume = (self.provider.storage.volumes.get(volume)
|
|
|
if isinstance(volume, str) else volume)
|
|
|
|
|
|
- tags = {'Name': name}
|
|
|
- snapshot_name = "{0}-{1}".format(name, uuid.uuid4().hex[:6])
|
|
|
+ if label:
|
|
|
+ AzureSnapshot.assert_valid_resource_name(label)
|
|
|
+ tags = {'Label': label}
|
|
|
+ else:
|
|
|
+ label = "cb-snap"
|
|
|
+
|
|
|
+ snapshot_name = "{0}-{1}".format(label, uuid.uuid4().hex[:6])
|
|
|
|
|
|
if description:
|
|
|
+ if not tags:
|
|
|
+ tags = {}
|
|
|
tags.update(Description=description)
|
|
|
|
|
|
params = {
|
|
|
@@ -402,10 +436,12 @@ class AzureSnapshotService(BaseSnapshotService):
|
|
|
'create_option': DiskCreateOption.copy,
|
|
|
'source_uri': volume.resource_id
|
|
|
},
|
|
|
- 'disk_size_gb': volume.size,
|
|
|
- 'tags': tags
|
|
|
+ 'disk_size_gb': volume.size
|
|
|
}
|
|
|
|
|
|
+ if tags:
|
|
|
+ params.update(tags=tags)
|
|
|
+
|
|
|
azure_snap = self.provider.azure_client.create_snapshot(snapshot_name,
|
|
|
params)
|
|
|
return AzureSnapshot(self.provider, azure_snap)
|
|
|
@@ -440,12 +476,16 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
def __init__(self, provider):
|
|
|
super(AzureInstanceService, self).__init__(provider)
|
|
|
|
|
|
- def create(self, name, image, vm_type, subnet=None, zone=None,
|
|
|
+ def create(self, image, vm_type, label=None, subnet=None, zone=None,
|
|
|
key_pair=None, vm_firewalls=None, user_data=None,
|
|
|
launch_config=None, **kwargs):
|
|
|
|
|
|
- instance_name = name.replace("_", "-") if name \
|
|
|
- else "{0} - {1}".format("cb", uuid.uuid4())
|
|
|
+ if label:
|
|
|
+ prefix = label
|
|
|
+ else:
|
|
|
+ prefix = "cb-ins"
|
|
|
+
|
|
|
+ instance_name = "{0}-{1}".format(prefix, uuid.uuid4().hex[:6])
|
|
|
|
|
|
AzureInstance.assert_valid_resource_name(instance_name)
|
|
|
|
|
|
@@ -478,7 +518,7 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
instance_name, zone_id)
|
|
|
|
|
|
nic_params = {
|
|
|
- 'location': self._provider.region_name,
|
|
|
+ 'location': self.provider.region_name,
|
|
|
'ip_configurations': [{
|
|
|
'name': instance_name + '_ip_config',
|
|
|
'private_ip_allocation_method': 'Dynamic',
|
|
|
@@ -520,7 +560,7 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
temp_key_pair = key_pair
|
|
|
|
|
|
params = {
|
|
|
- 'location': zone_id or self._provider.region_name,
|
|
|
+ 'location': zone_id or self.provider.region_name,
|
|
|
'os_profile': {
|
|
|
'admin_username': self.provider.vm_default_user_name,
|
|
|
'computer_name': instance_name,
|
|
|
@@ -545,9 +585,12 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
}]
|
|
|
},
|
|
|
'storage_profile': storage_profile,
|
|
|
- 'tags': {'Name': name}
|
|
|
+ 'tags': {}
|
|
|
}
|
|
|
|
|
|
+ if label:
|
|
|
+ params['tags'].update(Label=label)
|
|
|
+
|
|
|
for disk_def in storage_profile.get('data_disks', []):
|
|
|
params['tags'] = dict(disk_def.get('tags', {}), **params['tags'])
|
|
|
|
|
|
@@ -575,7 +618,7 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
temp_key_pair.delete()
|
|
|
return AzureInstance(self.provider, vm)
|
|
|
|
|
|
- def _resolve_launch_options(self, name, subnet=None, zone_id=None,
|
|
|
+ def _resolve_launch_options(self, inst_name, subnet=None, zone_id=None,
|
|
|
vm_firewalls=None):
|
|
|
if subnet:
|
|
|
# subnet's zone takes precedence
|
|
|
@@ -595,7 +638,8 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
|
|
|
if len(vm_firewalls) > 1:
|
|
|
new_fw = self.provider.security.vm_firewalls.\
|
|
|
- create('{0}-fw'.format(name), 'Merge vm firewall {0}'.
|
|
|
+ create(label='{0}-fw'.format(inst_name),
|
|
|
+ description='Merge vm firewall {0}'.
|
|
|
format(','.join(vm_firewalls_ids)))
|
|
|
|
|
|
for fw in vm_firewalls:
|
|
|
@@ -735,18 +779,18 @@ class AzureInstanceService(BaseInstanceService):
|
|
|
return None
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name', 'label']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- filtr = {'Name': name}
|
|
|
- instances = [AzureInstance(self.provider, inst)
|
|
|
- for inst in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_vm(), filtr)]
|
|
|
- return ClientPagedResultList(self.provider, instances)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
|
|
|
class AzureImageService(BaseImageService):
|
|
|
@@ -766,23 +810,18 @@ class AzureImageService(BaseImageService):
|
|
|
return None
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name', 'label']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
-
|
|
|
- filters = {'Name': name}
|
|
|
- cb_images = [AzureMachineImage(self.provider, image)
|
|
|
- for image in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_images(), filters)]
|
|
|
- # All gallery image properties (id, resource_id, name) are the URN
|
|
|
- # Improvement: wrap the filters by publisher, offer, etc...
|
|
|
- cb_images.extend([AzureMachineImage(self.provider, image) for image
|
|
|
- in self.provider.azure_client.list_gallery_refs()
|
|
|
- if azure_helpers.generate_urn(image) == name])
|
|
|
- return ClientPagedResultList(self.provider, cb_images)
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
+
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def list(self, limit=None, marker=None):
|
|
|
"""
|
|
|
@@ -859,26 +898,28 @@ class AzureNetworkService(BaseNetworkService):
|
|
|
limit=limit, marker=marker)
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name', 'label']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- filters = {'Name': name}
|
|
|
- networks = [
|
|
|
- AzureNetwork(self.provider, network) for network
|
|
|
- in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_networks(), filters)]
|
|
|
- return ClientPagedResultList(self.provider, networks)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
- def create(self, name, cidr_block):
|
|
|
+ def create(self, cidr_block, label=None):
|
|
|
# Azure requires CIDR block to be specified when creating a network
|
|
|
# so set a default one and use the largest allowed netmask.
|
|
|
- network_name = AzureNetwork.CB_DEFAULT_NETWORK_NAME
|
|
|
- if name:
|
|
|
- network_name = "{0}-{1}".format(name, uuid.uuid4().hex[:6])
|
|
|
+ if label:
|
|
|
+ tags = {'Label': label }
|
|
|
+ else:
|
|
|
+ label = 'cb-net'
|
|
|
+
|
|
|
+ network_name = "{0}-{1}".format(label, uuid.uuid4().hex[:6])
|
|
|
|
|
|
AzureNetwork.assert_valid_resource_name(network_name)
|
|
|
|
|
|
@@ -886,9 +927,12 @@ class AzureNetworkService(BaseNetworkService):
|
|
|
'location': self.provider.azure_client.region_name,
|
|
|
'address_space': {
|
|
|
'address_prefixes': [cidr_block]
|
|
|
- },
|
|
|
- 'tags': {'Name': name or AzureNetwork.CB_DEFAULT_NETWORK_NAME}
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ if tags:
|
|
|
+ params.update(tags=tags)
|
|
|
+
|
|
|
az_network = self.provider.azure_client.create_network(network_name,
|
|
|
params)
|
|
|
cb_network = AzureNetwork(self.provider, az_network)
|
|
|
@@ -982,20 +1026,30 @@ class AzureSubnetService(BaseSubnetService):
|
|
|
obj_list = self._list_subnets(network)
|
|
|
filters = ['name']
|
|
|
matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
- return ClientPagedResultList(self._provider, list(matches))
|
|
|
|
|
|
- def create(self, network, cidr_block, name=None, **kwargs):
|
|
|
+ # All kwargs should have been popped at this time.
|
|
|
+ if len(kwargs) > 0:
|
|
|
+ raise TypeError("Unrecognised parameters for search: %s."
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
+
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
+
|
|
|
+ def create(self, network, cidr_block, prefix=None, **kwargs):
|
|
|
"""
|
|
|
Create subnet
|
|
|
"""
|
|
|
- AzureSubnet.assert_valid_resource_name(name)
|
|
|
network_id = network.id \
|
|
|
if isinstance(network, Network) else network
|
|
|
|
|
|
- if not name:
|
|
|
- subnet_name = AzureSubnet.CB_DEFAULT_SUBNET_NAME
|
|
|
+ if prefix:
|
|
|
+ AzureSubnet.assert_valid_resource_name(prefix)
|
|
|
+
|
|
|
else:
|
|
|
- subnet_name = name
|
|
|
+ prefix = "cb-sn"
|
|
|
+
|
|
|
+ subnet_name = "{0}-{1}".format(prefix, uuid.uuid4().hex[:6])
|
|
|
|
|
|
subnet_info = self.provider.azure_client\
|
|
|
.create_subnet(
|
|
|
@@ -1012,22 +1066,22 @@ class AzureSubnetService(BaseSubnetService):
|
|
|
default_cidr = '10.0.1.0/24'
|
|
|
|
|
|
# No provider-default Subnet exists, look for a library-default one
|
|
|
- matches = self.find(name=AzureSubnet.CB_DEFAULT_SUBNET_NAME)
|
|
|
+ matches = self.find(label=AzureSubnet.CB_DEFAULT_SUBNET_NAME)
|
|
|
if matches:
|
|
|
return matches[0]
|
|
|
|
|
|
# No provider-default Subnet exists, try to create it (net + subnets)
|
|
|
networks = self.provider.networking.networks.find(
|
|
|
- name=AzureNetwork.CB_DEFAULT_NETWORK_NAME)
|
|
|
+ label=AzureNetwork.CB_DEFAULT_NETWORK_NAME)
|
|
|
|
|
|
if networks:
|
|
|
network = networks[0]
|
|
|
else:
|
|
|
- network = self.provider.networking.networks.create(
|
|
|
- AzureNetwork.CB_DEFAULT_NETWORK_NAME, '10.0.0.0/16')
|
|
|
+ network = self.provider.networking.networks.create('10.0.0.0/16',
|
|
|
+ label=AzureNetwork.CB_DEFAULT_NETWORK_NAME)
|
|
|
|
|
|
subnet = self.create(network, default_cidr,
|
|
|
- name=AzureSubnet.CB_DEFAULT_SUBNET_NAME)
|
|
|
+ prefix=AzureSubnet.CB_DEFAULT_SUBNET_NAME)
|
|
|
return subnet
|
|
|
|
|
|
def delete(self, subnet):
|
|
|
@@ -1049,19 +1103,18 @@ class AzureRouterService(BaseRouterService):
|
|
|
return None
|
|
|
|
|
|
def find(self, **kwargs):
|
|
|
- name = kwargs.pop('name', None)
|
|
|
+ obj_list = self
|
|
|
+ filters = ['name', 'label']
|
|
|
+ matches = cb_helpers.generic_find(filters, kwargs, obj_list)
|
|
|
|
|
|
# All kwargs should have been popped at this time.
|
|
|
if len(kwargs) > 0:
|
|
|
raise TypeError("Unrecognised parameters for search: %s."
|
|
|
- " Supported attributes: %s" % (kwargs, 'name'))
|
|
|
-
|
|
|
- filters = {'Name': name}
|
|
|
- routes = [AzureRouter(self.provider, route)
|
|
|
- for route in azure_helpers.filter_by_tag(
|
|
|
- self.provider.azure_client.list_route_tables(), filters)]
|
|
|
+ " Supported attributes: %s" % (kwargs,
|
|
|
+ ", ".join(filters)))
|
|
|
|
|
|
- return ClientPagedResultList(self.provider, routes)
|
|
|
+ return ClientPagedResultList(self.provider,
|
|
|
+ matches if matches else [])
|
|
|
|
|
|
def list(self, limit=None, marker=None):
|
|
|
routes = [AzureRouter(self.provider, route)
|
|
|
@@ -1071,10 +1124,15 @@ class AzureRouterService(BaseRouterService):
|
|
|
routes,
|
|
|
limit=limit, marker=marker)
|
|
|
|
|
|
- def create(self, name, network):
|
|
|
- AzureRouter.assert_valid_resource_name(name)
|
|
|
- parameters = {"location": self.provider.region_name,
|
|
|
- 'tags': {'Name': name}}
|
|
|
+ def create(self, network, label=None):
|
|
|
+ AzureRouter.assert_valid_resource_name(label)
|
|
|
+ parameters = {"location": self.provider.region_name}
|
|
|
+ if label:
|
|
|
+ parameters.update(tags={'Label': label})
|
|
|
+ else:
|
|
|
+ label = 'cb-router'
|
|
|
+
|
|
|
+ router_name = "{0}-{1}".format(label, uuid.uuid4().hex[:6])
|
|
|
route = self.provider.azure_client. \
|
|
|
- create_route_table(name, parameters)
|
|
|
+ create_route_table(router_name, parameters)
|
|
|
return AzureRouter(self.provider, route)
|