示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }