diff --git a/spinifex/gateway/iam.go b/spinifex/gateway/iam.go index 444035d0f..1c62cef7e 100644 --- a/spinifex/gateway/iam.go +++ b/spinifex/gateway/iam.go @@ -126,6 +126,9 @@ var iamActions = map[string]IAMHandler{ "ListAttachedRolePolicies": iamHandler(func(accountID string, input *iam.ListAttachedRolePoliciesInput, gw *GatewayConfig) (any, error) { return gateway_iam.ListAttachedRolePolicies(accountID, input, gw.IAMService) }), + "ListRolePolicies": iamHandler(func(accountID string, input *iam.ListRolePoliciesInput, gw *GatewayConfig) (any, error) { + return gateway_iam.ListRolePolicies(accountID, input, gw.IAMService) + }), // Instance profile CRUD "CreateInstanceProfile": iamHandler(func(accountID string, input *iam.CreateInstanceProfileInput, gw *GatewayConfig) (any, error) { diff --git a/spinifex/gateway/iam/role.go b/spinifex/gateway/iam/role.go index d4528176b..24aa4f3af 100644 --- a/spinifex/gateway/iam/role.go +++ b/spinifex/gateway/iam/role.go @@ -79,3 +79,15 @@ func ListAttachedRolePolicies(accountID string, input *iam.ListAttachedRolePolic } return svc.ListAttachedRolePolicies(accountID, input) } + +// ListRolePolicies lists inline role policies. Spinifex only ever attaches +// managed policies (AttachRolePolicy), never inline, so this always returns an +// empty list — enough to satisfy the AWS provider's aws_iam_role read-back. +func ListRolePolicies(accountID string, input *iam.ListRolePoliciesInput, svc handlers_iam.IAMService) (*iam.ListRolePoliciesOutput, error) { + if input.RoleName == nil || *input.RoleName == "" { + return nil, errors.New(awserrors.ErrorMissingParameter) + } + return &iam.ListRolePoliciesOutput{ + PolicyNames: []*string{}, + }, nil +}