Ver código fonte

Made label mandatory for all create methods

Nuwan Goonasekera 7 anos atrás
pai
commit
cfa243140c

+ 1 - 1
cloudbridge/cloud/base/resources.py

@@ -829,7 +829,7 @@ class BaseNetwork(BaseCloudResource, BaseObjectLifeCycleMixin, Network):
             timeout=timeout,
             interval=interval)
 
-    def create_subnet(self, cidr_block, label=None, zone=None):
+    def create_subnet(self, label, cidr_block, zone=None):
         return self._provider.networking.subnets.create(
             label=label, network=self, cidr_block=cidr_block, zone=zone)
 

+ 12 - 20
cloudbridge/cloud/interfaces/resources.py

@@ -640,7 +640,7 @@ class Instance(ObjectLifeCycleMixin, LabeledCloudResource):
         pass
 
     @abstractmethod
-    def create_image(self, label=None):
+    def create_image(self, label):
         """
         Create a new image based on this instance.
 
@@ -731,7 +731,7 @@ class LaunchConfig(object):
         lc.add_block_device(...)
 
         inst = provider.compute.instances.create(
-            image, vm_type, network, label='MyVM', launch_config=lc)
+            'MyVM', image, vm_type, network, launch_config=lc)
     """
 
     @abstractmethod
@@ -950,18 +950,18 @@ class Network(ObjectLifeCycleMixin, LabeledCloudResource):
         pass
 
     @abstractmethod
-    def create_subnet(self, cidr_block, label=None, zone=None):
+    def create_subnet(self, label, cidr_block, zone=None):
         """
         Create a new network subnet and associate it with this Network.
 
-        :type cidr_block: ``str``
-        :param cidr_block: CIDR block within this Network to assign to the
-                           subnet.
-
         :type label: ``str``
         :param label: The subnet label. The subnet name will be derived from
                       this label.
 
+        :type cidr_block: ``str``
+        :param cidr_block: CIDR block within this Network to assign to the
+                           subnet.
+
         :type zone: ``str``
         :param zone: Placement zone where to create the subnet. Some providers
                      may not support subnet zones, in which case the value is
@@ -1326,15 +1326,15 @@ class GatewayContainer(PageableObjectMixin):
     __metaclass__ = ABCMeta
 
     @abstractmethod
-    def get_or_create_inet_gateway(self, label=None):
+    def get_or_create_inet_gateway(self, name=None):
         """
         Creates new or returns an existing internet gateway for a network.
 
         The returned gateway object can subsequently be attached to a router to
         provide internet routing to a network.
 
-        :type  label: ``str``
-        :param label: The gateway label.
+        :type  name: ``str``
+        :param name: The gateway label.
 
         :rtype: ``object``  of :class:`.InternetGateway` or ``None``
         :return: an InternetGateway object of ``None`` if not found.
@@ -1362,20 +1362,12 @@ class GatewayContainer(PageableObjectMixin):
         pass
 
 
-class Gateway(LabeledCloudResource):
+class Gateway(CloudResource):
     """
     Represents a gateway resource.
     """
     __metaclass__ = ABCMeta
 
-    @LabeledCloudResource.label.setter
-    @abstractmethod
-    def label(self, value):
-        """
-        Set the resource label.
-        """
-        pass
-
     @abstractproperty
     def network_id(self):
         """
@@ -1606,7 +1598,7 @@ class Volume(ObjectLifeCycleMixin, LabeledCloudResource):
         pass
 
     @abstractmethod
-    def create_snapshot(self, label=None, description=None):
+    def create_snapshot(self, label, description=None):
         """
         Create a snapshot of this Volume.
 

+ 27 - 27
cloudbridge/cloud/interfaces/services.py

@@ -98,7 +98,7 @@ class ComputeService(CloudService):
             image = provider.compute.images.find(name='Ubuntu 16.04')[0]
             size = provider.compute.vm_types.find(name='m1.small')
             instance = provider.compute.instances.create('Hello', image, size)
-            print(instance.id, instance.name)
+            print(instance.id, instance.label)
 
         :rtype: :class:`.InstanceService`
         :return: an InstanceService object
