Beispiel #1
0
        public async Task <ActionResult <string> > Post(BCContainer container)
        {
            var images = await GetClient().Images.ListImagesAsync(new ImagesListParameters()
            {
                All = true,
            });

            var tag  = ":latest";
            var repo = "";
            var reg  = "";

            if (container.Registry != null && container.Registry != "")
            {
                reg = $"{container.Registry}/";
            }
            if (container.Repository != null && container.Repository != "")
            {
                repo = $"{container.Repository}/";
            }
            if (container.Tag != null && container.Tag != "")
            {
                tag = $":{container.Tag}";
            }
            var fqin  = $"{reg}{repo}{container.Image}{tag}";
            var image = images.Where(i => i.RepoTags != null && i.RepoTags.Count > 0 && i.RepoTags[0] == fqin).FirstOrDefault();

            if (image == null)
            {
                return(Ok("image not available locally"));
            }

            var sysInfo = await GetClient().System.GetSystemInfoAsync();

            try
            {
                var Env = new List <string>();
                Env = Env.Union(container.Env).ToList <string>();

                var hostConf = new HostConfig();
                if (sysInfo.Isolation == "hyperv")
                {
                    hostConf.Memory = 4294967296; // 4G
                }

                if (container.Navcontainerhelper)
                {
                    var basePath     = "c:\\programdata\\navcontainerhelper";
                    var specificPart = "\\extensions\\" + container.Name + "\\my";
                    var myPath       = basePath + specificPart;

                    if (Directory.Exists(basePath))  // this should be bound as volume
                    {
                        if (!Directory.Exists(myPath))
                        {
                            Directory.CreateDirectory(myPath);
                        }
                    }

                    hostConf.Binds = new List <string>();
                    hostConf.Binds.Add($"{myPath}:c:\\run\\my");
                    hostConf.Binds.Add($"{basePath}:{basePath}");
                }

                if (!string.IsNullOrEmpty(container.SecurityOpt))
                {
                    IList <string> securityOpts = new List <string>();
                    securityOpts.Add(container.SecurityOpt);
                    hostConf.SecurityOpt = securityOpts;
                }

                if (!string.IsNullOrEmpty(container.License))
                {
                    if (hostConf.Binds == null)
                    {
                        hostConf.Binds = new List <string>();
                    }
                    hostConf.Binds.Add(@"c:\programdata\bcinab\licenses:c:\licenses");
                    Env.Add(@"licensefile=c:\licenses\" + container.License);
                }

                var Labels = new Dictionary <string, string>();
                Labels.Add("bcinab.guidef", $"{container.GuiDef}");

                var createResp = await GetClient().Containers.CreateContainerAsync(
                    new CreateContainerParameters()
                {
                    Image      = fqin,
                    Env        = Env,
                    HostConfig = hostConf,
                    Name       = container.Name,
                    Hostname   = container.Name,
                    Labels     = Labels
                }
                    );

                var started = await GetClient().Containers.StartContainerAsync(createResp.ID,
                                                                               new ContainerStartParameters()
                {
                }
                                                                               );

                if (started)
                {
                    if (container.TestToolkit)
                    {
                    }
                    return(Ok(createResp.ID));
                }
                else
                {
                    return(BadRequest($"could not start {createResp.ID}"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"An error occured: {ex.Message}"));
            }
        }
Beispiel #2
0
        public async Task <ActionResult <string> > Post(BCContainer container)
        {
            var images = await GetClient().Images.ListImagesAsync(new ImagesListParameters()
            {
                All = true,
            });

            var tag  = "";
            var repo = "";
            var reg  = "";

            if (container.Registry != null && container.Registry != "")
            {
                reg = $"{container.Registry}/";
            }
            if (container.Repository != null && container.Repository != "")
            {
                repo = $"{container.Repository}/";
            }
            if (container.Tag != "")
            {
                tag = $":{container.Tag}";
            }
            var fqin  = $"{reg}{repo}{container.Image}{tag}";
            var image = images.Where(i => i.RepoTags != null && i.RepoTags.Count > 0 && i.RepoTags[0] == fqin).FirstOrDefault();

            if (image == null)
            {
                return(Ok("image not available locally"));
            }

            var sysInfo = await GetClient().System.GetSystemInfoAsync();

            try
            {
                var Env = new List <string>();
                if (container.AcceptEula)
                {
                    Env.Add("accept_eula=Y");
                }
                if (!container.UseSsl)
                {
                    Env.Add("usessl=N");
                }
                if (!container.BreakOnError)
                {
                    Env.Add("BreakOnError=N");
                }
                var hostConf = new HostConfig();
                if (sysInfo.Isolation == "hyperv")
                {
                    hostConf.Memory = 4294967296; // 4G
                }
                var createResp = await GetClient().Containers.CreateContainerAsync(
                    new CreateContainerParameters()
                {
                    Image      = fqin,
                    Env        = Env,
                    HostConfig = hostConf,
                    Name       = container.Name,
                    Hostname   = container.Name
                }
                    );

                var started = await GetClient().Containers.StartContainerAsync(createResp.ID,
                                                                               new ContainerStartParameters()
                {
                }
                                                                               );

                if (started)
                {
                    return(Ok(createResp.ID));
                }
                else
                {
                    return(BadRequest($"could not start {createResp.ID}"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest($"An error occured: {ex.Message}"));
            }
        }