def checkEnvironmentAndCreateStructure(self): """Checks for software_root and instance_root existence, then creates needed files and directories. """ # Checks for software_root and instance_root existence if not os.path.isdir(self.software_root): raise OSError('%s does not exist.' % self.software_root) if not os.path.isdir(self.instance_root): raise OSError('%s does not exist.' % self.instance_root) # Creates everything needed # Creates instance_root structure createPrivateDirectory(os.path.join(self.instance_root, 'var')) createPrivateDirectory(os.path.join(self.instance_root, 'var', 'log')) createPrivateDirectory(os.path.join(self.instance_root, 'var', 'run')) createPrivateDirectory(os.path.join(self.instance_root, 'etc')) createPrivateDirectory(self.supervisord_configuration_directory) # Creates supervisord configuration updateFile(self.supervisord_configuration_path, pkg_resources.resource_stream(__name__, 'templates/supervisord.conf.in').read() % { 'supervisord_configuration_directory': self.supervisord_configuration_directory, 'supervisord_socket': os.path.abspath(self.supervisord_socket), 'supervisord_loglevel': 'info', 'supervisord_logfile': os.path.abspath(os.path.join(self.instance_root, 'var', 'log', 'supervisord.log')), 'supervisord_logfile_maxbytes': '50MB', 'supervisord_nodaemon': 'false', 'supervisord_pidfile': os.path.abspath(os.path.join(self.instance_root, 'var', 'run', 'supervisord.pid')), 'supervisord_logfile_backups': '10', 'watchdog_command': self.getWatchdogLine(), } )
def createSupervisordConfiguration(instance_root, watchdog_command=''): """ Create supervisord related files and directories. """ if not os.path.isdir(instance_root): raise OSError('%s does not exist.' % instance_root) supervisord_configuration_file_path = _getSupervisordConfigurationFilePath(instance_root) supervisord_configuration_directory = _getSupervisordConfigurationDirectory(instance_root) supervisord_socket = _getSupervisordSocketPath(instance_root) # Create directory accessible for the instances. var_directory = os.path.join(instance_root, 'var') if not os.path.isdir(var_directory): os.mkdir(var_directory) os.chmod(var_directory, stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH | \ stat.S_IRGRP | stat.S_IXGRP ) etc_directory = os.path.join(instance_root, 'etc') if not os.path.isdir(etc_directory): os.mkdir(etc_directory) # Creates instance_root structure createPrivateDirectory(os.path.join(instance_root, 'var', 'log')) createPrivateDirectory(os.path.join(instance_root, 'var', 'run')) createPrivateDirectory(os.path.join(instance_root, 'etc')) createPrivateDirectory(supervisord_configuration_directory) # Creates supervisord configuration updateFile(supervisord_configuration_file_path, bytes2str(pkg_resources.resource_string(__name__, 'templates/supervisord.conf.in')) % { 'supervisord_configuration_directory': supervisord_configuration_directory, 'supervisord_socket': os.path.abspath(supervisord_socket), 'supervisord_loglevel': 'info', 'supervisord_logfile': os.path.abspath( os.path.join(instance_root, 'var', 'log', 'supervisord.log')), 'supervisord_logfile_maxbytes': '50MB', 'supervisord_nodaemon': 'false', 'supervisord_pidfile': os.path.abspath( os.path.join(instance_root, 'var', 'run', 'supervisord.pid')), 'supervisord_logfile_backups': '10', # Do not set minfds. select() does not support file descriptors # greater than 1023. # 'supervisord_minfds': '4096', 'watchdog_command': watchdog_command, } )
def generateSupervisorConfigurationFile(self): """ Generates supervisord configuration file from template. check if CP/etc/run exists and it is a directory iterate over each file in CP/etc/run iterate over each file in CP/etc/service adding WatchdogID to their name if at least one is not 0o750 raise -- partition has something funny """ runner_list = [] service_list = [] if os.path.exists(self.run_path): if os.path.isdir(self.run_path): runner_list = os.listdir(self.run_path) if os.path.exists(self.service_path): if os.path.isdir(self.service_path): service_list = os.listdir(self.service_path) if len(runner_list) == 0 and len(service_list) == 0: self.logger.warning('No runners nor services found for partition %r' % self.partition_id) if os.path.exists(self.supervisord_partition_configuration_path): os.unlink(self.supervisord_partition_configuration_path) else: partition_id = self.computer_partition.getId() group_partition_template = pkg_resources.resource_stream(__name__, 'templates/group_partition_supervisord.conf.in').read() self.partition_supervisor_configuration = group_partition_template % { 'instance_id': partition_id, 'program_list': ','.join(['_'.join([partition_id, runner]) for runner in runner_list + service_list]) } # Same method to add to service and run self.addServiceToGroup(partition_id, runner_list, self.run_path) self.addServiceToGroup(partition_id, service_list, self.service_path, extension=WATCHDOG_MARK) updateFile(self.supervisord_partition_configuration_path, self.partition_supervisor_configuration) self.updateSupervisor()
def _addProxyToSupervisor(conf): """ Create a supervisord configuration file containing informations to run slapproxy as daemon """ program_partition_template = """\ [program:slapproxy] directory=%(slapos_buildout_directory)s command=%(program_command)s process_name=slapproxy autostart=true autorestart=true startsecs=0 startretries=0 exitcodes=0 stopsignal=TERM stopwaitsecs=60 user=0 group=0 serverurl=AUTO redirect_stderr=true stdout_logfile=%(log_file)s stdout_logfile_maxbytes=100KB stdout_logfile_backups=1 stderr_logfile=%(log_file)s stderr_logfile_maxbytes=100KB stderr_logfile_backups=1 """ % {'log_file': '%s/log/slapos-proxy.log' % conf.slapos_buildout_directory, 'slapos_buildout_directory': conf.slapos_buildout_directory, 'program_command': '%s/bin/slapos proxy start --cfg %s' % \ (conf.slapos_buildout_directory, conf.proxy_configuration_file)} supervisord_conf_folder_path = os.path.join(conf.instance_root, 'etc', 'supervisord.conf.d') _createConfigurationDirectory(supervisord_conf_folder_path) updateFile( os.path.join(supervisord_conf_folder_path, 'slapproxy.conf'), program_partition_template)