in fleet-argocd-plugin/fleetclient/fleetclient.go [158:220]
func (c *FleetSync) Refresh(ctx context.Context) error {
mems, err := c.listMemberships(ctx, c.ProjectNum)
if err != nil {
return fmt.Errorf("failed to list memberships: %w", err)
}
scopes, err := c.listScopes(ctx, c.ProjectNum)
if err != nil {
return fmt.Errorf("failed to list scopes: %w", err)
}
mbs, err := c.listMembershipBindings(ctx, c.ProjectNum)
if err != nil {
return fmt.Errorf("failed to list membership bindings: %w", err)
}
// Build one map from Memberships to a list of Scopes that the membership cluster is associated with,
// and one reverse indexed map from Scopes to Memberships.
memTenancyMap := make(map[string][]string)
for _, mem := range mems {
membershipName := mem.Name
memTenancyMap[membershipName] = make([]string, 0)
}
scopeTenancyMap := make(map[string][]string)
for _, s := range scopes {
scopeID := s.Name
scopeTenancyMap[scopeID] = make([]string, 0)
}
for _, binding := range mbs {
// bindingName is in the format of
// `projects/{project}/locations/{location}/memberships/{membership}/bindings/{membershipbinding}`
bindingName := binding.Name
parts := strings.Split(bindingName, "/")
if len(parts) != 8 || parts[0] != "projects" || parts[2] != "locations" || parts[4] != "memberships" || parts[6] != "bindings" {
fmt.Println("Invalid binding resource name format: %s", bindingName)
continue
}
// Add the scope to the list for this membership
membership := strings.Join(parts[:6], "/")
scopeParts := strings.Split(binding.Scope, "/")
if len(scopeParts) == 0 {
fmt.Println("Invalid scope in binding (%s): %s", bindingName, binding.Scope)
continue
}
scope := scopeParts[len(scopeParts)-1]
memTenancyMap[membership] = append(memTenancyMap[membership], scope)
scopeTenancyMap[scope] = append(scopeTenancyMap[scope], membership)
}
// Refresh cache.
c.MembershipTenancyMapCache = memTenancyMap
c.ScopeTenancyMapCache = scopeTenancyMap
// Update cluster Secrets.
if err := c.reconcileClusterSecrets(ctx); err != nil {
return fmt.Errorf("failed to reconcile cluster secrets: %w", err)
}
return nil
}