@@ -213,13 +213,17 @@ class InstanceService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, image, vm_type, subnet, label=None, zone=None,
+    def create(self, label, image, vm_type, subnet, zone=None,
                key_pair=None, vm_firewalls=None, user_data=None,
                launch_config=None,
                **kwargs):
         """
         Creates a new virtual machine instance.
 
+        :type  label: ``str``
+        :param label: The label of the virtual machine instance. The instance
+                      name will be derived from this label.
+
         :type  image: ``MachineImage`` or ``str``
         :param image: The MachineImage object or id to boot the virtual machine
                       with
@@ -239,10 +243,6 @@ class InstanceService(PageableObjectMixin, CloudService):
                        work. Some providers (e.g. OpenStack) support a null
                        value but the behaviour is implementation specific.
 
-        :type  label: ``str``
-        :param label: The label of the virtual machine instance. The instance
-                      name will be derived from this label.
-
         :type  zone: ``Zone`` or ``str``
         :param zone: The Zone or its id, where the instance should be placed.
                      This parameter is provided for legacy compatibility (with
@@ -333,19 +333,19 @@ class VolumeService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, size, zone, label=None, snapshot=None, description=None):
+    def create(self, label, size, zone, snapshot=None, description=None):
         """
         Creates a new volume.
 
+        :type  label: ``str``
+        :param label: The label for the volume.
+
         :type  size: ``int``
         :param size: The size of the volume (in GB).
 
         :type  zone: ``str`` or :class:`.PlacementZone` object
         :param zone: The availability zone in which the Volume will be created.
 
-        :type  label: ``str``
-        :param label: The label for the volume.
-
         :type  snapshot: ``str`` or :class:`.Snapshot` object
         :param snapshot: An optional reference to a snapshot from which this
                          volume should be created.
@@ -400,16 +400,16 @@ class SnapshotService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, volume, label=None, description=None):
+    def create(self, label, volume, description=None):
         """
         Creates a new snapshot off a volume.
 
-        :type  volume: ``str`` or ``Volume``
-        :param volume: The volume to create a snapshot of.
-
         :type  label: ``str``
         :param label: The label for the snapshot.
 
+        :type  volume: ``str`` or ``Volume``
+        :param volume: The volume to create a snapshot of.
+
         :type  description: ``str``
         :param description: An optional description that may be supported by
                             some providers. Providers that do not support this
@@ -628,7 +628,7 @@ class NetworkService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, cidr_block, label=None):
+    def create(self, label, cidr_block):
         """
         Create a new network.
 
@@ -730,10 +730,13 @@ class SubnetService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, network_id, cidr_block, zone, label=None):
+    def create(self, label, network_id, cidr_block, zone):
         """
         Create a new subnet within the supplied network.
 
+        :type label: ``str``
+        :param label: The subnet label.
+
         :type network: :class:`.Network` object or ``str``
         :param network: Network object or ID under which to create the subnet.
 
@@ -745,9 +748,6 @@ class SubnetService(PageableObjectMixin, CloudService):
         :param zone: A placement zone for the subnet. Some providers
                      may not support this, in which case the value is ignored.
 
-        :type label: ``str``
-        :param label: The subnet label.
-
         :rtype: ``object`` of :class:`.Subnet`
         :return:  A Subnet object
         """
@@ -824,16 +824,16 @@ class RouterService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, network, label=None):
+    def create(self, label, network):
         """
         Create a new router.
 
-        :type network: :class:`.Network` object or ``str``
-        :param network: Network object or ID under which to create the router.
-
         :type label: ``str``
         :param label: A router label.
 
+        :type network: :class:`.Network` object or ``str``
+        :param network: Network object or ID under which to create the router.
+
         :rtype: ``object`` of :class:`.Router`
         :return:  A Router object
         """
