Browse code

Fix parsing resources from compose file for stack deploy.

Signed-off-by: Daniel Nephin <dnephin@docker.com>

Daniel Nephin authored on 2017/01/10 04:15:32
Showing 2 changed files
... ...
@@ -723,10 +723,14 @@ func convertUpdateConfig(source *composetypes.UpdateConfig) *swarm.UpdateConfig
723 723
 
724 724
 func convertResources(source composetypes.Resources) (*swarm.ResourceRequirements, error) {
725 725
 	resources := &swarm.ResourceRequirements{}
726
+	var err error
726 727
 	if source.Limits != nil {
727
-		cpus, err := opts.ParseCPUs(source.Limits.NanoCPUs)
728
-		if err != nil {
729
-			return nil, err
728
+		var cpus int64
729
+		if source.Limits.NanoCPUs != "" {
730
+			cpus, err = opts.ParseCPUs(source.Limits.NanoCPUs)
731
+			if err != nil {
732
+				return nil, err
733
+			}
730 734
 		}
731 735
 		resources.Limits = &swarm.Resources{
732 736
 			NanoCPUs:    cpus,
... ...
@@ -734,9 +738,12 @@ func convertResources(source composetypes.Resources) (*swarm.ResourceRequirement
734 734
 		}
735 735
 	}
736 736
 	if source.Reservations != nil {
737
-		cpus, err := opts.ParseCPUs(source.Reservations.NanoCPUs)
738
-		if err != nil {
739
-			return nil, err
737
+		var cpus int64
738
+		if source.Reservations.NanoCPUs != "" {
739
+			cpus, err = opts.ParseCPUs(source.Reservations.NanoCPUs)
740
+			if err != nil {
741
+				return nil, err
742
+			}
740 743
 		}
741 744
 		resources.Reservations = &swarm.Resources{
742 745
 			NanoCPUs:    cpus,
... ...
@@ -5,6 +5,7 @@ import (
5 5
 
6 6
 	composetypes "github.com/aanand/compose-file/types"
7 7
 	"github.com/docker/docker/api/types/mount"
8
+	"github.com/docker/docker/api/types/swarm"
8 9
 	"github.com/docker/docker/pkg/testutil/assert"
9 10
 )
10 11
 
... ...
@@ -28,3 +29,26 @@ func TestConvertVolumeToMountInvalidFormat(t *testing.T) {
28 28
 		assert.Error(t, err, "invalid volume: "+vol)
29 29
 	}
30 30
 }
31
+
32
+func TestConvertResourcesOnlyMemory(t *testing.T) {
33
+	source := composetypes.Resources{
34
+		Limits: &composetypes.Resource{
35
+			MemoryBytes: composetypes.UnitBytes(300000000),
36
+		},
37
+		Reservations: &composetypes.Resource{
38
+			MemoryBytes: composetypes.UnitBytes(200000000),
39
+		},
40
+	}
41
+	resources, err := convertResources(source)
42
+	assert.NilError(t, err)
43
+
44
+	expected := &swarm.ResourceRequirements{
45
+		Limits: &swarm.Resources{
46
+			MemoryBytes: 300000000,
47
+		},
48
+		Reservations: &swarm.Resources{
49
+			MemoryBytes: 200000000,
50
+		},
51
+	}
52
+	assert.DeepEqual(t, resources, expected)
53
+}