Thread
#aws
    f

    famous-needle-81667

    3 months ago
    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.
    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:
    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

    witty-candle-66007

    3 months ago
    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
    f

    famous-needle-81667

    3 months ago
    Thanks @witty-candle-66007 , I came out with a solution
    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