@@ -1119,16 +1119,16 @@ class VMFirewallService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def create(self, network_id, label=None, description=None):
+    def create(self, label, network_id, description=None):
         """
         Create a new VMFirewall.
 
-        :type  network_id: ``str``
-        :param network_id: Network ID under which to create the VM firewall.
-
         :type label: str
         :param label: The label for the new VM firewall.
 
+        :type  network_id: ``str``
+        :param network_id: Network ID under which to create the VM firewall.
+
         :type description: str
         :param description: The description of the new VM firewall.
 

+ 7 - 18
cloudbridge/cloud/providers/aws/resources.py

@@ -310,7 +310,7 @@ class AWSInstance(BaseInstance):
     def key_pair_id(self):
         return self._ec2_instance.key_name
 
-    def create_image(self, label=None):
+    def create_image(self, label):
         self.assert_valid_resource_label(label)
         name = self._generate_name_from_label(label, 'cb-img')
 
@@ -477,7 +477,7 @@ class AWSVolume(BaseVolume):
                 Device=a.device,
                 Force=force)
 
-    def create_snapshot(self, label=None, description=None):
+    def create_snapshot(self, label, description=None):
         snap = AWSSnapshot(
             self._provider,
             self._volume.create_snapshot(
@@ -1219,11 +1219,9 @@ class AWSGatewayContainer(BaseGatewayContainer):
                                   cb_resource=AWSInternetGateway,
                                   boto_collection_name='internet_gateways')
 
-    def get_or_create_inet_gateway(self, label=None):
-        log.debug("Get or create inet gateway %s on net %s", label,
+    def get_or_create_inet_gateway(self, name=None):
+        log.debug("Get or create inet gateway %s on net %s", name,
                   self._network)
-        AWSInternetGateway.assert_valid_resource_label(label)
-
         network_id = self._network.id if isinstance(
             self._network, AWSNetwork) else self._network
         # Don't filter by label because it may conflict with at least the
@@ -1235,8 +1233,9 @@ class AWSGatewayContainer(BaseGatewayContainer):
             return gtw[0]  # There can be only one gtw attached to a VPC
         # Gateway does not exist so create one and attach to the supplied net
         cb_gateway = self.svc.create('create_internet_gateway')
-        if label:
-            cb_gateway.label = label
+        if name:
+            AWSInternetGateway.assert_valid_resource_name(name)
+            cb_gateway.label = name
         cb_gateway._gateway.attach_to_vpc(VpcId=network_id)
         return cb_gateway
 
@@ -1269,18 +1268,8 @@ class AWSInternetGateway(BaseInternetGateway):
 
     @property
     def name(self):
-        return self.id
-
-    @property
-    def label(self):
         return find_tag_value(self._gateway.tags, 'Name')
 
-    @label.setter
-    # pylint:disable=arguments-differ
-    def label(self, value):
-        self.assert_valid_resource_label(value)
-        self._gateway.create_tags(Tags=[{'Key': 'Name', 'Value': value or ""}])
-
     def refresh(self):
         try:
             self._gateway.reload()

+ 9 - 9
cloudbridge/cloud/providers/aws/services.py

@@ -132,7 +132,7 @@ class AWSVMFirewallService(BaseVMFirewallService):
     def list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
 
-    def create(self, network_id, label=None, description=None):
+    def create(self, label, network_id, description=None):
         log.debug("Creating Firewall Service with the parameters "
                   "[label: %s id: %s description: %s]", label, network_id,
                   description)
@@ -212,7 +212,7 @@ class AWSVolumeService(BaseVolumeService):
     def list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
 
-    def create(self, size, zone, label=None, snapshot=None, description=None):
+    def create(self, label, size, zone, snapshot=None, description=None):
         log.debug("Creating AWS Volume Service with the parameters "
                   "[label: %s size: %s zone: %s snapshot: %s "
                   "description: %s]", label, size, zone, snapshot,
@@ -261,7 +261,7 @@ class AWSSnapshotService(BaseSnapshotService):
     def list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
 
-    def create(self, volume, label=None, description=None):
+    def create(self, label, volume, description=None):
         """
         Creates a new snapshot of a given volume.
         """
@@ -409,7 +409,7 @@ class AWSInstanceService(BaseInstanceService):
                                   cb_resource=AWSInstance,
                                   boto_collection_name='instances')
 
-    def create(self, image, vm_type, subnet, zone, label=None,
+    def create(self, label, image, vm_type, subnet, zone,
                key_pair=None, vm_firewalls=None, user_data=None,
                launch_config=None, **kwargs):
         log.debug("Creating AWS Instance Service with the params "
@@ -667,7 +667,7 @@ class AWSNetworkService(BaseNetworkService):
         log.debug("Searching for AWS Network Service %s", label)
         return self.svc.find(filter_name='tag:Name', filter_value=label)
 
-    def create(self, cidr_block, label=None):
+    def create(self, label, cidr_block):
         log.debug("Creating AWS Network Service with the params "
                   "[label: %s block: %s]", label, cidr_block)
         AWSNetwork.assert_valid_resource_label(label)
@@ -712,7 +712,7 @@ class AWSSubnetService(BaseSubnetService):
         log.debug("Searching for AWS Subnet Service %s", label)
         return self.svc.find(filter_name='tag:Name', filter_value=label)
 
-    def create(self, network, cidr_block, zone, label=None):
+    def create(self, label, network, cidr_block, zone):
         log.debug("Creating AWS Subnet Service with the params "
                   "[label: %s network: %s block: %s zone: %s]",
                   label, network, cidr_block, zone)
@@ -758,8 +758,8 @@ class AWSSubnetService(BaseSubnetService):
         region = self.provider.compute.regions.get(self.provider.region_name)
         default_sn = None
         for i, z in enumerate(region.zones):
-            sn = self.create(default_net, '10.0.{0}.0/24'.format(i), z.name,
-                             label=AWSSubnet.CB_DEFAULT_SUBNET_LABEL)
+            sn = self.create(AWSSubnet.CB_DEFAULT_SUBNET_LABEL, default_net,
+                             '10.0.{0}.0/24'.format(i), z)
             if zone and zone == z.name:
                 default_sn = sn
         # No specific zone was supplied; return the last created subnet
@@ -800,7 +800,7 @@ class AWSRouterService(BaseRouterService):
     def list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
 
-    def create(self, network, label=None):
+    def create(self, label, network):
         log.debug("Creating AWS Router Service with the params "
                   "[label: %s network: %s]", label, network)
         AWSRouter.assert_valid_resource_label(label)

+ 7 - 12
cloudbridge/cloud/providers/azure/resources.py

@@ -536,12 +536,12 @@ class AzureVolume(BaseVolume):
                     vm.storage_profile.data_disks.remove(item)
                     self._provider.azure_client.update_vm(vm.id, vm)
 
-    def create_snapshot(self, label=None, description=None):
+    def create_snapshot(self, label, description=None):
         """
         Create a snapshot of this Volume.
         """
-        return self._provider.storage.snapshots.create(self,
-                                                       label, description)
+        return self._provider.storage.snapshots.create(label, self,
+                                                       description)
 
     def delete(self):
         """
