dotnet / dotnet/Docker.DotNet

Swarm.CreateServiceAsync doesn't return "Version" which means unable to do an UpdateServiceAsync afterwards

Open
#675 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
2.4k
Forks
416
PR merge metrics
No merged PRs in 30d

Description

When creating a swarm service

```csharp
var createService = new ServiceCreateParameters
{
Service = serviceSpec
};

var response = await client.Swarm.CreateServiceAsync(createService);
```

The response does not contain the "Version.Index".
The version index (this is sometimes represented as a `long` and other times a `ulong` in this library) is required in order to call `UpdateServiceAsync` - if you don't specify it you can get exceptions back about the update being out of sequence.

To workaround this, after creating the service, I have to do an intermediary `ListServicesAsync` to fetch it again, because that API does return a Version.

```csharp
var listServiceResult = await client.Swarm.ListServicesAsync(new ServicesListParameters()
{
Filters = new ServiceFilter()
{
Name = new string[]
{
testServiceName
}
}
});
var results = listServiceResult.ToList();
var service = results.Single();

```

Then I can do

```csharp

var updatePlacementConstraintResponse = await client.Swarm.UpdateServiceAsync(testServiceName, new ServiceUpdateParameters()
{
Version = (long)service.Version.Index,
Service = serviceSpec,
});
```

Note: I have to cast from `ulong` to `long` - ideally these types could be aligned?

You may wonder why I am doing a create then an immediate update. I am writing a test to check that I can update a service and it has the intended behaviour. At the start of the test I need to create the service first as a test subject. In normal application usage I don't envisage I'd want to create then immediately update a service.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.