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