This is an automated email from the ASF dual-hosted git repository.

micafer pushed a commit to branch unify_create_node
in repository https://gitbox.apache.org/repos/asf/libcloud.git

commit 05b47c5ef9010e4ce48eb2b4d2e30594fd8599a8
Author: Miguel Caballer <[email protected]>
AuthorDate: Wed Jul 22 13:03:50 2026 +0200

    Unify NodeDriver functions
---
 libcloud/compute/drivers/abiquo.py               |  4 +-
 libcloud/compute/drivers/azure.py                | 36 +++++++++++++++---
 libcloud/compute/drivers/azure_arm.py            |  2 +-
 libcloud/compute/drivers/brightbox.py            |  5 ++-
 libcloud/compute/drivers/cloudscale.py           | 10 ++++-
 libcloud/compute/drivers/cloudsigma.py           | 45 ++++++++++++++++++----
 libcloud/compute/drivers/digitalocean.py         | 30 ++++++++++++---
 libcloud/compute/drivers/ec2.py                  | 27 +++++++++++--
 libcloud/compute/drivers/equinixmetal.py         | 23 ++++++++++--
 libcloud/compute/drivers/gandi.py                | 24 +++++++++++-
 libcloud/compute/drivers/gce.py                  | 13 ++++++-
 libcloud/compute/drivers/gig_g8.py               | 33 +++++++++++++---
 libcloud/compute/drivers/gridscale.py            | 25 ++++++++++--
 libcloud/compute/drivers/kamatera.py             | 10 ++++-
 libcloud/compute/drivers/ktucloud.py             |  4 +-
 libcloud/compute/drivers/kubevirt.py             |  7 +++-
 libcloud/compute/drivers/linode.py               | 48 ++++++++++++++++++++----
 libcloud/compute/drivers/maxihost.py             | 20 +++++++---
 libcloud/compute/drivers/onapp.py                | 11 +++++-
 libcloud/compute/drivers/opennebula.py           | 11 ++++--
 libcloud/compute/drivers/openstack.py            | 20 ++++++++--
 libcloud/compute/drivers/outscale.py             | 18 +++++----
 libcloud/compute/drivers/ovh.py                  |  9 ++++-
 libcloud/compute/drivers/scaleway.py             | 36 +++++++++++++++---
 libcloud/compute/drivers/upcloud.py              |  5 ++-
 libcloud/compute/drivers/vcloud.py               |  4 +-
 libcloud/compute/drivers/vsphere.py              | 15 ++++++--
 libcloud/compute/drivers/vultr.py                | 43 +++++++++++++++------
 libcloud/test/compute/test_abiquo.py             | 22 +++++++++--
 libcloud/test/compute/test_dimensiondata_v2_3.py | 38 ++++++++++++++++++-
 libcloud/test/compute/test_dimensiondata_v2_4.py | 38 ++++++++++++++++++-
 libcloud/test/compute/test_ec2.py                |  2 +-
 libcloud/test/compute/test_gce.py                |  2 +-
 libcloud/test/compute/test_linode_v4.py          | 10 ++---
 libcloud/test/compute/test_nttcis.py             | 40 +++++++++++++++++++-
 libcloud/test/compute/test_onapp.py              |  2 +
 libcloud/test/compute/test_openstack.py          |  1 +
 libcloud/test/compute/test_vcl.py                |  2 +-
 libcloud/test/compute/test_vcloud.py             |  2 +-
 39 files changed, 574 insertions(+), 123 deletions(-)

diff --git a/libcloud/compute/drivers/abiquo.py 
b/libcloud/compute/drivers/abiquo.py
index 7ce8a87e9..305c618a1 100644
--- a/libcloud/compute/drivers/abiquo.py
+++ b/libcloud/compute/drivers/abiquo.py
@@ -76,9 +76,7 @@ class AbiquoNodeDriver(NodeDriver):
         super().__init__(key=user_id, secret=secret, secure=False, host=None, 
port=None, **kwargs)
         self.ex_populate_cache()
 
-    def create_node(
-        self, name, size, image, location=None, auth=None, ex_group_name=None
-    ):
+    def create_node(self, name, size, image, location=None, auth=None, 
ex_group_name=None):
         """
         Create a new node instance in Abiquo
 
diff --git a/libcloud/compute/drivers/azure.py 
b/libcloud/compute/drivers/azure.py
index a35488830..81388f14b 100644
--- a/libcloud/compute/drivers/azure.py
+++ b/libcloud/compute/drivers/azure.py
@@ -334,7 +334,10 @@ class AzureNodeDriver(NodeDriver):
         self.follow_redirects = kwargs.get("follow_redirects", True)
         super().__init__(self.subscription_id, self.key_file, secure=True, 
**kwargs)
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         Lists all sizes
 
@@ -1005,19 +1008,40 @@ class AzureNodeDriver(NodeDriver):
     Functions not implemented
     """
 
