in pkg/deploy/lattice/service_manager.go [204:245]
func (m *defaultServiceManager) updateAssociations(ctx context.Context, svc *Service, svcSum *SvcSummary) error {
assocs, err := m.getAllAssociations(ctx, svcSum)
if err != nil {
return err
}
toCreate, toDelete, err := associationsDiff(svc, assocs)
if err != nil {
return err
}
for _, snName := range toCreate {
err := m.createAssociation(ctx, svcSum.Id, snName)
if err != nil {
return err
}
}
for _, assoc := range toDelete {
isManaged, err := m.cloud.IsArnManaged(ctx, *assoc.Arn)
if err != nil {
// TODO check for vpclattice.ErrCodeAccessDeniedException or a new error type ErrorCodeNotFoundException
// when the api no longer responds with a 404 NotFoundException instead of either of the above.
// ErrorCodeNotFoundException currently not part of the golang sdk for the lattice api. This a is a distinct
// error from vpclattice.ErrCodeResourceNotFoundException.
// In a scenario that the service association is created by a foreign account,
// the owner account's controller cannot read the tags of this ServiceNetworkServiceAssociation,
// and AccessDeniedException is expected.
m.log.Warnf(ctx, "skipping update associations service: %s, association: %s, error: %s", svc.LatticeServiceName(), *assoc.Arn, err)
continue
}
if isManaged {
err = m.deleteAssociation(ctx, assoc.Arn)
if err != nil {
return err
}
}
}
return nil
}