pkg/cloud/rgraph/rnode/all/resource_builder.go (211 lines of code) (raw):

/* Copyright 2023 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package all import ( "fmt" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/address" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/backendservice" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/forwardingrule" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/healthcheck" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/networkendpointgroup" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/targethttpproxy" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/tcproute" "github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/rgraph/rnode/urlmap" "google.golang.org/api/compute/v1" "google.golang.org/api/networkservices/v1" ) // ResourceBuilder is a convenience wrapper for tests. Do not use this in production. type ResourceBuilder struct { Project string Name string Region string Zone string } func (b *ResourceBuilder) Key() *meta.Key { switch { case b.Region == "" && b.Zone == "": return meta.GlobalKey(b.Name) case b.Region != "": return meta.RegionalKey(b.Name, b.Region) case b.Zone != "": return meta.ZonalKey(b.Name, b.Zone) } panic(fmt.Sprintf("missing fields: %+v", *b)) } func (b *ResourceBuilder) P(project string) *ResourceBuilder { ret := *b ret.Project = project return &ret } func (b *ResourceBuilder) N(name string) *ResourceBuilder { ret := *b ret.Name = name return &ret } func (b *ResourceBuilder) R(region string) *ResourceBuilder { ret := *b ret.Region = region return &ret } func (b *ResourceBuilder) Z(zone string) *ResourceBuilder { ret := *b ret.Zone = zone return &ret } func (b *ResourceBuilder) DefaultRegion() *ResourceBuilder { return b.R("us-central1") } func (b *ResourceBuilder) DefaultZone() *ResourceBuilder { return b.Z("us-central1-b") } func (b *ResourceBuilder) Address() *AddressBuilder { return &AddressBuilder{*b} } func (b *ResourceBuilder) BackendService() *BackendServiceBuilder { return &BackendServiceBuilder{*b} } func (b *ResourceBuilder) ForwardingRule() *ForwardingRuleBuilder { return &ForwardingRuleBuilder{*b} } func (b *ResourceBuilder) HealthCheck() *HealthCheckBuilder { return &HealthCheckBuilder{*b} } func (b *ResourceBuilder) NetworkEndpointGroup() *NetworkEndpointGroupBuilder { return &NetworkEndpointGroupBuilder{*b} } func (b *ResourceBuilder) TargetHttpProxy() *TargetHttpProxyBuilder { return &TargetHttpProxyBuilder{*b} } func (b *ResourceBuilder) UrlMap() *UrlMapBuilder { return &UrlMapBuilder{*b} } type AddressBuilder struct{ ResourceBuilder } func (b *AddressBuilder) ID() *cloud.ResourceID { return address.ID(b.Project, b.Key()) } func (b *AddressBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *AddressBuilder) Resource() address.MutableAddress { return address.NewMutableAddress(b.Project, b.Key()) } func (b *AddressBuilder) Build(f func(*compute.Address)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := address.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type BackendServiceBuilder struct{ ResourceBuilder } func (b *BackendServiceBuilder) ID() *cloud.ResourceID { return backendservice.ID(b.Project, b.Key()) } func (b *BackendServiceBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *BackendServiceBuilder) Resource() backendservice.MutableBackendService { return backendservice.NewMutableBackendService(b.Project, b.Key()) } func (b *BackendServiceBuilder) Build(f func(*compute.BackendService)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := backendservice.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type ForwardingRuleBuilder struct{ ResourceBuilder } func (b *ForwardingRuleBuilder) ID() *cloud.ResourceID { return forwardingrule.ID(b.Project, b.Key()) } func (b *ForwardingRuleBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *ForwardingRuleBuilder) Resource() forwardingrule.MutableForwardingRule { return forwardingrule.NewMutableForwardingRule(b.Project, b.Key()) } func (b *ForwardingRuleBuilder) Build(f func(*compute.ForwardingRule)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := forwardingrule.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type HealthCheckBuilder struct{ ResourceBuilder } func (b *HealthCheckBuilder) ID() *cloud.ResourceID { return healthcheck.ID(b.Project, b.Key()) } func (b *HealthCheckBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *HealthCheckBuilder) Resource() healthcheck.MutableHealthCheck { return healthcheck.NewMutableHealthCheck(b.Project, b.Key()) } func (b *HealthCheckBuilder) Build(f func(*compute.HealthCheck)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := healthcheck.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type NetworkEndpointGroupBuilder struct{ ResourceBuilder } func (b *NetworkEndpointGroupBuilder) ID() *cloud.ResourceID { return networkendpointgroup.ID(b.Project, b.Key()) } func (b *NetworkEndpointGroupBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *NetworkEndpointGroupBuilder) Resource() networkendpointgroup.MutableNetworkEndpointGroup { return networkendpointgroup.NewMutableNetworkEndpointGroup(b.Project, b.Key()) } func (b *NetworkEndpointGroupBuilder) Build(f func(*compute.NetworkEndpointGroup)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := networkendpointgroup.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type TargetHttpProxyBuilder struct{ ResourceBuilder } func (b *TargetHttpProxyBuilder) ID() *cloud.ResourceID { return targethttpproxy.ID(b.Project, b.Key()) } func (b *TargetHttpProxyBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *TargetHttpProxyBuilder) Resource() targethttpproxy.MutableTargetHttpProxy { return targethttpproxy.NewMutableTargetHttpProxy(b.Project, b.Key()) } func (b *TargetHttpProxyBuilder) Build(f func(*compute.TargetHttpProxy)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := targethttpproxy.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type UrlMapBuilder struct{ ResourceBuilder } func (b *UrlMapBuilder) ID() *cloud.ResourceID { return urlmap.ID(b.Project, b.Key()) } func (b *UrlMapBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *UrlMapBuilder) Resource() urlmap.MutableUrlMap { return urlmap.NewMutableUrlMap(b.Project, b.Key()) } func (b *UrlMapBuilder) Build(f func(*compute.UrlMap)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := urlmap.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb } type TcpRouteBuilder struct{ ResourceBuilder } func (b *TcpRouteBuilder) ID() *cloud.ResourceID { return tcproute.ID(b.Project, b.Key()) } func (b *TcpRouteBuilder) SelfLink() string { return b.ID().SelfLink(meta.VersionGA) } func (b *TcpRouteBuilder) Resource() tcproute.MutableTcpRoute { return tcproute.NewMutableTcpRoute(b.Project, b.Key()) } func (b *TcpRouteBuilder) Build(f func(*networkservices.TcpRoute)) rnode.Builder { m := b.Resource() if f != nil { m.Access(f) } r, _ := m.Freeze() nb := tcproute.NewBuilderWithResource(r) nb.SetOwnership(rnode.OwnershipManaged) nb.SetState(rnode.NodeExists) return nb }