Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }