Browse code

Expose license status in Info (#37612)

* Expose license status in Info

This wires up a new field in the Info payload that exposes the license.
For moby this is hardcoded to always report a community edition.
Downstream enterprise dockerd will have additional licensing logic wired
into this function to report details about the current license status.

Signed-off-by: Daniel Hiltgen <daniel.hiltgen@docker.com>

* Code review comments

Signed-off-by: Daniel Hiltgen <daniel.hiltgen@docker.com>

* Add windows autogen support

Signed-off-by: Daniel Hiltgen <daniel.hiltgen@docker.com>

Daniel Hiltgen authored on 2018/08/18 09:05:21
Showing 10 changed files
... ...
@@ -57,6 +57,7 @@ DOCKER_ENVS := \
57 57
 	-e no_proxy \
58 58
 	-e VERSION \
59 59
 	-e PLATFORM \
60
+	-e DEFAULT_PRODUCT_LICENSE \
60 61
 	-e PRODUCT
61 62
 # note: we _cannot_ add "-e DOCKER_BUILDTAGS" here because even if it's unset in the shell, that would shadow the "ENV DOCKER_BUILDTAGS" set in our Dockerfile, which is very important for our official builds
62 63
 
... ...
@@ -3896,6 +3896,14 @@ definitions:
3896 3896
           - "name=seccomp,profile=default"
3897 3897
           - "name=selinux"
3898 3898
           - "name=userns"
3899
+      ProductLicense:
3900
+        description: |
3901
+          Reports a summary of the product license on the daemon.
3902
+
3903
+          If a commercial license has been applied to the daemon, information
3904
+          such as number of nodes, and expiration are included.
3905
+        type: "string"
3906
+        example: "Community Engine"
3899 3907
 
3900 3908
 
3901 3909
   # PluginsInfo is a temp struct holding Plugins name
... ...
@@ -204,6 +204,7 @@ type Info struct {
204 204
 	RuncCommit         Commit
205 205
 	InitCommit         Commit
206 206
 	SecurityOptions    []string
207
+	ProductLicense     string `json:",omitempty"`
207 208
 }
208 209
 
209 210
 // KeyValue holds a key/value pair
... ...
@@ -73,6 +73,7 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) {
73 73
 	daemon.fillDriverInfo(v)
74 74
 	daemon.fillPluginsInfo(v)
75 75
 	daemon.fillSecurityOptions(v, sysInfo)
76
+	daemon.fillLicense(v)
76 77
 
77 78
 	return v, nil
78 79
 }
79 80
new file mode 100644
... ...
@@ -0,0 +1,10 @@
0
+package daemon // import "github.com/docker/docker/daemon"
1
+
2
+import (
3
+	"github.com/docker/docker/api/types"
4
+	"github.com/docker/docker/dockerversion"
5
+)
6
+
7
+func (daemon *Daemon) fillLicense(v *types.Info) {
8
+	v.ProductLicense = dockerversion.DefaultProductLicense
9
+}
0 10
new file mode 100644
... ...
@@ -0,0 +1,18 @@
0
+package daemon // import "github.com/docker/docker/daemon"
1
+
2
+import (
3
+	"testing"
4
+
5
+	"github.com/docker/docker/api/types"
6
+	"github.com/docker/docker/dockerversion"
7
+	"gotest.tools/assert"
8
+)
9
+
10
+func TestfillLicense(t *testing.T) {
11
+	v := &types.Info{}
12
+	d := &Daemon{
13
+		root: "/var/lib/docker/",
14
+	}
15
+	d.fillLicense(v)
16
+	assert.Assert(t, v.ProductLicense == dockerversion.DefaultProductLicense)
17
+}
... ...
@@ -6,13 +6,14 @@ package dockerversion // import "github.com/docker/docker/dockerversion"
6 6
 // Default build-time variable for library-import.
7 7
 // This file is overridden on build with build-time informations.
