def _pip3_install(module): """Install python module using pip3. Args: module: module to install Returns: None """ # Find pip3 executable cli_string = 'which pip3' response = general.run_script(cli_string, die=False) # Not OK if not fount if bool(response['returncode']) is True: log_message = ('python pip3 not installed.') log.log2die_safe(1041, log_message) else: log_message = 'Python pip3 executable found.' setup.print_ok(log_message) # Determine version of pip3 cli_string = 'pip3 --version' response = os.popen(cli_string).read() version = response.split()[1] # Attempt to install module if version < '9.0.0': cli_string = 'pip3 list | grep {}'.format(module) else: cli_string = 'pip3 list --format columns | grep {}'.format(module) response = bool(os.popen(cli_string).read()) if response is False: # YAML is not installed try to install it cli_string = 'pip3 install --user {}'.format(module) response_install = general.run_script(cli_string, die=False) # Fail if module cannot be installed if bool(response_install['returncode']) is True: log_message = ('python pip3 cannot install "{}".'.format(module)) log.log2die_safe(1100, log_message) else: log_message = ( 'Python module "{}" is installed.'.format(module)) setup.print_ok(log_message) else: log_message = 'Python module "{}" is installed.'.format(module) setup.print_ok(log_message)
def _install_pip3_packages(self): """Install PIP3 packages. Args: None Returns: None """ # Initialize key variables username = self.username # Don't attempt to install packages if running in the Travis CI # environment if 'TRAVIS' in os.environ and 'CI' in os.environ: return # Determine whether PIP3 exists print_ok( 'Installing required pip3 packages from requirements.txt file.') pip3 = general.search_file('pip3') if pip3 is None: log_message = ('Cannot find python "pip3". Please install.') log.log2die_safe(1052, log_message) # Install required PIP packages requirements_file = ( '%s/requirements.txt') % (general.root_directory()) if username == 'root': script_name = ( 'pip3 install --upgrade --requirement %s' '') % (requirements_file) else: script_name = ( 'pip3 install --user --upgrade --requirement %s' '') % (requirements_file) general.run_script(script_name)
def _start(self, daemon, restart=False): """Start or restart daemon. Args: daemon: Name of daemon restart: Restart if True Returns: None """ # Initialize key variables username = getpass.getuser() running = False if restart is True: attempt = 'restart' else: attempt = 'start' # Get status root_directory = general.root_directory() if restart is False: if username == 'root': script_name = ( '/bin/systemctl start {}.service'.format(daemon)) else: script_name = ( '{}/bin/systemd/{} --start'.format(root_directory, daemon)) else: if username == 'root': script_name = ( '/bin/systemctl restart {}.service'.format(daemon)) else: script_name = ( '{}/bin/systemd/{} --restart --force' ''.format(root_directory, daemon)) # Attempt to restart / start response = general.run_script(script_name, die=False) if bool(response['returncode']) is True: log_message = ('Could not {} daemon {}.'.format(attempt, daemon)) log.log2see_safe(1127, log_message) # Return after waiting for daemons to startup properly running = self._running(daemon) return running
def _systemd(self): """Setup systemd configuration. Args: None Returns: None """ # Initialize key variables username = self.switchmap_user groupname = grp.getgrgid(self.gid).gr_name system_directory = '/etc/systemd/system' system_command = '/bin/systemctl daemon-reload' poller_service = 'switchmap-ng-poller.service' api_service = 'switchmap-ng-api.service' # Do nothing if systemd isn't installed if os.path.isdir(system_directory) is False: return # Copy system files to systemd directory and activate poller_startup_script = ( '{}/examples/linux/systemd/{}' ''.format(self.root_directory, poller_service)) api_startup_script = ( '{}/examples/linux/systemd/{}' ''.format(self.root_directory, api_service)) # Read in file # 1) Convert home directory to that of user # 2) Convert username in file # 3) Convert group in file filenames = [poller_startup_script, api_startup_script] for filename in filenames: # Read next file with open(filename, 'r') as f_handle: contents = f_handle.read() # Substitute home directory contents = re.sub( r'/home/switchmap-ng', self.root_directory, contents) # Substitute username contents = re.sub( 'User=switchmap-ng', 'User={}'.format(username), contents) # Substitute group contents = re.sub( 'Group=switchmap-ng', 'Group={}'.format(groupname), contents) # Write contents filepath = ( '{}/{}'.format(system_directory, os.path.basename(filename))) if os.path.isdir(system_directory): with open(filepath, 'w') as f_handle: f_handle.write(contents) # Make systemd recognize new files if os.path.isdir(system_directory): general.run_script(system_command) # Enable serices services = [poller_service, api_service] for service in services: enable_command = 'systemctl enable {}'.format(service) general.run_script(enable_command)