Description
When creating a swarm service
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.
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
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.
Activity