-    def create_volume_snapshot(self):
+    def create_volume_snapshot(
+        self,
+        volume,
+        name=None,
+    ):
         raise NotImplementedError("You cannot create snapshots of " "Azure VMs 
at this time.")
 
-    def attach_volume(self):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+    ):
         raise NotImplementedError("attach_volume is not supported " "at this 
time.")
 
-    def create_volume(self):
+    def create_volume(
+        self,
+        size,
+        name,
+        location=None,
+        snapshot=None,
+    ):
         raise NotImplementedError("create_volume is not supported " "at this 
time.")
 
-    def detach_volume(self):
+    def detach_volume(
+        self,
+        volume,
+    ):
         raise NotImplementedError("detach_volume is not supported " "at this 
time.")
 
-    def destroy_volume(self):
+    def destroy_volume(
+        self,
+        volume,
+    ):
         raise NotImplementedError("destroy_volume is not supported " "at this 
time.")
 
     """
diff --git a/libcloud/compute/drivers/azure_arm.py 
b/libcloud/compute/drivers/azure_arm.py
index 9c76b384f..68868b254 100644
--- a/libcloud/compute/drivers/azure_arm.py
+++ b/libcloud/compute/drivers/azure_arm.py
@@ -1082,10 +1082,10 @@ class AzureNodeDriver(NodeDriver):
         self,
         node,
         volume,
+        device=None,
         ex_lun=None,
         ex_vhd_uri=None,
         ex_vhd_create=False,
-        **ex_kwargs,
     ):
         """
         Attach a volume to node.
diff --git a/libcloud/compute/drivers/brightbox.py 
b/libcloud/compute/drivers/brightbox.py
index 7f7a8766e..655ee7242 100644
--- a/libcloud/compute/drivers/brightbox.py
+++ b/libcloud/compute/drivers/brightbox.py
@@ -218,7 +218,10 @@ class BrightboxNodeDriver(NodeDriver):
         data = self.connection.request("/%s/images" % self.api_version).object
         return list(map(self._to_image, data))
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         data = self.connection.request("/%s/server_types" % 
self.api_version).object
         return list(map(self._to_size, data))
 
diff --git a/libcloud/compute/drivers/cloudscale.py 
b/libcloud/compute/drivers/cloudscale.py
index 58958c979..d16a9b310 100644
--- a/libcloud/compute/drivers/cloudscale.py
+++ b/libcloud/compute/drivers/cloudscale.py
@@ -94,13 +94,19 @@ class CloudscaleNodeDriver(NodeDriver):
         """
         return self._list_resources("/v1/servers", self._to_node)
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         Lists all available sizes. On cloudscale these are known as flavors.
         """
         return self._list_resources("/v1/flavors", self._to_size)
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         List all images.
 
diff --git a/libcloud/compute/drivers/cloudsigma.py 
b/libcloud/compute/drivers/cloudsigma.py
index f533d756c..00c2057d5 100644
--- a/libcloud/compute/drivers/cloudsigma.py
+++ b/libcloud/compute/drivers/cloudsigma.py
@@ -1180,7 +1180,10 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return nodes
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         List available sizes.
         """
@@ -1202,7 +1205,10 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return sizes
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         Return a list of available pre-installed library drives.
 
@@ -1626,7 +1632,15 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return drive
 
-    def create_volume(self, name, size, media="disk", ex_avoid=None):
+    def create_volume(
+        self,
+        size,
+        name,
+        location=None,
+        snapshot=None,
+        media="disk",
+        ex_avoid=None,
+    ):
         return self.ex_create_drive(name=name, size=size, media=media, 
ex_avoid=ex_avoid)
 
     def ex_clone_drive(self, drive, name=None, ex_avoid=None):
@@ -1733,7 +1747,12 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return response.status == 200
 
-    def attach_volume(self, node, volume):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+    ):
         return self.ex_attach_drive(node=node, drive=volume)
 
     def ex_detach_drive(self, node, drive):
@@ -1744,7 +1763,11 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return response.status == 200
 
-    def detach_volume(self, node, volume):
+    def detach_volume(
+        self,
+        volume,
+        node=None,
+    ):
         return self.ex_detach_drive(node=node, drive=volume)
 
     def ex_get_drive(self, drive_id):
@@ -1769,7 +1792,11 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return response.status == httplib.NO_CONTENT
 
-    def destroy_volume(self, drive):
+    def destroy_volume(
+        self,
+        volume,
+    ):
+        drive = volume
         return self.ex_destroy_drive(drive=drive)
 
     # Firewall policies extension methods
@@ -2158,7 +2185,10 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         return keys
 
-    def get_key_pair(self, key_uuid):
+    def get_key_pair(
+        self,
+        name,
+    ):
         """
         Retrieve a single key pair.
 
@@ -2167,6 +2197,7 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver):
 
         :rtype: :class:`.KeyPair`
         """
+        key_uuid = name
         action = "/keypairs/%s/" % (key_uuid)
         response = self.connection.request(action=action, method="GET").object
 
diff --git a/libcloud/compute/drivers/digitalocean.py 
b/libcloud/compute/drivers/digitalocean.py
index dbab5cff1..3fb7fa635 100644
--- a/libcloud/compute/drivers/digitalocean.py
+++ b/libcloud/compute/drivers/digitalocean.py
@@ -100,7 +100,10 @@ class 
DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, DigitalOceanNodeDri
 
     EX_CREATE_ATTRIBUTES = ["backups", "ipv6", "private_networking", "tags", 
"ssh_keys"]
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         data = self._paginated_request("/v2/images", "images")
         return list(map(self._to_image, data))
 
@@ -231,7 +234,12 @@ class 
DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, DigitalOceanNodeDri
         )
         return res.status == httplib.CREATED
 
-    def create_image(self, node, name):
+    def create_image(
+        self,
+        node,
+        name,
+        description=None,
+    ):
         """
         Create an image from a Node.
 
@@ -251,7 +259,10 @@ class 
DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, DigitalOceanNodeDri
         )
         return res.status == httplib.CREATED
 
-    def delete_image(self, image):
+    def delete_image(
+        self,
+        node_image,
+    ):
         """Delete an image for node.
 
         @inherits: :class:`NodeDriver.delete_image`
@@ -261,6 +272,7 @@ class 
DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, DigitalOceanNodeDri
 
         :rtype: ``bool``
         """
+        image = node_image
         res = self.connection.request("/v2/images/%s" % (image.id), 
method="DELETE")
         return res.status == httplib.NO_CONTENT
 
@@ -374,13 +386,17 @@ class 
DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, DigitalOceanNodeDri
 
         return self._to_key_pair(data=data)
 
-    def delete_key_pair(self, key):
+    def delete_key_pair(
+        self,
+        key_pair,
+    ):
         """
         Delete an existing SSH key.
 
         :param      key: SSH key (required)
         :type       key: :class:`KeyPair`
         """
+        key = key_pair
         key_id = key.extra["id"]
         res = self.connection.request("/v2/account/keys/%s" % (key_id), 
method="DELETE")
         return res.status == httplib.NO_CONTENT
@@ -495,7 +511,11 @@ class 
DigitalOcean_v2_NodeDriver(DigitalOcean_v2_BaseDriver, DigitalOceanNodeDri
 
         return all([r.status == httplib.ACCEPTED for r in responses])
 
-    def create_volume_snapshot(self, volume, name):
+    def create_volume_snapshot(
+        self,
+        volume,
+        name=None,
+    ):
         """
         Create a new volume snapshot.
 
diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py
index 77a9a5017..ef7ae5476 100644
--- a/libcloud/compute/drivers/ec2.py
+++ b/libcloud/compute/drivers/ec2.py
@@ -1876,7 +1876,12 @@ class BaseEC2NodeDriver(NodeDriver):
 
         return volume
 
-    def attach_volume(self, node, volume, device):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+    ):
         params = {
             "Action": "AttachVolume",
             "VolumeId": volume.id,
@@ -2018,7 +2023,13 @@ class BaseEC2NodeDriver(NodeDriver):
 
         return self._get_boolean(res)
 
-    def copy_image(self, image, source_region, name=None, description=None):
+    def copy_image(
+        self,
+        source_region,
+        node_image,
+        name,
+        description=None,
+    ):
         """
         Copy an Amazon Machine Image from the specified source region
         to the current region.
@@ -2040,6 +2051,7 @@ class BaseEC2NodeDriver(NodeDriver):
         :return:    Instance of class ``NodeImage``
         :rtype:     :class:`NodeImage`
         """
+        image = node_image
         params = {
             "Action": "CopyImage",
             "SourceRegion": source_region,
@@ -2110,7 +2122,10 @@ class BaseEC2NodeDriver(NodeDriver):
 
         return image
 
-    def delete_image(self, image):
+    def delete_image(
+        self,
+        node_image,
+    ):
         """
         Deletes an image at Amazon given a NodeImage object
 
@@ -2121,6 +2136,7 @@ class BaseEC2NodeDriver(NodeDriver):
 
         :rtype:     ``bool``
         """
+        image = node_image
         params = {"Action": "DeregisterImage", "ImageId": image.id}
 
         response = self.connection.request(self.path, params=params).object
@@ -5502,7 +5518,10 @@ class EucNodeDriver(BaseEC2NodeDriver):
             extra={"cpu": int(cpu)},
         )
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         Lists available nodes sizes.
 
diff --git a/libcloud/compute/drivers/equinixmetal.py 
b/libcloud/compute/drivers/equinixmetal.py
index 2db8a0b6b..a7103cdc4 100644
--- a/libcloud/compute/drivers/equinixmetal.py
+++ b/libcloud/compute/drivers/equinixmetal.py
@@ -245,12 +245,19 @@ def _list_async(driver):
 
         return list(map(self._to_location, data))
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         data = 
self.connection.request("/metal/v1/operating-systems").object["operating_systems"]
 
         return list(map(self._to_image, data))
 
-    def list_sizes(self, ex_project_id=None):
+    def list_sizes(
+        self,
+        location=None,
+        ex_project_id=None,
+    ):
         project_id = (
             ex_project_id or self.project_id or (len(self.projects) and 
self.projects[0].id)
         )
@@ -417,7 +424,11 @@ def _list_async(driver):
 
         return list(map(self._to_key_pairs, data))
 
-    def create_key_pair(self, name, public_key):
+    def create_key_pair(
+        self,
+        name,
+        public_key=None,
+    ):
         """
         Create a new SSH key.
 
@@ -432,13 +443,17 @@ def _list_async(driver):
 
         return self._to_key_pairs(data)
 
-    def delete_key_pair(self, key):
+    def delete_key_pair(
+        self,
+        key_pair,
+    ):
         """
         Delete an existing SSH key.
 
         :param      key: SSH key (required)
         :type       key: :class:`KeyPair`
         """
+        key = key_pair
         key_id = key.name
         res = self.connection.request("/metal/v1/ssh-keys/%s" % (key_id), 
method="DELETE")
 
diff --git a/libcloud/compute/drivers/gandi.py 
b/libcloud/compute/drivers/gandi.py
index 8b97d5c22..b3543c85e 100644
--- a/libcloud/compute/drivers/gandi.py
+++ b/libcloud/compute/drivers/gandi.py
@@ -230,7 +230,23 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
             return True
         return False
 
-    def deploy_node(self, **kwargs):
+    def deploy_node(
+        self,
+        deploy,
+        ssh_username="root",
+        ssh_alternate_usernames=None,
+        ssh_port=22,
+        ssh_timeout=10,
+        ssh_key=None,
+        ssh_key_password=None,
+        auth=None,
+        timeout=300,
+        max_tries=3,
+        ssh_interface="public_ips",
+        at_exit_func=None,
+        wait_period=5,
+        **create_node_kwargs,
+    ):
         """
         deploy_node is not implemented for gandi driver
 
@@ -521,7 +537,11 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
             return True
         return False
 
-    def detach_volume(self, node, volume):
+    def detach_volume(
+        self,
+        volume,
+        node=None,
+    ):
         """
         Detaches a volume from a node.
 
diff --git a/libcloud/compute/drivers/gce.py b/libcloud/compute/drivers/gce.py
index f15ee2aa8..e9d77c6e3 100644
--- a/libcloud/compute/drivers/gce.py
+++ b/libcloud/compute/drivers/gce.py
@@ -2678,7 +2678,12 @@ class GCENodeDriver(NodeDriver):
 
         return list_forwarding_rules
 
-    def list_images(self, ex_project=None, ex_include_deprecated=False):
+    def list_images(
+        self,
+        location=None,
+        ex_project=None,
+        ex_include_deprecated=False,
+    ):
         """
         Return a list of image objects. If no project is specified, a list of
         all non-deprecated global and vendor images images is returned. By
@@ -6135,7 +6140,11 @@ class GCENodeDriver(NodeDriver):
 
         return self.ex_get_volume(name, location)
 
-    def create_volume_snapshot(self, volume, name):
+    def create_volume_snapshot(
+        self,
+        volume,
+        name=None,
+    ):
         """
         Create a snapshot of the provided Volume.
 
diff --git a/libcloud/compute/drivers/gig_g8.py 
b/libcloud/compute/drivers/gig_g8.py
index 1c5937a0f..e8d299a18 100644
--- a/libcloud/compute/drivers/gig_g8.py
+++ b/libcloud/compute/drivers/gig_g8.py
@@ -416,7 +416,10 @@ class G8NodeDriver(NodeDriver):
                 networks.append(self._to_network(network))
         return networks
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         # type () -> List[Size]
         """
         Returns a list of node sizes as a cloud provider might have
@@ -477,7 +480,10 @@ class G8NodeDriver(NodeDriver):
         self._api_request("/machines/delete", {"machineId": int(node.id)})
         return True
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         # type () -> List[Image]
         """
         Returns a list of images as a cloud provider might have
@@ -498,7 +504,15 @@ class G8NodeDriver(NodeDriver):
             volumes.append(self._to_volume(disk))
         return volumes
 
-    def create_volume(self, size, name, ex_description, ex_disk_type="D"):
+    def create_volume(
+        self,
+        size,
+        name,
+        location=None,
+        snapshot=None,
+        ex_description=None,
+        ex_disk_type="D",
+    ):
         # type (int, str, str, Optional[str]) -> StorageVolume
         """
         Create volume
@@ -535,13 +549,22 @@ class G8NodeDriver(NodeDriver):
         self._api_request("/disks/delete", {"diskId": int(volume.id)})
         return True
 
-    def attach_volume(self, node, volume):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+    ):
         # type (Node, StorageVolume) -> bool
         params = {"machineId": int(node.id), "diskId": int(volume.id)}
         self._api_request("/machines/attachDisk", params)
         return True
 
-    def detach_volume(self, node, volume):
+    def detach_volume(
+        self,
+        volume,
+        node=None,
+    ):
         # type (Node, StorageVolume) -> bool
         params = {"machineId": int(node.id), "diskId": int(volume.id)}
         self._api_request("/machines/detachDisk", params)
diff --git a/libcloud/compute/drivers/gridscale.py 
b/libcloud/compute/drivers/gridscale.py
index 69331b4b5..263a83be8 100644
--- a/libcloud/compute/drivers/gridscale.py
+++ b/libcloud/compute/drivers/gridscale.py
@@ -194,7 +194,10 @@ class GridscaleNodeDriver(GridscaleBaseDriver, NodeDriver):
             ips.append(ip)
         return ips
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         List images.
 
@@ -379,7 +382,11 @@ class GridscaleNodeDriver(GridscaleBaseDriver, NodeDriver):
             )
         )
 
-    def create_volume_snapshot(self, volume, name):
+    def create_volume_snapshot(
+        self,
+        volume,
+        name=None,
+    ):
         """
         Creates a snapshot of the current state of your volume,
         you can rollback to.
@@ -406,7 +413,12 @@ class GridscaleNodeDriver(GridscaleBaseDriver, NodeDriver):
             )
         )
 
-    def create_image(self, node, name):
+    def create_image(
+        self,
+        node,
+        name,
+        description=None,
+    ):
         """
         Creates an image from a node object.
 
@@ -725,7 +737,12 @@ class GridscaleNodeDriver(GridscaleBaseDriver, NodeDriver):
         )
         return result
 
-    def attach_volume(self, node, volume):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+    ):
         """
          Attaches volume to node.
 
diff --git a/libcloud/compute/drivers/kamatera.py 
b/libcloud/compute/drivers/kamatera.py
index 051224afd..645b7ce17 100644
--- a/libcloud/compute/drivers/kamatera.py
+++ b/libcloud/compute/drivers/kamatera.py
@@ -88,7 +88,10 @@ class KamateraNodeDriver(NodeDriver):
             for datacenter in response.object
         ]
 
