
Now that kubelet has switched to incremental updates, it has complete information of the pod update type (create, update, sync). This change pipes this information to pod workers so that they don't have to derive the type again.
113 lines
3.2 KiB
Go
113 lines
3.2 KiB
Go
/*
|
|
Copyright 2014 The Kubernetes Authors All rights reserved.
|
|
|
|
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 kubelet
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"k8s.io/kubernetes/pkg/api"
|
|
)
|
|
|
|
const ConfigSourceAnnotationKey = "kubernetes.io/config.source"
|
|
const ConfigMirrorAnnotationKey = "kubernetes.io/config.mirror"
|
|
const ConfigFirstSeenAnnotationKey = "kubernetes.io/config.seen"
|
|
|
|
// PodOperation defines what changes will be made on a pod configuration.
|
|
type PodOperation int
|
|
|
|
const (
|
|
// This is the current pod configuration
|
|
SET PodOperation = iota
|
|
// Pods with the given ids are new to this source
|
|
ADD
|
|
// Pods with the given ids have been removed from this source
|
|
REMOVE
|
|
// Pods with the given ids have been updated in this source
|
|
UPDATE
|
|
|
|
// These constants identify the sources of pods
|
|
// Updates from a file
|
|
FileSource = "file"
|
|
// Updates from querying a web page
|
|
HTTPSource = "http"
|
|
// Updates from Kubernetes API Server
|
|
ApiserverSource = "api"
|
|
// Updates from all sources
|
|
AllSource = "*"
|
|
|
|
// Used for ConfigMirrorAnnotationKey.
|
|
MirrorType = "mirror"
|
|
|
|
NamespaceDefault = api.NamespaceDefault
|
|
)
|
|
|
|
// PodUpdate defines an operation sent on the channel. You can add or remove single services by
|
|
// sending an array of size one and Op == ADD|REMOVE (with REMOVE, only the ID is required).
|
|
// For setting the state of the system to a given state for this source configuration, set
|
|
// Pods as desired and Op to SET, which will reset the system state to that specified in this
|
|
// operation for this source channel. To remove all pods, set Pods to empty object and Op to SET.
|
|
//
|
|
// Additionally, Pods should never be nil - it should always point to an empty slice. While
|
|
// functionally similar, this helps our unit tests properly check that the correct PodUpdates
|
|
// are generated.
|
|
type PodUpdate struct {
|
|
Pods []*api.Pod
|
|
Op PodOperation
|
|
Source string
|
|
}
|
|
|
|
// Gets all validated sources from the specified sources.
|
|
func GetValidatedSources(sources []string) ([]string, error) {
|
|
validated := make([]string, 0, len(sources))
|
|
for _, source := range sources {
|
|
switch source {
|
|
case AllSource:
|
|
return []string{FileSource, HTTPSource, ApiserverSource}, nil
|
|
case FileSource, HTTPSource, ApiserverSource:
|
|
validated = append(validated, source)
|
|
break
|
|
case "":
|
|
break
|
|
default:
|
|
return []string{}, fmt.Errorf("unknown pod source %q", source)
|
|
}
|
|
}
|
|
return validated, nil
|
|
}
|
|
|
|
// SyncPodType classifies pod updates, eg: create, update.
|
|
type SyncPodType int
|
|
|
|
const (
|
|
SyncPodSync SyncPodType = iota
|
|
SyncPodUpdate
|
|
SyncPodCreate
|
|
)
|
|
|
|
func (sp SyncPodType) String() string {
|
|
switch sp {
|
|
case SyncPodCreate:
|
|
return "create"
|
|
case SyncPodUpdate:
|
|
return "update"
|
|
case SyncPodSync:
|
|
return "sync"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|