""" Sample user-defined service. """ from core.misc.ipaddress import Ipv4Prefix from core.service import CoreService from core.service import ServiceManager class MyService(CoreService): """ This is a sample user-defined service. """ # a unique name is required, without spaces _name = "MyService" # you can create your own group here _group = "Utility" # list of other services this service depends on _depends = () # per-node directories _dirs = () # generated files (without a full path this file goes in the node's dir, # e.g. /tmp/pycore.12345/n1.conf/) _configs = ('myservice.sh',) # this controls the starting order vs other enabled services _startindex = 50 # list of startup commands, also may be generated during startup _startup = ('sh myservice.sh',) # list of shutdown commands _shutdown = () @classmethod def generateconfig(cls, node, filename, services): """ Return a string that will be written to filename, or sent to the GUI for user customization. """ cfg = "#!/bin/sh\n" cfg += "# auto-generated by MyService (sample.py)\n" for ifc in node.netifs(): cfg += 'echo "Node %s has interface %s"\n' % (node.name, ifc.name) # here we do something interesting cfg += "\n".join(map(cls.subnetentry, ifc.addrlist)) break return cfg @staticmethod def subnetentry(x): """ Generate a subnet declaration block given an IPv4 prefix string for inclusion in the config file. """ if x.find(":") >= 0: # this is an IPv6 address return "" else: net = Ipv4Prefix(x) return 'echo " network %s"' % net # this is needed to load desired services when being integrated into core, otherwise this is not needed def load_services(): # this line is required to add the above class to the list of available services ServiceManager.add(MyService)