[services] Fix Delay Start of SNMP And Telemetry (#5211)
SNMP and Telemetry services are not critical to switch startup. They also cause fast-reboot not to meet timing requirements. In order to delay start those service are associated with systemd timer units, however when hostcfgd initiate service start, it start the service and not the timer. This PR fixes this issue by starting the timer associated with systemd unit. signed-off-by: Tamer Ahmed <tamer.ahmed@microsoft.com>
This commit is contained in:
parent
da69d57a8d
commit
e484ae9dda
@ -17,26 +17,28 @@
|
||||
{% endfor %}
|
||||
}
|
||||
},
|
||||
{%- set features = [("bgp", "enabled", "enabled"),
|
||||
("database", "enabled", "disabled"),
|
||||
("dhcp_relay", "enabled", "enabled"),
|
||||
("lldp", "enabled", "enabled"),
|
||||
("pmon", "enabled", "enabled"),
|
||||
("radv", "enabled", "enabled"),
|
||||
("snmp", "enabled", "enabled"),
|
||||
("swss", "enabled", "enabled"),
|
||||
("syncd", "enabled", "enabled"),
|
||||
("teamd", "enabled", "enabled")] %}
|
||||
{%- if include_iccpd == "y" %}{% do features.append(("iccpd", "disabled", "enabled")) %}{% endif %}
|
||||
{%- if include_mgmt_framework == "y" %}{% do features.append(("mgmt-framework", "enabled", "enabled")) %}{% endif %}
|
||||
{%- if include_nat == "y" %}{% do features.append(("nat", "disabled", "enabled")) %}{% endif %}
|
||||
{%- if include_restapi == "y" %}{% do features.append(("restapi", "enabled", "enabled")) %}{% endif %}
|
||||
{%- if include_sflow == "y" %}{% do features.append(("sflow", "disabled", "enabled")) %}{% endif %}
|
||||
{%- if include_system_telemetry == "y" %}{% do features.append(("telemetry", "enabled", "enabled")) %}{% endif %}
|
||||
{%- set features = [("bgp", "enabled", false, "enabled"),
|
||||
("database", "enabled", false, "disabled"),
|
||||
("dhcp_relay", "enabled", false, "enabled"),
|
||||
("lldp", "enabled", false, "enabled"),
|
||||
("pmon", "enabled", false, "enabled"),
|
||||
("radv", "enabled", false, "enabled"),
|
||||
("snmp", "enabled", true, "enabled"),
|
||||
("swss", "enabled", false, "enabled"),
|
||||
("syncd", "enabled", false, "enabled"),
|
||||
("teamd", "enabled", false, "enabled")] %}
|
||||
{%- if include_iccpd == "y" %}{% do features.append(("iccpd", "disabled", false, "enabled")) %}{% endif %}
|
||||
{%- if include_mgmt_framework == "y" %}{% do features.append(("mgmt-framework", "enabled", false, "enabled")) %}{% endif %}
|
||||
{%- if include_nat == "y" %}{% do features.append(("nat", "disabled", false, "enabled")) %}{% endif %}
|
||||
{%- if include_restapi == "y" %}{% do features.append(("restapi", "enabled", false, "enabled")) %}{% endif %}
|
||||
{%- if include_sflow == "y" %}{% do features.append(("sflow", "disabled", false, "enabled")) %}{% endif %}
|
||||
{%- if include_system_telemetry == "y" %}{% do features.append(("telemetry", "enabled", true, "enabled")) %}{% endif %}
|
||||
"FEATURE": {
|
||||
{%- for feature, state, autorestart in features %}
|
||||
{# has_timer field if set, will start the feature systemd .timer unit instead of .service unit #}
|
||||
{%- for feature, state, has_timer, autorestart in features %}
|
||||
"{{feature}}": {
|
||||
"state": "{{state}}",
|
||||
"has_timer" : {{has_timer | lower()}},
|
||||
"auto_restart": "{{autorestart}}",
|
||||
"high_mem_alert": "disabled"
|
||||
}{% if not loop.last %},{% endif -%}
|
||||
|
@ -41,12 +41,13 @@ def obfuscate(data):
|
||||
return data
|
||||
|
||||
|
||||
def update_feature_state(feature_name, state):
|
||||
def update_feature_state(feature_name, state, has_timer=False):
|
||||
feature_suffix = "timer" if has_timer else "service"
|
||||
if state == "enabled":
|
||||
start_cmds = []
|
||||
start_cmds.append("sudo systemctl unmask {}.service".format(feature_name))
|
||||
start_cmds.append("sudo systemctl enable {}.service".format(feature_name))
|
||||
start_cmds.append("sudo systemctl start {}.service".format(feature_name))
|
||||
start_cmds.append("sudo systemctl unmask {}.{}".format(feature_name, feature_suffix))
|
||||
start_cmds.append("sudo systemctl enable {}.{}".format(feature_name, feature_suffix))
|
||||
start_cmds.append("sudo systemctl start {}.{}".format(feature_name, feature_suffix))
|
||||
for cmd in start_cmds:
|
||||
syslog.syslog(syslog.LOG_INFO, "Running cmd: '{}'".format(cmd))
|
||||
try:
|
||||
@ -55,12 +56,12 @@ def update_feature_state(feature_name, state):
|
||||
syslog.syslog(syslog.LOG_ERR, "'{}' failed. RC: {}, output: {}"
|
||||
.format(err.cmd, err.returncode, err.output))
|
||||
continue
|
||||
syslog.syslog(syslog.LOG_INFO, "Feature '{}' is enabled and started".format(feature_name))
|
||||
syslog.syslog(syslog.LOG_INFO, "Feature '{}.{}' is enabled and started".format(feature_name, feature_suffix))
|
||||
elif state == "disabled":
|
||||
stop_cmds = []
|
||||
stop_cmds.append("sudo systemctl stop {}.service".format(feature_name))
|
||||
stop_cmds.append("sudo systemctl disable {}.service".format(feature_name))
|
||||
stop_cmds.append("sudo systemctl mask {}.service".format(feature_name))
|
||||
stop_cmds.append("sudo systemctl stop {}.{}".format(feature_name, feature_suffix))
|
||||
stop_cmds.append("sudo systemctl disable {}.{}".format(feature_name, feature_suffix))
|
||||
stop_cmds.append("sudo systemctl mask {}.{}".format(feature_name, feature_suffix))
|
||||
for cmd in stop_cmds:
|
||||
syslog.syslog(syslog.LOG_INFO, "Running cmd: '{}'".format(cmd))
|
||||
try:
|
||||
@ -71,7 +72,8 @@ def update_feature_state(feature_name, state):
|
||||
continue
|
||||
syslog.syslog(syslog.LOG_INFO, "Feature '{}' is stopped and disabled".format(feature_name))
|
||||
else:
|
||||
syslog.syslog(syslog.LOG_ERR, "Unexpected state value '{}' for feature '{}'".format(state, feature_name))
|
||||
syslog.syslog(syslog.LOG_ERR, "Unexpected state value '{}' for feature '{}.{}'"
|
||||
.format(state, feature_name, feature_suffix))
|
||||
|
||||
|
||||
class Iptables(object):
|
||||
@ -284,7 +286,7 @@ class HostConfigDaemon:
|
||||
syslog.syslog(syslog.LOG_WARNING, "Eanble state of feature '{}' is None".format(feature_name))
|
||||
continue
|
||||
|
||||
update_feature_state(feature_name, state)
|
||||
update_feature_state(feature_name, state, feature_table[feature_name]['has_timer'])
|
||||
|
||||
def aaa_handler(self, key, data):
|
||||
self.aaacfg.aaa_update(key, data)
|
||||
@ -326,7 +328,7 @@ class HostConfigDaemon:
|
||||
syslog.syslog(syslog.LOG_WARNING, "Enable state of feature '{}' is None".format(feature_name))
|
||||
return
|
||||
|
||||
update_feature_state(feature_name, state)
|
||||
update_feature_state(feature_name, state, feature_table[feature_name]['has_timer'])
|
||||
|
||||
def start(self):
|
||||
# Update all feature states once upon starting
|
||||
|
Reference in New Issue
Block a user