예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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})
예제 #4
0
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})
예제 #5
0
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})
예제 #6
0
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})
예제 #7
0
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})
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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})
예제 #11
0
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})
예제 #12
0
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})
예제 #13
0
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})
예제 #14
0
def action_decompress_brotli(inp: InputDataStream, _) -> subprocess.Popen:
    return action_command(inp, {'args': ['brotli', '-d', '-c']})
예제 #15
0
def action_decompress_gz(inp: InputDataStream, _) -> subprocess.Popen:
    return action_command(inp, {'args': ['gzip', '-d']})