sparse-intern-71089
02/01/2023, 4:18 PMgreat-sunset-355
02/01/2023, 4:25 PMassume_role_policy=pulumi.Output.json_dumps()
good enough?
Output.json_dumps()
should be able to unwrap outputs for you.
in Typescript assume_role_policy
can now accept object directly (most of the time) and when it cannot, you can use `pulumi.interpolate`JSON.stringiy(obj)`
pulumi.interpolate
is somewhat python equivalent of pulumi.Output.format
so in TS it would look like this:
assumeRolePolicy={...props..}
// or
assumeRolePolicy=pulumi.interpolate`JSON.stringify({...props...}`
bland-pharmacist-96854
02/01/2023, 4:28 PMbland-pharmacist-96854
02/01/2023, 4:29 PMbland-pharmacist-96854
02/01/2023, 4:30 PMgreat-sunset-355
02/01/2023, 4:31 PMpulumi.interpolate`JSON.stringify({...props...}`
bland-pharmacist-96854
02/01/2023, 4:32 PMechoing-dinner-19531
02/01/2023, 4:35 PMassume_role_policy=pulumi.Output.json_dumps(
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRoleWithWebIdentity",
"Principal": {"Federated": eks_cluster.core.oidc_provider.arn},
"Condition": {
"StringEquals": {
pulumi.Output.format("{0}:aud", eks_cluster.core.oidc_provider.url): ["<http://sts.amazonaws.com|sts.amazonaws.com>"]
}
},
}
],
}
)
echoing-dinner-19531
02/01/2023, 4:35 PMechoing-dinner-19531
02/01/2023, 4:36 PMassume_role_policy=eks_cluster.core.oidc_provider.url.apply(url =>
pulumi.jsonStringify(
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRoleWithWebIdentity",
"Principal": {"Federated": eks_cluster.core.oidc_provider.arn},
"Condition": {
"StringEquals": {
[url + ":aud"]: ["<http://sts.amazonaws.com|sts.amazonaws.com>"]
}
},
}
],
}
)
)
bland-pharmacist-96854
02/01/2023, 4:36 PMgreat-sunset-355
02/01/2023, 4:36 PMpulumi preview
you'll see the policy result it depends on the what type is accepted by the input
for example aws.iamRole
accepts
assumeRolePolicy: pulumi.Input<string | aws.iam.PolicyDocument
I'd do this in TS
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRoleWithWebIdentity",
"Principal": {"Federated": eks_cluster.core.oidc_provider.arn},
"Condition": {
"StringEquals": {pulumi.interpolate`${eks_cluster.core.oidc_provider.url}:aud`: ["<http://sts.amazonaws.com|sts.amazonaws.com>"]}
},
}
],
}
bland-pharmacist-96854
02/01/2023, 4:36 PMgreat-sunset-355
02/01/2023, 4:38 PMbland-pharmacist-96854
02/01/2023, 4:47 PMechoing-dinner-19531
02/01/2023, 4:51 PMbland-pharmacist-96854
02/01/2023, 4:52 PMechoing-dinner-19531
02/01/2023, 4:52 PM.?
can cause the whole expression to be undefined
bland-pharmacist-96854
02/01/2023, 4:54 PM?
?echoing-dinner-19531
02/01/2023, 4:54 PMechoing-dinner-19531
02/01/2023, 4:55 PM!
at the end of the expressionbland-pharmacist-96854
02/01/2023, 4:56 PMcreateOidcProvider
in the clusterbland-pharmacist-96854
02/01/2023, 4:57 PM!
, now lets go with interpolate... 🤔bland-pharmacist-96854
02/01/2023, 5:03 PMechoing-dinner-19531
02/01/2023, 5:04 PMbland-pharmacist-96854
02/01/2023, 5:05 PMechoing-dinner-19531
02/01/2023, 5:05 PMbland-pharmacist-96854
02/01/2023, 5:07 PMechoing-dinner-19531
02/01/2023, 5:09 PMbland-pharmacist-96854
02/01/2023, 5:10 PMechoing-dinner-19531
02/01/2023, 5:10 PMbland-pharmacist-96854
02/01/2023, 5:15 PMechoing-dinner-19531
02/01/2023, 5:15 PMbland-pharmacist-96854
02/01/2023, 5:16 PMechoing-dinner-19531
02/01/2023, 5:17 PMechoing-dinner-19531
02/01/2023, 5:18 PMconst eksAutoscalerRole = new aws.iam.Role("AmazonEKSClusterAutoscalerRole", {
name: "AmazonEKSClusterAutoscalerRole",
assumeRolePolicy: pulumi.jsonStringify({
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: "sts:AssumeRoleWithWebIdentity",
Principal: { Federated: eksCluster.core.oidcProvider?.arn! },
Condition: {
StringEquals: eksCluster.core.oidcProvider!.url.apply(oidcProviderUrl => {
return { [oidcProviderUrl + ":aud"]: ["<http://sts.amazonaws.com|sts.amazonaws.com>"] }
}),
},
},
],
}),
});
bland-pharmacist-96854
02/01/2023, 5:19 PMbland-pharmacist-96854
02/01/2023, 5:26 PMpulumi.jsonStringify
bland-pharmacist-96854
02/01/2023, 5:27 PM