-    def list_sizes(self, location):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         List predefined sizes for the given location.
 
@@ -111,7 +114,10 @@ class KamateraNodeDriver(NodeDriver):
             for size in response.object
         ]
 
-    def list_images(self, location):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         List available disk images.
 
diff --git a/libcloud/compute/drivers/ktucloud.py 
b/libcloud/compute/drivers/ktucloud.py
index 2c5dca14f..e6d426810 100644
--- a/libcloud/compute/drivers/ktucloud.py
+++ b/libcloud/compute/drivers/ktucloud.py
@@ -60,9 +60,7 @@ class KTUCloudNodeDriver(CloudStackNodeDriver):
             sizes.append(NodeSize(diskofferingid, sz["diskofferingdesc"], 0, 
0, 0, 0, self))
         return sizes
 
-    def create_node(
-        self, name, size, image, location=None, auth=None, 
ex_usageplantype="hourly"
-    ):
+    def create_node(self, name, size, image, location=None, auth=None, 
ex_usageplantype="hourly"):
         params = {
             "displayname": name,
             "serviceofferingid": image.id,
diff --git a/libcloud/compute/drivers/kubevirt.py 
b/libcloud/compute/drivers/kubevirt.py
index b6eceaddb..f0a46dcd6 100644
--- a/libcloud/compute/drivers/kubevirt.py
+++ b/libcloud/compute/drivers/kubevirt.py
@@ -1204,6 +1204,7 @@ class KubeVirtNodeDriver(KubernetesDriverMixin, 
NodeDriver):
         size,
         name,
         location=None,
+        snapshot=None,
         ex_storage_class_name="",
         ex_volume_mode="Filesystem",
         ex_access_mode="ReadWriteOnce",
@@ -1518,7 +1519,11 @@ class KubeVirtNodeDriver(KubernetesDriverMixin, 
NodeDriver):
         except Exception:
             raise
 
-    def detach_volume(self, volume, ex_node):
+    def detach_volume(
+        self,
+        volume,
+        ex_node=None,
+    ):
         """
         Detaches a volume from a node but the node must be given since a PVC
         can have more than one VMI's pointing to it
diff --git a/libcloud/compute/drivers/linode.py 
b/libcloud/compute/drivers/linode.py
index cc6d988b2..2fd487f40 100644
--- a/libcloud/compute/drivers/linode.py
+++ b/libcloud/compute/drivers/linode.py
@@ -126,7 +126,10 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         data = self._paginated_request("/v4/linode/instances", "data")
         return [self._to_node(obj) for obj in data]
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         Returns a list of Linode Types
 
@@ -135,7 +138,10 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         data = self._paginated_request("/v4/linode/types", "data")
         return [self._to_size(obj) for obj in data]
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         Returns a list of images
 
@@ -523,7 +529,15 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
 
         return [self._to_volume(obj) for obj in data]
 
-    def create_volume(self, name, size, location=None, node=None, tags=None):
+    def create_volume(
+        self,
+        size,
+        name,
+        location=None,
+        snapshot=None,
+        node=None,
+        tags=None,
+    ):
         """Creates a volume and optionally attaches it to a node.
 
         :param name: The name to be given to volume (required).\
@@ -579,7 +593,13 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         ).object
         return self._to_volume(response)
 
