Douglas Schilling Landgraf has uploaded a new change for review. Change subject: ovirt-ntpd: Adding ovirt-ntpd service ......................................................................
ovirt-ntpd: Adding ovirt-ntpd service Due the limitation that all services in the oVirt Node must be enabled during the build time and there is no option to disable the pre-configured ntp servers from ntp.conf we introduce ovirt-ntpd service. This service will run before ntpd service and can disabled the pre-configured ntp servers before ntpd service run. Change-Id: Ib7827ab15b23b71d18b4562a0f2fc8a475f16378 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1061081 Signed-off-by: Douglas Schilling Landgraf <[email protected]> --- M ovirt-node.spec.in M recipe/centos7-install.ks M recipe/ovirt17-install.ks M recipe/rhevh7-install.ks M services/Makefile.am A services/ovirt-ntpd/ovirt-node-ntpd A services/ovirt-ntpd/ovirt-ntpd.service M src/ovirtnode/network.py 8 files changed, 162 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/17/41617/1 diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in index f1121d9..f724624 100644 --- a/ovirt-node.spec.in +++ b/ovirt-node.spec.in @@ -54,6 +54,7 @@ %endif Requires: glusterfs-client >= 2.0.1 Requires: system-release +Requires: systemd-python Requires: augeas >= 0.3.5 Requires: bridge-utils Requires: udev >= 147-2.34 @@ -1060,6 +1061,7 @@ %{_unitdir}/ovirt-post.service %{_unitdir}/ovirt-early.service %{_unitdir}/ovirt-kdump.service +%{_unitdir}/ovirt-ntpd.service %else %{_initrddir}/ovirt-awake %{_initrddir}/ovirt-early @@ -1093,6 +1095,7 @@ %{_bindir}/ovirt-node-features %{_bindir}/ovirt-node-config %{_bindir}/ovirt-node-config-password +%{_bindir}/ovirt-node-ntpd diff --git a/recipe/centos7-install.ks b/recipe/centos7-install.ks index 3a1e55f..aac7927 100644 --- a/recipe/centos7-install.ks +++ b/recipe/centos7-install.ks @@ -1,3 +1,3 @@ -services --enabled=auditd,ntpd,ntpdate,iptables,network,rsyslog,multipathd,snmpd,ovirt-early,ovirt-post,ovirt-kdump,cgconfig,mcelog,tuned,libvirtd --disabled=netfs,ovirt-awake,libvirt-guests,kdump +services --enabled=auditd,ntpd,ntpdate,iptables,network,rsyslog,multipathd,snmpd,ovirt-early,ovirt-post,ovirt-kdump,ovirt-ntpd,cgconfig,mcelog,tuned,libvirtd --disabled=netfs,ovirt-awake,libvirt-guests,kdump diff --git a/recipe/ovirt17-install.ks b/recipe/ovirt17-install.ks index 258cbdd..2bf256f 100644 --- a/recipe/ovirt17-install.ks +++ b/recipe/ovirt17-install.ks @@ -1 +1 @@ -services --enabled=auditd,ntpd,ntpdate,iptables,network,rsyslog,multipathd,snmpd,ovirt-early,ovirt,ovirt-post,ovirt-kdump,anyterm,collectd,libvirtd,cgconfig,mcelog,tuned --disabled=kdump +services --enabled=auditd,ntpd,ntpdate,iptables,network,rsyslog,multipathd,snmpd,ovirt-early,ovirt,ovirt-post,ovirt-ntpd,ovirt-kdump,anyterm,collectd,libvirtd,cgconfig,mcelog,tuned --disabled=kdump diff --git a/recipe/rhevh7-install.ks b/recipe/rhevh7-install.ks index aafcff0..08c461b 100644 --- a/recipe/rhevh7-install.ks +++ b/recipe/rhevh7-install.ks @@ -1,3 +1,3 @@ -services --enabled=auditd,ntpd,ntpdate,iptables,network,rsyslog,multipathd,snmpd,ovirt-early,ovirt-post,ovirt-cim,ovirt-kdump,cgconfig,mcelog,tuned --disabled=netfs,ovirt-awake,libvirt-guests,libvirtd,kdump +services --enabled=auditd,ntpd,ntpdate,iptables,network,rsyslog,multipathd,snmpd,ovirt-early,ovirt-ntpd,ovirt-post,ovirt-cim,ovirt-kdump,cgconfig,mcelog,tuned --disabled=netfs,ovirt-awake,libvirt-guests,libvirtd,kdump diff --git a/services/Makefile.am b/services/Makefile.am index 1dec6e0..cd53a91 100644 --- a/services/Makefile.am +++ b/services/Makefile.am @@ -18,6 +18,10 @@ systemunitdir=$(prefix)/lib/systemd/system initddir=$(sysconfdir)/rc.d/init.d +dist_bin_SCRIPTS = \ + ovirt-ntpd/ovirt-node-ntpd \ + $(NULL) + if TARGET_SYSTEMD dist_systemunit_DATA = \ ovirt-awake.service \ @@ -27,6 +31,7 @@ ovirt-firstboot.service \ ovirt-cim.service \ ovirt-kdump.service \ + ovirt-ntpd/ovirt-ntpd.service \ ovirt-node-igor-slave.service else dist_initd_SCRIPTS = \ diff --git a/services/ovirt-ntpd/ovirt-node-ntpd b/services/ovirt-ntpd/ovirt-node-ntpd new file mode 100755 index 0000000..4d837c5 --- /dev/null +++ b/services/ovirt-ntpd/ovirt-node-ntpd @@ -0,0 +1,136 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Copyright (C) 2015 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +import logging +import os +import sys +import tempfile + +from ovirt.node import utils +from ovirt.node.utils import system +from systemd import journal + + +class OvirtNtp(object): + + def __init__(self): + self.kargs = None + self.logger = self._set_logger() + + def is_set(self): + """ + Validate OVIRT_NODE_NTP in /etc/default/ovirt + if already set, no need to execute auto-register + + Return True or False + """ + + with open('/etc/default/ovirt', 'r') as f: + for line in f: + if "OVIRT_NODE_NTP_AUTO_SERVERS=no" in line: + return True + + return False + + def get_kargs(self): + """ + Find in the boot kernel arguments from /var/log/dmesg, + the key ntp + + Return a dict with the keys + """ + key_word_karg = "Command line" + with open('/var/log/messages', 'r') as f: + for line in f: + if key_word_karg in line and "ntp" in line: + self.kargs = system.kernel_cmdline_arguments( + line.split(key_word_karg)[1] + ) + break + + return self.kargs + + def comment_servers(self): + """ + Comment the server entries from /etc/ntp.conf + """ + _ntp_conf = "/etc/ntp.conf" + _ntp_buff = "" + with open(_ntp_conf, 'r') as f: + for line in f: + if "server" in line: + _ntp_buff += "# {s}".format(s=line) + else: + _ntp_buff += line + + with tempfile.NamedTemporaryFile( + dir=os.path.dirname("/etc/"), + delete=False + ) as f: + f.write(_ntp_buff) + + os.chmod(f.name, 0o644) + os.rename(f.name, _ntp_conf) + utils.fs.Config().persist(_ntp_conf) + self.logger.info("Commented the server entries from ntp.conf") + + def write_changes(self): + """ + Save OVIRT_NODE_NTP_AUTO_SERVERS into /etc/default/ovirt + for next service start check + """ + with open('/etc/default/ovirt', 'a') as f: + f.write("OVIRT_NODE_NTP_AUTO_SERVERS=no") + self.logger.info("Saved OVIRT_NODE_NTP_AUTO_SERVERS=no") + + def _set_logger(self): + """ + Set the logging schema + """ + log = logging.getLogger(__name__) + log.propagate = False + log.setLevel(logging.DEBUG) + log.addHandler(journal.JournalHandler()) + log.addHandler( + journal.JournalHandler(SYSLOG_IDENTIFIER='ovirt-node-ntp') + ) + + return log + + +def main(): + ntp = OvirtNtp() + ntp.logger.info("Staring ovirt-node-ntp service..") + + if not ntp.is_set(): + ntp.logger.info("OVIRT_NODE_NTP not found in /etc/default/ovirt") + + if ntp.get_kargs() is None: + ntp.logger.info("No ntp in the kernel arguments, exiting") + return 0 + else: + ntp.logger.info("Found OVIRT_NODE_NTP in /etc/default/ovirt, exiting") + return 0 + + ntp.comment_servers() + ntp.write_changes() + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/services/ovirt-ntpd/ovirt-ntpd.service b/services/ovirt-ntpd/ovirt-ntpd.service new file mode 100644 index 0000000..2923809 --- /dev/null +++ b/services/ovirt-ntpd/ovirt-ntpd.service @@ -0,0 +1,15 @@ +[Unit] +Description=oVirt Network Time Service +Before=ntpd.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/ovirt-node-ntpd +Nice=-20 +User=root +Group=root +PermissionsStartOnly=true + +[Install] +WantedBy=multi-user.target diff --git a/src/ovirtnode/network.py b/src/ovirtnode/network.py index 39fc0dc..f05a41c 100644 --- a/src/ovirtnode/network.py +++ b/src/ovirtnode/network.py @@ -81,7 +81,4 @@ mdns = Nameservers() txs += mdns.transaction() - mntp = Timeservers() - txs += mntp.transaction() - return txs -- To view, visit https://gerrit.ovirt.org/41617 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib7827ab15b23b71d18b4562a0f2fc8a475f16378 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-node Gerrit-Branch: master Gerrit-Owner: Douglas Schilling Landgraf <[email protected]> _______________________________________________ node-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/node-patches
