ovirt-node 2.2.0 release
[ovirt-node.git] / scripts / log.py
blob6c7d39218a14c16d655c6d2b1dd447dbc82cffd4
1 #!/usr/bin/python
3 # Configures the rsyslog daemon.
5 import os
6 import sys
7 from ovirtnode.ovirtfunctions import *
9 RSYSLOG_FILE="/etc/rsyslog.conf"
11 RSYSLOG_CONFIG_TEMPLATE = """
12 #ovirt rsyslog config file
14 #### MODULES ####
15 $ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)
16 $ModLoad imklog.so # provides kernel logging support (previously done by rklogd)
18 #### GLOBAL DIRECTIVES ####
19 # Use default timestamp format
20 $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
22 #### RULES ####
23 # Log anything (except mail) of level info or higher.
24 # Don't log private authentication messages!
25 *.info;mail.none;authpriv.none;cron.none /var/log/messages
27 # The authpriv file has restricted access.
28 authpriv.* /var/log/secure
30 # Log all the mail messages in one place.
31 mail.* -/var/log/maillog
33 # Log cron stuff
34 cron.* /var/log/cron
36 # Everybody gets emergency messages
37 *.emerg *
39 # Save news errors of level crit and higher in a special file.
40 uucp,news.crit /var/log/spooler
42 # Save boot messages also to boot.log
43 local7.* /var/log/boot.log
45 $WorkDirectory /var/spool/rsyslog
46 $ActionQueueFileName ovirtNode
47 $ActionQueueMaxDiskSpace 10m
48 $ActionQueueSaveOnShutdown on
49 $ActionQueueType LinkedList
50 $ActionResumeRetryCount -1
51 %(disable)s*.* %(delim)s%(server)s:%(port)s
52 """
55 def ovirt_rsyslog(server, port, protocol):
56 if server == "":
57 disable = "#"
58 else:
59 disable = ""
60 if protocol == "tcp":
61 DELIM="@@"
62 else:
63 DELIM="@"
65 if is_valid_ipv6(server):
66 server = "[" + server + "]"
68 rsyslog_dict = {
69 "disable" : disable,
70 "delim" : DELIM,
71 "server" : server,
72 "port" : port
74 rsyslog_config_out = RSYSLOG_CONFIG_TEMPLATE % rsyslog_dict
75 rsyslog_config = open(RSYSLOG_FILE, "w")
76 rsyslog_config.write(rsyslog_config_out)
77 rsyslog_config.close()
78 os.system("/sbin/service rsyslog restart &> /dev/null")
79 logger.info("Syslog Configuration Updated")
80 return True
82 def ovirt_netconsole(server, port):
83 augtool("set","/files/etc/sysconfig/netconsole/SYSLOGADDR", server)
84 augtool("set","/files/etc/sysconfig/netconsole/SYSLOGPORT", port)
85 os.system("/sbin/service netconsole restart &> /dev/null")
86 if ovirt_store_config("/etc/sysconfig/netconsole"):
87 logger.info("Netconsole Configuration Updated")
88 return True
91 def set_logrotate_size(size):
92 try:
93 augtool("set", "/files/etc/logrotate.d/ovirt-node/rule/size", size)
94 ovirt_store_config("/etc/logrotate.d/ovirt-node")
95 return True
96 except:
97 return False
99 def get_rsyslog_config():
100 rsyslog_config = open(RSYSLOG_FILE)
101 for line in rsyslog_config:
102 if "@" in line:
103 #strip excess details
104 line = line.replace("*.* ", "")
105 line = line.replace("@","")
106 try:
107 server, port = line.split(":")
108 if not server.startswith("#"):
109 return (server,port.strip())
110 except:
111 # try ipv6 parsing
112 try:
113 ip, port = line.split("]")
114 server = ip.replace("[","")
115 port = port.replace(":","")
116 if not server.startswith("#"):
117 return (server,port.strip())
118 except:
119 logger.error("rsyslog config parsing failed " + line)
120 return
122 def syslog_auto():
123 host = ""
124 port = ""
125 if not OVIRT_VARS.has_key("OVIRT_SYSLOG_SERVER") or not OVIRT_VARS.has_key("OVIRT_SYSLOG_PORT"):
126 logger.info("Attempting to locate remote syslog server...")
127 try:
128 host, port = find_srv("syslog", "udp")
129 except:
130 pass
131 if not host is "" and not port is "":
132 logger.info("Found! Using syslog server " + host + ":" + port)
133 ovirt_rsyslog(host, port, "udp")
134 return True
135 else:
136 logger.warn("Syslog server not found!")
137 return False
138 else:
139 logger.info("Using default syslog server " + OVIRT_VARS["OVIRT_SYSLOG_SERVER"] + ":" + OVIRT_VARS["OVIRT_SYSLOG_PORT"] + ".")
140 ovirt_rsyslog(OVIRT_VARS["OVIRT_SYSLOG_SERVER"], OVIRT_VARS["OVIRT_SYSLOG_PORT"], "udp")
141 return True
143 def netconsole_auto():
144 host = ""
145 port = ""
146 if not OVIRT_VARS.has_key("OVIRT_NETCONSOLE_SERVER") or not OVIRT_VARS.has_key("OVIRT_NETCONSOLE_PORT"):
147 logger.info("Attempting to locate remote netconsole server...")
148 try:
149 host, port = find_srv("netconsole", "udp")
150 except:
151 pass
152 if not host is "" and not port is "":
153 logger.info("Found! Using netconsole server " + host + ":" + port)
154 ovirt_netconsole(host, port)
155 return True
156 else:
157 logger.warn("Netconsole server not found!")
158 return False
159 else:
160 logger.info("Using default netconsole server " + OVIRT_VARS["OVIRT_NETCONSOLE_SERVER"] + ":" + OVIRT_VARS["OVIRT_NETCONSOLE_PORT"] + ".")
161 ovirt_netconsole(OVIRT_VARS["OVIRT_NETCONSOLE_SERVER"], OVIRT_VARS["OVIRT_NETCONSOLE_PORT"])
162 return True
164 def logging_auto():
165 try:
166 syslog_auto()
167 logger.info("Syslog Configuration Completed")
168 except:
169 logger.warn("Syslog Configuration Failed")
170 try:
171 netconsole_auto()
172 logger.info("Syslog Configuration Completed")
173 except:
174 logger.warn("Netconsole Configuration Failed")