-    def attach_volume(self, node, volume, persist_across_boots=True):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+        persist_across_boots=True,
+    ):
         """Attaches a volume to a node.
         Volume and node must be located in the same region
 
@@ -706,7 +726,10 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         response = self.connection.request("/v4/volumes/%s" % volume_id).object
         return self._to_volume(response)
 
-    def get_image(self, image):
+    def get_image(
+        self,
+        image_id,
+    ):
         """
         Lookup a Linode image
 
@@ -715,10 +738,16 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
 
         :rtype: :class: `NodeImage`
         """
+        image = image_id
         response = self.connection.request("/v4/images/%s" % image, 
method="GET")
         return self._to_image(response.object)
 
-    def create_image(self, disk, name=None, description=None):
+    def create_image(
+        self,
+        node,
+        name,
+        description=None,
+    ):
         """Creates a private image from a LinodeDisk.
          Images are limited to three per account.
 
@@ -737,6 +766,7 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         :rtype: :class:`NodeImage`
         """
 
+        disk = node
         if not isinstance(disk, LinodeDisk):
             raise LinodeExceptionV4("Invalid disk instance")
 
@@ -747,7 +777,10 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         ).object
         return self._to_image(response)
 
-    def delete_image(self, image):
+    def delete_image(
+        self,
+        node_image,
+    ):
         """Deletes a private image
 
         :param image: NodeImage to delete (required)
@@ -755,6 +788,7 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
 
         :rtype: ``bool``
         """
+        image = node_image
         if not isinstance(image, NodeImage):
             raise LinodeExceptionV4("Invalid image instance")
 
diff --git a/libcloud/compute/drivers/maxihost.py 
b/libcloud/compute/drivers/maxihost.py
index 7107c8146..129526f9d 100644
--- a/libcloud/compute/drivers/maxihost.py
+++ b/libcloud/compute/drivers/maxihost.py
@@ -35,9 +35,7 @@ class MaxihostNodeDriver(NodeDriver):
     name = "Maxihost"
     website = "https://www.maxihost.com/";
 
-    def create_node(
-        self, name, size, image, location=None, auth=None, ex_ssh_key_ids=None
-    ):
+    def create_node(self, name, size, image, location=None, auth=None, 
ex_ssh_key_ids=None):
         """
         Create a node.
 
@@ -158,7 +156,10 @@ class MaxihostNodeDriver(NodeDriver):
         country = data.get("location").get("country", "")
         return NodeLocation(id=data["slug"], name=name, country=country, 
driver=self)
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         List sizes
         """
@@ -187,7 +188,10 @@ class MaxihostNodeDriver(NodeDriver):
             extra=extra,
         )
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         List images
         """
@@ -216,7 +220,11 @@ class MaxihostNodeDriver(NodeDriver):
         data = self.connection.request("/account/keys")
         return list(map(self._to_key_pair, data.object["ssh_keys"]))
 
-    def create_key_pair(self, name, public_key):
+    def create_key_pair(
+        self,
+        name,
+        public_key=None,
+    ):
         """
         Create a new SSH key.
 
diff --git a/libcloud/compute/drivers/onapp.py 
b/libcloud/compute/drivers/onapp.py
index 902b80075..76ab8fd06 100644
--- a/libcloud/compute/drivers/onapp.py
+++ b/libcloud/compute/drivers/onapp.py
@@ -227,7 +227,10 @@ class OnAppNodeDriver(NodeDriver):
             nodes.append(self._to_node(vm["virtual_machine"]))
         return nodes
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         List all images
 
@@ -287,7 +290,10 @@ class OnAppNodeDriver(NodeDriver):
         )
         return self._to_key_pair(response.object["ssh_key"])
 
-    def delete_key_pair(self, key):
+    def delete_key_pair(
+        self,
+        key_pair,
+    ):
         """
         Delete an existing key pair.
 
@@ -297,6 +303,7 @@ class OnAppNodeDriver(NodeDriver):
         :return: True on success
         :rtype: ``bool``
         """
+        key = key_pair
         key_id = key.name
         response = self.connection.request("/settings/ssh_keys/%s.json" % 
key_id, method="DELETE")
         return response.status == httplib.NO_CONTENT
diff --git a/libcloud/compute/drivers/opennebula.py 
b/libcloud/compute/drivers/opennebula.py
index 578a96977..d4e2d1695 100644
--- a/libcloud/compute/drivers/opennebula.py
+++ b/libcloud/compute/drivers/opennebula.py
@@ -704,9 +704,7 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
 
     name = "OpenNebula (v2.0 - v2.2)"
 
-    def create_node(
-        self, name, size, image, location=None, auth=None, networks=None, 
context=None
-    ):
+    def create_node(self, name, size, image, location=None, auth=None, 
networks=None, context=None):
         """
         Create a new OpenNebula node.
 
@@ -1209,7 +1207,12 @@ class 
OpenNebula_3_6_NodeDriver(OpenNebula_3_2_NodeDriver):
 
         return resp.status == httplib.NO_CONTENT
 
-    def attach_volume(self, node, volume, device):
+    def attach_volume(
+        self,
+        node,
+        volume,
+        device=None,
+    ):
         action = ET.Element("ACTION")
 
         perform = ET.SubElement(action, "PERFORM")
diff --git a/libcloud/compute/drivers/openstack.py 
b/libcloud/compute/drivers/openstack.py
index b98e33fac..06edd7a12 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -1128,7 +1128,10 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
             self.connection.request("/images", method="POST", 
data=ET.tostring(image_elm)).object
         )
 
-    def delete_image(self, image):
+    def delete_image(
+        self,
+        node_image,
+    ):
         """Delete an image for node.
 
         @inherits: :class:`NodeDriver.delete_image`
@@ -1138,6 +1141,7 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
         :rtype: ``bool``
         """
+        image = node_image
         uri = "/images/%s" % image.id
         resp = self.connection.request(uri, method="DELETE")
         return resp.status == httplib.NO_CONTENT
@@ -1782,7 +1786,13 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         resp = self._node_action(node, "revertResize")
         return resp.status == httplib.ACCEPTED
 
-    def create_image(self, node, name, metadata=None):
+    def create_image(
+        self,
+        node,
+        name,
+        description=None,
+        metadata=None,
+    ):
         """
         Creates a new image.
 
@@ -2364,7 +2374,10 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
             
self.connection.request("/images/{}".format(image_id)).object["image"]
         )
 
-    def delete_image(self, image):
+    def delete_image(
+        self,
+        node_image,
+    ):
         """
         Delete a NodeImage
 
