coveralls: 
[![Coverage Status](https://coveralls.io/builds/13861017/badge)](https://coveralls.io/builds/13861017)

Coverage increased (+0.07%) to 57.514% when pulling **d6471385ce6b8908ac9dac4950bfd0831f64a106 on ecs-3_1-support** into **671ad67baabb986cc33409ea5b41411b87013fcf on master**.

diff --git a/VERSION b/VERSION
index e25d8d9..0664a8f 100644
--- a/VERSION
+++ b/VERSION
@@ -1,1 +1,1 @@
-1.1.5
+1.1.6
diff --git a/ecsclient/common/provisioning/data_store.py b/ecsclient/common/provisioning/data_store.py
index 69f0402..6968d2b 100644
--- a/ecsclient/common/provisioning/data_store.py
+++ b/ecsclient/common/provisioning/data_store.py
@@ -200,7 +200,7 @@ class DataStore(object):
 
         :param name: User provided name (not verified or unique)
         :param description: User provided description (not verified or unique)
-        :param node_id: IP address for the commodity node
+        :param node_id: ID of the commodity node
         :param storage_pool_id: Desired storage pool ID for creating data store
         :returns a task object
         """
diff --git a/ecsclient/common/provisioning/node.py b/ecsclient/common/provisioning/node.py
index 2af37ec..6ab144a 100644
--- a/ecsclient/common/provisioning/node.py
+++ b/ecsclient/common/provisioning/node.py
@@ -19,9 +19,9 @@ class Node(object):
         """
         self.conn = connection
 
-    def get_nodes(self):
+    def list(self):
         """
-        Gets the data nodes that are currently configured in the cluster.
+        Gets a list of the data nodes that are currently configured in the cluster.
 
         Required role(s):
 
diff --git a/ecsclient/schemas.py b/ecsclient/schemas.py
index 4a9c003..8a763c3 100644
--- a/ecsclient/schemas.py
+++ b/ecsclient/schemas.py
@@ -796,3 +796,38 @@ VDC_KEYSTORE = {
         "chain"
     ]
 }
+
+NODE = {
+    "type": "object",
+    "properties": {
+        "rackId": {"type": "string"},
+        "version": {"type": "string"},
+        "nodeid": {"type": "string"},
+        "isLocal": {"type": "boolean"},
+        "nodename": {"type": "string"},
+        "ip": {"type": "string"},
+    },
+    "required": [
+        "rackId",
+        "version",
+        "nodeid",
+        "isLocal",
+        "nodename",
+        "ip"
+    ]
+}
+
+NODE_LIST = {
+    "type": "object",
+    "properties": {
+        "node": {
+            "type": "array",
+            "items": NODE,
+            "minItems": 1,
+            "uniqueItems": True
+        }
+    },
+    "required": [
+        "node"
+    ]
+}

Add support for the Nodes endpoint
Implement the Node endpoint for versions 2.x, 3.0, and 3.1.
diff --git a/tests/functional/test_node.py b/tests/functional/test_node.py
new file mode 100644
index 0000000..95a6492
--- /dev/null
+++ b/tests/functional/test_node.py
@@ -0,0 +1,9 @@
+from ecsclient import schemas
+from tests import functional
+
+
+class TestNode(functional.BaseTestCase):
+
+    def test_node_list(self):
+        response = self.client.node.list()
+        self.assertValidSchema(response, schemas.NODE_LIST)
diff --git a/tests/unit/test_node.py b/tests/unit/test_node.py
index 5c01719..541e22f 100644
--- a/tests/unit/test_node.py
+++ b/tests/unit/test_node.py
@@ -2,7 +2,6 @@ import testtools
 from requests_mock.contrib import fixture
 from mock import MagicMock
 from mock import mock
-from mock import patch
 from six.moves import http_client
 from ecsclient.client import Client
 from ecsclient.common.exceptions import ECSClientException
@@ -46,14 +45,14 @@ class TestNode(testtools.TestCase):
         self.requests_mock = self.useFixture(fixture.Fixture())
 
     @mock.patch('ecsclient.common.token_request.TokenRequest.get_token')
-    def test_get_nodes_throw_exception(self, mock_get_token):
+    def test_list_nodes_throw_exception(self, mock_get_token):
         self.requests_mock.register_uri('GET', 'https://127.0.0.1:4443/vdc/nodes',
                                         status_code=http_client.INTERNAL_SERVER_ERROR,
                                         text='Server Error')
         mock_get_token.return_value = 'FAKE-TOKEN-123'
 
         with super(testtools.TestCase, self).assertRaises(ECSClientException) as error:
-            self.client.node.get_nodes()
+            self.client.node.list()
 
         exception = error.exception
         self.assertEqual(self.requests_mock.last_request.method, 'GET')
@@ -63,13 +62,13 @@ class TestNode(testtools.TestCase):
         self.assertEqual(exception.http_status, http_client.INTERNAL_SERVER_ERROR)
 
     @mock.patch('ecsclient.common.token_request.TokenRequest.get_token')
-    def test_get_nodes(self, mock_get_token):
+    def test_list_nodes(self, mock_get_token):
         mock_get_token.return_value = 'FAKE-TOKEN-123'
         self.requests_mock.register_uri('GET', 'https://127.0.0.1:4443/vdc/nodes',
                                         status_code=http_client.OK,
                                         json=self.returned_json)
 
-        response = self.client.node.get_nodes()
+        response = self.client.node.list()
 
         self.assertEqual(self.requests_mock.last_request.method, 'GET')
         self.assertEqual(self.requests_mock.last_request.url, 'https://127.0.0.1:4443/vdc/nodes')

pip install -e .
parse_log_pytest
requirements.txt
flake8==3.2.1 mock==2.0.0 nose==1.3.7 coverage==4.3.4 jsonschema==2.6.0 tox==2.6.0 testtools==2.2.0 requests-mock[fixture]==1.3.0 pytest
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
coverage==4.3.4
distlib==0.3.9
extras==1.0.0
filelock==3.4.1
fixtures==4.0.1
flake8==3.2.1
idna==3.10
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
jsonschema==2.6.0
linecache2==1.0.0
mccabe==0.5.3
mock==2.0.0
nose==1.3.7
packaging==21.3
pbr==6.1.1
platformdirs==2.4.0
pluggy==0.13.1
py==1.11.0
pycodestyle==2.2.0
pyflakes==1.3.0
pyparsing==3.1.4
pytest==7.0.1
-e git+https://github.com/EMCECS/python-ecsclient.git@671ad67baabb986cc33409ea5b41411b87013fcf#egg=python_ecsclient
python-mimeparse==1.6.0
requests==2.27.1
requests-mock==1.3.0
six==1.17.0
testtools==2.2.0
tomli==1.2.3
tox==2.6.0
traceback2==1.4.0
typing_extensions==4.1.1
unittest2==1.1.0
urllib3==1.26.20
virtualenv==20.17.1
zipp==3.6.0

name: python-ecsclient
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - argparse==1.4.0
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - coverage==4.3.4
      - distlib==0.3.9
      - extras==1.0.0
      - filelock==3.4.1
      - fixtures==4.0.1
      - flake8==3.2.1
      - idna==3.10
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - jsonschema==2.6.0
      - linecache2==1.0.0
      - mccabe==0.5.3
      - mock==2.0.0
      - nose==1.3.7
      - packaging==21.3
      - pbr==6.1.1
      - platformdirs==2.4.0
      - pluggy==0.13.1
      - py==1.11.0
      - pycodestyle==2.2.0
      - pyflakes==1.3.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-mimeparse==1.6.0
      - requests==2.27.1
      - requests-mock==1.3.0
      - six==1.17.0
      - testtools==2.2.0
      - tomli==1.2.3
      - tox==2.6.0
      - traceback2==1.4.0
      - typing-extensions==4.1.1
      - unittest2==1.1.0
      - urllib3==1.26.20
      - virtualenv==20.17.1
      - zipp==3.6.0
prefix: /opt/conda/envs/python-ecsclient

tests/unit/test_node.py::TestNode::test_list_nodes tests/unit/test_node.py::TestNode::test_list_nodes_throw_exception
VERSION ecsclient/common/provisioning/data_store.py ecsclient/schemas.py ecsclient/common/provisioning/node.py
VERSION ecsclient/common/provisioning/data_store.py ecsclient/schemas.py ecsclient/common/provisioning/node.py