8 8
 const (
9
-	GitCommit          = "library-import"
10
-	Version            = "library-import"
11
-	BuildTime          = "library-import"
12
-	IAmStatic          = "library-import"
13
-	ContainerdCommitID = "library-import"
14
-	RuncCommitID       = "library-import"
15
-	InitCommitID       = "library-import"
16
-	PlatformName       = ""
17
-	ProductName        = ""
9
+	GitCommit             = "library-import"
10
+	Version               = "library-import"
11
+	BuildTime             = "library-import"
12
+	IAmStatic             = "library-import"
13
+	ContainerdCommitID    = "library-import"
14
+	RuncCommitID          = "library-import"
15
+	InitCommitID          = "library-import"
16
+	PlatformName          = ""
17
+	ProductName           = ""
18
+	DefaultProductLicense = ""
18 19
 )
... ...
@@ -19,6 +19,8 @@ keywords: "API, Docker, rcli, REST, documentation"
19 19
 
20 20
 * `GET /info` now returns an empty string, instead of `<unknown>` for `KernelVersion`
21 21
   and `OperatingSystem` if the daemon was unable to obtain this information.
22
+* `GET /info` now returns information about the product license, if a license
23
+  has been applied to the daemon.
22 24
 
23 25
 ## V1.38 API changes
24 26
 
... ...
@@ -15,13 +15,14 @@ package dockerversion
15 15
 // Default build-time variable for library-import.
16 16
 // This file is overridden on build with build-time informations.
17 17
 const (
18
-	GitCommit          string = "$GITCOMMIT"
19
-	Version            string = "$VERSION"
20
-	BuildTime          string = "$BUILDTIME"
21
-	IAmStatic          string = "${IAMSTATIC:-true}"
22
-	ContainerdCommitID string = "${CONTAINERD_COMMIT}"
23
-	PlatformName       string = "${PLATFORM}"
24
-	ProductName        string = "${PRODUCT}"
18
+	GitCommit             string = "$GITCOMMIT"
19
+	Version               string = "$VERSION"
20
+	BuildTime             string = "$BUILDTIME"
21
+	IAmStatic             string = "${IAMSTATIC:-true}"
22
+	ContainerdCommitID    string = "${CONTAINERD_COMMIT}"
23
+	PlatformName          string = "${PLATFORM}"
24
+	ProductName           string = "${PRODUCT}"
25
+	DefaultProductLicense string = "${DEFAULT_PRODUCT_LICENSE}"
25 26
 )
26 27
 
27 28
 // AUTOGENERATED FILE; see /go/src/github.com/docker/docker/hack/make/.go-autogen
... ...
@@ -16,7 +16,8 @@ param(
16 16
     [Parameter(Mandatory=$true)][string]$CommitString,
17 17
     [Parameter(Mandatory=$true)][string]$DockerVersion,
18 18
     [Parameter(Mandatory=$false)][string]$Platform,
19
-    [Parameter(Mandatory=$false)][string]$Product
19
+    [Parameter(Mandatory=$false)][string]$Product,
20
+    [Parameter(Mandatory=$false)][string]$DefaultProductLicense
20 21
 )
21 22
 
22 23
 $ErrorActionPreference = "Stop"
... ...
@@ -42,11 +43,12 @@ package dockerversion
42 42
 // Default build-time variable for library-import.
43 43
 // This file is overridden on build with build-time informations.
44 44
 const (
45
-    GitCommit          string = "'+$CommitString+'"
46
-    Version            string = "'+$DockerVersion+'"
47
-    BuildTime          string = "'+$buildDateTime+'"
48
-    PlatformName       string = "'+$Platform+'"
49
-    ProductName        string = "'+$Product+'"
45
+    GitCommit             string = "'+$CommitString+'"
46
+    Version               string = "'+$DockerVersion+'"
47
+    BuildTime             string = "'+$buildDateTime+'"
48
+    PlatformName          string = "'+$Platform+'"
49
+    ProductName           string = "'+$Product+'"
50
+    DefaultProductLicense string = "'+$DefaultProductLicense+'"
50 51
 )
51 52
 
52 53
 // AUTOGENERATED FILE; see hack\make\.go-autogen.ps1