in pkg/openstack/loadbalancer.go [1137:1188]
func (lbaas *LbaasV2) ensureOctaviaHealthMonitor(lbID string, name string, pool *v2pools.Pool, port corev1.ServicePort, svcConf *serviceConfig) error {
monitorID := pool.MonitorID
if monitorID != "" {
monitor, err := openstackutil.GetHealthMonitor(lbaas.lb, monitorID)
if err != nil {
return err
}
//Recreate health monitor with correct protocol if externalTrafficPolicy was changed
if (svcConf.healthCheckNodePort > 0 && monitor.Type != "HTTP") ||
(svcConf.healthCheckNodePort == 0 && monitor.Type == "HTTP") {
klog.InfoS("Recreating health monitor for the pool", "pool", pool.ID, "oldMonitor", monitorID)
if err := openstackutil.DeleteHealthMonitor(lbaas.lb, monitorID, lbID); err != nil {
return err
}
monitorID = ""
}
if svcConf.healthMonitorDelay != monitor.Delay || svcConf.healthMonitorTimeout != monitor.Timeout || svcConf.healthMonitorMaxRetries != monitor.MaxRetries {
updateOpts := v2monitors.UpdateOpts{
Delay: svcConf.healthMonitorDelay,
Timeout: svcConf.healthMonitorTimeout,
MaxRetries: svcConf.healthMonitorMaxRetries,
}
klog.Infof("Updating health monitor %s updateOpts %+v", monitorID, updateOpts)
if err := openstackutil.UpdateHealthMonitor(lbaas.lb, monitorID, updateOpts); err != nil {
return err
}
}
}
if monitorID == "" && svcConf.enableMonitor {
klog.V(2).Infof("Creating monitor for pool %s", pool.ID)
createOpts := lbaas.buildMonitorCreateOpts(svcConf, port)
// Populate PoolID, attribute is omitted for consumption of the createOpts for fully populated Loadbalancer
createOpts.PoolID = pool.ID
createOpts.Name = name
monitor, err := openstackutil.CreateHealthMonitor(lbaas.lb, createOpts, lbID)
if err != nil {
return err
}
monitorID = monitor.ID
klog.Infof("Health monitor %s for pool %s created.", monitorID, pool.ID)
} else if monitorID != "" && !svcConf.enableMonitor {
klog.Infof("Deleting health monitor %s for pool %s", monitorID, pool.ID)
if err := openstackutil.DeleteHealthMonitor(lbaas.lb, monitorID, lbID); err != nil {
return err
}
}
return nil
}