https://pulumi.com logo
#golang
Title
# golang
m

modern-nest-74116

05/29/2021, 4:39 AM
The UserData in this ec2.LaunchTemplate throws the following error:  
Ec2LaunchTemplateInvalidConfiguration: User data was not in the MIME multipart format
I am following AWS provided examples https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html Not sure what I am doing wrong. All suggestions are welcome.
Copy code
launchTemplate, err := ec2.NewLaunchTemplate(ctx, resourceName, &ec2.LaunchTemplateArgs{
….
   UserData: pulumi.StringPtr(base64.StdEncoding.EncodeToString([]byte(`
             MIME-Version: 1.0
             Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

             --==MYBOUNDARY==
             Content-Type: text/x-shellscript; charset="us-ascii"

             #!/bin/bash
             set -ex

             BOOTSTRAP_SH=/etc/eks/bootstrap.sh
             BOOTSTRAP_USE_MAX_PODS_SEARCH="USE_MAX_PODS:-true"
             KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json
             # MAX_PODS=58

             # search for the string to be replaced by sed and return a non-zero exit code if not found. This is used for safety in case the bootstrap.sh
             # script gets changed in a way that is no longer compatible with our USE_MAX_PODS replacement command.
             grep -q $BOOTSTRAP_USE_MAX_PODS_SEARCH $BOOTSTRAP_SH

             # set the default for USE_MAX_PODS to false so that the maxPods value set in KUBELET_CONFIG will be honored
             sed -i"" "s/$BOOTSTRAP_USE_MAX_PODS_SEARCH/USE_MAX_PODS:-false/" $BOOTSTRAP_SH

             --==MYBOUNDARY==--
            `))),
})
Looks like the white space mattered. This worked
Copy code
UserData: pulumi.StringPtr(base64.StdEncoding.EncodeToString([]byte(`MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
set -ex

BOOTSTRAP_SH=/etc/eks/bootstrap.sh
BOOTSTRAP_USE_MAX_PODS_SEARCH="USE_MAX_PODS:-true"
KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json
# MAX_PODS=58

# search for the string to be replaced by sed and return a non-zero exit code if not found. This is used for safety in case the bootstrap.sh
# script gets changed in a way that is no longer compatible with our USE_MAX_PODS replacement command.
grep -q $BOOTSTRAP_USE_MAX_PODS_SEARCH $BOOTSTRAP_SH

# set the default for USE_MAX_PODS to false so that the maxPods value set in KUBELET_CONFIG will be honored
sed -i"" "s/$BOOTSTRAP_USE_MAX_PODS_SEARCH/USE_MAX_PODS:-false/" $BOOTSTRAP_SH

--==MYBOUNDARY==--`))),
		})
4 Views