private Map<String, String> resolveDownloadDockerMachine(Map<String, String> config) {
    if (config.containsKey(CubeDockerConfiguration.DOCKER_MACHINE_NAME)) {
      final String cliPathExec = config.get(CubeDockerConfiguration.DOCKER_MACHINE_PATH);
      if (!dockerMachineInstance.get().isDockerMachineInstalled(cliPathExec)) {
        String machineVersion = GitHubUtil.getDockerMachineLatestVersion();
        String machineCustomPath = config.get(CubeDockerConfiguration.DOCKER_MACHINE_CUSTOM_PATH);
        String machineArquillianPath =
            CubeDockerConfiguration.resolveMachinePath(machineCustomPath, machineVersion);
        File dockerMachineFile = new File(machineArquillianPath);

        boolean dockerMachineFileExist = dockerMachineFile != null && dockerMachineFile.exists();

        String machineName = config.get(CubeDockerConfiguration.DOCKER_MACHINE_NAME);
        String machineUrl = CubeDockerConfiguration.resolveUrl(machineVersion);

        if (!dockerMachineFileExist) {
          Spacelift.task(DownloadTool.class)
              .from(machineUrl)
              .to(dockerMachineFile)
              .execute()
              .await();
          config.put(
              CubeDockerConfiguration.DOCKER_MACHINE_PATH, dockerMachineFile.getAbsolutePath());

          dockerMachineInstance.get().grantPermissionToDockerMachine(machineArquillianPath);

          String machineDriver = config.get(CubeDockerConfiguration.DOCKER_MACHINE_DRIVER);
          dockerMachineInstance
              .get()
              .createMachine(machineArquillianPath, machineDriver, machineName);
        } else {
          config.put(
              CubeDockerConfiguration.DOCKER_MACHINE_PATH, dockerMachineFile.getAbsolutePath());
        }
      }
    }
    return config;
  }