@@ -2375,6 +2388,7 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
 
         :rtype: ``bool``
         """
+        image = node_image
         resp = self.connection.request("/images/{}".format(image.id), 
method="DELETE")
         return resp.status == httplib.NO_CONTENT
 
diff --git a/libcloud/compute/drivers/outscale.py 
b/libcloud/compute/drivers/outscale.py
index 8ec74e746..db2104632 100644
--- a/libcloud/compute/drivers/outscale.py
+++ b/libcloud/compute/drivers/outscale.py
@@ -836,10 +836,10 @@ class OutscaleNodeDriver(NodeDriver):
 
     def create_image(
         self,
+        node,
+        name,
+        description=None,
         ex_architecture: str = None,
-        node: Node = None,
-        name: str = None,
-        description: str = None,
         ex_block_device_mapping: dict = None,
         ex_no_reboot: bool = False,
         ex_root_device_name: str = None,
@@ -994,6 +994,7 @@ class OutscaleNodeDriver(NodeDriver):
 
     def list_images(
         self,
+        location=None,
         account_aliases: List[str] = None,
         account_ids: List[str] = None,
         architectures: List[str] = None,
@@ -1386,13 +1387,14 @@ class OutscaleNodeDriver(NodeDriver):
 
     def create_volume_snapshot(
         self,
+        volume,
+        name=None,
         ex_description: str = None,
         ex_dry_run: bool = False,
         ex_file_location: str = None,
         ex_snapshot_size: int = None,
         ex_source_region_name: str = None,
         ex_source_snapshot: VolumeSnapshot = None,
-        volume: StorageVolume = None,
     ):
         """
         Create a new volume snapshot.
@@ -1678,11 +1680,13 @@ class OutscaleNodeDriver(NodeDriver):
 
     def create_volume(
         self,
-        ex_subregion_name: str,
+        size,
+        name,
+        location=None,
+        snapshot=None,
+        ex_subregion_name: str = None,
         ex_dry_run: bool = False,
         ex_iops: int = None,
-        size: int = None,
-        snapshot: VolumeSnapshot = None,
         ex_volume_type: str = None,
     ):
         """
diff --git a/libcloud/compute/drivers/ovh.py b/libcloud/compute/drivers/ovh.py
index 16a9f7c5e..9bf73fc1c 100644
--- a/libcloud/compute/drivers/ovh.py
+++ b/libcloud/compute/drivers/ovh.py
@@ -265,7 +265,12 @@ class OvhNodeDriver(NodeDriver):
 
         return keys[0]
 
-    def import_key_pair_from_string(self, name, key_material, ex_location):
+    def import_key_pair_from_string(
+        self,
+        name,
+        key_material,
+        ex_location=None,
+    ):
         """
         Import a new public key from string.
 
@@ -298,7 +303,7 @@ class OvhNodeDriver(NodeDriver):
         self,
         size,
         name,
-        location,
+        location=None,
         snapshot=None,
         ex_volume_type="classic",
         ex_description=None,
diff --git a/libcloud/compute/drivers/scaleway.py 
b/libcloud/compute/drivers/scaleway.py
index 71f9405c1..7a9154ac4 100644
--- a/libcloud/compute/drivers/scaleway.py
+++ b/libcloud/compute/drivers/scaleway.py
@@ -187,7 +187,11 @@ class ScalewayNodeDriver(NodeDriver):
             for location in SCALEWAY_LOCATION_DATA
         ]
 
-    def list_sizes(self, region=None):
+    def list_sizes(
+        self,
+        location=None,
+        region=None,
+    ):
         """
         List available VM sizes.
 
@@ -246,7 +250,11 @@ class ScalewayNodeDriver(NodeDriver):
             extra=extra,
         )
 
-    def list_images(self, region=None):
+    def list_images(
+        self,
+        location=None,
+        region=None,
+    ):
         """
         List available VM images.
 
@@ -261,7 +269,13 @@ class ScalewayNodeDriver(NodeDriver):
         images = response["images"]
         return [self._to_image(image) for image in images]
 
-    def create_image(self, node, name, region=None):
+    def create_image(
+        self,
+        node,
+        name,
+        description=None,
+        region=None,
+    ):
         """
         Create a VM image from an existing node's root volume.
 
@@ -554,7 +568,14 @@ class ScalewayNodeDriver(NodeDriver):
             extra=extra,
         )
 
-    def create_volume(self, size, name, region=None):
+    def create_volume(
+        self,
+        size,
+        name,
+        location=None,
+        snapshot=None,
+        region=None,
+    ):
         """
         Create a new volume.
 
@@ -583,7 +604,12 @@ class ScalewayNodeDriver(NodeDriver):
         volume = response.object["volume"]
         return self._to_volume(volume)
 
-    def create_volume_snapshot(self, volume, name, region=None):
+    def create_volume_snapshot(
+        self,
+        volume,
+        name=None,
+        region=None,
+    ):
         """
         Create snapshot from volume.
 
diff --git a/libcloud/compute/drivers/upcloud.py 
b/libcloud/compute/drivers/upcloud.py
index 83e68c72f..4419d9cea 100644
--- a/libcloud/compute/drivers/upcloud.py
+++ b/libcloud/compute/drivers/upcloud.py
@@ -173,7 +173,10 @@ class UpcloudDriver(NodeDriver):
             location,
         )
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         """
         List available distributions.
 
diff --git a/libcloud/compute/drivers/vcloud.py 
b/libcloud/compute/drivers/vcloud.py
index 8a86f5e4b..658701535 100644
--- a/libcloud/compute/drivers/vcloud.py
+++ b/libcloud/compute/drivers/vcloud.py
@@ -1606,9 +1606,7 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
 
         return results
 
-    def create_node(
-        self, name, size, image, location=None, auth=None, **kwargs
-    ):
+    def create_node(self, name, size, image, location=None, auth=None, 
**kwargs):
         """
         Creates and returns node. If the source image is:
           - vApp template - a new vApp is instantiated from template
diff --git a/libcloud/compute/drivers/vsphere.py 
b/libcloud/compute/drivers/vsphere.py
index 884852d39..728c33665 100644
--- a/libcloud/compute/drivers/vsphere.py
+++ b/libcloud/compute/drivers/vsphere.py
@@ -256,7 +256,10 @@ class VSphereNodeDriver(NodeDriver):
 
         return VSphereNetwork(id=data.name, name=data.name, extra=extra)
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         """
         Returns sizes
         """
@@ -1352,7 +1355,10 @@ class VSphere_REST_NodeDriver(NodeDriver):
         self.session_token = result.object["value"]
         self.connection.session_token = self.session_token
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         return []
 
     def list_nodes(
@@ -1915,7 +1921,10 @@ class VSphere_REST_NodeDriver(NodeDriver):
 
         return result
 
-    def list_images(self, **kwargs):
+    def list_images(
+        self,
+        location=None,
+    ):
         libraries = self.ex_list_content_libraries()
         item_ids = []
 
diff --git a/libcloud/compute/drivers/vultr.py 
b/libcloud/compute/drivers/vultr.py
index 6a852ad0f..9e4d50a4f 100644
--- a/libcloud/compute/drivers/vultr.py
+++ b/libcloud/compute/drivers/vultr.py
@@ -844,10 +844,16 @@ class VultrNodeDriverV1(VultrNodeDriver):
     def list_locations(self):
         return self._list_resources("/v1/regions/list", self._to_location)
 
-    def list_sizes(self):
+    def list_sizes(
+        self,
+        location=None,
+    ):
         return self._list_resources("/v1/plans/list", self._to_size)
 
-    def list_images(self):
+    def list_images(
+        self,
+        location=None,
+    ):
         return self._list_resources("/v1/os/list", self._to_image)
 
     # pylint: disable=too-many-locals
@@ -1370,7 +1376,11 @@ class VultrNodeDriverV2(VultrNodeDriver):
 
         return resp.success()
 
-    def list_sizes(self, ex_list_bare_metals: bool = True) -> List[NodeSize]:
+    def list_sizes(
+        self,
+        location=None,
+        ex_list_bare_metals: bool = True,
+    ):
         """List available node sizes.
 
         :keyword ex_list_bare_metals: Whether to fetch bare metal sizes.
