Commit 1e726abc authored by Marco Mariani's avatar Marco Mariani

new entry points for slapgrid-sr, slapgrid-cp, slapgrid-ur

parent ef2d12bf
...@@ -83,6 +83,9 @@ setup(name=name, ...@@ -83,6 +83,9 @@ setup(name=name,
'node stop = slapos.cli.supervisorctl:SupervisorctlStopCommand', 'node stop = slapos.cli.supervisorctl:SupervisorctlStopCommand',
'node restart = slapos.cli.supervisorctl:SupervisorctlRestartCommand', 'node restart = slapos.cli.supervisorctl:SupervisorctlRestartCommand',
'node tail = slapos.cli.supervisorctl:SupervisorctlTailCommand', 'node tail = slapos.cli.supervisorctl:SupervisorctlTailCommand',
'node report = slapos.cli.slapgrid:ReportCommand',
'node software = slapos.cli.slapgrid:SoftwareCommand',
'node instance = slapos.cli.slapgrid:InstanceCommand',
'console = slapos.cli.console:ConsoleCommand', 'console = slapos.cli.console:ConsoleCommand',
'supply = slapos.cli.supply:SupplyCommand', 'supply = slapos.cli.supply:SupplyCommand',
'remove = slapos.cli.remove:RemoveCommand', 'remove = slapos.cli.remove:RemoveCommand',
......
# -*- coding: utf-8 -*-
import logging
from slapos.cli.config import ConfigCommand
from slapos.grid.utils import setRunning, setFinished
from slapos.grid.slapgrid import (merged_options, check_missing_parameters, check_missing_files,
random_delay, create_slapgrid_object)
class SlapgridCommand(ConfigCommand):
log = logging.getLogger(__name__)
method_name = NotImplemented
default_pidfile = NotImplemented
def get_parser(self, prog_name):
ap = super(SlapgridCommand, self).get_parser(prog_name)
ap.add_argument('--instance-root',
help='The instance root directory location.')
ap.add_argument('--software-root',
help='The software_root directory location.')
ap.add_argument('--master-url',
help='The master server URL. Mandatory.')
ap.add_argument('--computer-id',
help='The computer id defined in the server.')
ap.add_argument('--supervisord-socket',
help='The socket supervisor will use.')
ap.add_argument('--supervisord-configuration-path',
help='The location where supervisord configuration will be stored.')
ap.add_argument('--buildout', default=None,
help='Location of buildout binary.')
ap.add_argument('--pidfile',
help='The location where pidfile will be created.')
ap.add_argument('--key_file',
help='SSL Authorisation key file.')
ap.add_argument('--cert_file',
help='SSL Authorisation certificate file.')
ap.add_argument('--signature_private_key_file',
help='Signature private key file.')
ap.add_argument('--master_ca_file',
help='Root certificate of SlapOS master key.')
ap.add_argument('--certificate_repository_path',
help='Path to directory where downloaded certificates would be stored.')
ap.add_argument('--maximum-periodicity', type=int, default=None,
help='Periodicity at which buildout should be run in instance.')
ap.add_argument('--promise-timeout', type=int, default=3,
help='Promise timeout in seconds.')
ap.add_argument('--now', action='store_true',
help='Launch slapgrid without delay. Default behavior.')
ap.add_argument('--all', action='store_true',
help='Launch slapgrid to process all Softare Releases '
'and/or Computer Partitions.')
ap.add_argument('--only-sr',
help='Force the update of a single software release (use url hash), '
'even if is already installed. This option will make all others '
'sofware releases be ignored.')
ap.add_argument('--only-cp',
help='Update a single or a list of computer partitions '
'(ie.:slappartX, slappartY), '
'this option will make all others computer partitions be ignored.')
return ap
def take_action(self, args):
config = self.fetch_config(args)
options = merged_options(args, config)
# XXX add formatter
# formatter = logging.Formatter(fmt='%(asctime)s %(name)-18s: '
# '%(levelname)-8s %(message)s',
# datefmt='%Y-%m-%dT%H:%M:%S')
#
# handler.setFormatter(formatter)
check_missing_parameters(options)
check_missing_files(options)
# XXX this action is logging twice
random_delay(options, logger=self.log)
slapgrid_object = create_slapgrid_object(options, logger=self.log)
pidfile = options.get('pidfile') or self.default_pidfile
if pidfile:
setRunning(logger=self.log, pidfile=pidfile)
try:
return getattr(slapgrid_object, self.method_name)()
finally:
if pidfile:
setFinished(pidfile)
class SoftwareCommand(SlapgridCommand):
"""Hook for entry point to process Software Releases"""
method_name = 'processSoftwareReleaseList'
default_pidfile = '/opt/slapos/slapgrid-sr.pid'
class InstanceCommand(SlapgridCommand):
"""Hook for entry point to process Computer Partitions"""
method_name = 'processComputerPartitionList'
default_pidfile = '/opt/slapos/slapgrid-cp.pid'
class ReportCommand(SlapgridCommand):
"""Hook for entry point to process Usage Reports"""
method_name = 'agregateAndSendUsage'
default_pidfile = '/opt/slapos/slapgrid-ur.pid'
...@@ -21,7 +21,6 @@ examples : ...@@ -21,7 +21,6 @@ examples :
>>> # Fetch instance informations on already launched instance >>> # Fetch instance informations on already launched instance
>>> request(kvm, "myuniquekvm").getConnectionParameter("url")""" % sys.argv[0] >>> request(kvm, "myuniquekvm").getConnectionParameter("url")""" % sys.argv[0]
ap = argparse.ArgumentParser(usage=usage) ap = argparse.ArgumentParser(usage=usage)
ap.add_argument('-u', '--master_url', ap.add_argument('-u', '--master_url',
...@@ -48,4 +47,3 @@ examples : ...@@ -48,4 +47,3 @@ examples :
config = ClientConfig(args, get_config_parser(args.configuration_file)) config = ClientConfig(args, get_config_parser(args.configuration_file))
local = init(config) local = init(config)
do_console(local) do_console(local)
...@@ -61,6 +61,7 @@ class EntryPointNotImplementedError(NotImplementedError): ...@@ -61,6 +61,7 @@ class EntryPointNotImplementedError(NotImplementedError):
def __init__(self, *args, **kw_args): def __init__(self, *args, **kw_args):
NotImplementedError.__init__(self, *args, **kw_args) NotImplementedError.__init__(self, *args, **kw_args)
def checkSlaposCfg(): def checkSlaposCfg():
""" """
Check if a slapos configuration file was given as a argument. Check if a slapos configuration file was given as a argument.
...@@ -78,6 +79,7 @@ def checkSlaposCfg(): ...@@ -78,6 +79,7 @@ def checkSlaposCfg():
return True return True
return False return False
def checkOption(option): def checkOption(option):
""" """
Check if a given option is already in call line Check if a given option is already in call line
...@@ -93,6 +95,7 @@ def checkOption(option): ...@@ -93,6 +95,7 @@ def checkOption(option):
sys.argv = sys.argv + option[1:] sys.argv = sys.argv + option[1:]
return True return True
def call(fun, config=False, option=None): def call(fun, config=False, option=None):
""" """
Add missing options to sys.argv Add missing options to sys.argv
...@@ -109,6 +112,7 @@ def call(fun, config=False, option=None): ...@@ -109,6 +112,7 @@ def call(fun, config=False, option=None):
fun() fun()
sys.exit(0) sys.exit(0)
def dispatch(command, is_node_command): def dispatch(command, is_node_command):
""" Dispatch to correct SlapOS module. """ Dispatch to correct SlapOS module.
Here we could use introspection to get rid of the big "if" statements, Here we could use introspection to get rid of the big "if" statements,
...@@ -166,6 +170,7 @@ def dispatch(command, is_node_command): ...@@ -166,6 +170,7 @@ def dispatch(command, is_node_command):
else: else:
return False return False
def main(): def main():
""" """
Main entry point of SlapOS Node. Used to dispatch commands to python Main entry point of SlapOS Node. Used to dispatch commands to python
......
...@@ -28,18 +28,18 @@ def request(): ...@@ -28,18 +28,18 @@ def request():
ap.add_argument('software_url', ap.add_argument('software_url',
help='Your software url') help='Your software url')
ap.add_argument('--node', ap.add_argument('--node',
nargs = '*', nargs='*',
help = 'Node request option ' help='Node request option '
"'option1=value1 option2=value2'") "'option1=value1 option2=value2'")
ap.add_argument('--type', ap.add_argument('--type',
type = str, type=str,
help = 'Define software type to be requested') help='Define software type to be requested')
ap.add_argument('--slave', ap.add_argument('--slave',
action = 'store_true', default=False, action='store_true', default=False,
help = 'Ask for a slave instance') help='Ask for a slave instance')
ap.add_argument('--configuration', ap.add_argument('--configuration',
nargs = '*', nargs='*',
help = 'Give your configuration ' help='Give your configuration '
"'option1=value1 option2=value2'") "'option1=value1 option2=value2'")
args = ap.parse_args() args = ap.parse_args()
......
...@@ -6,7 +6,7 @@ import ConfigParser ...@@ -6,7 +6,7 @@ import ConfigParser
import logging import logging
import sys import sys
from slapos.grid.utils import (setRunning, setFinished) from slapos.grid.utils import setRunning, setFinished
from slapos.grid.slapgrid import (merged_options, check_missing_parameters, from slapos.grid.slapgrid import (merged_options, check_missing_parameters,
check_missing_files, random_delay, create_slapgrid_object) check_missing_files, random_delay, create_slapgrid_object)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment