func()

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
}