Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions cns/restserver/ipam.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,28 @@ func (service *HTTPRestService) MarkIPsAsPending(numberToMark int) (map[string]c
return nil, fmt.Errorf("Failed to mark %d IP's as pending, only marked %d IP's", numberToMark, len(pendingReleaseIPs))
}

// UpdatePendingProgrammingIPs will update pending programming IPs to available if
// NMAgent side's programmed NC version keep up with NC version attached with secondary IP.
func (service *HTTPRestService) UpdatePendingProgrammingIPs(nmagentNCVersion string) error {
service.Lock()
defer service.Unlock()
//for uuid, ipConfigurationStatus := range service.PodIPConfigState {
for _, containerstatus := range service.state.ContainerStatus {
for uuid, secondaryIPConfigs := range containerstatus.CreateNetworkContainerRequest.SecondaryIPConfigs {
ipConfigStatus, exist := service.PodIPConfigState[uuid]
if exist {
// TODO change cns.Available to cns.PendingProgrammiong when #690 merged.
// TODO change ipConfigStatus.IPAddress to ipConfigStatus.NCVersion when #697 merged.
if ipConfigStatus.State == cns.Available && secondaryIPConfigs.IPAddress <= nmagentNCVersion {
ipConfigStatus.State = cns.Available
logger.Printf("Change ip %s with uuid %s from pending programming to %s", ipConfigStatus.IPAddress, uuid, cns.Available)
}
}
}
}
return fmt.Errorf("Failed to mark IP's from pending programming to available")
}

func (service *HTTPRestService) GetPodIPConfigState() map[string]cns.IPConfigurationStatus {
service.RLock()
defer service.RUnlock()
Expand Down