async Task <ServiceCreateResponse> ISwarmOperations.CreateServiceAsync(ServiceCreateParameters parameters, CancellationToken cancellationToken) { var data = new JsonRequestContent <ServiceCreateParameters>(parameters ?? throw new ArgumentNullException(nameof(parameters)), this._client.JsonSerializer); var response = await this._client.MakeRequestAsync(new[] { SwarmResponseHandler }, HttpMethod.Post, "services/create", null, RegistryAuthHeaders(parameters.RegistryAuth), data, cancellationToken).ConfigureAwait(false); return(this._client.JsonSerializer.DeserializeObject <ServiceCreateResponse>(response.Body)); }
public async Task <String> createExperimentServiceAsync(String taskName, String dockerImage, String experimenterPath, String jsonExperiment) { ServiceCreateParameters parameters = new ServiceCreateParameters(); parameters.Service = new ServiceSpec(); parameters.Service.Name = taskName; parameters.Service.TaskTemplate = new TaskSpec(); parameters.Service.TaskTemplate.RestartPolicy = new SwarmRestartPolicy(); parameters.Service.TaskTemplate.RestartPolicy.Condition = "none"; parameters.Service.Mode = new ServiceMode(); parameters.Service.Mode.Replicated = new ReplicatedService(); parameters.Service.Mode.Replicated.Replicas = 1; NetworkAttachmentConfig networkAttach1 = new NetworkAttachmentConfig(); networkAttach1.Target = "host"; IList <NetworkAttachmentConfig> networks = new List <NetworkAttachmentConfig>(); networks.Add(networkAttach1); parameters.Service.TaskTemplate.Networks = networks; parameters.Service.TaskTemplate.ContainerSpec = new ContainerSpec(); parameters.Service.TaskTemplate.ContainerSpec.Image = dockerImage; IList <String> containerCommand = new List <String>(); containerCommand.Add(experimenterPath); containerCommand.Add("--experiment-data '" + jsonExperiment + "'"); parameters.Service.TaskTemplate.ContainerSpec.Command = containerCommand; ServiceCreateResponse response = await this.client.Swarm.CreateServiceAsync(parameters); return(response.ID); }
public async Task <bool> Create() { var networkParams = new NetworksCreateParameters() { Name = Name, Driver = "overlay" }; var networkList = await Client.Docker.Networks.ListNetworksAsync(); var existingNetwork = networkList.Where(el => el.Name == Name).ToList(); NetworkResponse network = null; if (existingNetwork.Count == 0) { Logger.Log($"Network for service {Name} is existing!"); var createdNetwork = await Client.Docker.Networks.CreateNetworkAsync(networkParams); network = await Client.Docker.Networks.InspectNetworkAsync(createdNetwork.ID); } else { network = existingNetwork.First(); } Network = network; Logger.Success($"Use network with Name : {network.Name}, count of replicas {CountOfReplicas}"); NetworkAttachmentConfig networkConfig = new NetworkAttachmentConfig() { Target = network.ID }; Port = (3000 + ServiceLogic.Services.Count).ToString(); Logger.Success($"Predicted port is {Port}"); var serviceParams = new ServiceCreateParameters() { Service = new ServiceSpec() { Name = Name, Networks = new List <NetworkAttachmentConfig>() { networkConfig }, EndpointSpec = new EndpointSpec() { Ports = new List <PortConfig>() { new PortConfig() { Protocol = "tcp", PublishedPort = uint.Parse(Port), TargetPort = uint.Parse(Port) } } }, Mode = new ServiceMode() { Replicated = new ReplicatedService() { Replicas = (ulong)(CountOfReplicas) } }, TaskTemplate = new TaskSpec() { ContainerSpec = new ContainerSpec() { Image = Image().ID, Env = new List <string>() { $"PORT={Port}" }, Hosts = new List <string>() { $"{Port}:${Port}" }, Mounts = new List <Mount> { new Mount() { Target = "/home/node/", Source = $"{this.FilePath}", } }, Dir = "/home/node/", Command = new List <string>() { "/bin/bash", "build.sh" }, }, } } }; try { var service = await Client.Docker.Swarm.CreateServiceAsync(serviceParams); DockerServiceId = service.ID; Logger.Success($"Service {service.ID} is Up!"); return(true); } catch (Exception e) { Logger.Fail($"Cant create the container: {e.Message}"); return(false); } }