You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2020/11/05 21:52:46 UTC

[libcloud] 01/08: add extra to list_nodes, update fixtures, update tests; fix some lint errors

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

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

commit b250df4f4c065823760e8f56f3928ede648e7f53
Author: sergerdn <64...@users.noreply.github.com>
AuthorDate: Thu Oct 15 11:54:06 2020 +0300

    add extra to list_nodes, update fixtures, update tests; fix some lint errors
---
 libcloud/compute/drivers/vultr.py                  |  53 ++-
 .../test/compute/fixtures/vultr/create_node.json   |   2 +-
 .../compute/fixtures/vultr/list_locations.json     | 101 ++++-
 .../test/compute/fixtures/vultr/list_nodes.json    | 117 +++++-
 .../test/compute/fixtures/vultr/list_sizes.json    | 412 ++++++++++++++++++++-
 libcloud/test/compute/test_vultr.py                |  46 ++-
 6 files changed, 703 insertions(+), 28 deletions(-)

diff --git a/libcloud/compute/drivers/vultr.py b/libcloud/compute/drivers/vultr.py
index 4f54ad8..0be7090 100644
--- a/libcloud/compute/drivers/vultr.py
+++ b/libcloud/compute/drivers/vultr.py
@@ -19,16 +19,16 @@ Vultr Driver
 import time
 from functools import update_wrapper
 
-from libcloud.utils.py3 import httplib
-from libcloud.utils.py3 import urlencode
-
 from libcloud.common.base import ConnectionKey, JsonResponse
-from libcloud.compute.types import Provider, NodeState
 from libcloud.common.types import InvalidCredsError
 from libcloud.common.types import LibcloudError
 from libcloud.common.types import ServiceUnavailableError
-from libcloud.compute.base import NodeDriver
 from libcloud.compute.base import Node, NodeImage, NodeSize, NodeLocation
+from libcloud.compute.base import NodeDriver
+from libcloud.compute.types import Provider, NodeState
+from libcloud.utils.iso8601 import parse_date
+from libcloud.utils.py3 import httplib
+from libcloud.utils.py3 import urlencode
 
 
 class rate_limited:
@@ -56,7 +56,7 @@ class rate_limited:
         def wrapper(*args, **kwargs):
             last_exception = None
 
-            for i in range(self.retries + 1):
+            for _ in range(self.retries + 1):
                 try:
                     return call(*args, **kwargs)
                 except ServiceUnavailableError as e:
@@ -145,7 +145,7 @@ class VultrConnection(ConnectionKey):
 
         try:
             return self.method \
-                not in self.unauthenticated_endpoints[self.action]
+                   not in self.unauthenticated_endpoints[self.action]
         except KeyError:
             return True
 
@@ -233,6 +233,7 @@ class VultrNodeDriver(NodeDriver):
     def list_images(self):
         return self._list_resources('/v1/os/list', self._to_image)
 
