diff --git a/pkg/registry/minion/rest.go b/pkg/registry/minion/rest.go index 792c383f94a..d4291b42d5f 100644 --- a/pkg/registry/minion/rest.go +++ b/pkg/registry/minion/rest.go @@ -61,7 +61,11 @@ func (rs *REST) Create(ctx api.Context, obj runtime.Object) (<-chan apiserver.RE if err != nil { return nil, err } - minion, err := rs.registry.GetMinion(ctx, minion.Name) + minionName := minion.Name + minion, err := rs.registry.GetMinion(ctx, minionName) + if err == ErrNotHealty { + return rs.toApiMinion(minionName), nil + } if minion == nil { return nil, ErrDoesNotExist } diff --git a/pkg/registry/minion/rest_test.go b/pkg/registry/minion/rest_test.go index 06fcdf750b9..aa0141fcc12 100644 --- a/pkg/registry/minion/rest_test.go +++ b/pkg/registry/minion/rest_test.go @@ -83,6 +83,29 @@ func TestMinionREST(t *testing.T) { } } +func TestMinionRESTWithHealthCheck(t *testing.T) { + minionRegistry := registrytest.NewMinionRegistry([]string{}, api.NodeResources{}) + minionHealthRegistry := HealthyRegistry{ + delegate: minionRegistry, + client: ¬Minion{minion: "m1"}, + } + + ms := NewREST(&minionHealthRegistry) + ctx := api.NewContext() + + c, err := ms.Create(ctx, &api.Minion{ObjectMeta: api.ObjectMeta{Name: "m1"}}) + if err != nil { + t.Errorf("insert failed") + } + result := <-c + if m, ok := result.Object.(*api.Minion); !ok || m.Name != "m1" { + t.Errorf("insert return value was weird: %#v", result) + } + if _, err := ms.Get(ctx, "m1"); err == nil { + t.Errorf("node is unhealthy, expect no result from apiserver") + } +} + func contains(nodes *api.MinionList, nodeID string) bool { for _, node := range nodes.Items { if node.Name == nodeID {