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}")); } }
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}")); } }