...
1
16
17 package containermap
18
19 import (
20 "fmt"
21 )
22
23
24 type ContainerMap map[string]struct {
25 podUID string
26 containerName string
27 }
28
29
30 func NewContainerMap() ContainerMap {
31 return make(ContainerMap)
32 }
33
34
35 func (cm ContainerMap) Add(podUID, containerName, containerID string) {
36 cm[containerID] = struct {
37 podUID string
38 containerName string
39 }{podUID, containerName}
40 }
41
42
43 func (cm ContainerMap) RemoveByContainerID(containerID string) {
44 delete(cm, containerID)
45 }
46
47
48 func (cm ContainerMap) RemoveByContainerRef(podUID, containerName string) {
49 containerID, err := cm.GetContainerID(podUID, containerName)
50 if err == nil {
51 cm.RemoveByContainerID(containerID)
52 }
53 }
54
55
56 func (cm ContainerMap) GetContainerID(podUID, containerName string) (string, error) {
57 for key, val := range cm {
58 if val.podUID == podUID && val.containerName == containerName {
59 return key, nil
60 }
61 }
62 return "", fmt.Errorf("container %s not in ContainerMap for pod %s", containerName, podUID)
63 }
64
65
66 func (cm ContainerMap) GetContainerRef(containerID string) (string, string, error) {
67 if _, exists := cm[containerID]; !exists {
68 return "", "", fmt.Errorf("containerID %s not in ContainerMap", containerID)
69 }
70 return cm[containerID].podUID, cm[containerID].containerName, nil
71 }
72
73
74 func (cm ContainerMap) Visit(visitor func(podUID, containerName, containerID string)) {
75 for k, v := range cm {
76 visitor(v.podUID, v.containerName, k)
77 }
78 }
79
View as plain text