Hello everyone, trying to port some changes from T...
# aws
f
Hello everyone, trying to port some changes from Terraform to Pulumi and run into an issue: This is EC2 instance spec in terraform. I have a templated bash script into which I inject loadbalancer DNS name.
Copy code
user_data                   = base64encode(
    templatefile("../templates/bash_script.sh.tftpl", {
        internal_lb_dns_name = aws_lb.aws-internal-load-balancer.dns_name
      }
    )
  )
How to achieve similar results with pulumi? If it was not a templated file it would be easy, namely:
Copy code
UserData:            pulumi.StringPtr(base64.StdEncoding.EncodeToString(bashScriptContent))
However, I need to inject some variables into that script that will be known once some resources got created. Any help would be appreciated, this is a part of my Master's Degree thesis and it would be a shame that this cannot be solved in Pulumi 😄 //EDIT, I'm writing in Golang
w
This example may help: https://github.com/pulumi/examples/blob/master/aws-go-webserver/main.go#L42 You may need to augment that with
.apply
or
.all
to resolve those values to build the string as per: https://www.pulumi.com/docs/intro/concepts/inputs-outputs/#all
❤️ 1
f
Thanks @witty-candle-66007 , I came out with a solution
Copy code
userDataTpl, err := template.New("bash_script.tpl.sh").
			ParseFiles("./templates/bash_script.tpl.sh")
		if err != nil {
			return err
		}

		userData := internalLoadBalancer.DnsName.ApplyT(
			func(lbDNSName string) (*string, error) {
				buf := new(bytes.Buffer)
				err := userDataFrontendTpl.Execute(buf, map[string]string{"internal_lb_dns_name": lbDNSName})
				userData := base64.StdEncoding.EncodeToString(buf.Bytes())
				return &userData, err
			},
		).(pulumi.StringPtrOutput)
worked like a charm with native go templating engine
👍 2