@@ -677,8 +677,7 @@ class AzureSnapshot(BaseSnapshot):
         Create a new Volume from this Snapshot.
         """
         return self._provider.storage.volumes. \
-            create(self.size, label=self.name,
-                   zone=placement, snapshot=self)
+            create(self.name, self.size, zone=placement, snapshot=self)
 
 
 class AzureMachineImage(BaseMachineImage):
@@ -834,7 +833,7 @@ class AzureGatewayContainer(BaseGatewayContainer):
         self.gateway_singleton = AzureInternetGateway(self._provider, None,
                                                       network)
 
-    def get_or_create_inet_gateway(self, label=None):
+    def get_or_create_inet_gateway(self, name=None):
         gateway = AzureInternetGateway(self._provider, None, self._network)
         return gateway
 
@@ -941,7 +940,7 @@ class AzureNetwork(BaseNetwork):
         """
         return self._provider.networking.subnets.list(network=self.id)
 
-    def create_subnet(self, cidr_block, label=None, zone=None):
+    def create_subnet(self, label, cidr_block, zone=None):
         """
         Create the subnet with cidr_block
         :param cidr_block:
@@ -950,7 +949,7 @@ class AzureNetwork(BaseNetwork):
         :return:
         """
         return self._provider.networking.subnets. \
-            create(network=self.id, cidr_block=cidr_block, label=label)
+            create(label=label, network=self.id, cidr_block=cidr_block)
 
     @property
     def gateways(self):
@@ -1726,10 +1725,6 @@ class AzureInternetGateway(BaseInternetGateway):
     def name(self):
         return "cb-gateway-wrapper"
 
-    @property
-    def label(self):
-        return None
-
     def refresh(self):
         pass
 

+ 26 - 34
cloudbridge/cloud/providers/azure/services.py

@@ -66,12 +66,11 @@ class AzureVMFirewallService(BaseVMFirewallService):
                for fw in self.provider.azure_client.list_vm_firewall()]
         return ClientPagedResultList(self.provider, fws, limit, marker)
 
-    def create(self, label=None, description=None, network_id=None):
+    def create(self, label, description=None, network_id=None):
+        AzureVMFirewall.assert_valid_resource_label(label)
         name = AzureVMFirewall._generate_name_from_label(label, "cb-fw")
-        parameters = {"location": self.provider.region_name}
-        if label:
-            AzureVMFirewall.assert_valid_resource_label(label)
-            parameters.update({'tags': {'Label': label}})
+        parameters = {"location": self.provider.region_name,
+                      "tags": {'Label': label}}
 
         if description:
             tags = parameters.get('tags')
@@ -307,15 +306,14 @@ class AzureVolumeService(BaseVolumeService):
         return ClientPagedResultList(self.provider, cb_vols,
                                      limit=limit, marker=marker)
 
