docs: public static MesosTaskManagerParameters create(Configuration flinkConfig) {
  
  		List<ConstraintEvaluator> constraints = parseConstraints(flinkConfig.getString(MESOS_CONSTRAINTS_HARD_HOSTATTR));
  		// parse the common parameters
  		ContaineredTaskManagerParameters containeredParameters = ContaineredTaskManagerParameters.create(
  			flinkConfig,
  			flinkConfig.getInteger(MESOS_RM_TASKS_MEMORY_MB),
  			flinkConfig.getInteger(MESOS_RM_TASKS_SLOTS));
  
  		double cpus = flinkConfig.getDouble(MESOS_RM_TASKS_CPUS);
  		if (cpus <= 0.0) {
  			cpus = Math.max(containeredParameters.numSlots(), 1.0);
  		}
  
  		int gpus = flinkConfig.getInteger(MESOS_RM_TASKS_GPUS);
  
  		if (gpus < 0) {
  			throw new IllegalConfigurationException(MESOS_RM_TASKS_GPUS.key() +
  				" cannot be negative");
  		}
  
  		int disk = flinkConfig.getInteger(MESOS_RM_TASKS_DISK_MB);
  
  		// parse the containerization parameters
  		String imageName = flinkConfig.getString(MESOS_RM_CONTAINER_IMAGE_NAME);
  
  		ContainerType containerType;
  		String containerTypeString = flinkConfig.getString(MESOS_RM_CONTAINER_TYPE);
  		switch (containerTypeString) {
  			case MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_MESOS:
  				containerType = ContainerType.MESOS;
  				break;
  			case MESOS_RESOURCEMANAGER_TASKS_CONTAINER_TYPE_DOCKER:
  				containerType = ContainerType.DOCKER;
  				if (imageName == null || imageName.length() == 0) {
  					throw new IllegalConfigurationException(MESOS_RM_CONTAINER_IMAGE_NAME.key() +
  						" must be specified for docker container type");
  				}
  				break;
  			default:
  				throw new IllegalConfigurationException("invalid container type: " + containerTypeString);
  		}
  
  		Option<String> containerVolOpt = Option.<String>apply(flinkConfig.getString(MESOS_RM_CONTAINER_VOLUMES));
  
  		Option<String> dockerParamsOpt = Option.<String>apply(flinkConfig.getString(MESOS_RM_CONTAINER_DOCKER_PARAMETERS));
  
  		Option<String> uriParamsOpt = Option.<String>apply(flinkConfig.getString(MESOS_TM_URIS));
  
  		boolean dockerForcePullImage = flinkConfig.getBoolean(MESOS_RM_CONTAINER_DOCKER_FORCE_PULL_IMAGE);
  
  		List<Protos.Volume> containerVolumes = buildVolumes(containerVolOpt);
  
  		List<Protos.Parameter> dockerParameters = buildDockerParameters(dockerParamsOpt);
  
  		List<String> uris = buildUris(uriParamsOpt);
  
  		//obtain Task Manager Host Name from the configuration
  		Option<String> taskManagerHostname = Option.apply(flinkConfig.getString(MESOS_TM_HOSTNAME));
  
  		//obtain command-line from the configuration
  		String tmCommand = flinkConfig.getString(MESOS_TM_CMD);
  		Option<String> tmBootstrapCommand = Option.apply(flinkConfig.getString(MESOS_TM_BOOTSTRAP_CMD));
  
  		return new MesosTaskManagerParameters(
  			cpus,
  			gpus,
  			disk,
  			containerType,
  			Option.apply(imageName),
  			containeredParameters,
  			containerVolumes,
  			dockerParameters,
  			dockerForcePullImage,
  			constraints,
  			tmCommand,
  			tmBootstrapCommand,
  			taskManagerHostname,
  			uris);
  	}