def action_psql_command(_, params: dict): docker = params.get('docker', False) run_as = params.get('runAs') if 'command' in params: del params['command'] if docker: params['image'] = params.get('image', 'postgres:alpine') return action_docker(None, params) elif run_as is not None: raise_if_type_is_incorrect(run_as, str, 'runAs must be a string') params['args'] = ['sudo', '-u', run_as] + params['args'] return action_command(None, params) else: return action_command(None, params)
def _get_physical_path_to_docker_volume(params: dict): logger = logging.getLogger(__name__).getChild( '_get_physical_path_to_docker_volume') if isinstance(params, str): params = {'volume': params} volume = params['volume'] raise_if_type_is_incorrect(volume, str, 'volume must be a string') proc = action_command( None, { 'command': f'docker volume inspect "{volume}" --format "{{{{.Mountpoint}}}}"' }) path, error = proc.communicate(None) if proc.returncode != 0: error_dec = error.decode("utf-8")[:-1] logger.error( f'Failed getting volume path with exit code {proc.returncode} and error: {error_dec}' ) raise RuntimeError(f'Get docker volume path failed: {error_dec}') path = path.decode('utf-8')[:-1] logger.debug(f'Docker volume {volume} has phisical path of {path}') return path
def action_encrypt_opengpg(inp: InputDataStream, params) -> subprocess.Popen: passphrase = params.get('passphrase') recipients: list = params.get('recipients', []) algorithm = params.get('cipherAlgorithm', params.get('cypherAlgorithm')) compress = params.get('compressAlgorithm', None) raise_if_type_is_incorrect(passphrase, str, 'passphrase must be a string') raise_if_type_is_incorrect(recipients, list, 'recipients must be a list of strings') raise_if_type_is_incorrect(algorithm, str, 'cipherAlgorithm must be a string') raise_if_type_is_incorrect(compress, str, 'compressAlgorithm must be a string') args = ['gpg', '--output', '-', '--batch'] if passphrase: args.extend(['--passphrase', passphrase]) for recipient in recipients: raise_if_type_is_incorrect(recipient, str, f'recipient {recipient} is not a string') args.extend(['-r', recipient]) if len(recipients) == 0: args.append('--symmetric') if algorithm is not None: args.extend(['--cipher-algo', algorithm]) if isinstance(compress, str): args.extend(['--compress-algo', compress]) else: args.extend(['--compress-algo', 'uncompressed']) args.append('-') return action_command(inp, {'args': args})
def action_decompress_zstd(inp: InputDataStream, params) -> subprocess.Popen: cpus = params.get('cpus') args = ['zstd', '-d'] if cpus is not None: args.append(f'-T{cpus}') return action_command(inp, {'args': args})
def action_compress_brotli(inp: InputDataStream, params) -> subprocess.Popen: compression_level = params.get('compressionLevel') args = ['brotli', '-c'] if 'compressionLevel' in params: args.append(f'-{compression_level}') return action_command(inp, {'args': args})
def action_compress_bzip2(inp: InputDataStream, params) -> subprocess.Popen: compression_level = params.get('compressionLevel') args = ['bzip2', '-z', '-c'] if compression_level is not None: args.append(f'-{compression_level}') return action_command(inp, {'args': args})
def action_decompress_xz(inp: InputDataStream, params) -> subprocess.Popen: cpus = params.get('cpus') args = ['xz', '-d'] if cpus is not None: args.extend(['-T', str(cpus)]) return action_command(inp, {'args': args})
def action_influxd_command(_, params: dict): docker = params.get('docker', False) if 'command' in params: del params['command'] if docker: params['image'] = params.get('image', 'influxdb:alpine') return action_docker(None, params) else: return action_command(None, params)
def action_mysql_command(_, params: dict): docker = params.get('docker', False) if 'command' in params: del params['command'] if docker: params['image'] = params.get('image', 'mariadb:alpine') params['user'] = None return action_docker(None, params) else: return action_command(None, params)
def action_compress_xz(inp: InputDataStream, params) -> subprocess.Popen: cpus = params.get('cpus') compression_level = params.get('compressionLevel') extra_compression = params.get('extraCompression', False) args = ['xz', '-z'] if cpus is not None: args.extend(['-T', str(cpus)]) if compression_level is not None: if extra_compression: args.append(f'-{compression_level}e') else: args.append(f'-{compression_level}') return action_command(inp, {'args': args})
def action_decrypt_opengpg(inp: InputDataStream, params) -> subprocess.Popen: passphrase = params.get('passphrase') recipients: list = params.get('recipients', []) raise_if_type_is_incorrect(passphrase, str, 'passphrase must be a string') raise_if_type_is_incorrect(recipients, list, 'recipients must be a list of strings') args = ['gpg', '--output', '-', '--batch', '-d'] if passphrase: args.extend(['--passphrase', passphrase]) for recipient in recipients: raise_if_type_is_incorrect(recipient, str, f'recipient {recipient} is not a string') args.extend(['-r', recipient]) args.append('-') return action_command(inp, {'args': args})
def action_write_file_to_ssh(inp: InputDataStream, params): args, env, remote = _parse_ssh_args(params) args.append('/dev/stdin') args.append(remote) return action_command(inp, {'args': args, 'env': env})
def action_read_file_from_ssh(_, params): args, env, remote = _parse_ssh_args(params) args.append(remote) args.append('/dev/stdout') return action_command(None, {'args': args, 'env': env})
def action_decompress_brotli(inp: InputDataStream, _) -> subprocess.Popen: return action_command(inp, {'args': ['brotli', '-d', '-c']})
def action_decompress_gz(inp: InputDataStream, _) -> subprocess.Popen: return action_command(inp, {'args': ['gzip', '-d']})