-    def create(self, size, zone=None, label=None, description=None,
+    def create(self, label, size, zone=None, description=None,
                snapshot=None):
         """
         Creates a new volume.
         """
+        AzureVolume.assert_valid_resource_label(label)
         disk_name = AzureVolume._generate_name_from_label(label, "cb-vol")
-        if label:
-            AzureVolume.assert_valid_resource_label(label)
-            tags = {'Label': label}
+        tags = {'Label': label}
 
         zone_id = zone.id if isinstance(zone, PlacementZone) else zone
         snapshot = (self.provider.storage.snapshots.get(snapshot)
@@ -403,25 +401,20 @@ class AzureSnapshotService(BaseSnapshotService):
                  self.provider.azure_client.list_snapshots()]
         return ClientPagedResultList(self.provider, snaps, limit, marker)
 
-    def create(self, volume, label=None, description=None):
+    def create(self, label, volume, description=None):
         """
         Creates a new snapshot of a given volume.
         """
-        volume = (self.provider.storage.volumes.get(volume)
-                  if isinstance(volume, str) else volume)
-
+        AzureSnapshot.assert_valid_resource_label(label)
         snapshot_name = AzureSnapshot._generate_name_from_label(label,
                                                                 "cb-snap")
-
-        if label:
-            AzureSnapshot.assert_valid_resource_label(label)
-            tags = {'Label': label}
-
+        tags = {'Label': label}
         if description:
-            if not tags:
-                tags = {}
             tags.update(Description=description)
 
+        volume = (self.provider.storage.volumes.get(volume)
+                  if isinstance(volume, str) else volume)
+
         params = {
             'location': self.provider.azure_client.region_name,
             'creation_data': {
@@ -468,7 +461,7 @@ class AzureInstanceService(BaseInstanceService):
     def __init__(self, provider):
         super(AzureInstanceService, self).__init__(provider)
 
-    def create(self, image, vm_type, label, subnet=None, zone=None,
+    def create(self, label, image, vm_type, subnet=None, zone=None,
                key_pair=None, vm_firewalls=None, user_data=None,
                launch_config=None, **kwargs):
 
@@ -899,7 +892,7 @@ class AzureNetworkService(BaseNetworkService):
         return ClientPagedResultList(self.provider,
                                      matches if matches else [])
 
-    def create(self, cidr_block, label=None):
+    def create(self, label, cidr_block):
         AzureNetwork.assert_valid_resource_label(label)
         params = {
             'location': self.provider.azure_client.region_name,
@@ -1016,18 +1009,18 @@ class AzureSubnetService(BaseSubnetService):
         return ClientPagedResultList(self.provider,
                                      matches if matches else [])
 
-    def create(self, network, cidr_block, label=None, **kwargs):
+    def create(self, label, network, cidr_block, **kwargs):
         """
         Create subnet
         """
-        network_id = network.id \
-            if isinstance(network, Network) else network
-
         # Although Subnet doesn't support labels, we use the parent Network's
         # tags to track the subnet's labels
         AzureSubnet.assert_valid_resource_label(label)
         subnet_name = AzureSubnet._generate_name_from_label(label, "cb-sn")
 
+        network_id = network.id \
+            if isinstance(network, Network) else network
+
         subnet_info = self.provider.azure_client\
             .create_subnet(
                 network_id,
@@ -1057,10 +1050,10 @@ class AzureSubnetService(BaseSubnetService):
             network = networks[0]
         else:
             network = self.provider.networking.networks.create(
-                '10.0.0.0/16', label=AzureNetwork.CB_DEFAULT_NETWORK_LABEL)
+                AzureNetwork.CB_DEFAULT_NETWORK_LABEL, '10.0.0.0/16')
 
-        subnet = self.create(network, default_cidr,
-                             label=AzureSubnet.CB_DEFAULT_SUBNET_LABEL)
+        subnet = self.create(AzureSubnet.CB_DEFAULT_SUBNET_LABEL, network,
+                             default_cidr)
         return subnet
 
     def delete(self, subnet):
@@ -1103,13 +1096,12 @@ class AzureRouterService(BaseRouterService):
                                      routes,
                                      limit=limit, marker=marker)
 
-    def create(self, network, label=None):
+    def create(self, label, network):
+        AzureRouter.assert_valid_resource_label(label)
         router_name = AzureRouter._generate_name_from_label(label, "cb-router")
 
-        parameters = {"location": self.provider.region_name}
-        if label:
-            AzureRouter.assert_valid_resource_label(label)
-            parameters.update(tags={'Label': label})
+        parameters = {"location": self.provider.region_name,
+                      "Label": label}
 
         route = self.provider.azure_client. \
             create_route_table(router_name, parameters)

+ 5 - 8
cloudbridge/cloud/providers/openstack/resources.py

@@ -447,7 +447,7 @@ class OpenStackInstance(BaseInstance):
         """
         return self._os_instance.key_name
 
-    def create_image(self, label=None):
+    def create_image(self, label):
         """
         Create a new image based on this instance.
         """
@@ -658,14 +658,14 @@ class OpenStackVolume(BaseVolume):
         """
         self._volume.detach()
 
-    def create_snapshot(self, label=None, description=None):
+    def create_snapshot(self, label, description=None):
         """
         Create a snapshot of this Volume.
         """
         log.debug("Creating snapchat of volume: %s with the "
                   "description: %s", label, description)
         return self._provider.storage.snapshots.create(
-            self, label=label, description=description)
+            label, self, description=description)
 
     def delete(self):
         """
@@ -809,7 +809,7 @@ class OpenStackGatewayContainer(BaseGatewayContainer):
         # all available networks and perform an assignment test to infer valid
         # floating ip nets.
         dummy_router = self._provider.networking.routers.create(
-            network=self._network, label='cb-conn-test-router')
+            label='cb-conn-test-router', network=self._network)
         with cb_helpers.cleanup_action(lambda: dummy_router.delete()):
             try:
                 dummy_router.attach_gateway(external_net)
@@ -817,11 +817,8 @@ class OpenStackGatewayContainer(BaseGatewayContainer):
             except Exception:
                 return False
 
-    def get_or_create_inet_gateway(self, label=None):
+    def get_or_create_inet_gateway(self, name=None):
         """For OS, inet gtw is any net that has `external` property set."""
-        if label:
-            OpenStackInternetGateway.assert_valid_resource_label(label)
-
         external_nets = (n for n in self._provider.networking.networks
                          if n.external)
         for net in external_nets:

+ 7 - 7
cloudbridge/cloud/providers/openstack/services.py

@@ -208,7 +208,7 @@ class OpenStackVMFirewallService(BaseVMFirewallService):
         return ClientPagedResultList(self.provider, firewalls,
                                      limit=limit, marker=marker)
 
-    def create(self, description, network_id, label=None):
+    def create(self, label, description, network_id):
         OpenStackVMFirewall.assert_valid_resource_label(label)
         name = OpenStackVMFirewall._generate_name_from_label(label, 'cb-fw')
         log.debug("Creating OpenStack VM Firewall with the params: "
@@ -368,7 +368,7 @@ class OpenStackVolumeService(BaseVolumeService):
 
         return oshelpers.to_server_paged_list(self.provider, cb_vols, limit)
 
-    def create(self, size, zone, label=None, snapshot=None, description=None):
+    def create(self, label, size, zone, snapshot=None, description=None):
         """
         Creates a new volume.
         """
@@ -437,7 +437,7 @@ class OpenStackSnapshotService(BaseSnapshotService):
                              'marker': marker})]
         return oshelpers.to_server_paged_list(self.provider, cb_snaps, limit)
 
-    def create(self, volume, label=None, description=None):
+    def create(self, label, volume, description=None):
         """
         Creates a new snapshot of a given volume.
         """
@@ -582,7 +582,7 @@ class OpenStackInstanceService(BaseInstanceService):
     def __init__(self, provider):
         super(OpenStackInstanceService, self).__init__(provider)
 
-    def create(self, image, vm_type, subnet, zone, label=None,
+    def create(self, label, image, vm_type, subnet, zone,
                key_pair=None, vm_firewalls=None, user_data=None,
                launch_config=None,
                **kwargs):
@@ -812,7 +812,7 @@ class OpenStackNetworkService(BaseNetworkService):
                     .get('networks') if network]
         return ClientPagedResultList(self.provider, networks)
 
-    def create(self, cidr_block, label=None):
+    def create(self, label, cidr_block):
         log.debug("Creating OpenStack Network with the params: "
                   "[label: %s Cinder Block: %s]", label, cidr_block)
         OpenStackNetwork.assert_valid_resource_label(label)
@@ -846,7 +846,7 @@ class OpenStackSubnetService(BaseSubnetService):
         return ClientPagedResultList(self.provider, subnets,
                                      limit=limit, marker=marker)
 
-    def create(self, network, cidr_block, zone, label=None):
+    def create(self, label, network, cidr_block, zone):
         """zone param is ignored."""
         log.debug("Creating OpenStack Subnet with the params: "
                   "[Label: %s Network: %s Cinder Block: %s Zone: -ignored-]",
@@ -920,7 +920,7 @@ class OpenStackRouterService(BaseRouterService):
         matches = cb_helpers.generic_find(filters, kwargs, obj_list)
         return ClientPagedResultList(self._provider, list(matches))
 
-    def create(self, network, label=None):
+    def create(self, label, network):
         """
         ``network`` is not used by OpenStack.
 

+ 1 - 1
docs/getting_started.rst

@@ -121,7 +121,7 @@ attaching an internet gateway to the subnet via a router.
     sn = net.create_subnet(cidr_block='10.0.0.0/28', label='my-subnet')
     router = provider.networking.routers.create(network=net, label='my-router')
     router.attach_subnet(sn)
-    gateway = net.gateways.get_or_create_inet_gateway(label='my-gateway')
+    gateway = net.gateways.get_or_create_inet_gateway(name='my-gateway')
     router.attach_gateway(gateway)
 
 

+ 1 - 1
docs/topics/design_decisions.rst

@@ -87,7 +87,7 @@ It is intended as a reference.
   label at all, yet needed to be named during object creation. However, we
   could not use display_id for this purpose became the display_id, by
   definition, is unchangeable. It could not be called label because the label,
-  in constrast, was changeable. Therefore, it seemed like we were back to
+  in contrast, was changeable. Therefore, it seemed like we were back to
   calling it `name` instead, introducing yet a fourth term. To simplify this,
   it was then decided that `display_id` and `name` would be collapsed together
   into one term and be called `name` instead. All resources would have an `id`

+ 1 - 1
docs/topics/networking.rst

@@ -94,7 +94,7 @@ The additional step that's required here is to assign a floating IP to the VM:
 
     router = provider.networking.routers.create(network=net, name='my-router')
     router.attach_subnet(sn)
-    gateway = net.gateways.get_or_create_inet_gateway(net, name)
+    gateway = net.gateways.get_or_create_inet_gateway(name)
     router.attach_gateway(gateway)
 
     fip = provider.networking.floating_ips.create()

+ 8 - 10
test/helpers/__init__.py

@@ -116,12 +116,11 @@ def create_test_network(provider, label):
     """
     Create a network with one subnet, returning the network and subnet objects.
     """
-    net = provider.networking.networks.create(cidr_block='10.0.0.0/16',
-                                              label=label)
+    net = provider.networking.networks.create(label=label,
+                                              cidr_block='10.0.0.0/16')
     cidr_block = (net.cidr_block).split('/')[0] or '10.0.0.1'
-    sn = net.create_subnet(cidr_block='{0}/28'.format(cidr_block),
-                           zone=get_provider_test_data(provider, 'placement'),
-                           label=label)
+    sn = net.create_subnet(label=label, cidr_block='{0}/28'.format(cidr_block),
+                           zone=get_provider_test_data(provider, 'placement'))
     return net, sn
 
 
@@ -142,9 +141,9 @@ def get_test_gateway(provider, label):
     This includes creating a network for the gateway, which is also returned.
     """
     net_label = 'cb-testgwnet-{0}'.format(get_uuid())
-    net = provider.networking.networks.create(
-        cidr_block='10.0.0.0/16', label=net_label)
-    return net, net.gateways.get_or_create_inet_gateway(label=label)
+    net = provider.networking.networks.create(label=net_label,
+                                              cidr_block='10.0.0.0/16')
+    return net, net.gateways.get_or_create_inet_gateway(name=label)
 
 
 def delete_test_gateway(network, gateway):
@@ -161,9 +160,8 @@ def create_test_instance(
         key_pair=None, vm_firewalls=None, user_data=None):
 
     instance = provider.compute.instances.create(
-        get_provider_test_data(provider, 'image'),
+        instance_label, get_provider_test_data(provider, 'image'),
         get_provider_test_data(provider, 'vm_type'),
-        label=instance_label,
         subnet=subnet,
         zone=get_provider_test_data(provider, 'placement'),
         key_pair=key_pair,

+ 9 - 13
test/test_block_store_service.py

@@ -27,9 +27,8 @@ class CloudBlockStoreServiceTestCase(ProviderTestBase):
         """
         def create_vol(label):
             return self.provider.storage.volumes.create(
-                1,
-                helpers.get_provider_test_data(self.provider, "placement"),
-                label=label)
+                label, 1,
+                helpers.get_provider_test_data(self.provider, "placement"))
 
         def cleanup_vol(vol):
             if vol:
@@ -58,7 +57,7 @@ class CloudBlockStoreServiceTestCase(ProviderTestBase):
                 self.provider, label, subnet=subnet)
 
             test_vol = self.provider.storage.volumes.create(
-                1, test_instance.zone_id, label=label)
+                label, 1, test_instance.zone_id)
             with helpers.cleanup_action(lambda: test_vol.delete()):
                 test_vol.wait_till_ready()
                 test_vol.attach(test_instance, '/dev/sda2')
