@@ -27,10 +27,11 @@ type Pod struct {
27
27
Name string
28
28
HostAliases []Hostname
29
29
Networks []NetworkId
30
+ Ready bool
30
31
}
31
32
32
33
func NewPod (ip IPAddress , namespace string , name string , hostAliases []Hostname ,
33
- networks []NetworkId ) (* Pod , error ) {
34
+ networks []NetworkId , ready bool ) (* Pod , error ) {
34
35
35
36
hostAliases = slices .Clone (hostAliases )
36
37
slices .Sort (hostAliases )
@@ -53,6 +54,7 @@ func NewPod(ip IPAddress, namespace string, name string, hostAliases []Hostname,
53
54
Name : name ,
54
55
HostAliases : hostAliases ,
55
56
Networks : networks ,
57
+ Ready : ready ,
56
58
}, nil
57
59
}
58
60
@@ -67,36 +69,33 @@ func (pod *Pod) Copy() *Pod {
67
69
Name : pod .Name ,
68
70
HostAliases : slices .Clone (pod .HostAliases ),
69
71
Networks : slices .Clone (pod .Networks ),
72
+ Ready : pod .Ready ,
70
73
}
71
74
}
72
75
73
76
type Network struct {
74
- Id NetworkId
75
- IPToPod map [IPAddress ]* Pod
76
- HostAliasToPod map [Hostname ]* Pod
77
+ Id NetworkId
78
+ IPToPod map [IPAddress ]* Pod
79
+ HostAliasToPods map [Hostname ][ ]* Pod
77
80
}
78
81
79
82
func NewNetwork (id NetworkId ) * Network {
80
83
network := Network {
81
- Id : id ,
82
- IPToPod : make (map [IPAddress ]* Pod ),
83
- HostAliasToPod : make (map [Hostname ]* Pod ),
84
+ Id : id ,
85
+ IPToPod : make (map [IPAddress ]* Pod ),
86
+ HostAliasToPods : make (map [Hostname ][ ]* Pod ),
84
87
}
85
88
return & network
86
89
}
87
90
88
91
func (net * Network ) Add (pod * Pod ) error {
89
- for _ , hostAlias := range pod .HostAliases {
90
- existingPod := net .HostAliasToPod [hostAlias ]
91
- if existingPod != nil && ! (existingPod .Namespace == pod .Namespace && existingPod .Name == pod .Name ) {
92
- return fmt .Errorf ("Pod %s/%s: hostAlias %s in network %s already mapped to %s/%s" ,
93
- pod .Namespace , pod .Name , hostAlias , net .Id , existingPod .Namespace , existingPod .Name )
94
- }
95
- }
96
-
97
92
net .IPToPod [pod .IP ] = pod
98
93
for _ , hostAlias := range pod .HostAliases {
99
- net .HostAliasToPod [hostAlias ] = pod
94
+ pods := net .HostAliasToPods [hostAlias ]
95
+ // when building the network from the pods, each pod is added in turn,
96
+ // so we do not need to check for duplicate additions of pods.
97
+ pods = append (pods , pod )
98
+ net .HostAliasToPods [hostAlias ] = pods
100
99
}
101
100
return nil
102
101
}
@@ -170,7 +169,7 @@ func (net *Networks) Log() {
170
169
for networkId , network := range net .NameToNetwork {
171
170
klog .Infof ("Network %s" , networkId )
172
171
for ip , pod := range network .IPToPod {
173
- klog .Infof (" Pod: %s/%s" , pod .Namespace , pod .Name )
172
+ klog .Infof (" Pod: %s/%s ready %v " , pod .Namespace , pod .Name , pod . Ready )
174
173
klog .Infof (" IP: %s" , ip )
175
174
for _ , hostAlias := range pod .HostAliases {
176
175
klog .Infof (" Hostalias: %s" , hostAlias )
@@ -191,9 +190,11 @@ func (net *Networks) Lookup(sourceIp IPAddress, hostname Hostname) []IPAddress {
191
190
return make ([]IPAddress , 0 )
192
191
}
193
192
for _ , network := range networks {
194
- pod := network .HostAliasToPod [hostname ]
195
- if pod != nil {
196
- res = append (res , pod .IP )
193
+ pods := network .HostAliasToPods [hostname ]
194
+ for _ , pod := range pods {
195
+ if pod .Ready {
196
+ res = append (res , pod .IP )
197
+ }
197
198
}
198
199
}
199
200
return res
@@ -214,7 +215,7 @@ func (net *Networks) ReverseLookup(sourceIp IPAddress, ip IPAddress) []Hostname
214
215
for _ , network := range networks {
215
216
klog .V (3 ).Infof ("Trying %s %v" , network .Id , network )
216
217
pod := network .IPToPod [ip ]
217
- if pod != nil {
218
+ if pod != nil && pod . Ready {
218
219
klog .V (3 ).Infof ("Found hostaliases %v" , pod .HostAliases )
219
220
return pod .HostAliases
220
221
}
0 commit comments