From ee621f1a7058624a1d3fbf0ba18c5b36c04bb219 Mon Sep 17 00:00:00 2001 From: Benedikt Loeffler Date: Thu, 15 Aug 2024 14:50:49 +0200 Subject: [PATCH] Encode userdata base64 for launch templates For create_launch_template, the userdata must be provided base64 encoded. In contrast to the run_instance call, for which it is automatically encoded. Change-Id: I5fe3a8d13705d6f4b6a0c9ad3ec8e2c94d27a726 --- nodepool/driver/aws/adapter.py | 4 +++- nodepool/tests/unit/test_driver_aws.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/nodepool/driver/aws/adapter.py b/nodepool/driver/aws/adapter.py index e8f6dde00..d670950b5 100644 --- a/nodepool/driver/aws/adapter.py +++ b/nodepool/driver/aws/adapter.py @@ -1709,7 +1709,9 @@ class AwsAdapter(statemachine.Adapter): } if label.userdata: - template_data['UserData'] = label.userdata + userdata_base64 = base64.b64encode( + label.userdata.encode('ascii')).decode('utf-8') + template_data['UserData'] = userdata_base64 template_args = dict( LaunchTemplateData=template_data, diff --git a/nodepool/tests/unit/test_driver_aws.py b/nodepool/tests/unit/test_driver_aws.py index a74fa2372..794f18a82 100644 --- a/nodepool/tests/unit/test_driver_aws.py +++ b/nodepool/tests/unit/test_driver_aws.py @@ -1444,7 +1444,8 @@ class TestDriverAws(tests.DBTestCase): LaunchTemplateId=lt1['LaunchTemplateId'])[ 'LaunchTemplateVersions'][0] lt1_data = lt1_version['LaunchTemplateData'] - self.assertEqual(lt1_data['UserData'], 'some-command') + lt1_userdata = base64.b64decode(lt1_data['UserData']).decode() + self.assertEqual(lt1_userdata, 'some-command') # Get details from second launch template lt2_version = self.ec2_client.\