/// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, ResourceRequirements obj)
        {
            // Required properties are always serialized, optional properties are serialized when not null.
            writer.WriteStartObject();
            writer.WriteProperty(obj.Requests, "requests", ResourceRequestsConverter.Serialize);
            if (obj.Limits != null)
            {
                writer.WriteProperty(obj.Limits, "limits", ResourceLimitsConverter.Serialize);
            }

            writer.WriteEndObject();
        }
예제 #2
0
        private static Container CreateClientContainer(string name, int i, ResourceRequirements resources, string guid)
        {
            Console.WriteLine($"Create Container: client{i}, {name}, DeviceID: {guid}, Connection:{ConfigurationManager.AppSettings.Get("StorageConnectionString")}");

            var container = new Container($"client{i}", name, resources);
            var list      = new List <EnvironmentVariable>();

            list.Add(new EnvironmentVariable("StorageConnectionString", ConfigurationManager.AppSettings.Get("StorageConnectionString")));
            list.Add(new EnvironmentVariable("DeviceID", guid));

            container.EnvironmentVariables = list;
            return(container);
        }
예제 #3
0
        private static Container CreateSpamerContainer(string name, int i, ResourceRequirements resources, string guid)
        {
            Console.WriteLine($"Create Container: spamer{i}, {name}, guid: {guid}, queName: que1, messageCount: 10 Connection:{ConfigurationManager.AppSettings.Get("StorageConnectionString")}");
            var container = new Container($"spamer{i}", name, resources);
            var list      = new List <EnvironmentVariable>();

            list.Add(new EnvironmentVariable("StorageConnectionString", ConfigurationManager.AppSettings.Get("StorageConnectionString")));
            list.Add(new EnvironmentVariable("guid", guid));
            list.Add(new EnvironmentVariable("queName", "que1"));
            list.Add(new EnvironmentVariable("messagesCount", "2")); // original 10

            container.EnvironmentVariables = list;
            return(container);
        }
예제 #4
0
        private static async Task Create10Instances(ContainerInstanceManagementClient client, string containerGroup, string location, int flag, string guid)
        {
            var resources = new ResourceRequirements();
            var request   = new ResourceRequests();

            request.Cpu        = 0.2;
            request.MemoryInGB = 0.3; // once I tried 0.1 it cause a long execution time.

            resources.Requests = request;

            var list = new List <Container>();

            for (int i = 0; i < 5; i++)
            {
                if (flag == 0)
                {
                    list.Add(CreateClientContainer("DOCKERHUB_NAME/client", i, resources, $"{guid}-{i}"));
                }
                else
                {
                    list.Add(CreateSpamerContainer("DOCKERHUB_NAME/spamer", i, resources, $"{guid}-{i}"));
                }
            }


            await client.ContainerGroups.CreateOrUpdateAsync(resourceGroup, containerGroup,
                                                             new ContainerGroup()
            {
                Containers    = list,
                Location      = location,
                OsType        = "Linux",
                RestartPolicy = "Never"       // try not to emit the message by restarting
            }
                                                             );

            Console.WriteLine($"Done for {containerGroup}");
        }
예제 #5
0
        /// <summary>
        /// Create a container group by creation parameters.
        /// </summary>
        public ContainerGroup CreateContainerGroup(ContainerGroupCreationParameters parameters)
        {
            var resources = new ResourceRequirements()
            {
                Requests = new ResourceRequests()
                {
                    Cpu        = parameters.Cpu,
                    MemoryInGB = parameters.MemoryInGb,
                }
            };

            var container = new Container()
            {
                Name                 = parameters.Name,
                Image                = parameters.ContainerImage,
                Command              = parameters.ContainerCommand,
                Resources            = resources,
                EnvironmentVariables = parameters.EnvironmentVariables?.Select(e => new EnvironmentVariable(e.Key, e.Value)).ToList()
            };

            var containerGroup = new ContainerGroup()
            {
                Location   = parameters.Location,
                Tags       = parameters.Tags,
                Containers = new List <Container>()
                {
                    container
                },
                OsType = parameters.OsType
            };

            if (string.Equals(IpAddress.Type, parameters.IpAddressType, StringComparison.OrdinalIgnoreCase))
            {
                container.Ports = new List <ContainerPort>()
                {
                    new ContainerPort(parameters.Port)
                };
                containerGroup.IpAddress = new IpAddress(new List <Port>()
                {
                    new Port(parameters.Port)
                });
            }

            if (!string.IsNullOrEmpty(parameters.RegistryServer))
            {
                containerGroup.ImageRegistryCredentials = new List <ImageRegistryCredential>()
                {
                    new ImageRegistryCredential()
                    {
                        Server   = parameters.RegistryServer,
                        Username = parameters.RegistryUsername,
                        Password = parameters.RegistryPassword
                    }
                };
            }

            return(this.ContainerClient.ContainerGroups.CreateOrUpdate(
                       resourceGroupName: parameters.ResourceGroupName,
                       containerGroupName: parameters.Name,
                       containerGroup: containerGroup));
        }
