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])