+    # pylint: disable=too-many-locals
     def create_node(self, name, size, image, location, ex_ssh_key_ids=None,
                     ex_create_attr=None):
         """
@@ -311,7 +312,7 @@ class VultrNodeDriver(NodeDriver):
         retry_count = 3
         created_node = None
 
-        for i in range(retry_count):
+        for _ in range(retry_count):
             try:
                 nodes = self.list_nodes()
                 created_node = [n for n in nodes if n.id == subid][0]
@@ -343,7 +344,7 @@ class VultrNodeDriver(NodeDriver):
         if 'status' in data:
             state = self.NODE_STATE_MAP.get(data['status'], NodeState.UNKNOWN)
             if state == NodeState.RUNNING and \
-               data['power_status'] != 'running':
+                data['power_status'] != 'running':
                 state = NodeState.STOPPED
         else:
             state = NodeState.UNKNOWN
@@ -352,16 +353,40 @@ class VultrNodeDriver(NodeDriver):
             public_ips = [data['main_ip']]
         else:
             public_ips = []
-
-        extra_keys = []
+        # simple check that we have ip address in value
+        if len(data['internal_ip']) > 0:
+            private_ips = [data['internal_ip']]
+        else:
+            private_ips = []
+        created_at = parse_date(data['date_created'])
+
+        # TODO: remove extra keys and return Node with full api because we know:
+        # TODO: size = None,  # type: NodeSize
+        # TODO: image = None,  # type: NodeImage
+        # response ordering
+        extra_keys = [
+            "ram", "disk", "vcpu_count",
+            "location",  # Location name
+            "DCID",  # Location id in which to create the server. See v1/regions/list
+            "default_password", "pending_charges", "cost_per_month", "current_bandwidth_gb",
+            "allowed_bandwidth_gb", "netmask_v4", "gateway_v4", "power_status",
+            "server_state",
+            "VPSPLANID",  # Plan id, see /v1/plans/list
+            "v6_networks",
+            # TODO: Does we really need kvm_url?
+            "kvm_url",
+            "auto_backups", "tag",
+            "OSID",  # Operating system to use. See v1/os/list.
+            "APPID", "FIREWALLGROUPID"
+        ]
         extra = {}
         for key in extra_keys:
             if key in data:
                 extra[key] = data[key]
 
         node = Node(id=data['SUBID'], name=data['label'], state=state,
-                    public_ips=public_ips, private_ips=None, extra=extra,
-                    driver=self)
+                    public_ips=public_ips, private_ips=private_ips, extra=extra,
+                    created_at=created_at, driver=self)
 
         return node
 
@@ -377,7 +402,7 @@ class VultrNodeDriver(NodeDriver):
         }
         ram = int(data['ram'])
         disk = int(data['disk'])
-        bandwidth = float(data['bandwidth'])
+        bandwidth = int(float(data['bandwidth']))  # NodeSize accepted int instead float
         price = float(data['price_per_month'])
 
         return NodeSize(id=data['VPSPLANID'], name=data['name'],
diff --git a/libcloud/test/compute/fixtures/vultr/create_node.json b/libcloud/test/compute/fixtures/vultr/create_node.json
index 57aa548..2a58f23 100644
--- a/libcloud/test/compute/fixtures/vultr/create_node.json
+++ b/libcloud/test/compute/fixtures/vultr/create_node.json
@@ -1,3 +1,3 @@
 {
-  "SUBID": "1"
+  "SUBID": "41326859"
 }
diff --git a/libcloud/test/compute/fixtures/vultr/list_locations.json b/libcloud/test/compute/fixtures/vultr/list_locations.json
index 6cf6d0b..5230fbc 100644
--- a/libcloud/test/compute/fixtures/vultr/list_locations.json
+++ b/libcloud/test/compute/fixtures/vultr/list_locations.json
@@ -1 +1,100 @@
-{"6":{"DCID":"6","name":"Atlanta","country":"US","continent":"North America","state":"GA"},"2":{"DCID":"2","name":"Chicago","country":"US","continent":"North America","state":"IL"},"3":{"DCID":"3","name":"Dallas","country":"US","continent":"North America","state":"TX"},"5":{"DCID":"5","name":"Los Angeles","country":"US","continent":"North America","state":"CA"},"39":{"DCID":"39","name":"Miami","country":"US","continent":"","state":"FL"},"1":{"DCID":"1","name":"New Jersey","country":"US", [...]
+{
+  "6": {
+    "DCID": "6",
+    "name": "Atlanta",
+    "country": "US",
+    "continent": "North America",
+    "state": "GA"
+  },
+  "2": {
+    "DCID": "2",
+    "name": "Chicago",
+    "country": "US",
+    "continent": "North America",
+    "state": "IL"
+  },
+  "3": {
+    "DCID": "3",
+    "name": "Dallas",
+    "country": "US",
+    "continent": "North America",
+    "state": "TX"
+  },
+  "5": {
+    "DCID": "5",
+    "name": "Los Angeles",
+    "country": "US",
+    "continent": "North America",
+    "state": "CA"
+  },
+  "39": {
+    "DCID": "39",
+    "name": "Miami",
+    "country": "US",
+    "continent": "",
+    "state": "FL"
+  },
+  "1": {
+    "DCID": "1",
+    "name": "New Jersey",
+    "country": "US",
+    "continent": "North America",
+    "state": "NJ"
+  },
+  "4": {
+    "DCID": "4",
+    "name": "Seattle",
+    "country": "US",
+    "continent": "North America",
+    "state": "WA"
+  },
+  "12": {
+    "DCID": "12",
+    "name": "Silicon Valley",
+    "country": "US",
+    "continent": "North America",
+    "state": "CA"
+  },
+  "7": {
+    "DCID": "7",
+    "name": "Amsterdam",
+    "country": "NL",
+    "continent": "Europe",
+    "state": ""
+  },
+  "25": {
+    "DCID": "25",
+    "name": "Tokyo",
+    "country": "JP",
+    "continent": "Asia",
+    "state": ""
+  },
+  "8": {
+    "DCID": "8",
+    "name": "London",
+    "country": "GB",
+    "continent": "Europe",
+    "state": ""
+  },
+  "24": {
+    "DCID": "24",
+    "name": "France",
+    "country": "FR",
+    "continent": "Europe",
+    "state": ""
+  },
+  "9": {
+    "DCID": "9",
+    "name": "Frankfurt",
+    "country": "DE",
+    "continent": "Europe",
+    "state": ""
+  },
+  "19": {
+    "DCID": "19",
+    "name": "Australia",
+    "country": "AU",
+    "continent": "Australia",
+    "state": ""
+  }
+}
diff --git a/libcloud/test/compute/fixtures/vultr/list_nodes.json b/libcloud/test/compute/fixtures/vultr/list_nodes.json
index e12ba4a..2648f5e 100644
--- a/libcloud/test/compute/fixtures/vultr/list_nodes.json
+++ b/libcloud/test/compute/fixtures/vultr/list_nodes.json
@@ -1 +1,116 @@
-{"1":{"SUBID":"1","os":"Ubuntu 12.04 x64","ram":"1024 MB","disk":"Virtual 20 GB","main_ip":"108.61.206.153","vcpu_count":"1","location":"Los Angeles","DCID":"5","default_password":"twizewnatpom!7","date_created":"2014-03-21 12:46:35","pending_charges":"1.92","status":"active","cost_per_month":"7.00","current_bandwidth_gb":0.929,"allowed_bandwidth_gb":"2000","netmask_v4":"255.255.254.0","gateway_v4":"108.61.206.1","power_status":"running","VPSPLANID":"30","v6_network":"::","v6_main_ip":"" [...]
+{
+  "41326859": {
+    "SUBID": "41326859",
+    "os": "CentOS SELinux 8 x64",
+    "ram": "1024 MB",
+    "disk": "Virtual 25 GB",
+    "main_ip": "217.69.11.158",
+    "vcpu_count": "1",
+    "location": "Paris",
+    "DCID": "24",
+    "default_password": "*7j6j6[#q",
+    "date_created": "2020-10-15 03:17:22",
+    "pending_charges": "0.04",
+    "status": "active",
+    "cost_per_month": "5.00",
+    "current_bandwidth_gb": 0,
+    "allowed_bandwidth_gb": "1000",
+    "netmask_v4": "255.255.254.0",
+    "gateway_v4": "217.69.10.1",
+    "power_status": "running",
+    "server_state": "locked",
+    "VPSPLANID": "201",
+    "v6_main_ip": "2001:19f0:6801:1cc8:5400:03ff:fe03:5478",
+    "v6_network_size": "64",
+    "v6_network": "2001:19f0:6801:1cc8::",
+    "v6_networks": [
+      {
+        "v6_main_ip": "2001:19f0:6801:1cc8:5400:03ff:fe03:5478",
+        "v6_network_size": "64",
+        "v6_network": "2001:19f0:6801:1cc8::"
+      }
+    ],
+    "label": "labelname",
+    "internal_ip": "10.24.96.3",
+    "kvm_url": "https://my.vultr.com/subs/novnc/api.php?data=eawxFVZw2mXnhGUV",
+    "auto_backups": "yes",
+    "tag": "",
+    "OSID": "362",
+    "APPID": "0",
+    "FIREWALLGROUPID": "0"
+  },
+  "41306569": {
+    "SUBID": "41306569",
+    "os": "Ubuntu 20.04 x64",
+    "ram": "1024 MB",
+    "disk": "Virtual 25 GB",
+    "main_ip": "45.76.43.87",
+    "vcpu_count": "1",
+    "location": "Amsterdam",
+    "DCID": "7",
+    "default_password": "h6*hrte6tg",
+    "date_created": "2020-10-14 09:37:50",
+    "pending_charges": "0.18",
+    "status": "active",
+    "cost_per_month": "5.00",
+    "current_bandwidth_gb": 0.026,
+    "allowed_bandwidth_gb": "1000",
+    "netmask_v4": "255.255.254.0",
+    "gateway_v4": "45.76.42.1",
+    "power_status": "running",
+    "server_state": "installingbooting",
+    "VPSPLANID": "201",
+    "v6_main_ip": "2001:19f0:5001:2b9c:5400:03ff:fe03:9568",
+    "v6_network_size": "64",
+    "v6_network": "2001:19f0:5001:2b9c::",
+    "v6_networks": [
+      {
+        "v6_main_ip": "2001:19f0:5001:2b9c:5400:03ff:fe03:9568",
+        "v6_network_size": "64",
+        "v6_network": "2001:19f0:5001:2b9c::"
+      }
+    ],
+    "label": "libcloud-label",
+    "internal_ip": "10.7.96.85",
+    "kvm_url": "https://my.vultr.com/subs/novnc/api.php?data=erewawxFVZw2mXnhGUV",
+    "auto_backups": "yes",
+    "tag": "Web",
+    "OSID": "387",
+    "APPID": "0",
+    "FIREWALLGROUPID": "0"
+  },
+  "41326895": {
+    "SUBID": "41326895",
+    "os": "Ubuntu 18.04 x64",
+    "ram": "2048 MB",
+    "disk": "Virtual 55 GB",
+    "main_ip": "136.244.113.89",
+    "vcpu_count": "1",
+    "location": "Paris",
+    "DCID": "24",
+    "default_password": "Dy4@K_Z1gvb!!8zw",
+    "date_created": "2020-10-15 03:17:54",
+    "pending_charges": "0.00",
+    "status": "pending",
+    "cost_per_month": "10.00",
+    "current_bandwidth_gb": 0,
+    "allowed_bandwidth_gb": "2000",
+    "netmask_v4": "255.255.254.0",
+    "gateway_v4": "136.244.112.1",
+    "power_status": "running",
+    "server_state": "none",
+    "VPSPLANID": "202",
+    "v6_main_ip": false,
+    "v6_network_size": "",
+    "v6_network": "",
+    "v6_networks": [],
+    "label": "servlabel",
+    "internal_ip": "",
+    "kvm_url": "",
+    "auto_backups": "no",
+    "tag": "",
+    "OSID": "270",
+    "APPID": "0",
+    "FIREWALLGROUPID": "4e83489b"
+  }
+}
\ No newline at end of file
diff --git a/libcloud/test/compute/fixtures/vultr/list_sizes.json b/libcloud/test/compute/fixtures/vultr/list_sizes.json
index af78116..125358b 100644
--- a/libcloud/test/compute/fixtures/vultr/list_sizes.json
+++ b/libcloud/test/compute/fixtures/vultr/list_sizes.json
@@ -1 +1,411 @@
-{"201":{"VPSPLANID":"201","name":"1024 MB RAM,25 GB SSD,1.00 TB BW","vcpu_count":"1","ram":"1024","disk":"25","bandwidth":"1.00","bandwidth_gb":"1024","price_per_month":"5.00","plan_type":"SSD","windows":false,"available_locations":[1,2,3,4,5,6,7,8,9,12,19,24,25,39,40]},"202":{"VPSPLANID":"202","name":"2048 MB RAM,40 GB SSD,2.00 TB BW","vcpu_count":"1","ram":"2048","disk":"40","bandwidth":"2.00","bandwidth_gb":"2048","price_per_month":"10.00","plan_type":"SSD","windows":false,"available_ [...]
\ No newline at end of file
+{
+  "201": {
+    "VPSPLANID": "201",
+    "name": "1024 MB RAM,25 GB SSD,1.00 TB BW",
+    "vcpu_count": "1",
+    "ram": "1024",
+    "disk": "25",
+    "bandwidth": "1.00",
+    "bandwidth_gb": "1024",
+    "price_per_month": "5.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      34,
+      39,
+      40
+    ]
+  },
+  "202": {
+    "VPSPLANID": "202",
+    "name": "2048 MB RAM,55 GB SSD,2.00 TB BW",
+    "vcpu_count": "1",
+    "ram": "2048",
+    "disk": "55",
+    "bandwidth": "2.00",
+    "bandwidth_gb": "2048",
+    "price_per_month": "10.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      34,
+      39,
+      40
+    ]
+  },
+  "203": {
+    "VPSPLANID": "203",
+    "name": "4096 MB RAM,80 GB SSD,3.00 TB BW",
+    "vcpu_count": "2",
+    "ram": "4096",
+    "disk": "80",
+    "bandwidth": "3.00",
+    "bandwidth_gb": "3072",
+    "price_per_month": "20.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      34,
+      39,
+      40
+    ]
+  },
+  "204": {
+    "VPSPLANID": "204",
+    "name": "8192 MB RAM,160 GB SSD,4.00 TB BW",
+    "vcpu_count": "4",
+    "ram": "8192",
+    "disk": "160",
+    "bandwidth": "4.00",
+    "bandwidth_gb": "4096",
+    "price_per_month": "40.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      39,
+      40
+    ]
+  },
+  "205": {
+    "VPSPLANID": "205",
+    "name": "16384 MB RAM,320 GB SSD,5.00 TB BW",
+    "vcpu_count": "6",
+    "ram": "16384",
+    "disk": "320",
+    "bandwidth": "5.00",
+    "bandwidth_gb": "5120",
+    "price_per_month": "80.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      39,
+      40
+    ]
+  },
+  "206": {
+    "VPSPLANID": "206",
+    "name": "32768 MB RAM,640 GB SSD,6.00 TB BW",
+    "vcpu_count": "8",
+    "ram": "32768",
+    "disk": "640",
+    "bandwidth": "6.00",
+    "bandwidth_gb": "6144",
+    "price_per_month": "160.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      39
+    ]
+  },
+  "207": {
+    "VPSPLANID": "207",
+    "name": "65536 MB RAM,1280 GB SSD,10.00 TB BW",
+    "vcpu_count": "16",
+    "ram": "65536",
+    "disk": "1280",
+    "bandwidth": "10.00",
+    "bandwidth_gb": "10240",
+    "price_per_month": "320.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      2,
+      3,
+      5,
+      12,
+      19,
+      24,
+      39
+    ]
+  },
+  "208": {
+    "VPSPLANID": "208",
+    "name": "98304 MB RAM,1600 GB SSD,15.00 TB BW",
+    "vcpu_count": "24",
+    "ram": "98304",
+    "disk": "1600",
+    "bandwidth": "15.00",
+    "bandwidth_gb": "15360",
+    "price_per_month": "640.00",
+    "plan_type": "SSD",
+    "windows": false,
+    "available_locations": [
+      12,
+      19,
+      24
+    ]
+  },
+  "115": {
+    "VPSPLANID": "115",
+    "name": "8192 MB RAM,110 GB SSD,10.00 TB BW",
+    "vcpu_count": "2",
+    "ram": "8192",
+    "disk": "110",
+    "bandwidth": "10.00",
+    "bandwidth_gb": "10240",
+    "price_per_month": "60.00",
+    "plan_type": "DEDICATED",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      12
+    ]
+  },
+  "116": {
+    "VPSPLANID": "116",
+    "name": "16384 MB RAM,2x110 GB SSD,20.00 TB BW",
+    "vcpu_count": "4",
+    "ram": "16384",
+    "disk": "110",
+    "bandwidth": "20.00",
+    "bandwidth_gb": "20480",
+    "price_per_month": "120.00",
+    "plan_type": "DEDICATED",
+    "windows": false,
+    "available_locations": [
+      1,
+      12
+    ]
+  },
+  "117": {
+    "VPSPLANID": "117",
+    "name": "24576 MB RAM,3x110 GB SSD,30.00 TB BW",
+    "vcpu_count": "6",
+    "ram": "24576",
+    "disk": "110",
+    "bandwidth": "30.00",
+    "bandwidth_gb": "30720",
+    "price_per_month": "180.00",
+    "plan_type": "DEDICATED",
+    "windows": false,
+    "available_locations": [
+      1
+    ]
+  },
+  "118": {
+    "VPSPLANID": "118",
+    "name": "32768 MB RAM,4x110 GB SSD,40.00 TB BW",
+    "vcpu_count": "8",
+    "ram": "32768",
+    "disk": "110",
+    "bandwidth": "40.00",
+    "bandwidth_gb": "40960",
+    "price_per_month": "240.00",
+    "plan_type": "DEDICATED",
+    "windows": false,
+    "available_locations": [
+      1
+    ]
+  },
+  "400": {
+    "VPSPLANID": "400",
+    "name": "1024 MB RAM,32 GB SSD,1.00 TB BW",
+    "vcpu_count": "1",
+    "ram": "1024",
+    "disk": "32",
+    "bandwidth": "1.00",
+    "bandwidth_gb": "1024",
+    "price_per_month": "6.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      8,
+      9,
+      12,
+      19,
+      22,
+      24,
+      25,
+      39,
+      40
+    ]
+  },
+  "401": {
+    "VPSPLANID": "401",
+    "name": "2048 MB RAM,64 GB SSD,2.00 TB BW",
+    "vcpu_count": "1",
+    "ram": "2048",
+    "disk": "64",
+    "bandwidth": "2.00",
+    "bandwidth_gb": "2048",
+    "price_per_month": "12.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": [
+      1,
+      2,
+      3,
+      4,
+      5,
+      6,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25,
+      39,
+      40
+    ]
+  },
+  "402": {
+    "VPSPLANID": "402",
+    "name": "4096 MB RAM,128 GB SSD,3.00 TB BW",
+    "vcpu_count": "2",
+    "ram": "4096",
+    "disk": "128",
+    "bandwidth": "3.00",
+    "bandwidth_gb": "3072",
+    "price_per_month": "24.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": [
+      1,
+      4,
+      5,
+      7,
+      12,
+      19,
+      22,
+      24,
+      25
+    ]
+  },
+  "403": {
+    "VPSPLANID": "403",
+    "name": "8192 MB RAM,256 GB SSD,4.00 TB BW",
+    "vcpu_count": "3",
+    "ram": "8192",
+    "disk": "256",
+    "bandwidth": "4.00",
+    "bandwidth_gb": "4096",
+    "price_per_month": "48.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": [
+      1,
+      4,
+      22
+    ]
+  },
+  "404": {
+    "VPSPLANID": "404",
+    "name": "16384 MB RAM,384 GB SSD,5.00 TB BW",
+    "vcpu_count": "4",
+    "ram": "16384",
+    "disk": "384",
+    "bandwidth": "5.00",
+    "bandwidth_gb": "5120",
+    "price_per_month": "96.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": [
+      4,
+      22
+    ]
+  },
+  "405": {
+    "VPSPLANID": "405",
+    "name": "32768 MB RAM,512 GB SSD,6.00 TB BW",
+    "vcpu_count": "8",
+    "ram": "32768",
+    "disk": "512",
+    "bandwidth": "6.00",
+    "bandwidth_gb": "6144",
+    "price_per_month": "192.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": []
+  },
+  "406": {
+    "VPSPLANID": "406",
+    "name": "49152 MB RAM,768 GB SSD,8.00 TB BW",
+    "vcpu_count": "12",
+    "ram": "49152",
+    "disk": "768",
+    "bandwidth": "8.00",
+    "bandwidth_gb": "8192",
+    "price_per_month": "256.00",
+    "plan_type": "HIGHFREQUENCY",
+    "windows": false,
+    "available_locations": []
+  }
+}
\ No newline at end of file
diff --git a/libcloud/test/compute/test_vultr.py b/libcloud/test/compute/test_vultr.py
index 9d94fb4..37546e7 100644
--- a/libcloud/test/compute/test_vultr.py
+++ b/libcloud/test/compute/test_vultr.py
@@ -16,8 +16,9 @@ import sys
 import unittest
 
 try:
-    import simplejson as json
+    import simplejson as json  # pylint: disable=unused-import
 except ImportError:
+    # pylint: disable=unused-import
     import json  # NOQA
 
 from libcloud.utils.py3 import httplib
@@ -52,18 +53,19 @@ class VultrTests(LibcloudTestCase):
         self.assertTrue(image.name is not None)
 
     def test_list_sizes_success(self):
+        """count of current plans"""
         sizes = self.driver.list_sizes()
-        self.assertTrue(len(sizes) == 17)
+        self.assertTrue(len(sizes) == 19)
 
         size = sizes[0]
-        self.assertTrue(size.id is not None)
+        self.assertTrue(size.id.isdigit())
         self.assertEqual(size.name, '8192 MB RAM,110 GB SSD,10.00 TB BW')
         self.assertEqual(size.ram, 8192)
 
         size = sizes[16]
-        self.assertTrue(size.id is not None)
-        self.assertEqual(size.name, '4096 MB RAM,1000 GB SATA,5.00 TB BW')
-        self.assertEqual(size.ram, 4096)
+        self.assertTrue(size.id.isdigit())
+        self.assertEqual(size.name, '16384 MB RAM,384 GB SSD,5.00 TB BW')
+        self.assertEqual(size.ram, 16384)
 
     def test_list_locations_success(self):
         locations = self.driver.list_locations()
@@ -79,9 +81,21 @@ class VultrTests(LibcloudTestCase):
 
     def test_list_nodes_success(self):
         nodes = self.driver.list_nodes()
-        self.assertEqual(len(nodes), 2)
-        self.assertEqual(nodes[0].id, '1')
-        self.assertEqual(nodes[0].public_ips, ['108.61.206.153'])
+        self.assertEqual(len(nodes), 3)
+        self.assertTrue(nodes[0].id.isdigit())
+        self.assertEqual(nodes[0].id, '41306569')
+        self.assertEqual(nodes[0].public_ips, ['45.76.43.87'])
+        self.assertEqual(nodes[0].private_ips, ['10.7.96.85'])
+        self.assertEqual(nodes[2].private_ips, [])
+
+    def test_list_nodes_success_extra(self):
+        extra_keys = [
+            "ram", "disk", "vcpu_count", "default_password", "power_status",
+        ]
+        nodes = self.driver.list_nodes()
+        for node in nodes:
+            self.assertTrue(len(node.extra.keys()) > 5)
+            self.assertTrue(all(item in node.extra.keys() for item in extra_keys))
 
     def test_reboot_node_success(self):
         node = self.driver.list_nodes()[0]
@@ -94,7 +108,7 @@ class VultrTests(LibcloudTestCase):
         test_location = self.driver.list_locations()[0]
         created_node = self.driver.create_node('test-node', test_size,
                                                test_image, test_location)
-        self.assertEqual(created_node.id, "1")
+        self.assertEqual(created_node.id, "41326859")
 
     def test_destroy_node_success(self):
         node = self.driver.list_nodes()[0]
@@ -126,47 +140,59 @@ class VultrTests(LibcloudTestCase):
 class VultrMockHttp(MockHttp):
     fixtures = ComputeFileFixtures('vultr')
 
+    # pylint: disable=unused-argument
     def _v1_regions_list(self, method, url, body, headers):
         body = self.fixtures.load('list_locations.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_os_list(self, method, url, body, headers):
         body = self.fixtures.load('list_images.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_plans_list(self, method, url, body, headers):
         body = self.fixtures.load('list_sizes.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_server_list(self, method, url, body, headers):
         body = self.fixtures.load('list_nodes.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_server_list_SERVICE_UNAVAILABLE(self, method, url, body, headers):
         body = self.fixtures.load('error_rate_limit.txt')
         return (httplib.SERVICE_UNAVAILABLE, body, {},
                 httplib.responses[httplib.SERVICE_UNAVAILABLE])
 
+    # pylint: disable=unused-argument
     def _v1_server_create(self, method, url, body, headers):
         body = self.fixtures.load('create_node.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_server_destroy(self, method, url, body, headers):
         return (httplib.OK, "", {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_server_reboot(self, method, url, body, headers):
         return (httplib.OK, "", {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_sshkey_list(self, method, url, body, headers):
         body = self.fixtures.load('list_key_pairs.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_sshkey_create(self, method, url, body, headers):
         body = self.fixtures.load('create_key_pair.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    # pylint: disable=unused-argument
     def _v1_sshkey_destroy(self, method, url, body, headers):
         return (httplib.OK, '', {}, httplib.responses[httplib.OK])
 
+
 if __name__ == '__main__':
     sys.exit(unittest.main())