@@ -89,7 +88,7 @@ class CloudBlockStoreServiceTestCase(ProviderTestBase):
                 self.provider, label, subnet=subnet)
 
             test_vol = self.provider.storage.volumes.create(
-                1, test_instance.zone_id, label=label, description=vol_desc)
+                label, 1, test_instance.zone_id, description=vol_desc)
             with helpers.cleanup_action(lambda: test_vol.delete()):
                 test_vol.wait_till_ready()
                 self.assertTrue(
@@ -140,9 +139,8 @@ class CloudBlockStoreServiceTestCase(ProviderTestBase):
         """
         label = "cb-crudsnap-{0}".format(helpers.get_uuid())
         test_vol = self.provider.storage.volumes.create(
-            1,
-            helpers.get_provider_test_data(self.provider, "placement"),
-            label=label)
+            label, 1,
+            helpers.get_provider_test_data(self.provider, "placement"))
         with helpers.cleanup_action(lambda: test_vol.delete()):
             test_vol.wait_till_ready()
 
@@ -177,9 +175,8 @@ class CloudBlockStoreServiceTestCase(ProviderTestBase):
         """
         label = "cb-snapprop-{0}".format(helpers.get_uuid())
         test_vol = self.provider.storage.volumes.create(
-            1,
-            helpers.get_provider_test_data(self.provider, "placement"),
-            label=label)
+            label, 1,
+            helpers.get_provider_test_data(self.provider, "placement"))
         with helpers.cleanup_action(lambda: test_vol.delete()):
             test_vol.wait_till_ready()
             snap_label = "cb-snap-{0}".format(label)
