mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Make it easier to update nodes, make it possible to update capacity.
This commit is contained in:
parent
7cf0c4d7d7
commit
cf0b41535f
@ -129,6 +129,8 @@ const (
|
|||||||
NamespaceDefault string = "default"
|
NamespaceDefault string = "default"
|
||||||
// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
|
// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
|
||||||
NamespaceAll string = ""
|
NamespaceAll string = ""
|
||||||
|
// NamespaceNone is the argument for a context when there is no namespace.
|
||||||
|
NamespaceNone string = ""
|
||||||
// TerminationMessagePathDefault means the default path to capture the application termination message running in a container
|
// TerminationMessagePathDefault means the default path to capture the application termination message running in a container
|
||||||
TerminationMessagePathDefault string = "/dev/termination-log"
|
TerminationMessagePathDefault string = "/dev/termination-log"
|
||||||
)
|
)
|
||||||
|
@ -26,6 +26,8 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/capabilities"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ServiceLister is an abstract interface for testing.
|
// ServiceLister is an abstract interface for testing.
|
||||||
@ -565,9 +567,18 @@ func ValidateMinion(minion *api.Node) errs.ValidationErrorList {
|
|||||||
// ValidateMinionUpdate tests to make sure a minion update can be applied. Modifies oldMinion.
|
// ValidateMinionUpdate tests to make sure a minion update can be applied. Modifies oldMinion.
|
||||||
func ValidateMinionUpdate(oldMinion *api.Node, minion *api.Node) errs.ValidationErrorList {
|
func ValidateMinionUpdate(oldMinion *api.Node, minion *api.Node) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(minion.Status, api.NodeStatus{}) {
|
||||||
|
allErrs = append(allErrs, errs.NewFieldInvalid("status", minion.Status, "status must be empty"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow users to update labels and capacity
|
||||||
oldMinion.Labels = minion.Labels
|
oldMinion.Labels = minion.Labels
|
||||||
|
oldMinion.Spec.Capacity = minion.Spec.Capacity
|
||||||
|
|
||||||
if !reflect.DeepEqual(oldMinion, minion) {
|
if !reflect.DeepEqual(oldMinion, minion) {
|
||||||
allErrs = append(allErrs, fmt.Errorf("update contains more than labels changes"))
|
glog.V(4).Infof("Update failed validation %#v vs %#v", oldMinion, minion)
|
||||||
|
allErrs = append(allErrs, fmt.Errorf("update contains more than labels or capacity changes"))
|
||||||
}
|
}
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
@ -1178,6 +1178,64 @@ func TestValidateMinionUpdate(t *testing.T) {
|
|||||||
Labels: map[string]string{"foo": "baz"},
|
Labels: map[string]string{"foo": "baz"},
|
||||||
},
|
},
|
||||||
}, true},
|
}, true},
|
||||||
|
{api.Node{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
},
|
||||||
|
Spec: api.NodeSpec{
|
||||||
|
Capacity: api.ResourceList{
|
||||||
|
"cpu": util.NewIntOrStringFromInt(10000),
|
||||||
|
"memory": util.NewIntOrStringFromInt(100),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, api.Node{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
},
|
||||||
|
Spec: api.NodeSpec{
|
||||||
|
Capacity: api.ResourceList{
|
||||||
|
"cpu": util.NewIntOrStringFromInt(100),
|
||||||
|
"memory": util.NewIntOrStringFromInt(10000),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, true},
|
||||||
|
{api.Node{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Labels: map[string]string{"bar": "foo"},
|
||||||
|
},
|
||||||
|
Spec: api.NodeSpec{
|
||||||
|
Capacity: api.ResourceList{
|
||||||
|
"cpu": util.NewIntOrStringFromInt(10000),
|
||||||
|
"memory": util.NewIntOrStringFromInt(100),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, api.Node{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Labels: map[string]string{"bar": "fooobaz"},
|
||||||
|
},
|
||||||
|
Spec: api.NodeSpec{
|
||||||
|
Capacity: api.ResourceList{
|
||||||
|
"cpu": util.NewIntOrStringFromInt(100),
|
||||||
|
"memory": util.NewIntOrStringFromInt(10000),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, true},
|
||||||
|
{api.Node{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Labels: map[string]string{"bar": "foo"},
|
||||||
|
},
|
||||||
|
}, api.Node{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
Labels: map[string]string{"bar": "fooobaz"},
|
||||||
|
},
|
||||||
|
Status: api.NodeStatus{
|
||||||
|
HostIP: "1.2.3.4",
|
||||||
|
},
|
||||||
|
}, false},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
errs := ValidateMinionUpdate(&test.oldMinion, &test.minion)
|
errs := ValidateMinionUpdate(&test.oldMinion, &test.minion)
|
||||||
|
@ -101,6 +101,13 @@ func (rs *REST) Update(ctx api.Context, obj runtime.Object) (<-chan apiserver.RE
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("not a minion: %#v", obj)
|
return nil, fmt.Errorf("not a minion: %#v", obj)
|
||||||
}
|
}
|
||||||
|
// This is hacky, but minions don't really have a namespace, but kubectl currently automatically
|
||||||
|
// stuffs one in there. Fix it here temporarily until we fix kubectl
|
||||||
|
if minion.Namespace == api.NamespaceDefault {
|
||||||
|
minion.Namespace = api.NamespaceNone
|
||||||
|
}
|
||||||
|
// Clear out the self link, if specified, since it's not in the registry either.
|
||||||
|
minion.SelfLink = ""
|
||||||
|
|
||||||
// TODO: GetMinion will health check the minion, but we shouldn't require the minion to be
|
// TODO: GetMinion will health check the minion, but we shouldn't require the minion to be
|
||||||
// running for updating labels.
|
// running for updating labels.
|
||||||
|
Loading…
Reference in New Issue
Block a user