@@ -1385,7 +1395,10 @@ class VultrNodeDriverV2(VultrNodeDriver):
             sizes += self.ex_list_bare_metal_sizes()
         return sizes
 
-    def list_images(self) -> List[NodeImage]:
+    def list_images(
+        self,
+        location=None,
+    ):
         """List available node images.
 
         :rtype: ``list`` of :class: `NodeImage`
@@ -1411,10 +1424,11 @@ class VultrNodeDriverV2(VultrNodeDriver):
 
     def create_volume(
         self,
-        size: int,
-        name: str,
-        location: Union[NodeLocation, str],
-    ) -> StorageVolume:
+        size,
+        name,
+        location=None,
+        snapshot=None,
+    ):
         """Create a new volume.
 
         :param size: Size of the volume in gigabytes.\
@@ -1445,10 +1459,11 @@ class VultrNodeDriverV2(VultrNodeDriver):
 
     def attach_volume(
         self,
-        node: Node,
-        volume: StorageVolume,
+        node,
+        volume,
+        device=None,
         ex_live: bool = True,
-    ) -> bool:
+    ):
         """Attaches volume to node.
 
         :param node: Node to attach volume to.
@@ -1517,7 +1532,10 @@ class VultrNodeDriverV2(VultrNodeDriver):
         data = self._paginated_request("/v2/ssh-keys", "ssh_keys")
         return [self._to_key_pair(item) for item in data]
 
-    def get_key_pair(self, key_id: str) -> KeyPair:
+    def get_key_pair(
+        self,
+        name,
+    ):
         """Retrieve a single key pair.
 
         :param key_id: ID of the key pair to retrieve.
@@ -1525,6 +1543,7 @@ class VultrNodeDriverV2(VultrNodeDriver):
 
         :rtype: :class: `KeyPair`
         """
+        key_id = name
         resp = self.connection.request("/v2/ssh-keys/%s" % key_id)
         return self._to_key_pair(resp.object["ssh_key"])
 
diff --git a/libcloud/test/compute/test_abiquo.py 
b/libcloud/test/compute/test_abiquo.py
index f15aa0cfd..7117403c3 100644
--- a/libcloud/test/compute/test_abiquo.py
+++ b/libcloud/test/compute/test_abiquo.py
@@ -107,7 +107,7 @@ class AbiquoNodeDriverTest(TestCaseMixin, 
unittest.TestCase):
         """
         image = self.driver.list_images()[0]
         location = self.driver.list_locations()[0]
-        self.driver.create_node(image=image, location=location)
+        self.driver.create_node(name=None, size=None, image=image, 
location=location)
 
     def test_create_node_specify_wrong_location(self):
         """
@@ -115,7 +115,14 @@ class AbiquoNodeDriverTest(TestCaseMixin, 
unittest.TestCase):
         """
         image = self.driver.list_images()[0]
         location = NodeLocation(435, "fake-location", "Spain", self.driver)
-        self.assertRaises(LibcloudError, self.driver.create_node, image=image, 
location=location)
+        self.assertRaises(
+            LibcloudError,
+            self.driver.create_node,
+            name=None,
+            size=None,
+            image=image,
+            location=location,
+        )
 
     def test_create_node_specify_wrong_image(self):
         """
@@ -128,14 +135,21 @@ class AbiquoNodeDriverTest(TestCaseMixin, 
unittest.TestCase):
         image = NodeImage(3234, "dummy-image", self.driver)
         location = self.driver.list_locations()[0]
         # With this image, it should raise an Exception
-        self.assertRaises(LibcloudError, self.driver.create_node, image=image, 
location=location)
+        self.assertRaises(
+            LibcloudError,
+            self.driver.create_node,
+            name=None,
+            size=None,
+            image=image,
+            location=location,
+        )
 
     def test_create_node_specify_group_name(self):
         """
         Test 'create_node' into a concrete group.
         """
         image = self.driver.list_images()[0]
-        self.driver.create_node(image=image, ex_group_name="new_group_name")
+        self.driver.create_node(name=None, size=None, image=image, 
ex_group_name="new_group_name")
 
     def test_create_group_location_does_not_exist(self):
         """
diff --git a/libcloud/test/compute/test_dimensiondata_v2_3.py 
b/libcloud/test/compute/test_dimensiondata_v2_3.py
index 9ecfdd1ee..56edbefbe 100644
--- a/libcloud/test/compute/test_dimensiondata_v2_3.py
+++ b/libcloud/test/compute/test_dimensiondata_v2_3.py
@@ -291,6 +291,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         )
         disks = [DimensionDataServerDisk(scsi_id="0", speed="HIGHPERFORMANCE")]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -310,6 +311,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -325,6 +327,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.ex_list_customer_images()[1]
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -340,6 +343,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.ex_list_customer_images()[1].id
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -355,6 +359,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.ex_list_customer_images()[0]
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -370,6 +375,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.ex_list_customer_images()[0].id
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -386,6 +392,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0].id
         network = self.driver.ex_list_networks()[0].id
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -406,6 +413,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
             cpu_count=4, cores_per_socket=1, performance="HIGHPERFORMANCE"
         )
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -429,6 +437,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
             cpu_count=4, cores_per_socket=1, performance="HIGHPERFORMANCE"
         )
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -447,6 +456,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(InvalidRequestError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -459,6 +469,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -474,6 +485,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -488,6 +500,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -503,6 +516,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -519,6 +533,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -531,6 +546,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -544,6 +560,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -559,6 +576,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test3",
                 image=image,
                 auth=rootPw,
@@ -572,7 +590,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
-                name="test3", image=image, auth=rootPw, 
ex_primary_nic_vlan="fakevlan"
+                size=None, name="test3", image=image, auth=rootPw, 
ex_primary_nic_vlan="fakevlan"
             )
 
     def test_create_node_no_primary_nic_fail(self):
@@ -580,6 +598,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test3",
                 image=image,
                 auth=rootPw,
@@ -590,6 +609,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -604,6 +624,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = "pass123"
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -618,6 +639,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test3",
                 image=image,
                 auth=rootPw,
@@ -633,6 +655,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
             cpu_count="4", cores_per_socket="2", performance="STANDARD"
         )
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -650,6 +673,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
 
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -667,6 +691,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         disks = [DimensionDataServerDisk(scsi_id="0", speed="HIGHPERFORMANCE")]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -685,6 +710,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         disks = "blah"
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -699,6 +725,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -716,6 +743,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -730,6 +758,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         additional_vlans = ["fakevlan1", "fakevlan2"]
         additional_ipv4 = ["10.0.0.2", "10.0.0.3"]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -748,6 +777,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -766,6 +796,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         additional_nics = [nic1, nic2]
 
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -791,6 +822,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         additional_nics = [nic1, nic2]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -807,6 +839,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         additional_nics = "blah"
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -825,6 +858,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         additional_nics = [nic1, nic2]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -840,6 +874,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         image = self.driver.list_images()[0]
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -854,6 +889,7 @@ class DimensionData_v2_3_Tests(unittest.TestCase, 
TestCaseMixin):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
diff --git a/libcloud/test/compute/test_dimensiondata_v2_4.py 
b/libcloud/test/compute/test_dimensiondata_v2_4.py
index b6e2c7f08..0462420da 100644
--- a/libcloud/test/compute/test_dimensiondata_v2_4.py
+++ b/libcloud/test/compute/test_dimensiondata_v2_4.py
@@ -294,6 +294,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         )
         disks = [DimensionDataServerDisk(scsi_id="0", speed="HIGHPERFORMANCE")]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -313,6 +314,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -328,6 +330,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.ex_list_customer_images()[1]
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -343,6 +346,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.ex_list_customer_images()[1].id
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -358,6 +362,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.ex_list_customer_images()[0]
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -373,6 +378,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.ex_list_customer_images()[0].id
         network = self.driver.ex_list_networks()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=None,