@@ -215,9 +212,8 @@ class CloudBlockStoreServiceTestCase(ProviderTestBase):
                 # Test volume creation from a snapshot (via VolumeService)
                 sv_label = "cb-snapvol-{0}".format(test_snap.name)
                 snap_vol = self.provider.storage.volumes.create(
-                    1,
+                    sv_label, 1,
                     helpers.get_provider_test_data(self.provider, "placement"),
-                    label=sv_label,
                     snapshot=test_snap)
                 with helpers.cleanup_action(lambda: snap_vol.delete()):
                     snap_vol.wait_till_ready()

+ 4 - 5
test/test_compute_service.py

@@ -224,10 +224,9 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                                 " not stable enough yet")
 
         test_vol = self.provider.storage.volumes.create(
-           1,
+           label, 1,
            helpers.get_provider_test_data(self.provider,
-                                          "placement"),
-           label=label)
+                                          "placement"))
         with helpers.cleanup_action(lambda: test_vol.delete()):
             test_vol.wait_till_ready()
             test_snap = test_vol.create_snapshot(label=label,
@@ -334,7 +333,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
                 (fw, test_inst.vm_firewalls))
 
             # check floating ips
-            router = self.provider.networking.routers.create(net, label=label)
+            router = self.provider.networking.routers.create(label, net)
             gateway = None
 
             def cleanup_router(router, gateway):
