public static async Task <ICommand> BuildAsync( IDockerClient client, DockerModule module, IModuleIdentity identity, DockerLoggingConfig defaultDockerLoggerConfig, IConfigSource configSource, bool buildForEdgeHub ) { // Validate parameters Preconditions.CheckNotNull(client, nameof(client)); Preconditions.CheckNotNull(module, nameof(module)); Preconditions.CheckNotNull(defaultDockerLoggerConfig, nameof(defaultDockerLoggerConfig)); Preconditions.CheckNotNull(configSource, nameof(configSource)); CreateContainerParameters createContainerParameters = module.Config.CreateOptions ?? new CreateContainerParameters(); // serialize user provided create options to add as docker label, before adding other values string createOptionsString = JsonConvert.SerializeObject(createContainerParameters); // Force update parameters with indexing entries createContainerParameters.Name = module.Name; createContainerParameters.Image = module.Config.Image; DeploymentConfigInfo deploymentConfigInfo = await configSource.GetDeploymentConfigInfoAsync(); DeploymentConfig deploymentConfig = deploymentConfigInfo.DeploymentConfig; Option <DockerRuntimeInfo> dockerRuntimeInfo = deploymentConfig != DeploymentConfig.Empty && deploymentConfig.Runtime is DockerRuntimeInfo ? Option.Some((DockerRuntimeInfo)deploymentConfig.Runtime) : Option.None <DockerRuntimeInfo>(); // Inject global parameters InjectCerts(createContainerParameters, configSource, buildForEdgeHub); InjectConfig(createContainerParameters, identity, buildForEdgeHub, configSource); InjectPortBindings(createContainerParameters, buildForEdgeHub); InjectLoggerConfig(createContainerParameters, defaultDockerLoggerConfig, dockerRuntimeInfo.Map(r => r.Config.LoggingOptions)); InjectModuleEnvVars(createContainerParameters, module.Env); // Inject required Edge parameters InjectLabels(createContainerParameters, module, createOptionsString); InjectNetworkAlias(createContainerParameters, configSource, buildForEdgeHub); return(new CreateCommand(client, createContainerParameters)); }