sparse-intern-71089
10/31/2019, 3:31 PMwhite-balloon-205
but subsequent pulumi ups what to do a replace/import-replacement.Can you share the detailed diff you see that leads to this?
billowy-laptop-45963
10/31/2019, 4:42 PMpulumi up --diff
?white-balloon-205
billowy-laptop-45963
10/31/2019, 5:34 PM$ pulumi up --diff
Previewing update (prd-vms-permissions):
pulumi:pulumi:Stack: (same)
[urn=urn:pulumi:prd-vms-permissions::vms-permissions::pulumi:pulumi:Stack::vms-permissions-prd-vms-permissions]
+-aws:iam/rolePolicyAttachment:RolePolicyAttachment: (replace)
[id=prd-mediaconvert-execution-role-arn:aws:iam::1234567890:policy/prd-vms-inbox-readonly-access-policy]
[urn=urn:pulumi:prd-vms-permissions::vms-permissions::aws:iam/rolePolicyAttachment:RolePolicyAttachment::prd-mc-prd-vms-inbox-readonly-access-policy]
[provider=urn:pulumi:prd-vms-permissions::vms-permissions::pulumi:providers:aws::vmsprd::84585519-9f50-4f3a-b33a-f3e2b0047db3]
id : "prd-mediaconvert-execution-role-arn:aws:iam::1234567890:policy/prd-vms-inbox-readonly-access-policy"
policyArn: "arn:aws:iam::1234567890:policy/prd-vms-inbox-readonly-access-policy"
role : "prd-mediaconvert-execution-role"
Resources:
+-1 to replace
23 unchanged
white-balloon-205
--logtostderr -v=9 2> out.txt
and looking for lines including replaces=
which should indicate what is causing Pulumi to believe it needs to replace this.billowy-laptop-45963
10/31/2019, 5:59 PMwhite-balloon-205
package-lock.json
and see what versions of the @pulumi/*
packages you are using.billowy-laptop-45963
10/31/2019, 6:05 PMyarn outdated
says I am... 1.7.0 for pulumi/awsbillowy-laptop-45963
10/31/2019, 8:36 PMI1031 16:32:38.165583 3150 provider_plugin.go:572] Provider[aws, 0xc00159a720].Diff(urn:pulumi:prd-vms-permissions::vms-permissions::aws:iam/policy:Policy::dev-content-policy,arn:aws:iam::1234567890:policy/dev-content-policy) success: changes=1 #replaces=[] #stables=[namePrefix description path name] delbefrepl=false, diffs=#[], detaileddiff=map[]
what am I looking for?white-balloon-205
Policy
, is there a similar line for the PolicyAttachement
? It should show a non-empty list of replaces=
.billowy-laptop-45963
11/01/2019, 2:08 PM- iam_managed_policy:
policy_name: 'policya'
policy: |
...
register: policya
- iam_role:
name: myrole
purge_policies: true
assume_role_policy_document: |
...
managed_policy:
- '{{ policya.arn }}'
register: myrole
I thought I would create a function similar to ansible's iam_role which allows just passing a list of managed_policies since pulumi/terraform require more resources to do the same thing as in ansible above:
export interface RoleArgs extends aws.iam.RoleArgs {
managedPolicies: pulumi.Input<string>[],
}
export function createRole(name: string, roleArgs: RoleArgs, opts: pulumi.CustomResourceOptions) {
const role = new aws.iam.Role(name, roleArgs as aws.iam.RoleArgs, opts);
const managedPolicies = roleArgs.managedPolicies == null ? [] : roleArgs.managedPolicies
const roleAttachments = role.name.apply(
roleName =>
pulumi
.all(managedPolicies)
.apply(
arns =>
arns.map(
(arn, i) => {
const policyName = arn.split('/').pop()
return new aws.iam.RolePolicyAttachment(`${name}/${policyName}`, {
policyArn: arn,
role: roleName,
}, { provider: opts.provider, import: `${roleName}/${arn}` });
}))
)
return role;
}
Then I can convert the ansible into the following pulumi which imports fine the first time:
const policya = new aws.iam.Policy(
`policya`,
{name: `policya`, policy: `...`},
{ provider: provider, import: `arn:aws:iam::${accountId}:policy/policya` })
const myrole = createRole(
'myrole',
{assumeRolePolicy: `...`, managedPolicies: [policya.arn]},
{ provider: provider, import: `myrole` })
)
but then wants to replace afterwards.billowy-laptop-45963
11/01/2019, 2:10 PMbillowy-laptop-45963
11/01/2019, 3:42 PM