diff --git a/setup.py b/setup.py index 7083bf5dc25cd94e0e9b84193aa512ad457c4a92..17b0fc8326eba0f7bfc690df1f814004707247d2 100644 --- a/setup.py +++ b/setup.py @@ -73,17 +73,7 @@ setup(name=name, entry_points={ 'console_scripts': [ 'slapos-watchdog = slapos.grid.watchdog:main', - 'slapproxy = slapos.cli_legacy.proxy_start:main', 'slapos = slapos.cli.entry:main', - # Deprecated entry points - 'slapconsole = slapos.cli_legacy.console:console', - 'slapformat = slapos.cli_legacy.format:main', - 'slapgrid-sr = slapos.cli_legacy.slapgrid:runSoftwareRelease', - 'slapgrid-cp = slapos.cli_legacy.slapgrid:runComputerPartition', - 'slapgrid-ur = slapos.cli_legacy.slapgrid:runUsageReport', - 'slapgrid-supervisorctl = slapos.cli_legacy.svcbackend:supervisorctl', - 'slapgrid-supervisord = slapos.cli_legacy.svcbackend:supervisord', - 'bang = slapos.cli_legacy.bang:main', ], 'slapos.cli': [ # Utilities diff --git a/slapos/cli_legacy/__init__.py b/slapos/cli_legacy/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/slapos/cli_legacy/bang.py b/slapos/cli_legacy/bang.py deleted file mode 100644 index 018d2bf1a83de19ad8cac69c2d22845b886d7e9a..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/bang.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (c) 2011, 2012 Vifib SARL and Contributors. -# All Rights Reserved. -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsibility of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# guarantees and support are strongly advised to contract a Free Software -# Service Company -# -# 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; either version 3 -# of the License, or (at your option) any later version. -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -import argparse -import ConfigParser - -from slapos.bang import do_bang - - -def main(*args): - ap = argparse.ArgumentParser() - ap.add_argument('-m', '--message', default='', help='Message for bang.') - ap.add_argument('configuration_file', type=argparse.FileType(), - help='SlapOS configuration file.') - if args: - args = ap.parse_args(list(args)) - else: - args = ap.parse_args() - configp = ConfigParser.SafeConfigParser() - configp.readfp(args.configuration_file) - do_bang(configp, args.message) diff --git a/slapos/cli_legacy/console.py b/slapos/cli_legacy/console.py deleted file mode 100644 index 421c4072bde631b2e4c236b00c5cb40d63bbcc1b..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/console.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -import argparse -import os -import textwrap - -from slapos.client import ClientConfig, init, do_console -from slapos.cli_legacy.util import get_config_parser - - -def console(): - description = textwrap.dedent("""\ - slapconsole allows you interact with slap API. You can play with the global - "slap" object and with the global "request" method. - - examples : - >>> # Request instance - >>> request(kvm, "myuniquekvm") - >>> # Request software installation on owned computer - >>> supply(kvm, "mycomputer") - >>> # Fetch instance informations on already launched instance - >>> request(kvm, "myuniquekvm").getConnectionParameter("url")""") - - ap = argparse.ArgumentParser(description=description, - formatter_class=argparse.RawDescriptionHelpFormatter) - - ap.add_argument('-u', '--master_url', - default=None, - help='Url of SlapOS Master to use.') - - ap.add_argument('-k', '--key_file', - help="SSL Authorisation key file.") - - ap.add_argument('-c', '--cert_file', - help="SSL Authorisation certificate file.") - - ap.add_argument('configuration_file', - help='path to slapos.cfg') - - args = ap.parse_args() - - if not os.path.isfile(args.configuration_file): - ap.error("%s: Not found or not a regular file." % args.configuration_file) - - configp = get_config_parser(args.configuration_file) - conf = ClientConfig(args, configp) - local = init(conf) - do_console(local) diff --git a/slapos/cli_legacy/format.py b/slapos/cli_legacy/format.py deleted file mode 100644 index f6350c1a47ac7910f5cde8777c928622370353c4..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/format.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (c) 2010, 2011, 2012 Vifib SARL and Contributors. -# All Rights Reserved. -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsibility of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# guarantees and support are strongly advised to contract a Free Software -# Service Company -# -# 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; either version 3 -# of the License, or (at your option) any later version. -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -import argparse -import ConfigParser -import logging -import sys -import os - -from slapos.format import FormatConfig, UsageError, tracing_monkeypatch, do_format - - -def main(*args): - "Run default configuration." - - ap = argparse.ArgumentParser() - - ap.add_argument('-x', '--computer_xml', - help="Path to file with computer's XML. If does not exists, will be created", - default=None) - - ap.add_argument('--computer_json', - help="Path to a JSON version of the computer's XML (for development only).", - default=None) - - ap.add_argument('-l', '--log_file', - help="The path to the log file used by the script.") - - ap.add_argument('-i', '--input_definition_file', - help="Path to file to read definition of computer instead of " - "declaration. Using definition file allows to disable " - "'discovery' of machine services and allows to define computer " - "configuration in fully controlled manner.") - - ap.add_argument('-o', '--output_definition_file', - help="Path to file to write definition of computer from " - "declaration.") - - ap.add_argument('-n', '--dry_run', - help="Don't actually do anything.", - default=False, - action="store_true") - - ap.add_argument('-v', '--verbose', - default=False, - action="store_true", - help="Verbose output.") - - # the console option is actually ignored and not used anymore. - ap.add_argument('-c', '--console', - default=False, - action="store_true", - help="Console output.") - - ap.add_argument('--alter_user', - choices=['True', 'False'], - help="Shall slapformat alter user database [default: True]") - - ap.add_argument('--alter_network', - choices=['True', 'False'], - help="Shall slapformat alter network configuration [default: True]") - - ap.add_argument('--now', - help="Launch slapformat without delay", - default=False, - action="store_true") - - ap.add_argument('configuration_file', - help='path to slapos.cfg') - - if args: - args = ap.parse_args(list(args)) - else: - args = ap.parse_args() - - logger = logging.getLogger("slapformat") - logger.addHandler(logging.StreamHandler()) - - if args.verbose: - logger.setLevel(logging.DEBUG) - logger.debug("Verbose mode enabled.") - else: - logger.setLevel(logging.INFO) - - conf = FormatConfig(logger=logger) - - configp = ConfigParser.SafeConfigParser() - if configp.read(args.configuration_file) != [args.configuration_file]: - raise UsageError('Cannot find or parse configuration file: %s' % args.configuration_file) - - conf.mergeConfig(args, configp) - - if conf.log_file: - if not os.path.isdir(os.path.dirname(conf.log_file)): - # fallback to console only if directory for logs does not exists and - # continue to run - raise ValueError('Please create directory %r to store %r log file' % ( - os.path.dirname(conf.log_file), conf.log_file)) - else: - file_handler = logging.FileHandler(conf.log_file) - file_handler.setFormatter(logging.Formatter("%(asctime)s - " - "%(name)s - %(levelname)s - %(message)s")) - conf.logger.addHandler(file_handler) - conf.logger.info('Configured logging to file %r' % conf.log_file) - - try: - conf.setConfig() - except UsageError as exc: - sys.stderr.write(exc.message + '\n') - sys.stderr.write("For help use --help\n") - sys.exit(1) - - tracing_monkeypatch(conf) - - try: - do_format(conf=conf) - except: - conf.logger.exception('Uncaught exception:') - raise diff --git a/slapos/cli_legacy/proxy_start.py b/slapos/cli_legacy/proxy_start.py deleted file mode 100644 index cd12f063837af6b30f1b85387c5aa58429e094bc..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/proxy_start.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: set et sts=2: - -import argparse -import ConfigParser -import logging -import os -import sys - -from slapos.proxy import ProxyConfig, do_proxy - -class UsageError(Exception): - pass - - -def main(): - ap = argparse.ArgumentParser() - - ap.add_argument('-l', '--log_file', - help='The path to the log file used by the script.') - - ap.add_argument('-v', '--verbose', - action='store_true', - help='Verbose output.') - - # XXX not used anymore, deprecated - ap.add_argument('-c', '--console', - action='store_true', - help='Console output.') - - ap.add_argument('-u', '--database-uri', - help='URI for sqlite database') - - ap.add_argument('configuration_file', - help='path to slapos.cfg') - - args = ap.parse_args() - - logger = logging.getLogger('slapproxy') - logger.addHandler(logging.StreamHandler()) - - if args.verbose: - logger.setLevel(logging.DEBUG) - else: - logger.setLevel(logging.INFO) - - conf = ProxyConfig(logger=logger) - - configp = ConfigParser.SafeConfigParser() - if configp.read(args.configuration_file) != [args.configuration_file]: - raise UsageError('Cannot find or parse configuration file: %s' % args.configuration_file) - - conf.mergeConfig(args, configp) - - if conf.log_file: - if not os.path.isdir(os.path.dirname(conf.log_file)): - raise ValueError('Please create directory %r to store %r log file' % ( - os.path.dirname(conf.log_file), conf.log_file)) - file_handler = logging.FileHandler(conf.log_file) - file_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")) - logger.addHandler(file_handler) - logger.info('Configured logging to file %r' % conf.log_file) - - conf.setConfig() - - try: - do_proxy(conf=conf) - return_code = 0 - except SystemExit as err: - return_code = err - - sys.exit(return_code) diff --git a/slapos/cli_legacy/slapgrid.py b/slapos/cli_legacy/slapgrid.py deleted file mode 100644 index e8a2d047da1ed1efad387d44cfc522ae9caafe1c..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/slapgrid.py +++ /dev/null @@ -1,158 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: set et sts=2: - -import argparse -import ConfigParser -import logging -import sys - -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) - - -def parse_arguments(*argument_tuple): - """Parse arguments and return options dictionary merged with the config file.""" - - ap = argparse.ArgumentParser() - 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('--logfile', - help='The location where slapgrid logfile 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('-v', '--verbose', action='store_true', - help='Be verbose.') - 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 Software 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 other ' - '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 other computer partitions be ignored.') - - ap.add_argument('configuration_file', type=argparse.FileType(), - help='SlapOS configuration file.') - - # Deprecated options - ap.add_argument('-c', '--console', action='store_true', - help="Deprecated, doesn't do anything.") - ap.add_argument('--develop', action='store_true', - help='Deprecated, same as --all.') - ap.add_argument('--only_sr', - help='Deprecated, same as --only-sr.') - ap.add_argument('--only_cp', - help='Deprecated, same as --only-cp.') - ap.add_argument('--maximal_delay', - help='Deprecated. Will only work from configuration file in the future.') - - if not argument_tuple: - args = ap.parse_args() - else: - args = ap.parse_args(list(argument_tuple)) - - return args - - -def setup_logger(options): - logger = logging.getLogger(__name__) - - if options.get('logfile'): - handler = logging.FileHandler(options['logfile']) - else: - handler = logging.StreamHandler() - - if options['verbose']: - handler.setLevel(logging.DEBUG) - else: - handler.setLevel(logging.INFO) - - formatter = logging.Formatter(fmt='%(asctime)s %(name)-18s: ' - '%(levelname)-8s %(message)s', - datefmt='%Y-%m-%dT%H:%M:%S') - - handler.setFormatter(formatter) - logger.addHandler(handler) - - return logger - - -def parseArgumentTupleAndReturnSlapgridObject(*argument_tuple): - """Returns a new instance of slapgrid.Slapgrid created with argument+config parameters. - Also returns the pidfile path, and configures logger. - """ - args = parse_arguments(*argument_tuple) - - configp = ConfigParser.SafeConfigParser() - configp.readfp(args.configuration_file) - - options = merged_options(args, configp) - - logger = setup_logger(options) - - check_missing_parameters(options) - check_missing_files(options) - - random_delay(options, logger=logger) - - slapgrid_object = create_slapgrid_object(options, logger=logger) - - return slapgrid_object, options.get('pidfile') - - -def realRun(argument_tuple, method): - slapgrid_object, pidfile = parseArgumentTupleAndReturnSlapgridObject(*argument_tuple) - if pidfile: - setRunning(logger=slapgrid_object.logger, pidfile=pidfile) - try: - return getattr(slapgrid_object, method)() - finally: - if pidfile: - setFinished(pidfile) - - -def runSoftwareRelease(*argument_tuple): - """Hook for entry point to process Software Releases""" - sys.exit(realRun(argument_tuple, 'processSoftwareReleaseList')) - - -def runComputerPartition(*argument_tuple): - """Hook for entry point to process Computer Partitions""" - sys.exit(realRun(argument_tuple, 'processComputerPartitionList')) - - -def runUsageReport(*argument_tuple): - """Hook for entry point to process Usage Reports""" - sys.exit(realRun(argument_tuple, 'agregateAndSendUsage')) diff --git a/slapos/cli_legacy/svcbackend.py b/slapos/cli_legacy/svcbackend.py deleted file mode 100644 index 7425532143a94ab24934c0c52b5b3a6a844f73a7..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/svcbackend.py +++ /dev/null @@ -1,98 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: set et sts=2: -############################################################################## -# -# Copyright (c) 2010, 2011, 2012 Vifib SARL and Contributors. -# All Rights Reserved. -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsibility of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# guarantees and support are strongly advised to contract a Free Software -# Service Company -# -# 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; either version 3 -# of the License, or (at your option) any later version. -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -import logging -import os -from optparse import OptionParser -import ConfigParser - -from slapos.grid.svcbackend import launchSupervisord - - -def getOptionDict(*argument_tuple): - usage = """ -Typical usage: - * %prog CONFIGURATION_FILE [arguments passed to supervisor] - -""".strip() - - parser = OptionParser(usage=usage) - - # Parses arguments - if argument_tuple: - (argument_option_instance, argument_list) = parser.parse_args(list(argument_tuple)) - else: - # No arguments given to entry point : we parse sys.argv. - (argument_option_instance, argument_list) = parser.parse_args() - - if not argument_list: - parser.error("Configuration file is obligatory. Consult documentation by calling with -h.") - configuration_file = argument_list[0] - if not os.path.exists(configuration_file): - parser.error("Could not read configuration file : %s" % configuration_file) - - slapgrid_configuration = ConfigParser.SafeConfigParser() - slapgrid_configuration.read(configuration_file) - - # Merges the two dictionnaries - option_dict = dict(slapgrid_configuration.items("slapos")) - # Supervisord configuration location - option_dict.setdefault('supervisord_configuration_path', - os.path.join(option_dict['instance_root'], 'etc', 'supervisord.conf')) - # Supervisord socket - option_dict.setdefault('supervisord_socket', - os.path.join(option_dict['instance_root'], 'supervisord.socket')) - return option_dict, argument_list[1:] - - -def supervisorctl(*argument_tuple): - logger = logging.getLogger('SVCBackend') - logger.setLevel(logging.INFO) - handler = logging.StreamHandler() - logger.addHandler(handler) - - option_dict, args = getOptionDict(*argument_tuple) - import supervisor.supervisorctl - launchSupervisord(socket=option_dict['supervisord_socket'], - configuration_file=option_dict['supervisord_configuration_path'], - logger=logger) - supervisor.supervisorctl.main(args=['-c', option_dict['supervisord_configuration_path']] + args) - - -def supervisord(*argument_tuple): - logger = logging.getLogger('SVCBackend') - logger.setLevel(logging.INFO) - handler = logging.StreamHandler() - logger.addHandler(handler) - - option_dict, _ = getOptionDict(*argument_tuple) - launchSupervisord(socket=option_dict['supervisord_socket'], - configuration_file=option_dict['supervisord_configuration_path'], - logger=logger) diff --git a/slapos/cli_legacy/util.py b/slapos/cli_legacy/util.py deleted file mode 100644 index 56250ff53a6789addc7e5159eeb0553c45d642da..0000000000000000000000000000000000000000 --- a/slapos/cli_legacy/util.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -import ConfigParser -import os - - -def get_config_parser(path): - configp = ConfigParser.SafeConfigParser() - path = os.path.expanduser(path) - if not os.path.isfile(path): - raise OSError('Specified configuration file %s does not exist. Exiting.' % path) - configp.read(path) - return configp diff --git a/slapos/tests/slapgrid.py b/slapos/tests/slapgrid.py index 497c978e23a0e6f0e14b7f1915bcf808359dff11..ad4ce6897d36200a047fffb4a8e0929f64914c0b 100644 --- a/slapos/tests/slapgrid.py +++ b/slapos/tests/slapgrid.py @@ -46,7 +46,6 @@ from mock import patch import slapos.slap.slap import slapos.grid.utils from slapos.grid import slapgrid -from slapos.cli_legacy.slapgrid import parseArgumentTupleAndReturnSlapgridObject from slapos.grid.utils import md5digest from slapos.grid.watchdog import Watchdog from slapos.grid import SlapObject @@ -543,7 +542,8 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') - self.assertItemsEqual(os.listdir(partition), ['buildout.cfg', 'software_release', 'worked']) + self.assertItemsEqual(os.listdir(partition), ['.slapgrid', 'buildout.cfg', + 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) self.assertEqual(computer.sequence, ['getFullComputerInformation', 'availableComputerPartition', @@ -559,7 +559,8 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') - self.assertItemsEqual(os.listdir(partition), ['buildout.cfg', 'software_release', 'worked']) + self.assertItemsEqual(os.listdir(partition), ['.slapgrid', 'buildout.cfg', + 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) self.assertEqual(computer.sequence, ['getFullComputerInformation', 'availableComputerPartition', @@ -588,7 +589,8 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(partition.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(partition.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertItemsEqual(os.listdir(self.software_root), [partition.software.software_hash]) @@ -623,7 +625,8 @@ chmod 755 etc/run/wrapper self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) @@ -637,7 +640,8 @@ chmod 755 etc/run/wrapper self.assertEqual(self.launchSlapgrid(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) self.assertLogContent(wrapper_log, 'Signal handler called with signal 15') self.assertEqual(computer.sequence, ['getFullComputerInformation', 'availableComputerPartition', @@ -675,7 +679,8 @@ chmod 755 etc/run/wrapper self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertItemsEqual(os.listdir(self.software_root), @@ -694,7 +699,8 @@ exit 1 self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) self.assertLogContent(wrapper_log, 'Signal handler called with signal 15') self.assertEqual(computer.sequence, ['getFullComputerInformation', @@ -711,7 +717,7 @@ exit 1 self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', 'buildout.cfg', 'etc', 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) self.assertEqual(computer.sequence, @@ -725,7 +731,8 @@ exit 1 self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.0_wrapper.log', 'etc', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'etc', + 'buildout.cfg', 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') @@ -752,7 +759,7 @@ exit 1 self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') - self.assertItemsEqual(os.listdir(partition), [dummy_file_name]) + self.assertItemsEqual(os.listdir(partition), ['.slapgrid', dummy_file_name]) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) self.assertEqual(computer.sequence, ['getFullComputerInformation', @@ -796,7 +803,8 @@ class TestSlapgridCPWithMasterWatchdog(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(partition.partition_path), - ['.0_daemon.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_daemon.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) daemon_log = os.path.join(partition.partition_path, '.0_daemon.log') self.assertLogContent(daemon_log, 'Failing') self.assertIsCreated(self.watchdog_banged) @@ -840,7 +848,8 @@ class TestSlapgridCPWithMasterWatchdog(MasterMixin, unittest.TestCase): self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(partition.partition_path), - ['.0_daemon.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_daemon.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) daemon_log = os.path.join(partition.partition_path, '.0_daemon.log') self.assertLogContent(daemon_log, 'Failing') self.assertIsNotCreated(self.watchdog_banged) @@ -1127,7 +1136,7 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.timestamp', 'buildout.cfg', 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) timestamp_path = os.path.join(instance.partition_path, '.timestamp') self.setSlapgrid() @@ -1146,7 +1155,8 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.timestamp', 'buildout.cfg', + 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) self.assertEqual(self.launchSlapgrid(develop=True), @@ -1167,7 +1177,7 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.timestamp', 'buildout.cfg', 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) instance.timestamp = str(int(timestamp) - 1) self.assertEqual(self.launchSlapgrid(), slapgrid.SLAPGRID_SUCCESS) @@ -1184,7 +1194,7 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.timestamp', 'buildout.cfg', 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) instance.timestamp = str(int(timestamp) + 1) self.assertEqual(self.launchSlapgrid(), slapgrid.SLAPGRID_SUCCESS) @@ -1205,7 +1215,7 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.timestamp', 'buildout.cfg', 'software_release', 'worked']) self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) instance.timestamp = None @@ -1231,7 +1241,8 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.launchSlapgrid() partition = os.path.join(self.instance_root, '0') self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) + ['.slapgrid', '.timestamp', 'buildout.cfg', + 'software_release', 'worked']) time.sleep(2) # dummify install() so that it doesn't actually do anything so that it @@ -1240,9 +1251,8 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): self.launchSlapgrid() self.assertItemsEqual(os.listdir(partition), - ['.timestamp', 'buildout.cfg', 'software_release', 'worked']) - - + ['.slapgrid', '.timestamp', 'buildout.cfg', + 'software_release', 'worked']) def test_one_partition_periodicity_from_file_does_not_disturb_others(self): """ @@ -1514,7 +1524,8 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) @@ -1582,7 +1593,8 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.processComputerPartitionList(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertItemsEqual(os.listdir(self.software_root), [instance.software.software_hash]) @@ -1597,12 +1609,14 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): self.assertEqual(self.grid.agregateAndSendUsage(), slapgrid.SLAPGRID_SUCCESS) self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertItemsEqual(os.listdir(self.instance_root), ['0', 'etc', 'var']) self.assertItemsEqual(os.listdir(instance.partition_path), - ['.0_wrapper.log', 'buildout.cfg', 'etc', 'software_release', 'worked']) + ['.slapgrid', '.0_wrapper.log', 'buildout.cfg', + 'etc', 'software_release', 'worked']) wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') self.assertLogContent(wrapper_log, 'Working') self.assertEqual(computer.sequence, @@ -1710,187 +1724,6 @@ buildout = /path/to/buildout/binary shutil.rmtree(self.certificate_repository_path, True) -class TestSlapgridArgumentTuple(SlapgridInitialization): - """ - Test suite about arguments given to slapgrid command. - """ - - def test_empty_argument_tuple(self): - """ - Raises if the argument list if empty and without configuration file. - """ - parser = parseArgumentTupleAndReturnSlapgridObject - # XXX: SystemExit is too generic exception, it is only known that - # something is wrong - self.assertRaises(SystemExit, parser, *()) - - def test_default_argument_tuple(self): - """ - Check if we can have the slapgrid object returned with the minimum - arguments. - """ - parser = parseArgumentTupleAndReturnSlapgridObject - return_list = parser(*self.default_arg_tuple) - self.assertEquals(2, len(return_list)) - - def test_signature_private_key_file_non_exists(self): - """ - Raises if the signature_private_key_file does not exists. - """ - parser = parseArgumentTupleAndReturnSlapgridObject - argument_tuple = ("--signature_private_key_file", - "/non/exists/path") + self.default_arg_tuple - self.assertRaisesRegexp(RuntimeError, - "File '/non/exists/path' does not exist.", - parser, *argument_tuple) - - def test_signature_private_key_file(self): - """ - Check if the signature private key argument value is available on - slapgrid object. - """ - parser = parseArgumentTupleAndReturnSlapgridObject - argument_tuple = ("--signature_private_key_file", - self.signature_key_file_descriptor.name) + self.default_arg_tuple - slapgrid_object = parser(*argument_tuple)[0] - self.assertEquals(self.signature_key_file_descriptor.name, - slapgrid_object.signature_private_key_file) - - def test_backward_compatibility_all(self): - """ - Check if giving --all triggers "develop" option. - """ - parser = parseArgumentTupleAndReturnSlapgridObject - slapgrid_object = parser('--all', *self.default_arg_tuple)[0] - self.assertTrue(slapgrid_object.develop) - - def test_backward_compatibility_not_all(self): - """ - Check if not giving --all neither --develop triggers "develop" - option to be False. - """ - parser = parseArgumentTupleAndReturnSlapgridObject - slapgrid_object = parser(*self.default_arg_tuple)[0] - self.assertFalse(slapgrid_object.develop) - - def test_upload_binary_cache_blacklist(self): - """ - Check if giving --upload-to-binary-cache-url-blacklist triggers option. - """ - self.slapos_config_descriptor.write(""" -[slapos] -software_root = /opt/slapgrid -instance_root = /srv/slapgrid -master_url = https://slap.vifib.com/ -computer_id = your computer id -buildout = /path/to/buildout/binary -[networkcache] -upload-to-binary-cache-url-blacklist = - http://1 - http://2/bla -""") - self.slapos_config_descriptor.seek(0) - slapgrid_object = parseArgumentTupleAndReturnSlapgridObject( - *self.default_arg_tuple)[0] - self.assertEqual( - slapgrid_object.upload_to_binary_cache_url_blacklist, - ['http://1', 'http://2/bla'] - ) - self.assertEqual( - slapgrid_object.download_from_binary_cache_url_blacklist, - [] - ) - - def test_download_binary_cache_blacklist(self): - """ - Check if giving --download-from-binary-cache-url-blacklist triggers option. - """ - self.slapos_config_descriptor.write(""" -[slapos] -software_root = /opt/slapgrid -instance_root = /srv/slapgrid -master_url = https://slap.vifib.com/ -computer_id = your computer id -buildout = /path/to/buildout/binary -[networkcache] -download-from-binary-cache-url-blacklist = - http://1 - http://2/bla -""") - self.slapos_config_descriptor.seek(0) - slapgrid_object = parseArgumentTupleAndReturnSlapgridObject( - *self.default_arg_tuple)[0] - self.assertEqual( - slapgrid_object.upload_to_binary_cache_url_blacklist, - [] - ) - self.assertEqual( - slapgrid_object.download_from_binary_cache_url_blacklist, - ['http://1', 'http://2/bla'] - ) - - def test_upload_download_binary_cache_blacklist(self): - """ - Check if giving both --download-from-binary-cache-url-blacklist - and --upload-to-binary-cache-url-blacklist triggers options. - """ - self.slapos_config_descriptor.write(""" -[slapos] -software_root = /opt/slapgrid -instance_root = /srv/slapgrid -master_url = https://slap.vifib.com/ -computer_id = your computer id -buildout = /path/to/buildout/binary -[networkcache] -upload-to-binary-cache-url-blacklist = - http://1 - http://2/bla -download-from-binary-cache-url-blacklist = - http://3 - http://4/bla -""") - self.slapos_config_descriptor.seek(0) - slapgrid_object = parseArgumentTupleAndReturnSlapgridObject( - *self.default_arg_tuple)[0] - self.assertEqual( - slapgrid_object.upload_to_binary_cache_url_blacklist, - ['http://1', 'http://2/bla'] - ) - self.assertEqual( - slapgrid_object.download_from_binary_cache_url_blacklist, - ['http://3', 'http://4/bla'] - ) - - def test_backward_compatibility_download_binary_cache_blacklist(self): - """ - Check if giving both --binary-cache-url-blacklist - and --upload-to-binary-cache-blacklist triggers options. - """ - self.slapos_config_descriptor.write(""" -[slapos] -software_root = /opt/slapgrid -instance_root = /srv/slapgrid -master_url = https://slap.vifib.com/ -computer_id = your computer id -buildout = /path/to/buildout/binary -[networkcache] -binary-cache-url-blacklist = - http://1 - http://2/bla -""") - self.slapos_config_descriptor.seek(0) - slapgrid_object = parseArgumentTupleAndReturnSlapgridObject( - *self.default_arg_tuple)[0] - self.assertEqual( - slapgrid_object.upload_to_binary_cache_url_blacklist, - [] - ) - self.assertEqual( - slapgrid_object.download_from_binary_cache_url_blacklist, - ['http://1', 'http://2/bla'] - ) - - class TestSlapgridCPWithMasterPromise(MasterMixin, unittest.TestCase): def test_one_failing_promise(self): computer = ComputerForTest(self.software_root, self.instance_root)