private List <ContainerVolumeType> GetContainerVolumeTypes( ComposeServiceTypeDescription containerServiceTypeDescription) { var containerVolumeTypes = new List <ContainerVolumeType>(); foreach (var volumeMapping in containerServiceTypeDescription.VolumeMappings) { var containerVolumeType = new ContainerVolumeType { Source = volumeMapping.HostLocation, Destination = volumeMapping.ContainerLocation, IsReadOnly = volumeMapping.ReadOnly }; if (this.composeApplicationTypeDescription.VolumeDescriptions.ContainsKey(volumeMapping.HostLocation)) { var volumeDriver = this.composeApplicationTypeDescription.VolumeDescriptions[volumeMapping.HostLocation]; containerVolumeType.Driver = volumeDriver.DriverName; if (volumeDriver.DriverOptions.Count != 0) { var driverOptions = new List <DriverOptionType>(); foreach (var item in volumeDriver.DriverOptions) { var driverOption = new DriverOptionType { Name = item.Key, Value = item.Value }; driverOptions.Add(driverOption); } containerVolumeType.Items = new DriverOptionType[driverOptions.Count]; driverOptions.ToArray().CopyTo(containerVolumeType.Items, 0); } } containerVolumeTypes.Add(containerVolumeType); } return(containerVolumeTypes); }
private List <ResourceGovernancePolicyType> GetResourceGovernancePolicies( ComposeServiceTypeDescription containerServiceTypeDescription, ServiceManifestType serviceManifest) { List <ResourceGovernancePolicyType> resourceGovernancePolicies = new List <ResourceGovernancePolicyType>(); if (containerServiceTypeDescription.ResourceGovernance != null && containerServiceTypeDescription.ResourceGovernance.IsSpecified()) { // There is a single code package in the container service type. ResourceGovernancePolicyType resourceGovernancePolicy = new ResourceGovernancePolicyType(); var containerResourceGovernance = containerServiceTypeDescription.ResourceGovernance; resourceGovernancePolicy.CodePackageRef = serviceManifest.CodePackage[0].Name; if (containerResourceGovernance.LimitCpuShares.Length != 0) { resourceGovernancePolicy.CpuShares = containerResourceGovernance.LimitCpuShares; } if (containerResourceGovernance.LimitMemoryInMb.Length != 0) { resourceGovernancePolicy.MemoryInMB = containerResourceGovernance.LimitMemoryInMb; } if (containerResourceGovernance.LimitMemorySwapInMb.Length != 0) { resourceGovernancePolicy.MemorySwapInMB = containerResourceGovernance.LimitMemorySwapInMb; } if (containerResourceGovernance.ReservationMemoryInMb.Length != 0) { resourceGovernancePolicy.MemoryReservationInMB = containerResourceGovernance.ReservationMemoryInMb; } resourceGovernancePolicies.Add(resourceGovernancePolicy); } return(resourceGovernancePolicies); }
private ContainerHostEntryPointType GetContainerHostEntryPointType( ComposeServiceTypeDescription serviceTypeDescription) { var entryPointType = new ContainerHostEntryPointType() { ImageName = serviceTypeDescription.ImageName, }; if (serviceTypeDescription.EntryPointOverride != null) { entryPointType.Commands = serviceTypeDescription.EntryPointOverride; } if (serviceTypeDescription.Commands != null) { if (entryPointType.Commands != null) { entryPointType.Commands = entryPointType.Commands + ", "; } entryPointType.Commands = entryPointType.Commands + serviceTypeDescription.Commands; } return(entryPointType); }
private ContainerHostPoliciesType GetContainerHostPolicy( ComposeServiceTypeDescription containerServiceTypeDescription, ServiceManifestType serviceManifest, IList <PortBindingType> portBindingList) { var containerHostPolicy = new ContainerHostPoliciesType() { CodePackageRef = serviceManifest.CodePackage[0].Name, }; if (!string.IsNullOrEmpty(containerServiceTypeDescription.Isolation)) { containerHostPolicy.Isolation = containerServiceTypeDescription.Isolation; } var containerVolumeTypes = this.GetContainerVolumeTypes(containerServiceTypeDescription); var containerNetworkTypes = this.GetContainerNetworkTypes(containerServiceTypeDescription); var containerHostPolicies = 0; if (this.repositoryCredentials.IsCredentialsSpecified()) { containerHostPolicies = 1; } if (containerServiceTypeDescription.LoggingOptions.IsSpecified()) { ++containerHostPolicies; } containerHostPolicies += portBindingList.Count + containerVolumeTypes.Count + containerNetworkTypes.Count; if (containerHostPolicies != 0) { containerHostPolicy.Items = new object[containerHostPolicies]; var nextIndex = 0; if (this.repositoryCredentials.IsCredentialsSpecified()) { var repositoryCredentialsType = new RepositoryCredentialsType() { AccountName = this.repositoryCredentials.RepositoryUserName, Password = this.repositoryCredentials.RepositoryPassword, PasswordEncrypted = this.repositoryCredentials.IsPasswordEncrypted, PasswordEncryptedSpecified = this.repositoryCredentials.IsPasswordEncrypted }; containerHostPolicy.Items[0] = repositoryCredentialsType; ++nextIndex; } if (containerServiceTypeDescription.LoggingOptions.IsSpecified()) { var composeLoggingOptions = containerServiceTypeDescription.LoggingOptions; var loggingOptions = new ContainerLoggingDriverType() { Driver = composeLoggingOptions.DriverName, }; if (composeLoggingOptions.DriverOptions.Count != 0) { var driverOptions = new List <DriverOptionType>(); foreach (var item in composeLoggingOptions.DriverOptions) { var driverOption = new DriverOptionType() { Name = item.Key, Value = item.Value }; driverOptions.Add(driverOption); } loggingOptions.Items = new DriverOptionType[composeLoggingOptions.DriverOptions.Count]; driverOptions.ToArray().CopyTo(loggingOptions.Items, 0); } containerHostPolicy.Items[nextIndex] = loggingOptions; ++nextIndex; } if (portBindingList.Count != 0) { portBindingList.ToArray().CopyTo(containerHostPolicy.Items, nextIndex); nextIndex += portBindingList.Count; } if (containerVolumeTypes.Count != 0) { containerVolumeTypes.ToArray().CopyTo(containerHostPolicy.Items, nextIndex); nextIndex += containerVolumeTypes.Count; } if (containerNetworkTypes.Count != 0) { containerNetworkTypes.ToArray().CopyTo(containerHostPolicy.Items, nextIndex); nextIndex += containerNetworkTypes.Count; } } return(containerHostPolicy); }