public CreateResponse Create(ContainerSpecApiModel spec)
        {
            if (spec.Env == null)
            {
                spec.Env = new List <string>();
            }

            var containerSpec = new ContainerSpec
            {
                Handle      = spec.Handle,
                Properties  = spec.Properties,
                Environment = ContainerService.EnvsFromList(spec.Env)
            };

            try
            {
                var container = containerService.CreateContainer(containerSpec);
                container.SetActiveProcessLimit(CONTAINER_ACTIVE_PROCESS_LIMIT);
                container.SetPriorityClass(ProcessPriorityClass.BelowNormal);
                if (spec.Limits.MemoryLimits.LimitInBytes != null)
                {
                    container.LimitMemory(spec.Limits.MemoryLimits.LimitInBytes.Value);
                }
                if (spec.Limits.CpuLimits.Weight != null)
                {
                    container.LimitCpu(spec.Limits.CpuLimits.Weight.Value);
                }
                if (spec.Limits.DiskLimits.ByteHard != null)
                {
                    container.LimitDisk(spec.Limits.DiskLimits.ByteHard.Value);
                }

                return(new CreateResponse
                {
                    Handle = container.Handle
                });
            }
            catch (PrincipalExistsException)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Conflict,
                                                                       string.Format("handle already exists: {0}", spec.Handle)));
            }
            catch (Exception ex)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public CreateResponse Create(ContainerSpecApiModel spec)
        {
            if (spec.Env == null)
            {
                spec.Env = new List <string>();
            }

            var containerSpec = new ContainerSpec
            {
                Handle      = spec.Handle,
                Properties  = spec.Properties,
                Environment = ContainerService.EnvsFromList(spec.Env),
                BindMounts  = spec.BindMounts.Select(b => b.ToIronFrame()).ToArray()
            };

            try
            {
                var container = containerService.CreateContainer(containerSpec);
                container.SetActiveProcessLimit(CONTAINER_ACTIVE_PROCESS_LIMIT);
                container.SetPriorityClass(ProcessPriorityClass.BelowNormal);
                container.LimitCpu(CONTAINER_DEFAULT_CPU_WEIGHT);
                if (spec.Limits.MemoryLimits.LimitInBytes != null)
                {
                    container.LimitMemory(spec.Limits.MemoryLimits.LimitInBytes.Value);
                }
                if (spec.Limits.DiskLimits.ByteHard != null)
                {
                    container.LimitDisk(spec.Limits.DiskLimits.ByteHard.Value);
                }
                if (spec.GraceTime.HasValue)
                {
                    container.SetProperty("GraceTime", spec.GraceTime.Value.ToString());
                }

                return(new CreateResponse
                {
                    Handle = container.Handle
                });
            }
            catch (PrincipalExistsException)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Conflict,
                                                                       string.Format("handle already exists: {0}", spec.Handle)));
            }
        }