mirror of https://github.com/k3s-io/k3s
Merge pull request #36581 from wojtek-t/fix_service_alloc
Automatic merge from submit-queue Fix TestServiceAlloc test Fix #32028pull/6/head
commit
5c21cc892c
|
@ -45,6 +45,7 @@ import (
|
||||||
// loops, which manage creating the "kubernetes" service, the "default" and "kube-system"
|
// loops, which manage creating the "kubernetes" service, the "default" and "kube-system"
|
||||||
// namespace, and provide the IP repair check on service IPs
|
// namespace, and provide the IP repair check on service IPs
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
|
ServiceClient coreclient.ServicesGetter
|
||||||
NamespaceRegistry namespace.Registry
|
NamespaceRegistry namespace.Registry
|
||||||
ServiceRegistry service.Registry
|
ServiceRegistry service.Registry
|
||||||
|
|
||||||
|
@ -75,8 +76,9 @@ type Controller struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBootstrapController returns a controller for watching the core capabilities of the master
|
// NewBootstrapController returns a controller for watching the core capabilities of the master
|
||||||
func (c *Config) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTStorage) *Controller {
|
func (c *Config) NewBootstrapController(legacyRESTStorage corerest.LegacyRESTStorage, serviceClient coreclient.ServicesGetter) *Controller {
|
||||||
return &Controller{
|
return &Controller{
|
||||||
|
ServiceClient: serviceClient,
|
||||||
NamespaceRegistry: legacyRESTStorage.NamespaceRegistry,
|
NamespaceRegistry: legacyRESTStorage.NamespaceRegistry,
|
||||||
ServiceRegistry: legacyRESTStorage.ServiceRegistry,
|
ServiceRegistry: legacyRESTStorage.ServiceRegistry,
|
||||||
|
|
||||||
|
@ -240,12 +242,12 @@ func createEndpointPortSpec(endpointPort int, endpointPortName string, extraEndp
|
||||||
// doesn't already exist.
|
// doesn't already exist.
|
||||||
func (c *Controller) CreateOrUpdateMasterServiceIfNeeded(serviceName string, serviceIP net.IP, servicePorts []api.ServicePort, serviceType api.ServiceType, reconcile bool) error {
|
func (c *Controller) CreateOrUpdateMasterServiceIfNeeded(serviceName string, serviceIP net.IP, servicePorts []api.ServicePort, serviceType api.ServiceType, reconcile bool) error {
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
if s, err := c.ServiceRegistry.GetService(ctx, serviceName); err == nil {
|
if s, err := c.ServiceClient.Services(api.NamespaceDefault).Get(serviceName); err == nil {
|
||||||
// The service already exists.
|
// The service already exists.
|
||||||
if reconcile {
|
if reconcile {
|
||||||
if svc, updated := getMasterServiceUpdateIfNeeded(s, servicePorts, serviceType); updated {
|
if svc, updated := getMasterServiceUpdateIfNeeded(s, servicePorts, serviceType); updated {
|
||||||
glog.Warningf("Resetting master service %q to %#v", serviceName, svc)
|
glog.Warningf("Resetting master service %q to %#v", serviceName, svc)
|
||||||
_, err := c.ServiceRegistry.UpdateService(ctx, svc)
|
_, err := c.ServiceClient.Services(api.NamespaceDefault).Update(svc)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -270,7 +272,7 @@ func (c *Controller) CreateOrUpdateMasterServiceIfNeeded(serviceName string, ser
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := c.ServiceRegistry.CreateService(ctx, svc)
|
_, err := c.ServiceClient.Services(api.NamespaceDefault).Create(svc)
|
||||||
if err != nil && errors.IsAlreadyExists(err) {
|
if err != nil && errors.IsAlreadyExists(err) {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -582,15 +582,26 @@ func TestCreateOrUpdateMasterService(t *testing.T) {
|
||||||
Err: errors.New("unable to get svc"),
|
Err: errors.New("unable to get svc"),
|
||||||
}
|
}
|
||||||
master.ServiceRegistry = registry
|
master.ServiceRegistry = registry
|
||||||
|
fakeClient := fake.NewSimpleClientset()
|
||||||
|
master.ServiceClient = fakeClient.Core()
|
||||||
master.CreateOrUpdateMasterServiceIfNeeded(test.serviceName, net.ParseIP("1.2.3.4"), test.servicePorts, test.serviceType, false)
|
master.CreateOrUpdateMasterServiceIfNeeded(test.serviceName, net.ParseIP("1.2.3.4"), test.servicePorts, test.serviceType, false)
|
||||||
if test.expectCreate != nil {
|
creates := []core.CreateAction{}
|
||||||
if len(registry.List.Items) != 1 {
|
for _, action := range fakeClient.Actions() {
|
||||||
t.Errorf("case %q: unexpected creations: %v", test.testName, registry.List.Items)
|
if action.GetVerb() == "create" {
|
||||||
} else if e, a := test.expectCreate.Spec, registry.List.Items[0].Spec; !reflect.DeepEqual(e, a) {
|
creates = append(creates, action.(core.CreateAction))
|
||||||
t.Errorf("case %q: expected create:\n%#v\ngot:\n%#v\n", test.testName, e, a)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if test.expectCreate == nil && len(registry.List.Items) > 1 {
|
if test.expectCreate != nil {
|
||||||
|
if len(creates) != 1 {
|
||||||
|
t.Errorf("case %q: unexpected creations: %v", test.testName, creates)
|
||||||
|
} else {
|
||||||
|
obj := creates[0].GetObject()
|
||||||
|
if e, a := test.expectCreate.Spec, obj.(*api.Service).Spec; !reflect.DeepEqual(e, a) {
|
||||||
|
t.Errorf("case %q: expected create:\n%#v\ngot:\n%#v\n", test.testName, e, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if test.expectCreate == nil && len(creates) > 1 {
|
||||||
t.Errorf("case %q: no create expected, yet saw: %v", test.testName, registry.List.Items)
|
t.Errorf("case %q: no create expected, yet saw: %v", test.testName, registry.List.Items)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -857,18 +868,29 @@ func TestCreateOrUpdateMasterService(t *testing.T) {
|
||||||
Service: test.service,
|
Service: test.service,
|
||||||
}
|
}
|
||||||
master.ServiceRegistry = registry
|
master.ServiceRegistry = registry
|
||||||
|
fakeClient := fake.NewSimpleClientset(test.service)
|
||||||
|
master.ServiceClient = fakeClient.Core()
|
||||||
err := master.CreateOrUpdateMasterServiceIfNeeded(test.serviceName, net.ParseIP("1.2.3.4"), test.servicePorts, test.serviceType, true)
|
err := master.CreateOrUpdateMasterServiceIfNeeded(test.serviceName, net.ParseIP("1.2.3.4"), test.servicePorts, test.serviceType, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("case %q: unexpected error: %v", test.testName, err)
|
t.Errorf("case %q: unexpected error: %v", test.testName, err)
|
||||||
}
|
}
|
||||||
if test.expectUpdate != nil {
|
updates := []core.UpdateAction{}
|
||||||
if len(registry.Updates) != 1 {
|
for _, action := range fakeClient.Actions() {
|
||||||
t.Errorf("case %q: unexpected updates: %v", test.testName, registry.Updates)
|
if action.GetVerb() == "update" {
|
||||||
} else if e, a := test.expectUpdate, ®istry.Updates[0]; !reflect.DeepEqual(e, a) {
|
updates = append(updates, action.(core.UpdateAction))
|
||||||
t.Errorf("case %q: expected update:\n%#v\ngot:\n%#v\n", test.testName, e, a)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if test.expectUpdate == nil && len(registry.Updates) > 0 {
|
if test.expectUpdate != nil {
|
||||||
|
if len(updates) != 1 {
|
||||||
|
t.Errorf("case %q: unexpected updates: %v", test.testName, updates)
|
||||||
|
} else {
|
||||||
|
obj := updates[0].GetObject()
|
||||||
|
if e, a := test.expectUpdate.Spec, obj.(*api.Service).Spec; !reflect.DeepEqual(e, a) {
|
||||||
|
t.Errorf("case %q: expected update:\n%#v\ngot:\n%#v\n", test.testName, e, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if test.expectUpdate == nil && len(updates) > 0 {
|
||||||
t.Errorf("case %q: no update expected, yet saw: %v", test.testName, registry.Updates)
|
t.Errorf("case %q: no update expected, yet saw: %v", test.testName, registry.Updates)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -909,18 +931,29 @@ func TestCreateOrUpdateMasterService(t *testing.T) {
|
||||||
Service: test.service,
|
Service: test.service,
|
||||||
}
|
}
|
||||||
master.ServiceRegistry = registry
|
master.ServiceRegistry = registry
|
||||||
|
fakeClient := fake.NewSimpleClientset(test.service)
|
||||||
|
master.ServiceClient = fakeClient.Core()
|
||||||
err := master.CreateOrUpdateMasterServiceIfNeeded(test.serviceName, net.ParseIP("1.2.3.4"), test.servicePorts, test.serviceType, false)
|
err := master.CreateOrUpdateMasterServiceIfNeeded(test.serviceName, net.ParseIP("1.2.3.4"), test.servicePorts, test.serviceType, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("case %q: unexpected error: %v", test.testName, err)
|
t.Errorf("case %q: unexpected error: %v", test.testName, err)
|
||||||
}
|
}
|
||||||
if test.expectUpdate != nil {
|
updates := []core.UpdateAction{}
|
||||||
if len(registry.Updates) != 1 {
|
for _, action := range fakeClient.Actions() {
|
||||||
t.Errorf("case %q: unexpected updates: %v", test.testName, registry.Updates)
|
if action.GetVerb() == "update" {
|
||||||
} else if e, a := test.expectUpdate, ®istry.Updates[0]; !reflect.DeepEqual(e, a) {
|
updates = append(updates, action.(core.UpdateAction))
|
||||||
t.Errorf("case %q: expected update:\n%#v\ngot:\n%#v\n", test.testName, e, a)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if test.expectUpdate == nil && len(registry.Updates) > 0 {
|
if test.expectUpdate != nil {
|
||||||
|
if len(updates) != 1 {
|
||||||
|
t.Errorf("case %q: unexpected updates: %v", test.testName, updates)
|
||||||
|
} else {
|
||||||
|
obj := updates[0].GetObject()
|
||||||
|
if e, a := test.expectUpdate.Spec, obj.(*api.Service).Spec; !reflect.DeepEqual(e, a) {
|
||||||
|
t.Errorf("case %q: expected update:\n%#v\ngot:\n%#v\n", test.testName, e, a)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if test.expectUpdate == nil && len(updates) > 0 {
|
||||||
t.Errorf("case %q: no update expected, yet saw: %v", test.testName, registry.Updates)
|
t.Errorf("case %q: no update expected, yet saw: %v", test.testName, registry.Updates)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,7 +271,8 @@ func (m *Master) InstallLegacyAPI(c *Config, restOptionsGetter genericapiserver.
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.EnableCoreControllers {
|
if c.EnableCoreControllers {
|
||||||
bootstrapController := c.NewBootstrapController(legacyRESTStorage)
|
serviceClient := coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig)
|
||||||
|
bootstrapController := c.NewBootstrapController(legacyRESTStorage, serviceClient)
|
||||||
if err := m.GenericAPIServer.AddPostStartHook("bootstrap-controller", bootstrapController.PostStartHook); err != nil {
|
if err := m.GenericAPIServer.AddPostStartHook("bootstrap-controller", bootstrapController.PostStartHook); err != nil {
|
||||||
glog.Fatalf("Error registering PostStartHook %q: %v", "bootstrap-controller", err)
|
glog.Fatalf("Error registering PostStartHook %q: %v", "bootstrap-controller", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue