You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
1 year ago
|
import os
|
||
|
import sys
|
||
|
import seiscomp.kernel
|
||
|
import seiscomp.config
|
||
|
import seiscomp.system
|
||
|
|
||
|
|
||
|
def parseBindPort(bind):
|
||
|
bindToks = bind.split(':')
|
||
|
if len(bindToks) == 1:
|
||
|
return int(bindToks[0])
|
||
|
elif len(bindToks) == 2:
|
||
|
return int(bindToks[1])
|
||
|
else:
|
||
|
return -1
|
||
|
|
||
|
|
||
|
class Module(seiscomp.kernel.Module):
|
||
|
def __init__(self, env):
|
||
|
seiscomp.kernel.Module.__init__(self, env, "inventory")
|
||
|
# This is a config module which synchronizes bindings with the database
|
||
|
self.isConfigModule = True
|
||
|
# Give this module a high priority to be executed at first (unless
|
||
|
# another module defines a negative value. It ensures that successive
|
||
|
# modules can read an up-to-date inventory and use the latest rc files.
|
||
|
self.order = 0
|
||
|
|
||
|
def updateConfig(self):
|
||
|
messaging = True
|
||
|
messagingPort = 18180
|
||
|
messagingProtocol = 'scmp'
|
||
|
|
||
|
try:
|
||
|
messaging = self.env.getBool("messaging.enable")
|
||
|
except:
|
||
|
pass
|
||
|
|
||
|
# If messaging is disabled in kernel.cfg, do not do anything
|
||
|
if not messaging:
|
||
|
sys.stdout.write("- messaging disabled, nothing to do\n")
|
||
|
return 0
|
||
|
|
||
|
# Load scmaster configuration and figure the bind ports of scmaster out
|
||
|
cfg = seiscomp.config.Config()
|
||
|
seiscomp.system.Environment.Instance().initConfig(cfg, "scmaster")
|
||
|
|
||
|
# First check the unencrypted port and prefer that
|
||
|
p = parseBindPort(cfg.getString("interface.bind"))
|
||
|
if p > 0:
|
||
|
messagingPort = p
|
||
|
|
||
|
try:
|
||
|
bind = self.env.getString("messaging.bind")
|
||
|
bindToks = bind.split(':')
|
||
|
if len(bindToks) == 1:
|
||
|
messagingPort = int(bindToks[0])
|
||
|
elif len(bindToks) == 2:
|
||
|
messagingPort = int(bindToks[1])
|
||
|
else:
|
||
|
sys.stdout.write(
|
||
|
"E invalid messaging bind parameter: %s\n" % bind)
|
||
|
sys.stdout.write(" expected either 'port' or 'ip:port'\n")
|
||
|
return 1
|
||
|
except:
|
||
|
pass
|
||
|
|
||
|
# Otherwise check if ssl is enabled
|
||
|
else:
|
||
|
p = parseBindPort(cfg.getString("interface.ssl.bind"))
|
||
|
if p > 0:
|
||
|
messagingPort = p
|
||
|
messagingProtocol = 'scmps'
|
||
|
|
||
|
# Synchronize inventory
|
||
|
return os.system("scinv sync --console=1 -H %s://localhost:%d/production --filebase \"%s\" --rc-dir \"%s\" --key-dir \"%s\""
|
||
|
% (messagingProtocol, messagingPort,
|
||
|
os.path.join(self.env.root, "etc", "inventory"),
|
||
|
os.path.join(self.env.root, "var", "lib", "rc"),
|
||
|
os.path.join(self.env.root, "etc", "key")))
|
||
|
|