@@ -346,7 +345,7 @@ class CloudComputeServiceTestCase(ProviderTestBase):
             with helpers.cleanup_action(lambda: cleanup_router(router,
                                                                gateway)):
                 router.attach_subnet(subnet)
-                gateway = net.gateways.get_or_create_inet_gateway(label=label)
+                gateway = net.gateways.get_or_create_inet_gateway(name=label)
                 router.attach_gateway(gateway)
                 # check whether adding an elastic ip works
                 fip = gateway.floating_ips.create()

+ 4 - 4
test/test_network_service.py

@@ -86,7 +86,7 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
 
         def create_subnet(label):
             return self.provider.networking.subnets.create(
-                network=net, cidr_block="10.0.0.0/24", label=label,
+                label=label, network=net, cidr_block="10.0.0.0/24",
                 zone=helpers.get_provider_test_data(
                     self.provider, 'placement'))
 
@@ -167,8 +167,8 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         with helpers.cleanup_action(lambda: _cleanup(net, sn, router, gteway)):
             net = self.provider.networking.networks.create(
                 label=label, cidr_block='10.0.0.0/16')
-            router = self.provider.networking.routers.create(network=net,
-                                                             label=label)
+            router = self.provider.networking.routers.create(label=label,
+                                                             network=net)
             cidr = '10.0.1.0/24'
             sn = net.create_subnet(label=label, cidr_block=cidr,
                                    zone=helpers.get_provider_test_data(
@@ -188,7 +188,7 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
 #                     router.id, router.network_id))
 
             router.attach_subnet(sn)
-            gteway = net.gateways.get_or_create_inet_gateway(label=label)
+            gteway = net.gateways.get_or_create_inet_gateway(name=label)
             router.attach_gateway(gteway)
             # TODO: add a check for routes after that's been implemented
 

+ 2 - 3
test/test_object_life_cycle.py

@@ -16,9 +16,8 @@ class CloudObjectLifeCycleTestCase(ProviderTestBase):
         """
         label = "cb-objlifecycle-{0}".format(helpers.get_uuid())
         test_vol = self.provider.storage.volumes.create(
-            1,
-            helpers.get_provider_test_data(self.provider, "placement"),
-            label=label)
+            label, 1,
+            helpers.get_provider_test_data(self.provider, "placement"))
 
         # Waiting for an invalid timeout should raise an exception
         with self.assertRaises(AssertionError):