[lxc-devel] [lxd/master] Expand our user-agent some more

stgraber on Github lxc-bot at linuxcontainers.org
Tue Feb 27 22:34:21 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180227/85601694/attachment.bin>
-------------- next part --------------
From 126377d999ae240194e60b4dbad806e5ea7900e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 27 Feb 2018 17:23:02 -0500
Subject: [PATCH 1/3] Fix double initialization of uevent handler
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/daemon.go  | 20 +++++++++++---------
 lxd/devices.go |  2 +-
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/lxd/daemon.go b/lxd/daemon.go
index ac319845c..805db9679 100644
--- a/lxd/daemon.go
+++ b/lxd/daemon.go
@@ -518,27 +518,31 @@ func (d *Daemon) init() error {
 	/* Log expiry */
 	d.tasks.Add(expireLogsTask(d.State()))
 
-	/* set the initial proxy function and external auth based on config values in the DB */
+	/* Setup the proxy handler, external authentication and MAAS */
 	macaroonEndpoint := ""
 	maasAPIURL := ""
 	maasAPIKey := ""
 	maasMachine := ""
+
 	err = d.db.Transaction(func(tx *db.NodeTx) error {
 		config, err := node.ConfigLoad(tx)
 		if err != nil {
 			return err
 		}
+
 		maasMachine = config.MAASMachine()
 		return nil
 	})
 	if err != nil {
 		return err
 	}
+
 	err = d.cluster.Transaction(func(tx *db.ClusterTx) error {
 		config, err := cluster.ConfigLoad(tx)
 		if err != nil {
 			return err
 		}
+
 		d.proxy = shared.ProxyFromConfig(
 			config.ProxyHTTPS(), config.ProxyHTTP(), config.ProxyIgnoreHosts(),
 		)
@@ -549,37 +553,35 @@ func (d *Daemon) init() error {
 	if err != nil {
 		return err
 	}
+
 	err = d.setupExternalAuthentication(macaroonEndpoint)
 	if err != nil {
 		return err
 	}
+
 	if !d.os.MockMode {
-		/* Start the scheduler */
+		// Start the scheduler
 		go deviceEventListener(d.State())
 
+		// Setup inotify watches
 		_, err := deviceInotifyInit(d.State())
 		if err != nil {
 			return err
 		}
 
 		deviceInotifyDirRescan(d.State())
-
 		go deviceInotifyHandler(d.State())
 
+		// Read the trusted certificates
 		readSavedClientCAList(d)
 	}
 
+	// Connect to MAAS
 	err = d.setupMAASController(maasAPIURL, maasAPIKey, maasMachine)
 	if err != nil {
 		return err
 	}
 
-	if !d.os.MockMode {
-		/* Start the scheduler */
-		go deviceEventListener(d.State())
-		readSavedClientCAList(d)
-	}
-
 	close(d.setupChan)
 
 	// Run the post initialization actions
diff --git a/lxd/devices.go b/lxd/devices.go
index 590a3e10f..b023f3dba 100644
--- a/lxd/devices.go
+++ b/lxd/devices.go
@@ -817,7 +817,7 @@ func deviceUSBEvent(s *state.State, usb usbDevice) {
 func deviceEventListener(s *state.State) {
 	chNetlinkCPU, chNetlinkNetwork, chUSB, err := deviceNetlinkListener()
 	if err != nil {
-		logger.Errorf("scheduler: couldn't setup netlink listener")
+		logger.Errorf("scheduler: couldn't setup netlink listener: %v", err)
 		return
 	}
 

From 6ec797482ae68c447de3f5b76671c13cbee5c530 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 27 Feb 2018 17:31:38 -0500
Subject: [PATCH 2/3] shared/version: Export features in agent
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 shared/version/useragent.go | 30 +++++++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

diff --git a/shared/version/useragent.go b/shared/version/useragent.go
index 8e3e08965..83bf04751 100644
--- a/shared/version/useragent.go
+++ b/shared/version/useragent.go
@@ -9,9 +9,11 @@ import (
 )
 
 // UserAgent contains a string suitable as a user-agent
-var UserAgent = getUserAgent(nil)
+var UserAgent = getUserAgent()
+var userAgentStorageBackends []string
+var userAgentFeatures []string
 
-func getUserAgent(storageTokens []string) string {
+func getUserAgent() string {
 	archID, err := osarch.ArchitectureId(runtime.GOARCH)
 	if err != nil {
 		panic(err)
@@ -25,13 +27,20 @@ func getUserAgent(storageTokens []string) string {
 	osTokens := []string{strings.Title(runtime.GOOS), arch}
 	osTokens = append(osTokens, getPlatformVersionStrings()...)
 
+	// Initial version string
 	agent := fmt.Sprintf("LXD %s", Version)
-	if len(osTokens) > 0 {
-		agent = fmt.Sprintf("%s (%s)", agent, strings.Join(osTokens, "; "))
+
+	// OS information
+	agent = fmt.Sprintf("%s (%s)", agent, strings.Join(osTokens, "; "))
+
+	// Storage information
+	if len(userAgentStorageBackends) > 0 {
+		agent = fmt.Sprintf("%s (%s)", agent, strings.Join(userAgentStorageBackends, "; "))
 	}
 
-	if len(storageTokens) > 0 {
-		agent = fmt.Sprintf("%s (%s)", agent, strings.Join(storageTokens, "; "))
+	// Feature information
+	if len(userAgentFeatures) > 0 {
+		agent = fmt.Sprintf("%s (%s)", agent, strings.Join(userAgentFeatures, "; "))
 	}
 
 	return agent
@@ -39,5 +48,12 @@ func getUserAgent(storageTokens []string) string {
 
 // UserAgentStorageBackends updates the list of storage backends to include in the user-agent
 func UserAgentStorageBackends(backends []string) {
-	UserAgent = getUserAgent(backends)
+	userAgentStorageBackends = backends
+	UserAgent = getUserAgent()
+}
+
+// UserAgentFeatures updates the list of advertised features
+func UserAgentFeatures(features []string) {
+	userAgentFeatures = features
+	UserAgent = getUserAgent()
 }

From 9d05f708db1c6a34b363dd6853bffdc193ccae97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 27 Feb 2018 17:32:04 -0500
Subject: [PATCH 3/3] Include cluster as a User-Agent feature
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/api_cluster.go | 13 ++++++++++++-
 lxd/daemon.go      | 10 ++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/lxd/api_cluster.go b/lxd/api_cluster.go
index de02463fb..ddd7de664 100644
--- a/lxd/api_cluster.go
+++ b/lxd/api_cluster.go
@@ -90,6 +90,7 @@ func clusterPut(d *Daemon, r *http.Request) Response {
 	if req.ClusterAddress == "" {
 		return clusterPutBootstrap(d, req)
 	}
+
 	return clusterPutJoin(d, req)
 }
 
@@ -105,6 +106,9 @@ func clusterPutBootstrap(d *Daemon, req api.ClusterPut) Response {
 		return InternalError(err)
 	}
 
+	// Add the cluster flag from the agent
+	version.UserAgentFeatures([]string{"cluster"})
+
 	return OperationResponse(op)
 }
 
@@ -235,9 +239,13 @@ func clusterPutJoin(d *Daemon, req api.ClusterPut) Response {
 		if err != nil {
 			return err
 		}
-		return nil
 
+		// Add the cluster flag from the agent
+		version.UserAgentFeatures([]string{"cluster"})
+
+		return nil
 	}
+
 	resources := map[string][]string{}
 	resources["cluster"] = []string{}
 
@@ -290,6 +298,9 @@ func clusterPutDisable(d *Daemon) Response {
 		return SmartError(err)
 	}
 
+	// Remove the cluster flag from the agent
+	version.UserAgentFeatures(nil)
+
 	return EmptySyncResponse
 }
 
diff --git a/lxd/daemon.go b/lxd/daemon.go
index 805db9679..d8ebcace7 100644
--- a/lxd/daemon.go
+++ b/lxd/daemon.go
@@ -491,6 +491,16 @@ func (d *Daemon) init() error {
 		}
 	}
 
+	// Setup the user-agent
+	clustered, err := cluster.Enabled(d.db)
+	if err != nil {
+		return err
+	}
+
+	if clustered {
+		version.UserAgentFeatures([]string{"cluster"})
+	}
+
 	/* Read the storage pools */
 	err = SetupStorageDriver(d.State(), false)
 	if err != nil {


More information about the lxc-devel mailing list