예제 #6
0
        /// <summary>
        /// Create a container group by creation parameters.
        /// </summary>
        public ContainerGroup CreateContainerGroup(ContainerGroupCreationParameters parameters)
        {
            var resources = new ResourceRequirements()
            {
                Requests = new ResourceRequests()
                {
                    Cpu        = parameters.Cpu,
                    MemoryInGB = parameters.MemoryInGb,
                }
            };

            var container = new Container()
            {
                Name                 = parameters.Name,
                Image                = parameters.ContainerImage,
                Command              = parameters.ContainerCommand,
                Resources            = resources,
                EnvironmentVariables = parameters.EnvironmentVariables?.Select(e => new EnvironmentVariable(e.Key, e.Value)).ToList()
            };

            if (!string.IsNullOrEmpty(parameters.AzureFileVolumeMountPath))
            {
                container.VolumeMounts = new List <VolumeMount>
                {
                    new VolumeMount
                    {
                        Name      = ContainerInstanceCmdletBase.AzureFileVolumeName,
                        MountPath = parameters.AzureFileVolumeMountPath
                    }
                };
            }

            var containerGroup = new ContainerGroup()
            {
                Location   = parameters.Location,
                Tags       = parameters.Tags,
                Containers = new List <Container>()
                {
                    container
                },
                OsType        = parameters.OsType,
                RestartPolicy = parameters.RestartPolicy
            };

            if (string.Equals(IpAddress.Type, parameters.IpAddressType, StringComparison.OrdinalIgnoreCase) ||
                !string.IsNullOrEmpty(parameters.DnsNameLabel))
            {
                container.Ports          = parameters.Ports.Select(p => new ContainerPort(p)).ToList();
                containerGroup.IpAddress = new IpAddress(
                    ports: parameters.Ports.Select(p => new Port(p)).ToList(),
                    dnsNameLabel: parameters.DnsNameLabel);
            }

            if (!string.IsNullOrEmpty(parameters.RegistryServer))
            {
                containerGroup.ImageRegistryCredentials = new List <ImageRegistryCredential>()
                {
                    new ImageRegistryCredential()
                    {
                        Server   = parameters.RegistryServer,
                        Username = parameters.RegistryUsername,
                        Password = parameters.RegistryPassword
                    }
                };
            }

            if (!string.IsNullOrEmpty(parameters.AzureFileVolumeMountPath))
            {
                var azureFileVolume = new AzureFileVolume
                {
                    ShareName          = parameters.AzureFileVolumeShareName,
                    StorageAccountName = parameters.AzureFileVolumeAccountName,
                    StorageAccountKey  = parameters.AzureFileVolumeAccountKey
                };

                containerGroup.Volumes = new List <Volume>
                {
                    new Volume
                    {
                        Name      = ContainerInstanceCmdletBase.AzureFileVolumeName,
                        AzureFile = azureFileVolume
                    }
                };
            }

            return(this.ContainerClient.ContainerGroups.CreateOrUpdate(
                       resourceGroupName: parameters.ResourceGroupName,
                       containerGroupName: parameters.Name,
                       containerGroup: containerGroup));
        }