@@ -389,6 +395,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0].id
         network = self.driver.ex_list_networks()[0].id
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -409,6 +416,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
             cpu_count=4, cores_per_socket=1, performance="HIGHPERFORMANCE"
         )
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -432,6 +440,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
             cpu_count=4, cores_per_socket=1, performance="HIGHPERFORMANCE"
         )
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -450,6 +459,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(InvalidRequestError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -462,6 +472,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -477,6 +488,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -491,6 +503,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -506,6 +519,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -522,6 +536,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -534,6 +549,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -547,6 +563,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -562,6 +579,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test3",
                 image=image,
                 auth=rootPw,
@@ -575,7 +593,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
-                name="test3", image=image, auth=rootPw, 
ex_primary_nic_vlan="fakevlan"
+                size=None, name="test3", image=image, auth=rootPw, 
ex_primary_nic_vlan="fakevlan"
             )
 
     def test_create_node_no_primary_nic_fail(self):
@@ -583,6 +601,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test3",
                 image=image,
                 auth=rootPw,
@@ -593,6 +612,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -607,6 +627,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = "pass123"
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -621,6 +642,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test3",
                 image=image,
                 auth=rootPw,
@@ -636,6 +658,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
             cpu_count="4", cores_per_socket="2", performance="STANDARD"
         )
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -653,6 +676,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
 
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -670,6 +694,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         disks = [DimensionDataServerDisk(scsi_id="0", speed="HIGHPERFORMANCE")]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -688,6 +713,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         disks = "blah"
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -702,6 +728,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -719,6 +746,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -733,6 +761,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         additional_vlans = ["fakevlan1", "fakevlan2"]
         additional_ipv4 = ["10.0.0.2", "10.0.0.3"]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -751,6 +780,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -769,6 +799,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         additional_nics = [nic1, nic2]
 
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -794,6 +825,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         additional_nics = [nic1, nic2]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -810,6 +842,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         additional_nics = "blah"
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -828,6 +861,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         additional_nics = [nic1, nic2]
         with self.assertRaises(ValueError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=root_pw,
@@ -843,6 +877,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         image = self.driver.list_images()[0]
         with self.assertRaises(TypeError):
             self.driver.create_node(
+                size=None,
                 name="test2",
                 image=image,
                 auth=rootPw,
@@ -857,6 +892,7 @@ class DimensionData_v2_4_Tests(unittest.TestCase):
         rootPw = NodeAuthPassword("pass123")
         image = self.driver.list_images()[0]
         node = self.driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
diff --git a/libcloud/test/compute/test_ec2.py 
b/libcloud/test/compute/test_ec2.py
index cc83bd139..b01ef2e09 100644
--- a/libcloud/test/compute/test_ec2.py
+++ b/libcloud/test/compute/test_ec2.py
@@ -587,7 +587,7 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin):
     def test_copy_image(self):
         image = self.driver.list_images()[0]
         resp = self.driver.copy_image(
-            image, "us-east-1", name="Faux Image", description="Test Image 
Copy"
+            "us-east-1", image, name="Faux Image", description="Test Image 
Copy"
         )
         self.assertEqual(resp.id, "ami-4db38224")
 
diff --git a/libcloud/test/compute/test_gce.py 
b/libcloud/test/compute/test_gce.py
index 75161a0ef..f64fe8ad6 100644
--- a/libcloud/test/compute/test_gce.py
+++ b/libcloud/test/compute/test_gce.py
@@ -410,7 +410,7 @@ class GCENodeDriverTest(GoogleTestCase, TestCaseMixin):
         local_images = self.driver.list_images()
         all_deprecated_images = 
self.driver.list_images(ex_include_deprecated=True)
         debian_images = self.driver.list_images(ex_project="debian-cloud")
-        local_plus_deb = self.driver.list_images(["debian-cloud", 
"project_name"])
+        local_plus_deb = self.driver.list_images(ex_project=["debian-cloud", 
"project_name"])
         self.assertEqual(len(local_images), 52)
         self.assertEqual(len(all_deprecated_images), 180)
         self.assertEqual(len(debian_images), 2)
diff --git a/libcloud/test/compute/test_linode_v4.py 
b/libcloud/test/compute/test_linode_v4.py
index a166e95cf..05bdab9e4 100644
--- a/libcloud/test/compute/test_linode_v4.py
+++ b/libcloud/test/compute/test_linode_v4.py
@@ -323,7 +323,7 @@ class LinodeTestsV4(unittest.TestCase, TestCaseMixin):
 
     def test_create_volume(self):
         node = Node("22344420", None, NodeState.RUNNING, None, None, 
driver=self.driver)
-        volume = self.driver.create_volume("Volume1", 50, node=node, 
tags=["test123", "testing"])
+        volume = self.driver.create_volume(50, "Volume1", node=node, 
tags=["test123", "testing"])
 
         self.assertEqual(volume.extra["linode_id"], 22344420)
         self.assertEqual(volume.size, 50)
@@ -334,7 +334,7 @@ class LinodeTestsV4(unittest.TestCase, TestCaseMixin):
         location = self.driver.list_locations()[0]
         LinodeMockHttpV4.type = "UNATTACHED"
         volume = self.driver.create_volume(
-            "Volume1", 50, location=location, tags=["test123", "testing"]
+            50, "Volume1", location=location, tags=["test123", "testing"]
         )
 
         self.assertEqual(volume.size, 50)
@@ -344,11 +344,11 @@ class LinodeTestsV4(unittest.TestCase, TestCaseMixin):
     def test_create_volume_invalid_name(self):
         location = self.driver.list_locations()[0]
         with self.assertRaises(LinodeExceptionV4):
-            self.driver.create_volume("Volume__1", 50, location=location)
+            self.driver.create_volume(50, "Volume__1", location=location)
         with self.assertRaises(LinodeExceptionV4):
-            self.driver.create_volume("Volume 1", 50, location=location)
+            self.driver.create_volume(50, "Volume 1", location=location)
         with self.assertRaises(LinodeExceptionV4):
-            self.driver.create_volume("Volume--1", 50, location=location)
+            self.driver.create_volume(50, "Volume--1", location=location)
 
     def test_attach_volume_already_attached(self):
         volume = self.driver.list_volumes()[0]
diff --git a/libcloud/test/compute/test_nttcis.py 
b/libcloud/test/compute/test_nttcis.py
index af7975f34..f1788a0d8 100644
--- a/libcloud/test/compute/test_nttcis.py
+++ b/libcloud/test/compute/test_nttcis.py
@@ -315,6 +315,7 @@ def test_create_mcp1_node_optional_param(driver):
     )
     disks = [NttCisServerDisk(scsi_id="0", speed="HIGHPERFORMANCE")]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=root_pw,
@@ -335,6 +336,7 @@ def 
test_create_mcp1_node_response_no_pass_random_gen(driver):
     image = driver.list_images()[0]
     network = driver.ex_list_networks()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=None,
@@ -351,6 +353,7 @@ def 
test_create_mcp1_node_response_no_pass_customer_windows(driver):
     image = driver.ex_list_customer_images()[1]
     network = driver.ex_list_networks()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=None,
@@ -367,6 +370,7 @@ def 
test_create_mcp1_node_response_no_pass_customer_windows_STR(driver):
     image = driver.ex_list_customer_images()[1].id
     network = driver.ex_list_networks()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=None,
@@ -383,6 +387,7 @@ def 
test_create_mcp1_node_response_no_pass_customer_linux(driver):
     image = driver.ex_list_customer_images()[0]
     network = driver.ex_list_networks()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=None,
