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 bb0dba7d0fdc24bf4b21209a6e4267dd6c773a6d
Author: Tomaz Muraus <to...@tomaz.me>
AuthorDate: Wed Sep 20 20:07:20 2023 +0200

    Default ex_userdata to None instead of False, add test for ex_userdata
    argument.
---
 libcloud/compute/drivers/linode.py      |  2 +-
 libcloud/test/compute/test_linode_v4.py | 39 ++++++++++++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/libcloud/compute/drivers/linode.py 
b/libcloud/compute/drivers/linode.py
index 4d21c1bc1..5d395cbf7 100644
--- a/libcloud/compute/drivers/linode.py
+++ b/libcloud/compute/drivers/linode.py
@@ -994,7 +994,7 @@ class LinodeNodeDriverV4(LinodeNodeDriver):
         ex_tags=None,
         ex_backups_enabled=False,
         ex_private_ip=False,
-        ex_userdata=False,
+        ex_userdata=None,
     ):
         """Creates a Linode Instance.
         In order for this request to complete successfully,
diff --git a/libcloud/test/compute/test_linode_v4.py 
b/libcloud/test/compute/test_linode_v4.py
index c4c5c8dd5..ed5d5d2e5 100644
--- a/libcloud/test/compute/test_linode_v4.py
+++ b/libcloud/test/compute/test_linode_v4.py
@@ -14,6 +14,8 @@
 # limitations under the License.
 
 import sys
+import json
+import base64
 import unittest
 from datetime import datetime
 
@@ -26,6 +28,13 @@ from libcloud.common.linode import LinodeDisk, 
LinodeIPAddress, LinodeExceptionV
 from libcloud.test.file_fixtures import ComputeFileFixtures
 from libcloud.compute.drivers.linode import LinodeNodeDriver, 
LinodeNodeDriverV4
 
+EX_USERDATA = """
+#!/bin/sh
+
+echo "test"
+exit 1
+""".strip()
+
 
 class LinodeTestsV4(unittest.TestCase, TestCaseMixin):
     should_list_volumes = True
@@ -99,6 +108,23 @@ class LinodeTestsV4(unittest.TestCase, TestCaseMixin):
         )
         self.assertTrue(isinstance(node, Node))
 
+    def test_create_node_with_ex_userdata(self):
+        size = self.driver.list_sizes()[0]
+        image = self.driver.list_images()[0]
+        location = self.driver.list_locations()[0]
+
+        LinodeMockHttpV4.type = "EX_USERDATA"
+
+        node = self.driver.create_node(
+            location,
+            "node-name",
+            size=size,
+            image=image,
+            root_pass="test123456",
+            ex_userdata=EX_USERDATA,
+        )
+        self.assertTrue(isinstance(node, Node))
+
     def test_list_nodes(self):
         nodes = self.driver.list_nodes()
         self.assertEqual(len(nodes), 2)
@@ -434,7 +460,7 @@ class LinodeTestsV4(unittest.TestCase, TestCaseMixin):
         self.assertEqual(len(images), 34)
 
 
-class LinodeMockHttpV4(MockHttp):
+class LinodeMockHttpV4(MockHttp, unittest.TestCase):
     fixtures = ComputeFileFixtures("linode_v4")
 
     def _v4_profile_sshkeys(self, method, url, body, headers):
@@ -477,6 +503,17 @@ class LinodeMockHttpV4(MockHttp):
             body = self.fixtures.load("create_node.json")
             return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    def _v4_linode_instances_EX_USERDATA(self, method, url, body, headers):
+        if method == "POST":
+            body = json.loads(body)
+            self.assertTrue("metadata" in body)
+            self.assertTrue("user_data" in body["metadata"])
+            body_userdata_decoded = 
base64.b64decode(body["metadata"]["user_data"]).decode("utf-8")
+            self.assertEqual(body_userdata_decoded, EX_USERDATA)
+
+            body = self.fixtures.load("create_node.json")
+            return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
     def _v4_linode_instances_NO_IMAGE(self, method, url, body, headers):
         body = self.fixtures.load("create_node_no_image.json")
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])

Reply via email to