dockershim: support filter containers by sandbox ID

This commit is contained in:
Yu-Ju Hong 2016-09-15 17:31:51 -07:00
parent 2f60b72dd3
commit 73f30b18e4
3 changed files with 18 additions and 4 deletions

View File

@ -48,7 +48,7 @@ func (ds *dockerService) ListContainers(filter *runtimeApi.ContainerFilter) ([]*
f.Add("status", toDockerContainerStatus(filter.GetState()))
}
if filter.PodSandboxId != nil {
// TODO: implement this after sandbox functions are implemented.
f.AddLabel(sandboxIDLabelKey, *filter.PodSandboxId)
}
if filter.LabelSelector != nil {
@ -91,6 +91,8 @@ func (ds *dockerService) CreateContainer(podSandboxID string, config *runtimeApi
labels := makeLabels(config.GetLabels(), config.GetAnnotations())
// Apply a the container type label.
labels[containerTypeLabelKey] = containerTypeLabelContainer
// Write the sandbox ID in the labels.
labels[sandboxIDLabelKey] = podSandboxID
image := ""
if iSpec := config.GetImage(); iSpec != nil {

View File

@ -47,8 +47,11 @@ const (
containerTypeLabelKey = "io.kubernetes.docker.type"
containerTypeLabelSandbox = "podsandbox"
containerTypeLabelContainer = "container"
sandboxIDLabelKey = "io.kubernetes.sandbox.id"
)
var internalLabelKeys []string = []string{containerTypeLabelKey, sandboxIDLabelKey}
func NewDockerService(client dockertools.DockerInterface) DockerLegacyService {
return &dockerService{
client: dockertools.NewInstrumentedDockerInterface(client),

View File

@ -84,11 +84,20 @@ func extractLabels(input map[string]string) (map[string]string, map[string]strin
annotations := make(map[string]string)
for k, v := range input {
// Check if the key is used internally by the shim.
// TODO: containerTypeLabelKey is the only internal label the shim uses
// right now. Expand this to a list later.
if k == containerTypeLabelKey {
internal := false
for _, internalKey := range internalLabelKeys {
// TODO: containerTypeLabelKey is the only internal label the shim uses
// right now. Expand this to a list later.
if k == internalKey {
internal = true
break
}
}
if internal {
continue
}
// Check if the label should be treated as an annotation.
if strings.HasPrefix(k, annotationPrefix) {
annotations[strings.TrimPrefix(k, annotationPrefix)] = v
continue