@@ -399,6 +404,7 @@ def 
test_create_mcp1_node_response_no_pass_customer_linux_STR(driver):
     image = driver.ex_list_customer_images()[0].id
     network = driver.ex_list_networks()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=None,
@@ -416,6 +422,7 @@ def test_create_mcp1_node_response_STR(driver):
     image = driver.list_images()[0].id
     network = driver.ex_list_networks()[0].id
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -432,6 +439,7 @@ def test_create_mcp1_node_no_network(driver):
     image = driver.list_images()[0]
     with pytest.raises(InvalidRequestError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -445,6 +453,7 @@ def test_create_node_mcp1_ipv4(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -461,6 +470,7 @@ def test_create_node_mcp1_network(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -482,6 +492,7 @@ def test_create_node_response_network_domain(driver):
         cpu_count=4, cores_per_socket=1, performance="HIGHPERFORMANCE"
     )
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -506,6 +517,7 @@ def test_create_node_response_network_domain_STR(driver):
         cpu_count=4, cores_per_socket=1, performance="HIGHPERFORMANCE"
     )
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -524,6 +536,7 @@ def test_create_node_mcp2_vlan(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -540,6 +553,7 @@ def test_create_node_mcp2_ipv4(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -557,6 +571,7 @@ def test_create_node_network_domain_no_vlan_or_ipv4(driver):
     image = driver.list_images()[0]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -570,6 +585,7 @@ def test_create_node_response(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test3",
         image=image,
         auth=rootPw,
@@ -584,6 +600,7 @@ def test_create_node_ms_time_zone(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test3",
         image=image,
         auth=rootPw,
@@ -600,6 +617,7 @@ def test_create_node_ambigious_mcps_fail(driver):
     image = driver.list_images()[0]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -613,7 +631,9 @@ def test_create_node_no_network_domain_fail(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     with pytest.raises(ValueError):
-        driver.create_node(name="test3", image=image, auth=rootPw, 
ex_primary_nic_vlan="fakevlan")
+        driver.create_node(
+            size=None, name="test3", image=image, auth=rootPw, 
ex_primary_nic_vlan="fakevlan"
+        )
 
 
 def test_create_node_no_primary_nic_fail(driver):
@@ -621,6 +641,7 @@ def test_create_node_no_primary_nic_fail(driver):
     image = driver.list_images()[0]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -632,6 +653,7 @@ def test_create_node_primary_vlan_nic(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test3",
         image=image,
         auth=rootPw,
@@ -647,6 +669,7 @@ def test_create_node_primary_ipv4(driver):
     rootPw = "pass123"
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test3",
         image=image,
         auth=rootPw,
@@ -662,6 +685,7 @@ def test_create_node_both_primary_nic_and_vlan_fail(driver):
     image = driver.list_images()[0]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test3",
             image=image,
             auth=rootPw,
@@ -678,6 +702,7 @@ def test_create_node_cpu_specification(driver):
         cpu_count="4", cores_per_socket="2", performance="STANDARD"
     )
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -696,6 +721,7 @@ def test_create_node_memory(driver):
     image = driver.list_images()[0]
 
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -714,6 +740,7 @@ def test_create_node_disks(driver):
     image = driver.list_images()[0]
     disks = [NttCisServerDisk(scsi_id="0", speed="HIGHPERFORMANCE")]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -733,6 +760,7 @@ def test_create_node_disks_fail(driver):
     disks = "blah"
     with pytest.raises(TypeError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -748,6 +776,7 @@ def test_create_node_ipv4_gateway(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -766,6 +795,7 @@ def 
test_create_node_network_domain_no_vlan_no_ipv4_fail(driver):
     image = driver.list_images()[0]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -781,6 +811,7 @@ def test_create_node_mcp2_additional_nics_legacy(driver):
     additional_vlans = ["fakevlan1", "fakevlan2"]
     additional_ipv4 = ["10.0.0.2", "10.0.0.3"]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
@@ -800,6 +831,7 @@ def test_create_node_bad_additional_nics_ipv4(driver):
     image = driver.list_images()[0]
     with pytest.raises(TypeError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -819,6 +851,7 @@ def test_create_node_additional_nics(driver):
     additional_nics = [nic1, nic2]
 
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=root_pw,
@@ -841,6 +874,7 @@ def 
test_create_node_additional_nics_vlan_ipv4_coexist_fail(driver):
     additional_nics = [nic1, nic2]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -858,6 +892,7 @@ def 
test_create_node_additional_nics_invalid_input_fail(driver):
     additional_nics = "blah"
     with pytest.raises(TypeError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -877,6 +912,7 @@ def 
test_create_node_additional_nics_vlan_ipv4_not_exist_fail(driver):
     additional_nics = [nic1, nic2]
     with pytest.raises(ValueError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=root_pw,
@@ -893,6 +929,7 @@ def test_create_node_bad_additional_nics_vlan(driver):
     image = driver.list_images()[0]
     with pytest.raises(TypeError):
         driver.create_node(
+            size=None,
             name="test2",
             image=image,
             auth=rootPw,
@@ -908,6 +945,7 @@ def test_create_node_mcp2_indicate_dns(driver):
     rootPw = NodeAuthPassword("pass123")
     image = driver.list_images()[0]
     node = driver.create_node(
+        size=None,
         name="test2",
         image=image,
         auth=rootPw,
diff --git a/libcloud/test/compute/test_onapp.py 
b/libcloud/test/compute/test_onapp.py
index 27d463406..e97f0716f 100644
--- a/libcloud/test/compute/test_onapp.py
+++ b/libcloud/test/compute/test_onapp.py
@@ -35,6 +35,8 @@ class OnAppNodeTestCase(LibcloudTestCase):
     def test_create_node(self):
         node = self.driver.create_node(
             name="onapp-new-fred",
+            size=None,
+            image=None,
             ex_memory=512,
             ex_cpus=4,
             ex_cpu_shares=4,
diff --git a/libcloud/test/compute/test_openstack.py 
b/libcloud/test/compute/test_openstack.py
index 0b33b6c5d..933886fcb 100644
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@ -1226,6 +1226,7 @@ class OpenStack_1_1_Tests(unittest.TestCase, 
TestCaseMixin):
         size = NodeSize(1, "256 slice", None, None, None, None, 
driver=self.driver)
 
         node = self.driver.create_node(
+            image=None,
             name="racktest",
             size=size,
             ex_blockdevicemappings=[
diff --git a/libcloud/test/compute/test_vcl.py 
b/libcloud/test/compute/test_vcl.py
index 76ff10745..ce3fc8fb8 100644
--- a/libcloud/test/compute/test_vcl.py
+++ b/libcloud/test/compute/test_vcl.py
@@ -47,7 +47,7 @@ class VCLTests(unittest.TestCase):
 
     def test_create_node(self):
         image = self.driver.list_images()[0]
-        node = self.driver.create_node(image=image)
+        node = self.driver.create_node(name=None, size=None, image=image)
         self.assertEqual(node.id, "51")
 
     def test_destroy_node(self):
diff --git a/libcloud/test/compute/test_vcloud.py 
b/libcloud/test/compute/test_vcloud.py
index 34af00584..86754a532 100644
--- a/libcloud/test/compute/test_vcloud.py
+++ b/libcloud/test/compute/test_vcloud.py
@@ -178,7 +178,7 @@ class VCloud_1_5_Tests(unittest.TestCase, TestCaseMixin):
 
     def test_create_node_clone(self):
         image = self.driver.list_nodes()[0]
-        node = self.driver.create_node(name="testNode", image=image)
+        node = self.driver.create_node(size=None, name="testNode", image=image)
         self.assertTrue(isinstance(node, Node))
         self.assertEqual(
             
"https://vm-vcloud/api/vApp/vapp-8c57a5b6-e61b-48ca-8a78-3b70ee65ef6a";,

Reply via email to