in operator/pkg/awsprovider/iam/reconciler.go [51:78]
func (c *Controller) Reconcile(ctx context.Context, controlPlane *apis.ControlPlane) error {
role, err := c.getRole(ctx, KitNodeRoleNameFor(controlPlane.ClusterName()))
if err != nil && !errors.IsIAMObjectDoNotExist(err) {
return fmt.Errorf("getting IAM role for %v, %w", controlPlane.ClusterName(), err)
}
if role == nil {
role, err = c.createRole(ctx, &iam.CreateRoleInput{
AssumeRolePolicyDocument: aws.String(assumeRolePolicyDocument),
Description: aws.String("Role assumed by dataplane nodes created by KIT operated"),
RoleName: aws.String(KitNodeRoleNameFor(controlPlane.ClusterName())),
Tags: generateRoleTags(controlPlane.ClusterName()),
})
if err != nil {
return fmt.Errorf("creating IAM role for %v, %w", controlPlane.ClusterName(), err)
}
zap.S().Infof("[%s] Created IAM Role %v", controlPlane.ClusterName(), aws.StringValue(role.RoleName))
}
if err := role.addRoleToInstanceProfile(ctx, KitNodeRoleNameFor(controlPlane.ClusterName()),
KitNodeInstanceProfileNameFor(controlPlane.ClusterName())); err != nil {
return fmt.Errorf("adding instance profile to role, %w", err)
}
for _, policy := range kitNodeRolePolicies {
if err := role.attachPolicy(ctx, policy, KitNodeRoleNameFor(controlPlane.ClusterName())); err != nil {
return fmt.Errorf("attaching policies to role, %w", err)
}
}
return nil
}