Merge pull request #77839 from mcrute/migrate-fake-cp

Staging legacy fake cloud provider
This commit is contained in:
Kubernetes Prow Robot 2019-05-15 12:32:23 -07:00 committed by GitHub
commit c50ff35a55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 146 additions and 123 deletions

View File

@ -50,7 +50,6 @@ pkg/apis/rbac/validation
pkg/apis/storage
pkg/apis/storage/v1
pkg/apis/storage/v1beta1
pkg/cloudprovider/providers/fake
pkg/cloudprovider/providers/photon
pkg/controller
pkg/controller/apis/config/v1alpha1

View File

@ -36,7 +36,6 @@ filegroup(
srcs = [
":package-srcs",
"//pkg/cloudprovider/providers/cloudstack:all-srcs",
"//pkg/cloudprovider/providers/fake:all-srcs",
"//pkg/cloudprovider/providers/openstack:all-srcs",
"//pkg/cloudprovider/providers/ovirt:all-srcs",
"//pkg/cloudprovider/providers/photon:all-srcs",

View File

@ -46,7 +46,6 @@ go_test(
],
embed = [":go_default_library"],
deps = [
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/controller/testutil:go_default_library",
"//pkg/kubelet/apis:go_default_library",
@ -60,6 +59,7 @@ go_test(
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
],

View File

@ -30,7 +30,7 @@ import (
"k8s.io/client-go/informers"
"k8s.io/client-go/tools/record"
cloudprovider "k8s.io/cloud-provider"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/controller/testutil"
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
@ -135,7 +135,7 @@ func TestEnsureNodeExistsByProviderID(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.testName, func(t *testing.T) {
fc := &fakecloud.FakeCloud{
fc := &fakecloud.Cloud{
ExistsByProviderID: tc.existsByProviderID,
Err: tc.nodeNameErr,
ErrByProviderID: tc.providerIDErr,
@ -199,7 +199,7 @@ func TestNodeInitialized(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{
types.NodeName("node0"): "t1.micro",
},
@ -264,7 +264,7 @@ func TestNodeIgnored(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{
types.NodeName("node0"): "t1.micro",
},
@ -336,7 +336,7 @@ func TestGCECondition(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{
types.NodeName("node0"): "t1.micro",
},
@ -421,7 +421,7 @@ func TestZoneInitialized(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{
types.NodeName("node0"): "t1.micro",
},
@ -511,7 +511,7 @@ func TestNodeAddresses(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{},
Addresses: []v1.NodeAddress{
{
@ -624,7 +624,7 @@ func TestNodeProvidedIPAddresses(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{
types.NodeName("node0"): "t1.micro",
types.NodeName("node0.aws.12345"): "t2.macro",
@ -839,7 +839,7 @@ func TestNodeAddressesNotUpdate(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{},
Addresses: []v1.NodeAddress{
{
@ -914,7 +914,7 @@ func TestNodeProviderID(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{},
Addresses: []v1.NodeAddress{
{
@ -997,7 +997,7 @@ func TestNodeProviderIDAlreadySet(t *testing.T) {
factory := informers.NewSharedInformerFactory(fnh, controller.NoResyncPeriodFunc())
fakeCloud := &fakecloud.FakeCloud{
fakeCloud := &fakecloud.Cloud{
InstanceTypes: map[types.NodeName]string{},
Addresses: []v1.NodeAddress{
{

View File

@ -30,8 +30,8 @@ import (
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/tools/record"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/klog"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
"k8s.io/kubernetes/pkg/controller/testutil"
)
@ -39,7 +39,7 @@ func Test_NodesDeleted(t *testing.T) {
testcases := []struct {
name string
fnh *testutil.FakeNodeHandler
fakeCloud *fakecloud.FakeCloud
fakeCloud *fakecloud.Cloud
deleteNodes []*v1.Node
}{
{
@ -66,7 +66,7 @@ func Test_NodesDeleted(t *testing.T) {
DeletedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
ExistsByProviderID: false,
},
deleteNodes: []*v1.Node{
@ -100,7 +100,7 @@ func Test_NodesDeleted(t *testing.T) {
DeletedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
ExistsByProviderID: false,
ErrByProviderID: errors.New("err!"),
},
@ -133,7 +133,7 @@ func Test_NodesDeleted(t *testing.T) {
DeletedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
ExistsByProviderID: true,
},
deleteNodes: []*v1.Node{},
@ -162,7 +162,7 @@ func Test_NodesDeleted(t *testing.T) {
DeletedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
ExistsByProviderID: false,
},
deleteNodes: []*v1.Node{
@ -193,7 +193,7 @@ func Test_NodesDeleted(t *testing.T) {
DeletedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
NodeShutdown: false,
ExistsByProviderID: true,
ExtID: map[types.NodeName]string{
@ -229,7 +229,7 @@ func Test_NodesDeleted(t *testing.T) {
DeletedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
ExistsByProviderID: false,
},
deleteNodes: []*v1.Node{},
@ -270,7 +270,7 @@ func Test_NodesShutdown(t *testing.T) {
testcases := []struct {
name string
fnh *testutil.FakeNodeHandler
fakeCloud *fakecloud.FakeCloud
fakeCloud *fakecloud.Cloud
updatedNodes []*v1.Node
}{
{
@ -297,7 +297,7 @@ func Test_NodesShutdown(t *testing.T) {
UpdatedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
NodeShutdown: true,
ErrShutdownByProviderID: nil,
},
@ -349,7 +349,7 @@ func Test_NodesShutdown(t *testing.T) {
UpdatedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
NodeShutdown: false,
ErrShutdownByProviderID: errors.New("err!"),
},
@ -379,7 +379,7 @@ func Test_NodesShutdown(t *testing.T) {
UpdatedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
NodeShutdown: false,
ErrShutdownByProviderID: nil,
},
@ -409,7 +409,7 @@ func Test_NodesShutdown(t *testing.T) {
UpdatedNodes: []*v1.Node{},
Clientset: fake.NewSimpleClientset(),
},
fakeCloud: &fakecloud.FakeCloud{
fakeCloud: &fakecloud.Cloud{
NodeShutdown: true,
ErrShutdownByProviderID: nil,
},

View File

@ -42,7 +42,6 @@ go_test(
srcs = ["route_controller_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/controller/util/node:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
@ -52,6 +51,7 @@ go_test(
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
],
)

View File

@ -29,7 +29,7 @@ import (
"k8s.io/client-go/kubernetes/fake"
core "k8s.io/client-go/testing"
cloudprovider "k8s.io/cloud-provider"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/controller"
nodeutil "k8s.io/kubernetes/pkg/controller/util/node"
)
@ -226,9 +226,9 @@ func TestReconcile(t *testing.T) {
},
}
for i, testCase := range testCases {
cloud := &fakecloud.FakeCloud{RouteMap: make(map[string]*fakecloud.FakeRoute)}
cloud := &fakecloud.Cloud{RouteMap: make(map[string]*fakecloud.Route)}
for _, route := range testCase.initialRoutes {
fakeRoute := &fakecloud.FakeRoute{}
fakeRoute := &fakecloud.Route{}
fakeRoute.ClusterName = cluster
fakeRoute.Route = *route
cloud.RouteMap[route.Name] = fakeRoute

View File

@ -43,7 +43,6 @@ go_test(
embed = [":go_default_library"],
deps = [
"//pkg/api/testapi:go_default_library",
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/controller:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
@ -54,6 +53,7 @@ go_test(
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/testing:go_default_library",
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
],
)

View File

@ -32,8 +32,8 @@ import (
"k8s.io/client-go/kubernetes/fake"
core "k8s.io/client-go/testing"
"k8s.io/client-go/tools/record"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/api/testapi"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
"k8s.io/kubernetes/pkg/controller"
)
@ -52,8 +52,8 @@ func defaultExternalService() *v1.Service {
func alwaysReady() bool { return true }
func newController() (*ServiceController, *fakecloud.FakeCloud, *fake.Clientset) {
cloud := &fakecloud.FakeCloud{}
func newController() (*ServiceController, *fakecloud.Cloud, *fake.Clientset) {
cloud := &fakecloud.Cloud{}
cloud.Region = region
client := fake.NewSimpleClientset()
@ -166,7 +166,7 @@ func TestCreateExternalLoadBalancer(t *testing.T) {
t.Errorf("unexpected client actions: %v", actions)
}
} else {
var balancer *fakecloud.FakeBalancer
var balancer *fakecloud.Balancer
for k := range cloud.Balancers {
if balancer == nil {
b := cloud.Balancers[k]
@ -205,7 +205,7 @@ func TestUpdateNodesInExternalLoadBalancer(t *testing.T) {
}
table := []struct {
services []*v1.Service
expectedUpdateCalls []fakecloud.FakeUpdateBalancerCall
expectedUpdateCalls []fakecloud.UpdateBalancerCall
}{
{
// No services present: no calls should be made.
@ -225,7 +225,7 @@ func TestUpdateNodesInExternalLoadBalancer(t *testing.T) {
services: []*v1.Service{
newService("s0", "333", v1.ServiceTypeLoadBalancer),
},
expectedUpdateCalls: []fakecloud.FakeUpdateBalancerCall{
expectedUpdateCalls: []fakecloud.UpdateBalancerCall{
{Service: newService("s0", "333", v1.ServiceTypeLoadBalancer), Hosts: nodes},
},
},
@ -236,7 +236,7 @@ func TestUpdateNodesInExternalLoadBalancer(t *testing.T) {
newService("s1", "555", v1.ServiceTypeLoadBalancer),
newService("s2", "666", v1.ServiceTypeLoadBalancer),
},
expectedUpdateCalls: []fakecloud.FakeUpdateBalancerCall{
expectedUpdateCalls: []fakecloud.UpdateBalancerCall{
{Service: newService("s0", "444", v1.ServiceTypeLoadBalancer), Hosts: nodes},
{Service: newService("s1", "555", v1.ServiceTypeLoadBalancer), Hosts: nodes},
{Service: newService("s2", "666", v1.ServiceTypeLoadBalancer), Hosts: nodes},
@ -250,7 +250,7 @@ func TestUpdateNodesInExternalLoadBalancer(t *testing.T) {
newService("s3", "999", v1.ServiceTypeLoadBalancer),
newService("s4", "123", v1.ServiceTypeClusterIP),
},
expectedUpdateCalls: []fakecloud.FakeUpdateBalancerCall{
expectedUpdateCalls: []fakecloud.UpdateBalancerCall{
{Service: newService("s1", "888", v1.ServiceTypeLoadBalancer), Hosts: nodes},
{Service: newService("s3", "999", v1.ServiceTypeLoadBalancer), Hosts: nodes},
},
@ -261,7 +261,7 @@ func TestUpdateNodesInExternalLoadBalancer(t *testing.T) {
newService("s0", "234", v1.ServiceTypeLoadBalancer),
nil,
},
expectedUpdateCalls: []fakecloud.FakeUpdateBalancerCall{
expectedUpdateCalls: []fakecloud.UpdateBalancerCall{
{Service: newService("s0", "234", v1.ServiceTypeLoadBalancer), Hosts: nodes},
},
},
@ -527,7 +527,7 @@ func TestSyncService(t *testing.T) {
func TestProcessServiceDeletion(t *testing.T) {
var controller *ServiceController
var cloud *fakecloud.FakeCloud
var cloud *fakecloud.Cloud
// Add a global svcKey name
svcKey := "external-balancer"

View File

@ -19,9 +19,9 @@ go_test(
srcs = ["cloud_request_manager_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/cloudprovider/providers/fake:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
],
)

View File

@ -24,7 +24,7 @@ import (
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
"k8s.io/cloud-provider/fake"
)
func createNodeInternalIPAddress(address string) []v1.NodeAddress {
@ -38,7 +38,7 @@ func createNodeInternalIPAddress(address string) []v1.NodeAddress {
func TestNodeAddressesDelay(t *testing.T) {
syncPeriod := 100 * time.Millisecond
cloud := &fake.FakeCloud{
cloud := &fake.Cloud{
Addresses: createNodeInternalIPAddress("10.0.1.12"),
// Set the request delay so the manager timeouts and collects the node addresses later
RequestDelay: 200 * time.Millisecond,
@ -82,7 +82,7 @@ func TestNodeAddressesDelay(t *testing.T) {
}
func TestNodeAddressesUsesLastSuccess(t *testing.T) {
cloud := &fake.FakeCloud{}
cloud := &fake.Cloud{}
manager := NewSyncManager(cloud, "defaultNode", 0).(*cloudResourceSyncManager)
// These tests are stateful and order dependant.

View File

@ -46,7 +46,6 @@ go_test(
srcs = ["setters_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/kubelet/cm:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/container/testing:go_default_library",
@ -62,6 +61,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
"//vendor/github.com/google/cadvisor/info/v1:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/github.com/stretchr/testify/require:go_default_library",

View File

@ -34,7 +34,7 @@ import (
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/rand"
"k8s.io/apimachinery/pkg/util/uuid"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/kubelet/cm"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
kubecontainertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
@ -249,7 +249,7 @@ func TestNodeAddress(t *testing.T) {
}
hostname := testKubeletHostname
externalCloudProvider := false
cloud := &fakecloud.FakeCloud{
cloud := &fakecloud.Cloud{
Addresses: testCase.nodeAddresses,
Err: nil,
}

View File

@ -38,7 +38,6 @@ go_test(
srcs = ["azure_file_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/util/mount:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume/testing:go_default_library",
@ -46,6 +45,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
"//staging/src/k8s.io/legacy-cloud-providers/azure:go_default_library",
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
],

View File

@ -30,7 +30,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes/fake"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing"
@ -119,7 +119,7 @@ func TestPluginWithoutCloudProvider(t *testing.T) {
func TestPluginWithOtherCloudProvider(t *testing.T) {
tmpDir := getTestTempDir(t)
defer os.RemoveAll(tmpDir)
cloud := &fakecloud.FakeCloud{}
cloud := &fakecloud.Cloud{}
testPlugin(t, tmpDir, volumetest.NewFakeVolumeHostWithCloudProvider(tmpDir, nil, nil, cloud))
}

View File

@ -45,7 +45,6 @@ go_test(
],
embed = [":go_default_library"],
deps = [
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/util/mount:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume/testing:go_default_library",
@ -54,6 +53,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
"//staging/src/k8s.io/legacy-cloud-providers/vsphere:go_default_library",
"//staging/src/k8s.io/legacy-cloud-providers/vsphere/vclib:go_default_library",
"//vendor/k8s.io/klog:go_default_library",

View File

@ -26,7 +26,7 @@ import (
"k8s.io/apimachinery/pkg/types"
utiltesting "k8s.io/client-go/util/testing"
cloudprovider "k8s.io/cloud-provider"
"k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
"k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing"
@ -203,7 +203,7 @@ func TestUnsupportedCloudProvider(t *testing.T) {
}{
{name: "nil cloudprovider", cloudProvider: nil},
{name: "vSphere", cloudProvider: &vsphere.VSphere{}, success: true},
{name: "fake cloudprovider", cloudProvider: &fake.FakeCloud{}},
{name: "fake cloudprovider", cloudProvider: &fake.Cloud{}},
}
for _, tc := range testcases {

View File

@ -35,6 +35,7 @@ filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//staging/src/k8s.io/cloud-provider/fake:all-srcs",
"//staging/src/k8s.io/cloud-provider/node:all-srcs",
"//staging/src/k8s.io/cloud-provider/service/helpers:all-srcs",
"//staging/src/k8s.io/cloud-provider/volume:all-srcs",

View File

@ -11,7 +11,8 @@ go_library(
"doc.go",
"fake.go",
],
importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/fake",
importmap = "k8s.io/kubernetes/vendor/k8s.io/cloud-provider/fake",
importpath = "k8s.io/cloud-provider/fake",
deps = [
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",

View File

@ -16,4 +16,4 @@ limitations under the License.
// Package fake is a test-double implementation of cloudprovider
// Interface, LoadBalancer and Instances. It is useful for testing.
package fake // import "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
package fake // import "k8s.io/cloud-provider/fake"

View File

@ -31,8 +31,8 @@ import (
const defaultProviderName = "fake"
// FakeBalancer is a fake storage of balancer information
type FakeBalancer struct {
// Balancer is a fake storage of balancer information
type Balancer struct {
Name string
Region string
LoadBalancerIP string
@ -40,21 +40,22 @@ type FakeBalancer struct {
Hosts []*v1.Node
}
type FakeUpdateBalancerCall struct {
// UpdateBalancerCall represents a fake call to update load balancers
type UpdateBalancerCall struct {
Service *v1.Service
Hosts []*v1.Node
}
var _ cloudprovider.Interface = (*FakeCloud)(nil)
var _ cloudprovider.Instances = (*FakeCloud)(nil)
var _ cloudprovider.LoadBalancer = (*FakeCloud)(nil)
var _ cloudprovider.Routes = (*FakeCloud)(nil)
var _ cloudprovider.Zones = (*FakeCloud)(nil)
var _ cloudprovider.PVLabeler = (*FakeCloud)(nil)
var _ cloudprovider.Clusters = (*FakeCloud)(nil)
var _ cloudprovider.Interface = (*Cloud)(nil)
var _ cloudprovider.Instances = (*Cloud)(nil)
var _ cloudprovider.LoadBalancer = (*Cloud)(nil)
var _ cloudprovider.Routes = (*Cloud)(nil)
var _ cloudprovider.Zones = (*Cloud)(nil)
var _ cloudprovider.PVLabeler = (*Cloud)(nil)
var _ cloudprovider.Clusters = (*Cloud)(nil)
// FakeCloud is a test-double implementation of Interface, LoadBalancer, Instances, and Routes. It is useful for testing.
type FakeCloud struct {
// Cloud is a test-double implementation of Interface, LoadBalancer, Instances, and Routes. It is useful for testing.
type Cloud struct {
Exists bool
Err error
@ -73,9 +74,9 @@ type FakeCloud struct {
ClusterList []string
MasterName string
ExternalIP net.IP
Balancers map[string]FakeBalancer
UpdateCalls []FakeUpdateBalancerCall
RouteMap map[string]*FakeRoute
Balancers map[string]Balancer
UpdateCalls []UpdateBalancerCall
RouteMap map[string]*Route
Lock sync.Mutex
Provider string
addCallLock sync.Mutex
@ -85,12 +86,13 @@ type FakeCloud struct {
RequestDelay time.Duration
}
type FakeRoute struct {
// Route is a representation of an advanced routing rule.
type Route struct {
ClusterName string
Route cloudprovider.Route
}
func (f *FakeCloud) addCall(desc string) {
func (f *Cloud) addCall(desc string) {
f.addCallLock.Lock()
defer f.addCallLock.Unlock()
@ -99,29 +101,32 @@ func (f *FakeCloud) addCall(desc string) {
f.Calls = append(f.Calls, desc)
}
// ClearCalls clears internal record of method calls to this FakeCloud.
func (f *FakeCloud) ClearCalls() {
// ClearCalls clears internal record of method calls to this Cloud.
func (f *Cloud) ClearCalls() {
f.Calls = []string{}
}
// Initialize passes a Kubernetes clientBuilder interface to the cloud provider
func (f *FakeCloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) {
func (f *Cloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder, stop <-chan struct{}) {
}
func (f *FakeCloud) ListClusters(ctx context.Context) ([]string, error) {
// ListClusters lists the names of the available clusters.
func (f *Cloud) ListClusters(ctx context.Context) ([]string, error) {
return f.ClusterList, f.Err
}
func (f *FakeCloud) Master(ctx context.Context, name string) (string, error) {
// Master gets back the address (either DNS name or IP address) of the master node for the cluster.
func (f *Cloud) Master(ctx context.Context, name string) (string, error) {
return f.MasterName, f.Err
}
func (f *FakeCloud) Clusters() (cloudprovider.Clusters, bool) {
// Clusters returns a clusters interface. Also returns true if the interface is supported, false otherwise.
func (f *Cloud) Clusters() (cloudprovider.Clusters, bool) {
return f, true
}
// ProviderName returns the cloud provider ID.
func (f *FakeCloud) ProviderName() string {
func (f *Cloud) ProviderName() string {
if f.Provider == "" {
return defaultProviderName
}
@ -129,33 +134,35 @@ func (f *FakeCloud) ProviderName() string {
}
// HasClusterID returns true if the cluster has a clusterID
func (f *FakeCloud) HasClusterID() bool {
func (f *Cloud) HasClusterID() bool {
return true
}
// LoadBalancer returns a fake implementation of LoadBalancer.
// Actually it just returns f itself.
func (f *FakeCloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
func (f *Cloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
return f, true
}
// Instances returns a fake implementation of Instances.
//
// Actually it just returns f itself.
func (f *FakeCloud) Instances() (cloudprovider.Instances, bool) {
func (f *Cloud) Instances() (cloudprovider.Instances, bool) {
return f, true
}
func (f *FakeCloud) Zones() (cloudprovider.Zones, bool) {
// Zones returns a zones interface. Also returns true if the interface is supported, false otherwise.
func (f *Cloud) Zones() (cloudprovider.Zones, bool) {
return f, true
}
func (f *FakeCloud) Routes() (cloudprovider.Routes, bool) {
// Routes returns a routes interface along with whether the interface is supported.
func (f *Cloud) Routes() (cloudprovider.Routes, bool) {
return f, true
}
// GetLoadBalancer is a stub implementation of LoadBalancer.GetLoadBalancer.
func (f *FakeCloud) GetLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error) {
func (f *Cloud) GetLoadBalancer(ctx context.Context, clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error) {
status := &v1.LoadBalancerStatus{}
status.Ingress = []v1.LoadBalancerIngress{{IP: f.ExternalIP.String()}}
@ -163,17 +170,17 @@ func (f *FakeCloud) GetLoadBalancer(ctx context.Context, clusterName string, ser
}
// GetLoadBalancerName is a stub implementation of LoadBalancer.GetLoadBalancerName.
func (f *FakeCloud) GetLoadBalancerName(ctx context.Context, clusterName string, service *v1.Service) string {
func (f *Cloud) GetLoadBalancerName(ctx context.Context, clusterName string, service *v1.Service) string {
// TODO: replace DefaultLoadBalancerName to generate more meaningful loadbalancer names.
return cloudprovider.DefaultLoadBalancerName(service)
}
// EnsureLoadBalancer is a test-spy implementation of LoadBalancer.EnsureLoadBalancer.
// It adds an entry "create" into the internal method call record.
func (f *FakeCloud) EnsureLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) {
func (f *Cloud) EnsureLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) {
f.addCall("create")
if f.Balancers == nil {
f.Balancers = make(map[string]FakeBalancer)
f.Balancers = make(map[string]Balancer)
}
name := f.GetLoadBalancerName(ctx, clusterName, service)
@ -185,7 +192,7 @@ func (f *FakeCloud) EnsureLoadBalancer(ctx context.Context, clusterName string,
}
region := zone.Region
f.Balancers[name] = FakeBalancer{name, region, spec.LoadBalancerIP, spec.Ports, nodes}
f.Balancers[name] = Balancer{name, region, spec.LoadBalancerIP, spec.Ports, nodes}
status := &v1.LoadBalancerStatus{}
status.Ingress = []v1.LoadBalancerIngress{{IP: f.ExternalIP.String()}}
@ -195,38 +202,42 @@ func (f *FakeCloud) EnsureLoadBalancer(ctx context.Context, clusterName string,
// UpdateLoadBalancer is a test-spy implementation of LoadBalancer.UpdateLoadBalancer.
// It adds an entry "update" into the internal method call record.
func (f *FakeCloud) UpdateLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) error {
func (f *Cloud) UpdateLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) error {
f.addCall("update")
f.UpdateCalls = append(f.UpdateCalls, FakeUpdateBalancerCall{service, nodes})
f.UpdateCalls = append(f.UpdateCalls, UpdateBalancerCall{service, nodes})
return f.Err
}
// EnsureLoadBalancerDeleted is a test-spy implementation of LoadBalancer.EnsureLoadBalancerDeleted.
// It adds an entry "delete" into the internal method call record.
func (f *FakeCloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, service *v1.Service) error {
func (f *Cloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, service *v1.Service) error {
f.addCall("delete")
return f.Err
}
func (f *FakeCloud) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error {
// AddSSHKeyToAllInstances adds an SSH public key as a legal identity for all instances
// expected format for the key is standard ssh-keygen format: <protocol> <blob>
func (f *Cloud) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error {
return cloudprovider.NotImplemented
}
// Implementation of Instances.CurrentNodeName
func (f *FakeCloud) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error) {
// CurrentNodeName returns the name of the node we are currently running on
// On most clouds (e.g. GCE) this is the hostname, so we provide the hostname
func (f *Cloud) CurrentNodeName(ctx context.Context, hostname string) (types.NodeName, error) {
return types.NodeName(hostname), nil
}
// NodeAddresses is a test-spy implementation of Instances.NodeAddresses.
// It adds an entry "node-addresses" into the internal method call record.
func (f *FakeCloud) NodeAddresses(ctx context.Context, instance types.NodeName) ([]v1.NodeAddress, error) {
func (f *Cloud) NodeAddresses(ctx context.Context, instance types.NodeName) ([]v1.NodeAddress, error) {
f.addCall("node-addresses")
f.addressesMux.Lock()
defer f.addressesMux.Unlock()
return f.Addresses, f.Err
}
func (f *FakeCloud) SetNodeAddresses(nodeAddresses []v1.NodeAddress) {
// SetNodeAddresses sets the addresses for a node
func (f *Cloud) SetNodeAddresses(nodeAddresses []v1.NodeAddress) {
f.addressesMux.Lock()
defer f.addressesMux.Unlock()
f.Addresses = nodeAddresses
@ -234,7 +245,7 @@ func (f *FakeCloud) SetNodeAddresses(nodeAddresses []v1.NodeAddress) {
// NodeAddressesByProviderID is a test-spy implementation of Instances.NodeAddressesByProviderID.
// It adds an entry "node-addresses-by-provider-id" into the internal method call record.
func (f *FakeCloud) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error) {
func (f *Cloud) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error) {
f.addCall("node-addresses-by-provider-id")
f.addressesMux.Lock()
defer f.addressesMux.Unlock()
@ -242,39 +253,39 @@ func (f *FakeCloud) NodeAddressesByProviderID(ctx context.Context, providerID st
}
// InstanceID returns the cloud provider ID of the node with the specified Name.
func (f *FakeCloud) InstanceID(ctx context.Context, nodeName types.NodeName) (string, error) {
func (f *Cloud) InstanceID(ctx context.Context, nodeName types.NodeName) (string, error) {
f.addCall("instance-id")
return f.ExtID[nodeName], nil
}
// InstanceType returns the type of the specified instance.
func (f *FakeCloud) InstanceType(ctx context.Context, instance types.NodeName) (string, error) {
func (f *Cloud) InstanceType(ctx context.Context, instance types.NodeName) (string, error) {
f.addCall("instance-type")
return f.InstanceTypes[instance], nil
}
// InstanceTypeByProviderID returns the type of the specified instance.
func (f *FakeCloud) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error) {
func (f *Cloud) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error) {
f.addCall("instance-type-by-provider-id")
return f.InstanceTypes[types.NodeName(providerID)], nil
}
// InstanceExistsByProviderID returns true if the instance with the given provider id still exists and is running.
// If false is returned with no error, the instance will be immediately deleted by the cloud controller manager.
func (f *FakeCloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
func (f *Cloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
f.addCall("instance-exists-by-provider-id")
return f.ExistsByProviderID, f.ErrByProviderID
}
// InstanceShutdownByProviderID returns true if the instances is in safe state to detach volumes
func (f *FakeCloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
func (f *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
f.addCall("instance-shutdown-by-provider-id")
return f.NodeShutdown, f.ErrShutdownByProviderID
}
// List is a test-spy implementation of Instances.List.
// It adds an entry "list" into the internal method call record.
func (f *FakeCloud) List(filter string) ([]types.NodeName, error) {
func (f *Cloud) List(filter string) ([]types.NodeName, error) {
f.addCall("list")
result := []types.NodeName{}
for _, machine := range f.Machines {
@ -285,7 +296,11 @@ func (f *FakeCloud) List(filter string) ([]types.NodeName, error) {
return result, f.Err
}
func (f *FakeCloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
// GetZone returns the Zone containing the current failure zone and locality region that the program is running in
// In most cases, this method is called from the kubelet querying a local metadata service to acquire its zone.
// For the case of external cloud providers, use GetZoneByProviderID or GetZoneByNodeName since GetZone
// can no longer be called from the kubelets.
func (f *Cloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
f.addCall("get-zone")
return f.Zone, f.Err
}
@ -293,7 +308,7 @@ func (f *FakeCloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
// GetZoneByProviderID implements Zones.GetZoneByProviderID
// This is particularly useful in external cloud providers where the kubelet
// does not initialize node data.
func (f *FakeCloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) {
func (f *Cloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) {
f.addCall("get-zone-by-provider-id")
return f.Zone, f.Err
}
@ -301,12 +316,13 @@ func (f *FakeCloud) GetZoneByProviderID(ctx context.Context, providerID string)
// GetZoneByNodeName implements Zones.GetZoneByNodeName
// This is particularly useful in external cloud providers where the kubelet
// does not initialize node data.
func (f *FakeCloud) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName) (cloudprovider.Zone, error) {
func (f *Cloud) GetZoneByNodeName(ctx context.Context, nodeName types.NodeName) (cloudprovider.Zone, error) {
f.addCall("get-zone-by-node-name")
return f.Zone, f.Err
}
func (f *FakeCloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error) {
// ListRoutes lists all managed routes that belong to the specified clusterName
func (f *Cloud) ListRoutes(ctx context.Context, clusterName string) ([]*cloudprovider.Route, error) {
f.Lock.Lock()
defer f.Lock.Unlock()
f.addCall("list-routes")
@ -320,7 +336,10 @@ func (f *FakeCloud) ListRoutes(ctx context.Context, clusterName string) ([]*clou
return routes, f.Err
}
func (f *FakeCloud) CreateRoute(ctx context.Context, clusterName string, nameHint string, route *cloudprovider.Route) error {
// CreateRoute creates the described managed route
// route.Name will be ignored, although the cloud-provider may use nameHint
// to create a more user-meaningful name.
func (f *Cloud) CreateRoute(ctx context.Context, clusterName string, nameHint string, route *cloudprovider.Route) error {
f.Lock.Lock()
defer f.Lock.Unlock()
f.addCall("create-route")
@ -329,7 +348,7 @@ func (f *FakeCloud) CreateRoute(ctx context.Context, clusterName string, nameHin
f.Err = fmt.Errorf("route %q already exists", name)
return f.Err
}
fakeRoute := FakeRoute{}
fakeRoute := Route{}
fakeRoute.Route = *route
fakeRoute.Route.Name = name
fakeRoute.ClusterName = clusterName
@ -337,7 +356,9 @@ func (f *FakeCloud) CreateRoute(ctx context.Context, clusterName string, nameHin
return nil
}
func (f *FakeCloud) DeleteRoute(ctx context.Context, clusterName string, route *cloudprovider.Route) error {
// DeleteRoute deletes the specified managed route
// Route should be as returned by ListRoutes
func (f *Cloud) DeleteRoute(ctx context.Context, clusterName string, route *cloudprovider.Route) error {
f.Lock.Lock()
defer f.Lock.Unlock()
f.addCall("delete-route")
@ -350,8 +371,9 @@ func (f *FakeCloud) DeleteRoute(ctx context.Context, clusterName string, route *
return nil
}
func (c *FakeCloud) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVolume) (map[string]string, error) {
if val, ok := c.VolumeLabelMap[pv.Name]; ok {
// GetLabelsForVolume returns the labels for a PersistentVolume
func (f *Cloud) GetLabelsForVolume(ctx context.Context, pv *v1.PersistentVolume) (map[string]string, error) {
if val, ok := f.VolumeLabelMap[pv.Name]; ok {
return val, nil
}
return nil, fmt.Errorf("label not found for volume")

View File

@ -21,10 +21,10 @@ go_test(
"//cmd/kube-apiserver/app/testing:go_default_library",
"//cmd/kube-controller-manager/app/testing:go_default_library",
"//cmd/kube-scheduler/app/testing:go_default_library",
"//pkg/cloudprovider/providers/fake:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
"//test/integration/framework:go_default_library",
],
)

View File

@ -31,11 +31,11 @@ import (
"k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/options"
"k8s.io/cloud-provider"
"k8s.io/cloud-provider/fake"
cloudctrlmgrtesting "k8s.io/kubernetes/cmd/cloud-controller-manager/app/testing"
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
kubectrlmgrtesting "k8s.io/kubernetes/cmd/kube-controller-manager/app/testing"
kubeschedulertesting "k8s.io/kubernetes/cmd/kube-scheduler/app/testing"
"k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
"k8s.io/kubernetes/test/integration/framework"
)
@ -321,5 +321,5 @@ func intPtr(x int) *int {
}
func fakeCloudProviderFactory(io.Reader) (cloudprovider.Interface, error) {
return &fake.FakeCloud{}, nil
return &fake.Cloud{}, nil
}

View File

@ -16,7 +16,6 @@ go_test(
tags = ["integration"],
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/controller/volume/attachdetach:go_default_library",
"//pkg/controller/volume/attachdetach/cache:go_default_library",
"//pkg/controller/volume/persistentvolume:go_default_library",
@ -38,6 +37,7 @@ go_test(
"//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/tools/cache:go_default_library",
"//staging/src/k8s.io/client-go/tools/reference:go_default_library",
"//staging/src/k8s.io/cloud-provider/fake:go_default_library",
"//test/integration/framework:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
],

View File

@ -32,7 +32,7 @@ import (
clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/controller/volume/attachdetach"
volumecache "k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache"
"k8s.io/kubernetes/pkg/controller/volume/persistentvolume"
@ -422,7 +422,7 @@ func createAdClients(ns *v1.Namespace, t *testing.T, server *httptest.Server, sy
Detachers: nil,
}
plugins := []volume.VolumePlugin{plugin}
cloud := &fakecloud.FakeCloud{}
cloud := &fakecloud.Cloud{}
informers := clientgoinformers.NewSharedInformerFactory(testClient, resyncPeriod)
ctrl, err := attachdetach.NewAttachDetachController(
testClient,

View File

@ -34,8 +34,8 @@ import (
clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
ref "k8s.io/client-go/tools/reference"
fakecloud "k8s.io/cloud-provider/fake"
"k8s.io/kubernetes/pkg/api/legacyscheme"
fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake"
persistentvolumecontroller "k8s.io/kubernetes/pkg/controller/volume/persistentvolume"
"k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing"
@ -1123,7 +1123,7 @@ func createClients(ns *v1.Namespace, t *testing.T, s *httptest.Server, syncPerio
Detachers: nil,
}
plugins := []volume.VolumePlugin{plugin}
cloud := &fakecloud.FakeCloud{}
cloud := &fakecloud.Cloud{}
informers := informers.NewSharedInformerFactory(testClient, getSyncPeriod(syncPeriod))
ctrl, err := persistentvolumecontroller.NewController(
persistentvolumecontroller.ControllerParameters{

1
vendor/modules.txt vendored
View File

@ -1536,6 +1536,7 @@ k8s.io/client-go/util/testing
k8s.io/client-go/util/workqueue
# k8s.io/cloud-provider v0.0.0 => ./staging/src/k8s.io/cloud-provider
k8s.io/cloud-provider
k8s.io/cloud-provider/fake
k8s.io/cloud-provider/node/helpers
k8s.io/cloud-provider/service/helpers
k8s.io/cloud-provider/volume