diff --git a/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java b/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java index 843d213896e..23b75fd671b 100644 --- a/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java +++ b/core/src/com/cloud/agent/api/routing/NetworkElementCommand.java @@ -34,6 +34,8 @@ public abstract class NetworkElementCommand extends Command { public static final String GUEST_BRIDGE = "guest.bridge"; public static final String VPC_PRIVATE_GATEWAY = "vpc.gateway.private"; public static final String FIREWALL_EGRESS_DEFAULT = "firewall.egress.default"; + public static final String ROUTER_MONITORING_DISABLE = "router.monitor.disable"; + protected NetworkElementCommand() { diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 0eac223f96e..035a5b3e130 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -821,9 +821,12 @@ public class VirtualRoutingResource implements Manager { return new ConsoleProxyLoadAnswer(cmd, proxyVmId, proxyVmName, success, result); } - public String configureMonitor(final String routerIP, final String config) { + public String configureMonitor(final String routerIP, final String config, final String disable) { String args= " -c " + config; + if (disable != null) { + args = args + "-d"; + } return routerProxy("monitor_service.sh", routerIP, args); } @@ -968,9 +971,11 @@ public class VirtualRoutingResource implements Manager { private Answer execute(SetMonitorServiceCommand cmd) { String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + String disable = cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE); String config = cmd.getConfiguration(); - String result = configureMonitor(routerIp, config); + + String result = configureMonitor(routerIp, config, disable); if (result != null) { return new Answer(cmd, false, "SetMonitorServiceCommand failed"); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 1d4c43f41bc..41191f921fe 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -806,10 +806,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String controlIp = getRouterSshControlIp(cmd); String config = cmd.getConfiguration(); + String disable = cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE); String args = ""; args += " -c " + config; + if (disable != null) { + args = args + " -d "; + } try { VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index aaa97bf9144..548223f7095 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -7585,6 +7585,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Connection conn = getConnection(); String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + String disable = cmd.getAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE); if (routerIp == null) { return new Answer(cmd); @@ -7592,6 +7593,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String args = "monitor_service.sh " + routerIp; args += " -c " + config; + if (disable != null) { + args += " -d "; + } + String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args); if (result == null || result.isEmpty()) { diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index d2713c022ed..da79995dde0 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -105,6 +105,7 @@ public enum Config { SecurityGroupDefaultAdding("Network", ManagementServer.class, Boolean.class, "network.securitygroups.defaultadding", "true", "If true, the user VM would be added to the default security group by default", null), GuestOSNeedGatewayOnNonDefaultNetwork("Network", NetworkOrchestrationService.class, String.class, "network.dhcp.nondefaultnetwork.setgateway.guestos", "Windows", "The guest OS's name start with this fields would result in DHCP server response gateway information even when the network it's on is not default network. Names are separated by comma.", null), + EnableServiceMonitoring("Network", ManagementServer.class, Boolean.class, "network.router.enableserviceMonitoring", "false", "service monitoring in router enable/disable option, default false", null), //VPN RemoteAccessVpnPskLength("Network", AgentManager.class, Integer.class, "remote.access.vpn.psk.length", "24", "The length of the ipsec preshared key (minimum 8, maximum 256)", null), diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index af7ef831019..c372e7b3678 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -2223,12 +2223,20 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V finalizeUserDataAndDhcpOnStart(cmds, router, provider, guestNetworkId); } - finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0)); + + String serviceMonitringSet = _configDao.getValue(Config.EnableServiceMonitoring.key()); + + if (serviceMonitringSet != null && serviceMonitringSet.equalsIgnoreCase("true")) { + finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0), true); + } else { + finalizeMonitorServiceOnStrat(cmds, profile, router, provider, routerGuestNtwkIds.get(0), false); + } + return true; } - private void finalizeMonitorServiceOnStrat(Commands cmds, VirtualMachineProfile profile, DomainRouterVO router, Provider provider, long networkId) { + private void finalizeMonitorServiceOnStrat(Commands cmds, VirtualMachineProfile profile, DomainRouterVO router, Provider provider, long networkId, Boolean add) { NetworkVO network = _networkDao.findById(networkId); @@ -2270,6 +2278,10 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V command.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(networkId, router.getId())); command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + if (!add) { + command.setAccessDetail(NetworkElementCommand.ROUTER_MONITORING_DISABLE, add.toString()); + } + cmds.addCommand("monitor", command); } diff --git a/setup/db/db/schema-421to430.sql b/setup/db/db/schema-421to430.sql index 4f8a52e9f3a..1ed6c6b6cc9 100644 --- a/setup/db/db/schema-421to430.sql +++ b/setup/db/db/schema-421to430.sql @@ -1089,4 +1089,5 @@ CREATE VIEW `cloud`.`user_vm_view` AS left join `cloud`.`user_vm_details` `custom_ram_size` ON (((`custom_ram_size`.`vm_id` = `cloud`.`vm_instance`.`id`) and (`custom_ram_size`.`name` = 'memory'))); +INSERT INTO `cloud`.`configuration`(category, instance, component, name, value, description, default_value) VALUES ('NetworkManager', 'DEFAULT', 'management-server', 'network.router.EnableServiceMonitoring', 'false', 'service monitoring in router enable/disable option, default false', 'false') ON DUPLICATE KEY UPDATE category='NetworkManager'; diff --git a/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh b/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh index 51b69235318..809c5b7cdbd 100755 --- a/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh +++ b/systemvm/patches/debian/config/opt/cloud/bin/monitor_service.sh @@ -25,7 +25,7 @@ then exit 1 fi -set -x +#set -x usage() { printf "Usage: %s: -c config string \n" $(basename $0) >&2 } @@ -58,13 +58,36 @@ done config=$2 +if [ -n "$3" ] +then #delete cron job before updating config file -crontab -l | grep -v monitorServices.py | crontab - +crontab -l|grep "monitorServices.py" + +if [ $? -eq 0 ] +then + t=`date +%s`; + touch /tmp/monitor-$t.txt; + conf=/tmp/monitor-$t.txt + crontab -l >$conf + sed -i /#monitoringConfig/,+3d $conf + crontab $conf + rm $conf +fi + + +logger -t cloud "deleted crontab entry for monitoring services" +unlock_exit 0 $lock $locked +fi create_config $config #add cron job -(crontab -l ;echo -e "SHELL=/bin/bash\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n */3 * * * * /usr/bin/python /root/monitorServices.py") | crontab - +crontab -l|grep "monitorServices.py" +if [ $? -ne 0 ] + then + (crontab -l ;echo -e "#monitoringConfig\nSHELL=/bin/bash\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n */3 * * * * /usr/bin/python /root/monitorServices.py") | crontab - + logger -t cloud "added crontab entry for monitoring services" + fi unlock_exit 0 $lock $locked