mirror of https://github.com/kubernetes/kops.git
191 lines
6.0 KiB
Go
191 lines
6.0 KiB
Go
/*
|
|
Copyright 2017 The Kubernetes Authors.
|
|
|
|
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
|
|
|
|
http://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 gce
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"google.golang.org/api/cloudresourcemanager/v1"
|
|
compute "google.golang.org/api/compute/v1"
|
|
"google.golang.org/api/storage/v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
"k8s.io/klog/v2"
|
|
"k8s.io/kops/cloudmock/gce/mockcloudresourcemanager"
|
|
mockcompute "k8s.io/kops/cloudmock/gce/mockcompute"
|
|
"k8s.io/kops/cloudmock/gce/mockdns"
|
|
"k8s.io/kops/cloudmock/gce/mockiam"
|
|
"k8s.io/kops/cloudmock/gce/mockstorage"
|
|
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
|
dnsproviderclouddns "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/google/clouddns"
|
|
"k8s.io/kops/pkg/apis/kops"
|
|
"k8s.io/kops/pkg/cloudinstances"
|
|
"k8s.io/kops/upup/pkg/fi"
|
|
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
|
)
|
|
|
|
// MockGCECloud is a mock implementation of GCECloud for testing
|
|
type MockGCECloud struct {
|
|
project string
|
|
region string
|
|
labels map[string]string
|
|
|
|
computeClient *mockcompute.MockClient
|
|
dnsClient *mockdns.MockClient
|
|
iamClient *mockiam.MockClient
|
|
storageClient *storage.Service
|
|
cloudResourceManagerClient *cloudresourcemanager.Service
|
|
}
|
|
|
|
var _ gce.GCECloud = &MockGCECloud{}
|
|
|
|
// InstallMockGCECloud registers a MockGCECloud implementation for the specified region & project
|
|
func InstallMockGCECloud(region string, project string) *MockGCECloud {
|
|
c := &MockGCECloud{
|
|
project: project,
|
|
region: region,
|
|
computeClient: mockcompute.NewMockClient(project),
|
|
dnsClient: mockdns.NewMockClient(),
|
|
iamClient: mockiam.NewMockClient(project),
|
|
storageClient: mockstorage.New(),
|
|
cloudResourceManagerClient: mockcloudresourcemanager.New(),
|
|
}
|
|
gce.CacheGCECloudInstance(region, project, c)
|
|
return c
|
|
}
|
|
|
|
func (c *MockGCECloud) AllResources() map[string]interface{} {
|
|
return c.computeClient.AllResources()
|
|
}
|
|
|
|
// GetCloudGroups is not implemented yet
|
|
func (c *MockGCECloud) GetCloudGroups(cluster *kops.Cluster, instancegroups []*kops.InstanceGroup, warnUnmatched bool, nodes []v1.Node) (map[string]*cloudinstances.CloudInstanceGroup, error) {
|
|
klog.V(8).Infof("MockGCECloud cloud provider GetCloudGroups not implemented yet")
|
|
return nil, fmt.Errorf("MockGCECloud cloud provider does not support getting cloud groups at this time")
|
|
}
|
|
|
|
// Zones is not implemented yet
|
|
func (c *MockGCECloud) Zones() ([]string, error) {
|
|
return nil, fmt.Errorf("not yet implemented")
|
|
}
|
|
|
|
// WithLabels returns a copy of the MockGCECloud bound to the specified labels
|
|
func (c *MockGCECloud) WithLabels(labels map[string]string) gce.GCECloud {
|
|
i := &MockGCECloud{}
|
|
*i = *c
|
|
i.labels = labels
|
|
return i
|
|
}
|
|
|
|
// ProviderID implements fi.Cloud::ProviderID
|
|
func (c *MockGCECloud) ProviderID() kops.CloudProviderID {
|
|
return kops.CloudProviderGCE
|
|
}
|
|
|
|
// FindVPCInfo implements fi.Cloud::FindVPCInfo
|
|
func (c *MockGCECloud) FindVPCInfo(id string) (*fi.VPCInfo, error) {
|
|
return nil, fmt.Errorf("MockGCECloud::MockGCECloud not implemented")
|
|
}
|
|
|
|
// DNS implements fi.Cloud::DNS
|
|
func (c *MockGCECloud) DNS() (dnsprovider.Interface, error) {
|
|
return dnsproviderclouddns.NewFakeInterface()
|
|
}
|
|
|
|
// Compute implements GCECloud::Compute
|
|
func (c *MockGCECloud) Compute() gce.ComputeClient {
|
|
return c.computeClient
|
|
}
|
|
|
|
// Storage implements GCECloud::Storage
|
|
func (c *MockGCECloud) Storage() *storage.Service {
|
|
return c.storageClient
|
|
}
|
|
|
|
// IAM returns the IAM client
|
|
func (c *MockGCECloud) IAM() gce.IamClient {
|
|
return c.iamClient
|
|
}
|
|
|
|
// CloudResourceManager returns the client for the cloudresourcemanager API
|
|
func (c *MockGCECloud) CloudResourceManager() *cloudresourcemanager.Service {
|
|
return c.cloudResourceManagerClient
|
|
}
|
|
|
|
// CloudDNS returns the DNS client
|
|
func (c *MockGCECloud) CloudDNS() gce.DNSClient {
|
|
return c.dnsClient
|
|
}
|
|
|
|
// WaitForOp implements GCECloud::WaitForOp
|
|
func (c *MockGCECloud) WaitForOp(op *compute.Operation) error {
|
|
if op.Status != "DONE" {
|
|
return fmt.Errorf("unexpected operation: %+v", op)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindClusterStatus implements GCECloud::FindClusterStatus
|
|
func (c *MockGCECloud) FindClusterStatus(cluster *kops.Cluster) (*kops.ClusterStatus, error) {
|
|
return nil, fmt.Errorf("MockGCECloud::FindClusterStatus not implemented")
|
|
}
|
|
|
|
// GetApiIngressStatus implements GCECloud::GetApiIngressStatus
|
|
func (c *MockGCECloud) GetApiIngressStatus(cluster *kops.Cluster) ([]fi.ApiIngressStatus, error) {
|
|
return nil, fmt.Errorf("MockGCECloud::GetApiIngressStatus not implemented")
|
|
}
|
|
|
|
// Region implements GCECloud::Region
|
|
func (c *MockGCECloud) Region() string {
|
|
return c.region
|
|
}
|
|
|
|
// Project implements GCECloud::Project
|
|
func (c *MockGCECloud) Project() string {
|
|
return c.project
|
|
}
|
|
|
|
// ServiceAccount implements GCECloud::ServiceAccount
|
|
func (c *MockGCECloud) ServiceAccount() (string, error) {
|
|
return "12345678-compute@developer.gserviceaccount.com", nil
|
|
}
|
|
|
|
// Labels implements GCECloud::Labels
|
|
func (c *MockGCECloud) Labels() map[string]string {
|
|
return c.labels
|
|
}
|
|
|
|
// DeleteGroup implements fi.Cloud::DeleteGroup
|
|
func (c *MockGCECloud) DeleteGroup(g *cloudinstances.CloudInstanceGroup) error {
|
|
return nil
|
|
// return deleteCloudInstanceGroup(c, g)
|
|
}
|
|
|
|
// DeleteInstance deletes a GCE instance
|
|
func (c *MockGCECloud) DeleteInstance(i *cloudinstances.CloudInstance) error {
|
|
return nil
|
|
// return recreateCloudInstance(c, i)
|
|
}
|
|
|
|
func (c *MockGCECloud) DeregisterInstance(i *cloudinstances.CloudInstance) error {
|
|
return nil
|
|
}
|
|
|
|
// DetachInstance is not implemented yet. It needs to cause a cloud instance to no longer be counted against the group's size limits.
|
|
func (c *MockGCECloud) DetachInstance(i *cloudinstances.CloudInstance) error {
|
|
return nil
|
|
}
|