in pkg/fuzz/gcp.go [164:282]
func (g *GCLB) CheckResourceDeletion(ctx context.Context, c cloud.Cloud, options *GCLBDeleteOptions) error {
var resources []meta.Key
for k := range g.ForwardingRule {
var err error
if k.Region != "" {
_, err = c.ForwardingRules().Get(ctx, &k)
} else {
_, err = c.GlobalForwardingRules().Get(ctx, &k)
}
if err != nil {
if err.(*googleapi.Error) == nil || err.(*googleapi.Error).Code != http.StatusNotFound {
return fmt.Errorf("ForwardingRule %s is not deleted/error to get: %s", k.Name, err)
}
} else {
resources = append(resources, k)
}
}
for k := range g.TargetHTTPProxy {
var err error
if k.Region != "" {
// Use beta since GA isn't available yet
_, err = c.BetaRegionTargetHttpProxies().Get(ctx, &k)
} else {
_, err = c.TargetHttpProxies().Get(ctx, &k)
}
if err != nil {
if err.(*googleapi.Error) == nil || err.(*googleapi.Error).Code != http.StatusNotFound {
return fmt.Errorf("TargetHTTPProxy %s is not deleted/error to get: %s", k.Name, err)
}
} else {
resources = append(resources, k)
}
}
for k := range g.TargetHTTPSProxy {
var err error
if k.Region != "" {
// Use beta since GA isn't available yet
_, err = c.BetaRegionTargetHttpsProxies().Get(ctx, &k)
} else {
_, err = c.TargetHttpsProxies().Get(ctx, &k)
}
if err != nil {
if err.(*googleapi.Error) == nil || err.(*googleapi.Error).Code != http.StatusNotFound {
return fmt.Errorf("TargetHTTPSProxy %s is not deleted/error to get: %s", k.Name, err)
}
} else {
resources = append(resources, k)
}
}
for k := range g.URLMap {
var err error
if k.Region != "" {
_, err = c.BetaRegionUrlMaps().Get(ctx, &k)
} else {
_, err = c.UrlMaps().Get(ctx, &k)
}
if err != nil {
if err.(*googleapi.Error) == nil || err.(*googleapi.Error).Code != http.StatusNotFound {
return fmt.Errorf("URLMap %s is not deleted/error to get: %s", k.Name, err)
}
} else {
resources = append(resources, k)
}
}
if options == nil || !options.SkipBackends {
for k := range g.BackendService {
var err error
var bs *compute.BackendService
if k.Region != "" {
bs, err = c.RegionBackendServices().Get(ctx, &k)
} else {
bs, err = c.BackendServices().Get(ctx, &k)
}
if err != nil {
if err.(*googleapi.Error) == nil || err.(*googleapi.Error).Code != http.StatusNotFound {
return fmt.Errorf("BackendService %s is not deleted/error to get: %s", k.Name, err)
}
} else {
if options != nil && options.SkipDefaultBackend {
desc := utils.DescriptionFromString(bs.Description)
if desc.ServiceName == fmt.Sprintf("%s/%s", kubeSystemNS, defaultHTTPBackend) {
continue
}
}
resources = append(resources, k)
}
}
for k := range g.NetworkEndpointGroup {
ns, err := c.BetaNetworkEndpointGroups().Get(ctx, &k)
if err != nil {
if err.(*googleapi.Error) == nil || err.(*googleapi.Error).Code != http.StatusNotFound {
return fmt.Errorf("NetworkEndpointGroup %s is not deleted/error to get: %s", k.Name, err)
}
} else {
// TODO(smatti): Add NEG description to make this less error prone.
// This is to ensure that ILB tests that use NEGs are not blocked on default NEG deletion.
// Also, the default NEG may not get recognized here if default http backend name is changed
// to cause truncation.
if options != nil && options.SkipDefaultBackend &&
strings.Contains(ns.Name, fmt.Sprintf("%s-%s", kubeSystemNS, defaultHTTPBackend)) {
continue
}
resources = append(resources, k)
}
}
}
if len(resources) != 0 {
var s []string
for _, r := range resources {
s = append(s, r.String())
}
return fmt.Errorf("resources still exist (%s)", strings.Join(s, ", "))
}
return nil
}