Example #1
0
        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));
        }