executeConsoleCMD method

Future<bool> executeConsoleCMD(
  1. ConsoleCMD cmd
)

Implementation

Future<bool> executeConsoleCMD(ConsoleCMD cmd) async {
  switch (cmd.cmd) {
    case 'help':
      {
        await showHelp();
        return true;
      }
    case 'initialize':
      {
        return dockerCommander.initialize();
      }
    case 'checkdaemon':
      {
        await dockerCommander.checkDaemon();
        return true;
      }
    case 'close':
      {
        await dockerCommander.close();
        return true;
      }
    case 'ps':
      {
        var exec = await dockerCommander.command('ps', ['-a']);
        return await _processReturn(cmd, exec);
      }
    case 'createnetwork':
      {
        var parameters = await _requireParameters({
          'networkName': cmd.get(0, 'networkName', 'network', 'name'),
        }, {
          'networkName',
        }, cmd.askAllProperties);

        var networkName = await dockerCommander.createNetwork(
          parameters['networkName']!,
        );

        if (networkName != null) {
          await _printToConsole('CREATED NETWORK> $networkName');
          return true;
        }

        return false;
      }
    case 'createcontainer':
      {
        var parameters = await _requireParameters({
          'containerName': cmd.get(0, 'containerName', 'container'),
          'imageName': cmd.get(1, 'imageName', 'image'),
          'version': cmd.get(2, 'version', 'ver'),
          'ports': cmd.get(3, 'ports', 'port'),
          'volumes': cmd.get(4, 'volumes'),
          'hostname': cmd.get(5, 'hostname', 'host'),
          'network': cmd.get(6, 'network'),
          'environment': cmd.get(7, 'environment', 'env'),
          'cleanContainer': cmd.getProperty('cleanContainer'),
          'health-cmd': cmd.getProperty('health-cmd'),
          'health-interval': cmd.getProperty('health-interval'),
          'health-retries': cmd.getProperty('health-retries'),
          'health-start-period': cmd.getProperty('health-start-period'),
          'health-timeout': cmd.getProperty('health-timeout'),
          'restart': cmd.getProperty('restart'),
        }, {
          'containerName',
          'imageName',
        }, cmd.askAllProperties);

        var paramPorts = await _parsePortsProperties(parameters);
        var paramVolumes = await _parseVolumesProperties(parameters);
        var paramEnvironment = await _parseEnvironmentProperties(parameters);

        var containerInfos = await dockerCommander.createContainer(
          parameters['containerName']!,
          parameters['imageName']!,
          version: parameters['version'],
          ports: paramPorts,
          volumes: paramVolumes,
          hostname: parameters['hostname'],
          network: parameters['network'],
          environment: paramEnvironment,
          cleanContainer: parseBool(parameters['cleanContainer']) ?? false,
          healthCmd: parameters['health-cmd'],
          healthInterval: _parseDurationInMs(parameters['health-interval']),
          healthRetries: parseInt(parameters['health-retries']),
          healthStartPeriod:
              _parseDurationInMs(parameters['health-start-period']),
          healthTimeout: _parseDurationInMs(parameters['health-timeout']),
          restart: parameters['restart'],
        );

        if (containerInfos != null) {
          await _printToConsole('CREATED CONTAINER> $containerInfos');
          return true;
        }

        return false;
      }
    case 'createservice':
      {
        var parameters = await _requireParameters({
          'serviceName': cmd.get(0, 'serviceName', 'service'),
          'imageName': cmd.get(1, 'imageName', 'image'),
          'version': cmd.get(2, 'version', 'ver'),
          'replicas': cmd.get(3, 'replicas'),
          'ports': cmd.get(4, 'ports', 'port'),
          'volumes': cmd.get(5, 'volumes'),
          'hostname': cmd.get(6, 'hostname', 'host'),
          'network': cmd.get(7, 'network'),
          'environment': cmd.get(8, 'environment', 'env'),
        }, {
          'containerName',
          'imageName',
        }, cmd.askAllProperties);

        var paramPorts = await _parsePortsProperties(parameters);
        var paramVolumes = await _parseVolumesProperties(parameters);
        var paramEnvironment = await _parseEnvironmentProperties(parameters);

        var service = await dockerCommander.createService(
          parameters['serviceName']!,
          parameters['imageName']!,
          version: parameters['version'],
          replicas: parseInt(parameters['replicas']),
          ports: paramPorts,
          volumes: paramVolumes,
          hostname: parameters['hostname'],
          network: parameters['network'],
          environment: paramEnvironment,
        );

        if (service != null) {
          await _printToConsole('CREATED SERVICE> $service');
          return true;
        }

        return false;
      }
    case 'removecontainer':
      {
        var parameters = await _requireParameters({
          'containerName': cmd.get(0, 'containerOrServiceName',
              'containerName', 'container', 'serviceName', 'service'),
          'force': cmd.getProperty('force'),
        }, {
          'containerName',
        }, cmd.askAllProperties);

        var ok = await dockerCommander.removeContainer(
            parameters['containerName']!,
            force: parseBool(parameters['force']) ?? false);

        await _printToConsole('STARTED CONTAINER: $ok');

        return ok;
      }
    case 'start':
      {
        var parameters = await _requireParameters({
          'containerName': cmd.get(0, 'containerOrServiceName',
              'containerName', 'container', 'serviceName', 'service'),
        }, {
          'containerName',
        }, cmd.askAllProperties);

        var ok = await dockerCommander
            .startContainer(parameters['containerName']!);

        await _printToConsole('STARTED CONTAINER: $ok');

        return ok;
      }
    case 'stop':
      {
        var parameters = await _requireParameters({
          'containerName': cmd.get(0, 'containerOrServiceName',
              'containerName', 'container', 'serviceName', 'service'),
        }, {
          'containerName',
        }, cmd.askAllProperties);

        var ok =
            await dockerCommander.stopContainer(parameters['containerName']!);

        await _printToConsole('STOPPED CONTAINER: $ok');

        return ok;
      }
    case 'log':
    case 'logs':
      {
        cmd.defaultReturnType = ConsoleCMDReturnType.stdout;

        var parameters = await _requireParameters({
          'name': cmd.get(0, 'containerOrServiceName', 'containerName',
              'container', 'serviceName', 'service'),
          'stdout': cmd.getProperty('stdout'),
          'stderr': cmd.getProperty('stderr'),
        }, {
          'name',
        }, cmd.askAllProperties);

        if (parseBool(parameters['stdout'], false)!) {
          cmd.returnType = ConsoleCMDReturnType.stdout;
        } else if (parseBool(parameters['stderr'], false)!) {
          cmd.returnType = ConsoleCMDReturnType.stderr;
        }

        var name = parameters['name'];

        var containersNames = await dockerCommander.psContainerNames();

        await _printToConsole('CONTAINERS: $containersNames');

        DockerProcess? process;
        if (containersNames != null && containersNames.contains(name)) {
          process = await dockerCommander.openContainerLogs(name!);
        } else {
          var servicesNames = await dockerCommander.listServicesNames();
          await _printToConsole('SERVICES: $servicesNames');

          if (servicesNames != null && servicesNames.contains(name)) {
            process = await dockerCommander.openServiceLogs(name!);
          } else {
            return false;
          }
        }

        return await _processReturn(cmd, process);
      }
    case 'execwhich':
      {
        cmd.returnType = ConsoleCMDReturnType.stdout;

        var parameters = await _requireParameters({
          'containerName': cmd.get(0, 'containerName', 'container'),
          'binary': cmd.get(1, 'binaryName', 'binary'),
        }, {
          'containerName',
          'binary',
        }, cmd.askAllProperties);

        var exec = await dockerCommander.execWhich(
            parameters['containerName']!, parameters['binary']!);

        await _printToConsole(exec);

        return true;
      }
    case 'exec':
      {
        cmd.defaultReturnType = ConsoleCMDReturnType.stdout;

        var parameters = await _requireParameters({
          'containerName': cmd.get(0, 'containerName', 'container'),
          'command': cmd.get(1, 'command', 'cmd'),
        }, {
          'containerName',
          'command'
        }, cmd.askAllProperties);

        var exec = await dockerCommander.exec(parameters['containerName']!,
            parameters['command'], cmd.argsSub(2));
        return await _processReturn(cmd, exec);
      }
    case 'docker':
    case 'cmd':
    case 'command':
      {
        cmd.defaultReturnType = ConsoleCMDReturnType.stdout;

        var parameters = await _requireParameters({
          'command': cmd.get(0, 'command', 'cmd'),
        }, {
          'command'
        }, cmd.askAllProperties);

        var exec = await dockerCommander.command(
            parameters['command']!, cmd.argsSub(1));

        return await _processReturn(cmd, exec);
      }
    case 'listformula':
    case 'listformulas':
      {
        var formulasNames = await dockerCommander.listFormulasNames();

        await _printLineToConsole();
        await _printToConsole('FORMULAS:');
        await _printToConsole('');
        await _printToConsole('  ${formulasNames.join(' ')}');
        await _printToConsole('');
        await _printLineToConsole();

        return true;
      }
    case 'getformulaclassname':
      {
        var parameters = await _requireParameters({
          'formulaName': cmd.get(0, 'formulaName', 'formula'),
        }, {
          'formulaName',
        }, cmd.askAllProperties);

        var formulaName = parameters['formulaName']!;

        var className =
            await dockerCommander.getFormulaClassName(formulaName);

        await _printToConsole("'$formulaName' CLASS NAME: $className");

        return true;
      }
    case 'listformulafunction':
    case 'listformulafunctions':
      {
        var parameters = await _requireParameters({
          'formulaName': cmd.get(0, 'formulaName', 'formula'),
        }, {
          'formulaName',
        }, cmd.askAllProperties);

        var formulaName = parameters['formulaName']!;

        var functions =
            await dockerCommander.listFormulasFunctions(formulaName);

        await _printLineToConsole();
        await _printToConsole("'$formulaName' FUNCTIONS:");
        await _printToConsole('');

        for (var f in functions) {
          await _printToConsole('  - $f');
        }

        await _printToConsole('');
        await _printLineToConsole();

        return true;
      }
    case 'showformula':
      {
        var parameters = await _requireParameters({
          'formulaName': cmd.get(0, 'formulaName', 'formula'),
        }, {
          'formulaName',
        }, cmd.askAllProperties);

        var formulaName = parameters['formulaName']!;

        var fieldsFuture = dockerCommander.getFormulaFields(formulaName);

        var functionsFuture =
            dockerCommander.listFormulasFunctions(formulaName);

        var classNameFuture =
            dockerCommander.getFormulaClassName(formulaName);

        var className = await classNameFuture;
        var fields = await fieldsFuture;
        var functions = await functionsFuture;

        await _printLineToConsole();
        await _printToConsole('FORMULA: $formulaName');
        await _printToConsole('');
        await _printToConsole('CLASS NAME: $className');
        await _printToConsole('');
        await _printToConsole('FIELDS:');
        await _printToConsole('');

        for (var entry in fields.entries) {
          await _printToConsole('  - ${entry.key}: ${entry.value}');
        }

        await _printToConsole('');
        await _printToConsole('FUNCTIONS:');
        await _printToConsole('');

        for (var f in functions) {
          await _printToConsole('  - $f');
        }

        await _printToConsole('');
        await _printLineToConsole();

        return true;
      }
    case 'formulaexec':
      {
        var parameters = await _requireParameters({
          'formulaName': cmd.get(0, 'formulaName', 'formula'),
          'function': cmd.get(1, 'function'),
        }, {
          'formulaName',
          'function',
        }, cmd.askAllProperties);

        var formulaName = parameters['formulaName']!;
        var fName = parameters['function']!;
        var arguments = cmd.argsSub(2);

        var properties = cmd.properties;

        var result = await dockerCommander.formulaExec(
            formulaName, fName, arguments, properties);

        await _printLineToConsole();
        await _printToConsole(
            'FORMULA EXEC: $formulaName.$fName( ${arguments.join(' , ')} )');
        await _printToConsole('');
        await _printToConsole('RESULT:');
        await _printToConsole('$result');
        await _printToConsole('');
        await _printLineToConsole();

        return true;
      }
    default:
      return false;
  }
}