[lxc-devel] [lxd/master] Device Instance rename

tomponline on Github lxc-bot at linuxcontainers.org
Fri Sep 27 10:05:25 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 399 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190927/b860ba50/attachment-0001.bin>
-------------- next part --------------
From 1c6395c0218c0502b0e2907e0f85c5bdb478bde7 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Fri, 27 Sep 2019 10:54:20 +0100
Subject: [PATCH 1/3] lxd/device/instance: Updates instance interface inline
 with others

- The recent seccomp and apparmor packages each have a specific instance interface, this change brings the equivalent interface in the device package inline with their naming conventions.

Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
 lxd/device/{device_instance_id.go => device_instance.go} | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
 rename lxd/device/{device_instance_id.go => device_instance.go} (70%)

diff --git a/lxd/device/device_instance_id.go b/lxd/device/device_instance.go
similarity index 70%
rename from lxd/device/device_instance_id.go
rename to lxd/device/device_instance.go
index 4cf76ee89e..0d88f6f264 100644
--- a/lxd/device/device_instance_id.go
+++ b/lxd/device/device_instance.go
@@ -5,10 +5,10 @@ import (
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 )
 
-// InstanceIdentifier is an interface that allows us to identify an Instance and its properties.
+// Instance is an interface that allows us to identify an Instance and its properties.
 // It is intended that this interface be entirely comprised of functions which cannot be blocking
-// independent of when they're called in the instance lifecycle.
-type InstanceIdentifier interface {
+// irrespective of when they're called in the instance lifecycle.
+type Instance interface {
 	Name() string
 	Type() instancetype.Type
 	Project() string

From 502301cfd922e9b7c3c72b020ec5bcb96d9299e9 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Fri, 27 Sep 2019 10:55:14 +0100
Subject: [PATCH 2/3] lxd: Updates use of device.Instance interface

Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
 lxd/container.go                       | 14 +++++++-------
 lxd/device/device.go                   | 12 ++++++------
 lxd/device/device_utils_disk.go        |  4 ++--
 lxd/device/device_utils_instance.go    |  4 ++--
 lxd/device/device_utils_unix_events.go |  4 ++--
 lxd/device/device_utils_usb_events.go  |  4 ++--
 lxd/storage.go                         |  4 ++--
 7 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index 8489f31152..6936b8c68f 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -36,31 +36,31 @@ import (
 )
 
 func init() {
-	// Expose instanceLoadNodeAll to the device package converting the response to a slice of InstanceIdentifiers.
+	// Expose instanceLoadNodeAll to the device package converting the response to a slice of Instances.
 	// This is because container types are defined in the main package and are not importable.
-	device.InstanceLoadNodeAll = func(s *state.State) ([]device.InstanceIdentifier, error) {
+	device.InstanceLoadNodeAll = func(s *state.State) ([]device.Instance, error) {
 		containers, err := instanceLoadNodeAll(s)
 		if err != nil {
 			return nil, err
 		}
 
-		identifiers := []device.InstanceIdentifier{}
+		identifiers := []device.Instance{}
 		for _, v := range containers {
-			identifiers = append(identifiers, device.InstanceIdentifier(v))
+			identifiers = append(identifiers, device.Instance(v))
 		}
 
 		return identifiers, nil
 	}
 
-	// Expose instanceLoadByProjectAndName to the device package converting the response to an InstanceIdentifier.
+	// Expose instanceLoadByProjectAndName to the device package converting the response to an Instance.
 	// This is because container types are defined in the main package and are not importable.
-	device.InstanceLoadByProjectAndName = func(s *state.State, project, name string) (device.InstanceIdentifier, error) {
+	device.InstanceLoadByProjectAndName = func(s *state.State, project, name string) (device.Instance, error) {
 		container, err := instanceLoadByProjectAndName(s, project, name)
 		if err != nil {
 			return nil, err
 		}
 
-		return device.InstanceIdentifier(container), nil
+		return device.Instance(container), nil
 	}
 }
 
diff --git a/lxd/device/device.go b/lxd/device/device.go
index 8256a1e738..5f51672571 100644
--- a/lxd/device/device.go
+++ b/lxd/device/device.go
@@ -72,8 +72,8 @@ type Device interface {
 type device interface {
 	Device
 
-	// init stores the InstanceIdentifier, daemon State and Config into device and performs any setup.
-	init(InstanceIdentifier, *state.State, string, config.Device, VolatileGetter, VolatileSetter)
+	// init stores the Instance, daemon State and Config into device and performs any setup.
+	init(Instance, *state.State, string, config.Device, VolatileGetter, VolatileSetter)
 
 	// validateConfig checks Config stored by init() is valid for the instance type.
 	validateConfig() error
@@ -81,7 +81,7 @@ type device interface {
 
 // deviceCommon represents the common struct for all devices.
 type deviceCommon struct {
-	instance    InstanceIdentifier
+	instance    Instance
 	name        string
 	config      config.Device
 	state       *state.State
@@ -89,11 +89,11 @@ type deviceCommon struct {
 	volatileSet func(map[string]string) error
 }
 
-// init stores the InstanceIdentifier, daemon state, device name and config into device.
+// init stores the Instance, daemon state, device name and config into device.
 // It also needs to be provided with volatile get and set functions for the device to allow
 // persistent data to be accessed. This is implemented as part of deviceCommon so that the majority
 // of devices don't need to implement it and can just embed deviceCommon.
-func (d *deviceCommon) init(instance InstanceIdentifier, state *state.State, name string, conf config.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) {
+func (d *deviceCommon) init(instance Instance, state *state.State, name string, conf config.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) {
 	d.instance = instance
 	d.name = name
 	d.config = conf
@@ -132,7 +132,7 @@ func (d *deviceCommon) Remove() error {
 // If the device type is valid, but the other config validation fails then an instantiated device
 // is still returned with the validation error. If an unknown device is requested or the device is
 // not compatible with the instance type then an ErrUnsupportedDevType error is returned.
-func New(instance InstanceIdentifier, state *state.State, name string, conf config.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) (Device, error) {
+func New(instance Instance, state *state.State, name string, conf config.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) (Device, error) {
 	if conf["type"] == "" {
 		return nil, fmt.Errorf("Missing device type for device '%s'", name)
 	}
diff --git a/lxd/device/device_utils_disk.go b/lxd/device/device_utils_disk.go
index 49522e9b6a..c6545869fd 100644
--- a/lxd/device/device_utils_disk.go
+++ b/lxd/device/device_utils_disk.go
@@ -11,13 +11,13 @@ import (
 )
 
 // StorageVolumeMount checks if storage volume is mounted and if not tries to mount it.
-var StorageVolumeMount func(s *state.State, poolName string, volumeName string, volumeTypeName string, instance InstanceIdentifier) error
+var StorageVolumeMount func(s *state.State, poolName string, volumeName string, volumeTypeName string, instance Instance) error
 
 // StorageVolumeUmount unmounts a storage volume.
 var StorageVolumeUmount func(s *state.State, poolName string, volumeName string, volumeType int) error
 
 // StorageRootFSApplyQuota applies a new quota.
-var StorageRootFSApplyQuota func(instance InstanceIdentifier, newSize int64) (bool, error)
+var StorageRootFSApplyQuota func(instance Instance, newSize int64) (bool, error)
 
 // BlockFsDetect detects the type of block device.
 func BlockFsDetect(dev string) (string, error) {
diff --git a/lxd/device/device_utils_instance.go b/lxd/device/device_utils_instance.go
index c7bb2d456f..d45afce04e 100644
--- a/lxd/device/device_utils_instance.go
+++ b/lxd/device/device_utils_instance.go
@@ -9,10 +9,10 @@ import (
 )
 
 // InstanceLoadNodeAll returns all local instance configs.
-var InstanceLoadNodeAll func(s *state.State) ([]InstanceIdentifier, error)
+var InstanceLoadNodeAll func(s *state.State) ([]Instance, error)
 
 // InstanceLoadByProjectAndName returns instance config by project and name.
-var InstanceLoadByProjectAndName func(s *state.State, project, name string) (InstanceIdentifier, error)
+var InstanceLoadByProjectAndName func(s *state.State, project, name string) (Instance, error)
 
 // reservedDevicesMutex used to coordinate access for checking reserved devices.
 var reservedDevicesMutex sync.Mutex
diff --git a/lxd/device/device_utils_unix_events.go b/lxd/device/device_utils_unix_events.go
index a37a6e7ee6..b58f77097e 100644
--- a/lxd/device/device_utils_unix_events.go
+++ b/lxd/device/device_utils_unix_events.go
@@ -31,7 +31,7 @@ var unixHandlers = map[string]UnixSubscription{}
 var unixMutex sync.Mutex
 
 // unixRegisterHandler registers a handler function to be called whenever a Unix device event occurs.
-func unixRegisterHandler(s *state.State, instance InstanceIdentifier, deviceName, path string, handler func(UnixEvent) (*RunConfig, error)) error {
+func unixRegisterHandler(s *state.State, instance Instance, deviceName, path string, handler func(UnixEvent) (*RunConfig, error)) error {
 	if path == "" || handler == nil {
 		return fmt.Errorf("Invalid subscription")
 	}
@@ -58,7 +58,7 @@ func unixRegisterHandler(s *state.State, instance InstanceIdentifier, deviceName
 }
 
 // unixUnregisterHandler removes a registered Unix handler function for a device.
-func unixUnregisterHandler(s *state.State, instance InstanceIdentifier, deviceName string) error {
+func unixUnregisterHandler(s *state.State, instance Instance, deviceName string) error {
 	unixMutex.Lock()
 	defer unixMutex.Unlock()
 
diff --git a/lxd/device/device_utils_usb_events.go b/lxd/device/device_utils_usb_events.go
index 08807d0c83..a42de148bb 100644
--- a/lxd/device/device_utils_usb_events.go
+++ b/lxd/device/device_utils_usb_events.go
@@ -33,7 +33,7 @@ var usbHandlers = map[string]func(USBEvent) (*RunConfig, error){}
 var usbMutex sync.Mutex
 
 // usbRegisterHandler registers a handler function to be called whenever a USB device event occurs.
-func usbRegisterHandler(instance InstanceIdentifier, deviceName string, handler func(USBEvent) (*RunConfig, error)) {
+func usbRegisterHandler(instance Instance, deviceName string, handler func(USBEvent) (*RunConfig, error)) {
 	usbMutex.Lock()
 	defer usbMutex.Unlock()
 
@@ -43,7 +43,7 @@ func usbRegisterHandler(instance InstanceIdentifier, deviceName string, handler
 }
 
 // usbUnregisterHandler removes a registered USB handler function for a device.
-func usbUnregisterHandler(instance InstanceIdentifier, deviceName string) {
+func usbUnregisterHandler(instance Instance, deviceName string) {
 	usbMutex.Lock()
 	defer usbMutex.Unlock()
 
diff --git a/lxd/storage.go b/lxd/storage.go
index c36778f8f8..1736dcf212 100644
--- a/lxd/storage.go
+++ b/lxd/storage.go
@@ -894,7 +894,7 @@ func storagePoolDriversCacheUpdate(cluster *db.Cluster) {
 
 // storageVolumeMount initialises a new storage interface and checks the pool and volume are
 // mounted. If they are not then they are mounted.
-func storageVolumeMount(state *state.State, poolName string, volumeName string, volumeTypeName string, instance device.InstanceIdentifier) error {
+func storageVolumeMount(state *state.State, poolName string, volumeName string, volumeTypeName string, instance device.Instance) error {
 	c, ok := instance.(*containerLXC)
 	if !ok {
 		return fmt.Errorf("Received non-LXC container instance")
@@ -932,7 +932,7 @@ func storageVolumeUmount(state *state.State, poolName string, volumeName string,
 
 // storageRootFSApplyQuota applies a quota to an instance if it can, if it cannot then it will
 // return false indicating that the quota needs to be stored in volatile to be applied on next boot.
-func storageRootFSApplyQuota(instance device.InstanceIdentifier, newSizeBytes int64) (bool, error) {
+func storageRootFSApplyQuota(instance device.Instance, newSizeBytes int64) (bool, error) {
 	c, ok := instance.(*containerLXC)
 	if !ok {
 		return false, fmt.Errorf("Received non-LXC container instance")

From be2f8155daa0d7c0c5b6691f472176c92044c36f Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Fri, 27 Sep 2019 11:04:21 +0100
Subject: [PATCH 3/3] lxd: Makes import alias of device package consistent
 throughout codebase

Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
 lxd/container.go                      |  8 +++---
 lxd/container_lxc.go                  | 40 +++++++++++++--------------
 lxd/container_test.go                 |  2 +-
 lxd/containers_post.go                | 12 ++++----
 lxd/db/containers.go                  |  5 ++--
 lxd/db/db_internal_test.go            |  2 +-
 lxd/db/devices.go                     | 12 ++++----
 lxd/db/profiles.go                    |  7 ++---
 lxd/device/device.go                  | 30 ++++++++++----------
 lxd/device/device_instance.go         |  6 ++--
 lxd/device/device_utils_infiniband.go |  8 +++---
 lxd/device/device_utils_instance.go   |  4 +--
 lxd/device/device_utils_network.go    | 12 ++++----
 lxd/device/device_utils_unix.go       | 16 +++++------
 lxd/device/disk.go                    |  4 +--
 lxd/device/infiniband.go              |  4 +--
 lxd/device/nic.go                     |  4 +--
 lxd/device/nic_bridged.go             | 12 ++++----
 lxd/device/nic_p2p.go                 |  4 +--
 lxd/device/unix_common.go             |  4 +--
 lxd/device/usb.go                     |  4 +--
 lxd/instance_interface.go             |  6 ++--
 lxd/seccomp.go                        |  6 ++--
 23 files changed, 105 insertions(+), 107 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index 6936b8c68f..2c330fd50f 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -19,7 +19,7 @@ import (
 	"github.com/lxc/lxd/lxd/cluster"
 	"github.com/lxc/lxd/lxd/db"
 	"github.com/lxc/lxd/lxd/device"
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/events"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/state"
@@ -175,7 +175,7 @@ func containerValidConfig(sysOS *sys.OS, config map[string]string, profile bool,
 }
 
 // containerValidDevices validate container device configs.
-func containerValidDevices(state *state.State, cluster *db.Cluster, instanceName string, devices config.Devices, expanded bool) error {
+func containerValidDevices(state *state.State, cluster *db.Cluster, instanceName string, devices deviceConfig.Devices, expanded bool) error {
 	// Empty device list
 	if devices == nil {
 		return nil
@@ -232,7 +232,7 @@ type container interface {
 	OnStopNS(target string, netns string) error
 	OnStop(target string) error
 
-	InsertSeccompUnixDevice(prefix string, m config.Device, pid int) error
+	InsertSeccompUnixDevice(prefix string, m deviceConfig.Device, pid int) error
 
 	CurrentIdmap() (*idmap.IdmapSet, error)
 	DiskIdmap() (*idmap.IdmapSet, error)
@@ -710,7 +710,7 @@ func containerCreateInternal(s *state.State, args db.ContainerArgs) (container,
 	}
 
 	if args.Devices == nil {
-		args.Devices = config.Devices{}
+		args.Devices = deviceConfig.Devices{}
 	}
 
 	if args.Architecture == 0 {
diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 0f8fb885a3..b63b424e69 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -29,7 +29,7 @@ import (
 	"github.com/lxc/lxd/lxd/db"
 	"github.com/lxc/lxd/lxd/db/query"
 	"github.com/lxc/lxd/lxd/device"
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/events"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/maas"
@@ -609,10 +609,10 @@ type containerLXC struct {
 
 	// Config
 	expandedConfig  map[string]string
-	expandedDevices config.Devices
+	expandedDevices deviceConfig.Devices
 	fromHook        bool
 	localConfig     map[string]string
-	localDevices    config.Devices
+	localDevices    deviceConfig.Devices
 	profiles        []string
 
 	// Cache
@@ -1571,8 +1571,8 @@ func (c *containerLXC) runHooks(hooks []func() error) error {
 }
 
 // deviceLoad instantiates and validates a new device and returns it along with enriched config.
-func (c *containerLXC) deviceLoad(deviceName string, rawConfig config.Device) (device.Device, config.Device, error) {
-	var configCopy config.Device
+func (c *containerLXC) deviceLoad(deviceName string, rawConfig deviceConfig.Device) (device.Device, deviceConfig.Device, error) {
+	var configCopy deviceConfig.Device
 	var err error
 
 	// Create copy of config and load some fields from volatile if device is nic or infiniband.
@@ -1593,7 +1593,7 @@ func (c *containerLXC) deviceLoad(deviceName string, rawConfig config.Device) (d
 }
 
 // deviceAdd loads a new device and calls its Add() function.
-func (c *containerLXC) deviceAdd(deviceName string, rawConfig config.Device) error {
+func (c *containerLXC) deviceAdd(deviceName string, rawConfig deviceConfig.Device) error {
 	d, _, err := c.deviceLoad(deviceName, rawConfig)
 	if err != nil {
 		return err
@@ -1605,7 +1605,7 @@ func (c *containerLXC) deviceAdd(deviceName string, rawConfig config.Device) err
 // deviceStart loads a new device and calls its Start() function. After processing the runtime
 // config returned from Start(), it also runs the device's Register() function irrespective of
 // whether the container is running or not.
-func (c *containerLXC) deviceStart(deviceName string, rawConfig config.Device, isRunning bool) (*device.RunConfig, error) {
+func (c *containerLXC) deviceStart(deviceName string, rawConfig deviceConfig.Device, isRunning bool) (*device.RunConfig, error) {
 	d, configCopy, err := c.deviceLoad(deviceName, rawConfig)
 	if err != nil {
 		return nil, err
@@ -1745,7 +1745,7 @@ func (c *containerLXC) deviceAttachNIC(configCopy map[string]string, netIF []dev
 }
 
 // deviceUpdate loads a new device and calls its Update() function.
-func (c *containerLXC) deviceUpdate(deviceName string, rawConfig config.Device, oldDevices config.Devices, isRunning bool) error {
+func (c *containerLXC) deviceUpdate(deviceName string, rawConfig deviceConfig.Device, oldDevices deviceConfig.Devices, isRunning bool) error {
 	d, _, err := c.deviceLoad(deviceName, rawConfig)
 	if err != nil {
 		return err
@@ -1760,7 +1760,7 @@ func (c *containerLXC) deviceUpdate(deviceName string, rawConfig config.Device,
 }
 
 // deviceStop loads a new device and calls its Stop() function.
-func (c *containerLXC) deviceStop(deviceName string, rawConfig config.Device, stopHookNetnsPath string) error {
+func (c *containerLXC) deviceStop(deviceName string, rawConfig deviceConfig.Device, stopHookNetnsPath string) error {
 	d, configCopy, err := c.deviceLoad(deviceName, rawConfig)
 
 	// If deviceLoad fails with unsupported device type then return.
@@ -1937,7 +1937,7 @@ func (c *containerLXC) deviceHandleMounts(mounts []device.MountEntryItem) error
 }
 
 // deviceRemove loads a new device and calls its Remove() function.
-func (c *containerLXC) deviceRemove(deviceName string, rawConfig config.Device) error {
+func (c *containerLXC) deviceRemove(deviceName string, rawConfig deviceConfig.Device) error {
 	d, _, err := c.deviceLoad(deviceName, rawConfig)
 
 	// If deviceLoad fails with unsupported device type then return.
@@ -1985,7 +1985,7 @@ func (c *containerLXC) deviceVolatileSetFunc(devName string) func(save map[strin
 
 // deviceResetVolatile resets a device's volatile data when its removed or updated in such a way
 // that it is removed then added immediately afterwards.
-func (c *containerLXC) deviceResetVolatile(devName string, oldConfig, newConfig config.Device) error {
+func (c *containerLXC) deviceResetVolatile(devName string, oldConfig, newConfig deviceConfig.Device) error {
 	volatileClear := make(map[string]string)
 	devicePrefix := fmt.Sprintf("volatile.%s.", devName)
 
@@ -4125,7 +4125,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 	}
 
 	if args.Devices == nil {
-		args.Devices = config.Devices{}
+		args.Devices = deviceConfig.Devices{}
 	}
 
 	if args.Profiles == nil {
@@ -4208,7 +4208,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 		return err
 	}
 
-	oldExpandedDevices := config.Devices{}
+	oldExpandedDevices := deviceConfig.Devices{}
 	err = shared.DeepCopy(&c.expandedDevices, &oldExpandedDevices)
 	if err != nil {
 		return err
@@ -4220,7 +4220,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 		return err
 	}
 
-	oldLocalDevices := config.Devices{}
+	oldLocalDevices := deviceConfig.Devices{}
 	err = shared.DeepCopy(&c.localDevices, &oldLocalDevices)
 	if err != nil {
 		return err
@@ -4305,7 +4305,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 	}
 
 	// Diff the devices
-	removeDevices, addDevices, updateDevices, updateDiff := oldExpandedDevices.Update(c.expandedDevices, func(oldDevice config.Device, newDevice config.Device) []string {
+	removeDevices, addDevices, updateDevices, updateDiff := oldExpandedDevices.Update(c.expandedDevices, func(oldDevice deviceConfig.Device, newDevice deviceConfig.Device) []string {
 		// This function needs to return a list of fields that are excluded from differences
 		// between oldDevice and newDevice. The result of this is that as long as the
 		// devices are otherwise identical except for the fields returned here, then the
@@ -4838,7 +4838,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 	return nil
 }
 
-func (c *containerLXC) updateDevices(removeDevices config.Devices, addDevices config.Devices, updateDevices config.Devices, oldExpandedDevices config.Devices) error {
+func (c *containerLXC) updateDevices(removeDevices deviceConfig.Devices, addDevices deviceConfig.Devices, updateDevices deviceConfig.Devices, oldExpandedDevices deviceConfig.Devices) error {
 	isRunning := c.IsRunning()
 
 	// Remove devices in reverse order to how they were added.
@@ -6372,7 +6372,7 @@ func (c *containerLXC) removeMount(mount string) error {
 	return nil
 }
 
-func (c *containerLXC) InsertSeccompUnixDevice(prefix string, m config.Device, pid int) error {
+func (c *containerLXC) InsertSeccompUnixDevice(prefix string, m deviceConfig.Device, pid int) error {
 	if pid < 0 {
 		return fmt.Errorf("Invalid request PID specified")
 	}
@@ -6459,7 +6459,7 @@ func (c *containerLXC) removeUnixDevices() error {
 
 // fillNetworkDevice takes a nic or infiniband device type and enriches it with automatically
 // generated name and hwaddr properties if these are missing from the device.
-func (c *containerLXC) fillNetworkDevice(name string, m config.Device) (config.Device, error) {
+func (c *containerLXC) fillNetworkDevice(name string, m deviceConfig.Device) (deviceConfig.Device, error) {
 	newDevice := m.Clone()
 
 	// Function to try and guess an available name
@@ -6756,7 +6756,7 @@ func (c *containerLXC) ExpandedConfig() map[string]string {
 	return c.expandedConfig
 }
 
-func (c *containerLXC) ExpandedDevices() config.Devices {
+func (c *containerLXC) ExpandedDevices() deviceConfig.Devices {
 	return c.expandedDevices
 }
 
@@ -6778,7 +6778,7 @@ func (c *containerLXC) LocalConfig() map[string]string {
 	return c.localConfig
 }
 
-func (c *containerLXC) LocalDevices() config.Devices {
+func (c *containerLXC) LocalDevices() deviceConfig.Devices {
 	return c.localDevices
 }
 
diff --git a/lxd/container_test.go b/lxd/container_test.go
index f7140cc0e7..d5deacea7c 100644
--- a/lxd/container_test.go
+++ b/lxd/container_test.go
@@ -7,7 +7,7 @@ import (
 	"github.com/stretchr/testify/suite"
 
 	"github.com/lxc/lxd/lxd/db"
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	driver "github.com/lxc/lxd/lxd/storage"
 	"github.com/lxc/lxd/shared"
diff --git a/lxd/containers_post.go b/lxd/containers_post.go
index ed46731abf..52b6991cd9 100644
--- a/lxd/containers_post.go
+++ b/lxd/containers_post.go
@@ -19,7 +19,7 @@ import (
 
 	"github.com/lxc/lxd/lxd/cluster"
 	"github.com/lxc/lxd/lxd/db"
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/migration"
 	"github.com/lxc/lxd/lxd/response"
@@ -105,7 +105,7 @@ func createFromImage(d *Daemon, project string, req *api.InstancesPost) response
 			Config:      req.Config,
 			Type:        dbType,
 			Description: req.Description,
-			Devices:     config.NewDevices(req.Devices),
+			Devices:     deviceConfig.NewDevices(req.Devices),
 			Ephemeral:   req.Ephemeral,
 			Name:        req.Name,
 			Profiles:    req.Profiles,
@@ -166,7 +166,7 @@ func createFromNone(d *Daemon, project string, req *api.InstancesPost) response.
 		Config:      req.Config,
 		Type:        dbType,
 		Description: req.Description,
-		Devices:     config.NewDevices(req.Devices),
+		Devices:     deviceConfig.NewDevices(req.Devices),
 		Ephemeral:   req.Ephemeral,
 		Name:        req.Name,
 		Profiles:    req.Profiles,
@@ -227,7 +227,7 @@ func createFromMigration(d *Daemon, project string, req *api.InstancesPost) resp
 		BaseImage:    req.Source.BaseImage,
 		Config:       req.Config,
 		Type:         dbType,
-		Devices:      config.NewDevices(req.Devices),
+		Devices:      deviceConfig.NewDevices(req.Devices),
 		Description:  req.Description,
 		Ephemeral:    req.Ephemeral,
 		Name:         req.Name,
@@ -264,7 +264,7 @@ func createFromMigration(d *Daemon, project string, req *api.InstancesPost) resp
 		rootDev["path"] = "/"
 		rootDev["pool"] = storagePool
 		if args.Devices == nil {
-			args.Devices = config.Devices{}
+			args.Devices = deviceConfig.Devices{}
 		}
 
 		// Make sure that we do not overwrite a device the user
@@ -590,7 +590,7 @@ func createFromCopy(d *Daemon, project string, req *api.InstancesPost) response.
 		Config:       req.Config,
 		Type:         source.Type(),
 		Description:  req.Description,
-		Devices:      config.NewDevices(req.Devices),
+		Devices:      deviceConfig.NewDevices(req.Devices),
 		Ephemeral:    req.Ephemeral,
 		Name:         req.Name,
 		Profiles:     req.Profiles,
diff --git a/lxd/db/containers.go b/lxd/db/containers.go
index 8c817838e1..490bd6018c 100644
--- a/lxd/db/containers.go
+++ b/lxd/db/containers.go
@@ -8,7 +8,6 @@ import (
 	"time"
 
 	"github.com/lxc/lxd/lxd/db/query"
-	"github.com/lxc/lxd/lxd/device/config"
 	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/shared"
@@ -115,7 +114,7 @@ func ContainerToArgs(container *Instance) ContainerArgs {
 	}
 
 	if args.Devices == nil {
-		args.Devices = config.Devices{}
+		args.Devices = deviceConfig.Devices{}
 	}
 
 	return args
@@ -138,7 +137,7 @@ type ContainerArgs struct {
 	Architecture int
 	Config       map[string]string
 	Description  string
-	Devices      config.Devices
+	Devices      deviceConfig.Devices
 	Ephemeral    bool
 	LastUsedDate time.Time
 	Name         string
diff --git a/lxd/db/db_internal_test.go b/lxd/db/db_internal_test.go
index 4786f956df..07bfc72283 100644
--- a/lxd/db/db_internal_test.go
+++ b/lxd/db/db_internal_test.go
@@ -8,7 +8,7 @@ import (
 
 	"github.com/stretchr/testify/suite"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/shared/api"
 	"github.com/lxc/lxd/shared/logger"
 	"github.com/lxc/lxd/shared/logging"
diff --git a/lxd/db/devices.go b/lxd/db/devices.go
index e78d7ec9d4..913ac5f0cd 100644
--- a/lxd/db/devices.go
+++ b/lxd/db/devices.go
@@ -4,7 +4,7 @@ import (
 	"database/sql"
 	"fmt"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 )
 
 func dbDeviceTypeToString(t int) (string, error) {
@@ -58,7 +58,7 @@ func dbDeviceTypeToInt(t string) (int, error) {
 }
 
 // DevicesAdd adds a new device.
-func DevicesAdd(tx *sql.Tx, w string, cID int64, devices config.Devices) error {
+func DevicesAdd(tx *sql.Tx, w string, cID int64, devices deviceConfig.Devices) error {
 	// Prepare the devices entry SQL
 	str1 := fmt.Sprintf("INSERT INTO %ss_devices (%s_id, name, type) VALUES (?, ?, ?)", w, w)
 	stmt1, err := tx.Prepare(str1)
@@ -109,10 +109,10 @@ func DevicesAdd(tx *sql.Tx, w string, cID int64, devices config.Devices) error {
 	return nil
 }
 
-func dbDeviceConfig(db *sql.DB, id int, isprofile bool) (config.Device, error) {
+func dbDeviceConfig(db *sql.DB, id int, isprofile bool) (deviceConfig.Device, error) {
 	var query string
 	var key, value string
-	newdev := config.Device{} // That's a map[string]string
+	newdev := deviceConfig.Device{} // That's a map[string]string
 	inargs := []interface{}{id}
 	outfmt := []interface{}{key, value}
 
@@ -138,7 +138,7 @@ func dbDeviceConfig(db *sql.DB, id int, isprofile bool) (config.Device, error) {
 }
 
 // Devices returns the devices matching the given filters.
-func (c *Cluster) Devices(project, qName string, isprofile bool) (config.Devices, error) {
+func (c *Cluster) Devices(project, qName string, isprofile bool) (deviceConfig.Devices, error) {
 	err := c.Transaction(func(tx *ClusterTx) error {
 		enabled, err := tx.ProjectHasProfiles(project)
 		if err != nil {
@@ -176,7 +176,7 @@ func (c *Cluster) Devices(project, qName string, isprofile bool) (config.Devices
 		return nil, err
 	}
 
-	devices := config.Devices{}
+	devices := deviceConfig.Devices{}
 	for _, r := range results {
 		id = r[0].(int)
 		name = r[1].(string)
diff --git a/lxd/db/profiles.go b/lxd/db/profiles.go
index ac883b5645..15e5e1ebf3 100644
--- a/lxd/db/profiles.go
+++ b/lxd/db/profiles.go
@@ -4,7 +4,6 @@ import (
 	"database/sql"
 	"fmt"
 
-	"github.com/lxc/lxd/lxd/device/config"
 	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/shared/api"
 	"github.com/pkg/errors"
@@ -379,11 +378,11 @@ func ProfilesExpandConfig(config map[string]string, profiles []api.Profile) map[
 
 // ProfilesExpandDevices expands the given container devices with the devices
 // defined in the given profiles.
-func ProfilesExpandDevices(devices config.Devices, profiles []api.Profile) config.Devices {
-	expandedDevices := config.Devices{}
+func ProfilesExpandDevices(devices deviceConfig.Devices, profiles []api.Profile) deviceConfig.Devices {
+	expandedDevices := deviceConfig.Devices{}
 
 	// Apply all the profiles
-	profileDevices := make([]config.Devices, len(profiles))
+	profileDevices := make([]deviceConfig.Devices, len(profiles))
 	for i, profile := range profiles {
 		profileDevices[i] = deviceConfig.NewDevices(profile.Devices)
 	}
diff --git a/lxd/device/device.go b/lxd/device/device.go
index 5f51672571..2756d70d48 100644
--- a/lxd/device/device.go
+++ b/lxd/device/device.go
@@ -3,21 +3,21 @@ package device
 import (
 	"fmt"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/state"
 )
 
 // devTypes defines supported top-level device type creation functions.
-var devTypes = map[string]func(config.Device) device{
+var devTypes = map[string]func(deviceConfig.Device) device{
 	"nic":        nicLoadByType,
 	"infiniband": infinibandLoadByType,
-	"proxy":      func(c config.Device) device { return &proxy{} },
-	"gpu":        func(c config.Device) device { return &gpu{} },
-	"usb":        func(c config.Device) device { return &usb{} },
-	"unix-char":  func(c config.Device) device { return &unixCommon{} },
-	"unix-block": func(c config.Device) device { return &unixCommon{} },
-	"disk":       func(c config.Device) device { return &disk{} },
-	"none":       func(c config.Device) device { return &none{} },
+	"proxy":      func(c deviceConfig.Device) device { return &proxy{} },
+	"gpu":        func(c deviceConfig.Device) device { return &gpu{} },
+	"usb":        func(c deviceConfig.Device) device { return &usb{} },
+	"unix-char":  func(c deviceConfig.Device) device { return &unixCommon{} },
+	"unix-block": func(c deviceConfig.Device) device { return &unixCommon{} },
+	"disk":       func(c deviceConfig.Device) device { return &disk{} },
+	"none":       func(c deviceConfig.Device) device { return &none{} },
 }
 
 // VolatileSetter is a function that accepts one or more key/value strings to save into the LXD
@@ -53,7 +53,7 @@ type Device interface {
 	// current config and previous devices config supplied as an argument. This called if the
 	// only config fields that have changed are supplied in the list returned from CanHotPlug().
 	// The function also accepts a boolean indicating whether the instance is running or not.
-	Update(oldDevices config.Devices, running bool) error
+	Update(oldDevices deviceConfig.Devices, running bool) error
 
 	// Stop performs any host-side cleanup required when a device is removed from an instance,
 	// either due to unplugging it from a running instance or instance is being shutdown.
@@ -73,7 +73,7 @@ type device interface {
 	Device
 
 	// init stores the Instance, daemon State and Config into device and performs any setup.
-	init(Instance, *state.State, string, config.Device, VolatileGetter, VolatileSetter)
+	init(Instance, *state.State, string, deviceConfig.Device, VolatileGetter, VolatileSetter)
 
 	// validateConfig checks Config stored by init() is valid for the instance type.
 	validateConfig() error
@@ -83,7 +83,7 @@ type device interface {
 type deviceCommon struct {
 	instance    Instance
 	name        string
-	config      config.Device
+	config      deviceConfig.Device
 	state       *state.State
 	volatileGet func() map[string]string
 	volatileSet func(map[string]string) error
@@ -93,7 +93,7 @@ type deviceCommon struct {
 // It also needs to be provided with volatile get and set functions for the device to allow
 // persistent data to be accessed. This is implemented as part of deviceCommon so that the majority
 // of devices don't need to implement it and can just embed deviceCommon.
-func (d *deviceCommon) init(instance Instance, state *state.State, name string, conf config.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) {
+func (d *deviceCommon) init(instance Instance, state *state.State, name string, conf deviceConfig.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) {
 	d.instance = instance
 	d.name = name
 	d.config = conf
@@ -119,7 +119,7 @@ func (d *deviceCommon) CanHotPlug() (bool, []string) {
 }
 
 // Update returns an error as most devices do not support live updates without being restarted.
-func (d *deviceCommon) Update(oldDevices config.Devices, isRunning bool) error {
+func (d *deviceCommon) Update(oldDevices deviceConfig.Devices, isRunning bool) error {
 	return fmt.Errorf("Device does not support updates whilst started")
 }
 
@@ -132,7 +132,7 @@ func (d *deviceCommon) Remove() error {
 // If the device type is valid, but the other config validation fails then an instantiated device
 // is still returned with the validation error. If an unknown device is requested or the device is
 // not compatible with the instance type then an ErrUnsupportedDevType error is returned.
-func New(instance Instance, state *state.State, name string, conf config.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) (Device, error) {
+func New(instance Instance, state *state.State, name string, conf deviceConfig.Device, volatileGet VolatileGetter, volatileSet VolatileSetter) (Device, error) {
 	if conf["type"] == "" {
 		return nil, fmt.Errorf("Missing device type for device '%s'", name)
 	}
diff --git a/lxd/device/device_instance.go b/lxd/device/device_instance.go
index 0d88f6f264..296bcb2bdc 100644
--- a/lxd/device/device_instance.go
+++ b/lxd/device/device_instance.go
@@ -1,7 +1,7 @@
 package device
 
 import (
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 )
 
@@ -16,7 +16,7 @@ type Instance interface {
 	RootfsPath() string
 	LogPath() string
 	ExpandedConfig() map[string]string
-	LocalDevices() config.Devices
-	ExpandedDevices() config.Devices
+	LocalDevices() deviceConfig.Devices
+	ExpandedDevices() deviceConfig.Devices
 	DeviceEventHandler(*RunConfig) error
 }
diff --git a/lxd/device/device_utils_infiniband.go b/lxd/device/device_utils_infiniband.go
index d7e56dc2ad..d970e17f25 100644
--- a/lxd/device/device_utils_infiniband.go
+++ b/lxd/device/device_utils_infiniband.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"regexp"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/state"
 	"github.com/lxc/lxd/shared/api"
 )
@@ -77,7 +77,7 @@ func infinibandAddDevices(s *state.State, devicesPath string, deviceName string,
 
 	// Add IsSM device if defined.
 	if ibDev.Infiniband.IsSMName != "" {
-		dummyDevice := config.Device{
+		dummyDevice := deviceConfig.Device{
 			"source": fmt.Sprintf("/dev/infiniband/%s", ibDev.Infiniband.IsSMName),
 		}
 
@@ -89,7 +89,7 @@ func infinibandAddDevices(s *state.State, devicesPath string, deviceName string,
 
 	// Add MAD device if defined.
 	if ibDev.Infiniband.MADName != "" {
-		dummyDevice := config.Device{
+		dummyDevice := deviceConfig.Device{
 			"source": fmt.Sprintf("/dev/infiniband/%s", ibDev.Infiniband.MADName),
 		}
 
@@ -101,7 +101,7 @@ func infinibandAddDevices(s *state.State, devicesPath string, deviceName string,
 
 	// Add Verb device if defined.
 	if ibDev.Infiniband.VerbName != "" {
-		dummyDevice := config.Device{
+		dummyDevice := deviceConfig.Device{
 			"source": fmt.Sprintf("/dev/infiniband/%s", ibDev.Infiniband.VerbName),
 		}
 
diff --git a/lxd/device/device_utils_instance.go b/lxd/device/device_utils_instance.go
index d45afce04e..9fdd778750 100644
--- a/lxd/device/device_utils_instance.go
+++ b/lxd/device/device_utils_instance.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"sync"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/state"
 )
 
@@ -19,7 +19,7 @@ var reservedDevicesMutex sync.Mutex
 
 // instanceGetReservedDevices returns a map of host device names that have been used by devices in
 // other instances on the local node. Used for selecting physical and SR-IOV VF devices.
-func instanceGetReservedDevices(s *state.State, m config.Device) (map[string]struct{}, error) {
+func instanceGetReservedDevices(s *state.State, m deviceConfig.Device) (map[string]struct{}, error) {
 	reservedDevicesMutex.Lock()
 	defer reservedDevicesMutex.Unlock()
 
diff --git a/lxd/device/device_utils_network.go b/lxd/device/device_utils_network.go
index fa55c9f6e9..da17438110 100644
--- a/lxd/device/device_utils_network.go
+++ b/lxd/device/device_utils_network.go
@@ -12,7 +12,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/shared"
 	"github.com/lxc/lxd/shared/logger"
 	"github.com/lxc/lxd/shared/units"
@@ -272,7 +272,7 @@ func NetworkAttachInterface(netName string, devName string) error {
 // in the supplied config to the newly created peer interface. If mtu is not specified, but parent
 // is supplied in config, then the MTU of the new peer interface will inherit the parent MTU.
 // Accepts the name of the host side interface as a parameter and returns the peer interface name.
-func networkCreateVethPair(hostName string, m config.Device) (string, error) {
+func networkCreateVethPair(hostName string, m deviceConfig.Device) (string, error) {
 	peerName := NetworkRandomDevName("veth")
 
 	_, err := shared.RunCommand("ip", "link", "add", "dev", hostName, "type", "veth", "peer", "name", peerName)
@@ -324,7 +324,7 @@ func networkCreateVethPair(hostName string, m config.Device) (string, error) {
 }
 
 // networkSetupHostVethDevice configures a nic device's host side veth settings.
-func networkSetupHostVethDevice(device config.Device, oldDevice config.Device, v map[string]string) error {
+func networkSetupHostVethDevice(device deviceConfig.Device, oldDevice deviceConfig.Device, v map[string]string) error {
 	// If not configured, check if volatile data contains the most recently added host_name.
 	if device["host_name"] == "" {
 		device["host_name"] = v["host_name"]
@@ -371,7 +371,7 @@ func networkSetupHostVethDevice(device config.Device, oldDevice config.Device, v
 }
 
 // networkSetVethRoutes applies any static routes configured from the host to the container nic.
-func networkSetVethRoutes(m config.Device) error {
+func networkSetVethRoutes(m deviceConfig.Device) error {
 	// Decide whether the route should point to the veth parent or the bridge parent.
 	routeDev := m["host_name"]
 	if m["nictype"] == "bridged" {
@@ -409,7 +409,7 @@ func networkSetVethRoutes(m config.Device) error {
 
 // networkRemoveVethRoutes removes any routes created for this device on the host that were first added
 // with networkSetVethRoutes(). Expects to be passed the device config from the oldExpandedDevices.
-func networkRemoveVethRoutes(m config.Device) {
+func networkRemoveVethRoutes(m deviceConfig.Device) {
 	// Decide whether the route should point to the veth parent or the bridge parent
 	routeDev := m["host_name"]
 	if m["nictype"] == "bridged" {
@@ -451,7 +451,7 @@ func networkRemoveVethRoutes(m config.Device) {
 }
 
 // networkSetVethLimits applies any network rate limits to the veth device specified in the config.
-func networkSetVethLimits(m config.Device) error {
+func networkSetVethLimits(m deviceConfig.Device) error {
 	var err error
 
 	veth := m["host_name"]
diff --git a/lxd/device/device_utils_unix.go b/lxd/device/device_utils_unix.go
index 2e30195596..632cbff564 100644
--- a/lxd/device/device_utils_unix.go
+++ b/lxd/device/device_utils_unix.go
@@ -10,7 +10,7 @@ import (
 
 	"golang.org/x/sys/unix"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/state"
 	"github.com/lxc/lxd/shared"
 	"github.com/lxc/lxd/shared/idmap"
@@ -23,7 +23,7 @@ const unixDefaultMode = 0660
 // unixDeviceInstanceAttributes returns the UNIX device attributes for an instance device.
 // Uses supplied device config for device properties, and if they haven't been set, falls back to
 // using UnixGetDeviceAttributes() to directly query an existing device file.
-func unixDeviceInstanceAttributes(devicesPath string, prefix string, config config.Device) (string, uint32, uint32, error) {
+func unixDeviceInstanceAttributes(devicesPath string, prefix string, config deviceConfig.Device) (string, uint32, uint32, error) {
 	// Check if we've been passed major and minor numbers already.
 	var err error
 	var dMajor, dMinor uint32
@@ -117,7 +117,7 @@ type UnixDevice struct {
 // unixDeviceSourcePath returns the absolute path for a device on the host.
 // This is based on the "source" property of the device's config, or the "path" property if "source"
 // not define. This uses the shared.HostPath function so works when running in a snap environment.
-func unixDeviceSourcePath(m config.Device) string {
+func unixDeviceSourcePath(m deviceConfig.Device) string {
 	srcPath := m["source"]
 	if srcPath == "" {
 		srcPath = m["path"]
@@ -128,7 +128,7 @@ func unixDeviceSourcePath(m config.Device) string {
 // unixDeviceDestPath returns the absolute path for a device inside an instance.
 // This is based on the "path" property of the device's config, or the "source" property if "path"
 // not defined.
-func unixDeviceDestPath(m config.Device) string {
+func unixDeviceDestPath(m deviceConfig.Device) string {
 	destPath := m["path"]
 	if destPath == "" {
 		destPath = m["source"]
@@ -145,7 +145,7 @@ func unixDeviceDestPath(m config.Device) string {
 // type field then it defaults to created a unix-char device. The ownership of the created device
 // defaults to root (0) but can be specified with the uid and gid fields in the device config map.
 // It returns a UnixDevice containing information about the device created.
-func UnixDeviceCreate(s *state.State, idmapSet *idmap.IdmapSet, devicesPath string, prefix string, m config.Device, defaultMode bool) (*UnixDevice, error) {
+func UnixDeviceCreate(s *state.State, idmapSet *idmap.IdmapSet, devicesPath string, prefix string, m deviceConfig.Device, defaultMode bool) (*UnixDevice, error) {
 	var err error
 	d := UnixDevice{}
 
@@ -288,7 +288,7 @@ func UnixDeviceCreate(s *state.State, idmapSet *idmap.IdmapSet, devicesPath stri
 // mount and cgroup rule instructions to have it be attached to the instance. If defaultMode is true
 // or mode is supplied in the device config then the origin device does not need to be accessed for
 // its file mode.
-func unixDeviceSetup(s *state.State, devicesPath string, typePrefix string, deviceName string, m config.Device, defaultMode bool, runConf *RunConfig) error {
+func unixDeviceSetup(s *state.State, devicesPath string, typePrefix string, deviceName string, m deviceConfig.Device, defaultMode bool, runConf *RunConfig) error {
 	// Before creating the device, check that another existing device isn't using the same mount
 	// path inside the instance as our device. If we find an existing device with the same mount
 	// path we will skip mounting our device inside the instance. This can happen when multiple
@@ -362,8 +362,8 @@ func unixDeviceSetup(s *state.State, devicesPath string, typePrefix string, devi
 // already know the device's major and minor numbers to avoid unixDeviceSetup() having to stat the
 // device to ascertain these attributes. If defaultMode is true or mode is supplied in the device
 // config then the origin device does not need to be accessed for its file mode.
-func unixDeviceSetupCharNum(s *state.State, devicesPath string, typePrefix string, deviceName string, m config.Device, major uint32, minor uint32, path string, defaultMode bool, runConf *RunConfig) error {
-	configCopy := config.Device{}
+func unixDeviceSetupCharNum(s *state.State, devicesPath string, typePrefix string, deviceName string, m deviceConfig.Device, major uint32, minor uint32, path string, defaultMode bool, runConf *RunConfig) error {
+	configCopy := deviceConfig.Device{}
 	for k, v := range m {
 		configCopy[k] = v
 	}
diff --git a/lxd/device/disk.go b/lxd/device/disk.go
index 30745f67b6..eec1bed125 100644
--- a/lxd/device/disk.go
+++ b/lxd/device/disk.go
@@ -13,7 +13,7 @@ import (
 	"golang.org/x/sys/unix"
 
 	"github.com/lxc/lxd/lxd/db"
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/util"
 	"github.com/lxc/lxd/shared"
@@ -326,7 +326,7 @@ func (d *disk) postStart() error {
 }
 
 // Update applies configuration changes to a started device.
-func (d *disk) Update(oldDevices config.Devices, isRunning bool) error {
+func (d *disk) Update(oldDevices deviceConfig.Devices, isRunning bool) error {
 	if shared.IsRootDiskDevice(d.config) {
 		// Make sure we have a valid root disk device (and only one).
 		expandedDevices := d.instance.ExpandedDevices()
diff --git a/lxd/device/infiniband.go b/lxd/device/infiniband.go
index 4e836869bf..9fc586d941 100644
--- a/lxd/device/infiniband.go
+++ b/lxd/device/infiniband.go
@@ -1,7 +1,7 @@
 package device
 
 import (
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 )
 
 // infinibandTypes defines the supported infiniband type devices and defines their creation functions.
@@ -11,7 +11,7 @@ var infinibandTypes = map[string]func() device{
 }
 
 // infinibandLoadByType returns an Infiniband device instantiated with supplied config.
-func infinibandLoadByType(c config.Device) device {
+func infinibandLoadByType(c deviceConfig.Device) device {
 	f := infinibandTypes[c["nictype"]]
 	if f != nil {
 		return f()
diff --git a/lxd/device/nic.go b/lxd/device/nic.go
index 45a5e28cc8..f3b3f80330 100644
--- a/lxd/device/nic.go
+++ b/lxd/device/nic.go
@@ -1,7 +1,7 @@
 package device
 
 import (
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/shared"
 )
 
@@ -16,7 +16,7 @@ var nicTypes = map[string]func() device{
 }
 
 // nicLoadByType returns a NIC device instantiated with supplied config.
-func nicLoadByType(c config.Device) device {
+func nicLoadByType(c deviceConfig.Device) device {
 	f := nicTypes[c["nictype"]]
 	if f != nil {
 		return f()
diff --git a/lxd/device/nic_bridged.go b/lxd/device/nic_bridged.go
index fde042545b..a658118c48 100644
--- a/lxd/device/nic_bridged.go
+++ b/lxd/device/nic_bridged.go
@@ -19,7 +19,7 @@ import (
 	"github.com/google/gopacket/layers"
 	"github.com/mdlayher/eui64"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/dnsmasq"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/iptables"
@@ -172,7 +172,7 @@ func (d *nicBridged) Start() (*RunConfig, error) {
 }
 
 // Update applies configuration changes to a started device.
-func (d *nicBridged) Update(oldDevices config.Devices, isRunning bool) error {
+func (d *nicBridged) Update(oldDevices deviceConfig.Devices, isRunning bool) error {
 	oldConfig := oldDevices[d.name]
 
 	// If an IPv6 address has changed, flush all existing IPv6 leases for instance so instance
@@ -351,7 +351,7 @@ func (d *nicBridged) rebuildDnsmasqEntry() error {
 }
 
 // setupHostFilters applies any host side network filters.
-func (d *nicBridged) setupHostFilters(oldConfig config.Device) error {
+func (d *nicBridged) setupHostFilters(oldConfig deviceConfig.Device) error {
 	// Remove any old network filters if non-empty oldConfig supplied as part of update.
 	if oldConfig != nil && (shared.IsTrue(oldConfig["security.mac_filtering"]) || shared.IsTrue(oldConfig["security.ipv4_filtering"]) || shared.IsTrue(oldConfig["security.ipv6_filtering"])) {
 		d.removeFilters(oldConfig)
@@ -369,7 +369,7 @@ func (d *nicBridged) setupHostFilters(oldConfig config.Device) error {
 }
 
 // removeFilters removes any network level filters defined for the instance.
-func (d *nicBridged) removeFilters(m config.Device) error {
+func (d *nicBridged) removeFilters(m deviceConfig.Device) error {
 	if m["hwaddr"] == "" {
 		return fmt.Errorf("Failed to remove network filters for %s: hwaddr not defined", m["name"])
 	}
@@ -475,7 +475,7 @@ func (d *nicBridged) getDHCPStaticIPs(network string, instanceName string) (dhcp
 }
 
 // generateFilterEbtablesRules returns a customised set of ebtables filter rules based on the device.
-func (d *nicBridged) generateFilterEbtablesRules(m config.Device, IPv4 net.IP, IPv6 net.IP) [][]string {
+func (d *nicBridged) generateFilterEbtablesRules(m deviceConfig.Device, IPv4 net.IP, IPv6 net.IP) [][]string {
 	// MAC source filtering rules. Blocks any packet coming from instance with an incorrect Ethernet source MAC.
 	// This is required for IP filtering too.
 	rules := [][]string{
@@ -733,7 +733,7 @@ func (d *nicBridged) allocateFilterIPs() (net.IP, net.IP, error) {
 }
 
 // generateFilterIptablesRules returns a customised set of iptables filter rules based on the device.
-func (d *nicBridged) generateFilterIptablesRules(m config.Device, IPv6 net.IP) (rules [][]string, err error) {
+func (d *nicBridged) generateFilterIptablesRules(m deviceConfig.Device, IPv6 net.IP) (rules [][]string, err error) {
 	mac, err := net.ParseMAC(m["hwaddr"])
 	if err != nil {
 		return
diff --git a/lxd/device/nic_p2p.go b/lxd/device/nic_p2p.go
index 007975f638..b109dc6bc7 100644
--- a/lxd/device/nic_p2p.go
+++ b/lxd/device/nic_p2p.go
@@ -3,7 +3,7 @@ package device
 import (
 	"fmt"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/shared"
 )
@@ -95,7 +95,7 @@ func (d *nicP2P) Start() (*RunConfig, error) {
 }
 
 // Update applies configuration changes to a started device.
-func (d *nicP2P) Update(oldDevices config.Devices, isRunning bool) error {
+func (d *nicP2P) Update(oldDevices deviceConfig.Devices, isRunning bool) error {
 	oldConfig := oldDevices[d.name]
 
 	if !isRunning {
diff --git a/lxd/device/unix_common.go b/lxd/device/unix_common.go
index 85ee0a3cfe..e39207076a 100644
--- a/lxd/device/unix_common.go
+++ b/lxd/device/unix_common.go
@@ -5,13 +5,13 @@ import (
 	"path/filepath"
 	"strings"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/shared"
 )
 
 // unixIsOurDeviceType checks that device file type matches what we are expecting in the config.
-func unixIsOurDeviceType(config config.Device, dType string) bool {
+func unixIsOurDeviceType(config deviceConfig.Device, dType string) bool {
 	if config["type"] == "unix-char" && dType == "c" {
 		return true
 	}
diff --git a/lxd/device/usb.go b/lxd/device/usb.go
index 3e8b01a558..ddc96c8938 100644
--- a/lxd/device/usb.go
+++ b/lxd/device/usb.go
@@ -7,7 +7,7 @@ import (
 	"path"
 	"strings"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/shared"
 )
@@ -18,7 +18,7 @@ const usbDevPath = "/sys/bus/usb/devices"
 // usbIsOurDevice indicates whether the USB device event qualifies as part of our device.
 // This function is not defined against the usb struct type so that it can be used in event
 // callbacks without needing to keep a reference to the usb device struct.
-func usbIsOurDevice(config config.Device, usb *USBEvent) bool {
+func usbIsOurDevice(config deviceConfig.Device, usb *USBEvent) bool {
 	// Check if event matches criteria for this device, if not return.
 	if (config["vendorid"] != "" && config["vendorid"] != usb.Vendor) || (config["productid"] != "" && config["productid"] != usb.Product) {
 		return false
diff --git a/lxd/instance_interface.go b/lxd/instance_interface.go
index e228d56e30..5b06e47243 100644
--- a/lxd/instance_interface.go
+++ b/lxd/instance_interface.go
@@ -8,7 +8,7 @@ import (
 
 	"github.com/lxc/lxd/lxd/db"
 	"github.com/lxc/lxd/lxd/device"
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/state"
 	"github.com/lxc/lxd/shared/api"
@@ -83,9 +83,9 @@ type Instance interface {
 	CreationDate() time.Time
 	LastUsedDate() time.Time
 	ExpandedConfig() map[string]string
-	ExpandedDevices() config.Devices
+	ExpandedDevices() deviceConfig.Devices
 	LocalConfig() map[string]string
-	LocalDevices() config.Devices
+	LocalDevices() deviceConfig.Devices
 	Profiles() []string
 	InitPID() int
 	State() string
diff --git a/lxd/seccomp.go b/lxd/seccomp.go
index a314e52cfc..6a7e375129 100644
--- a/lxd/seccomp.go
+++ b/lxd/seccomp.go
@@ -18,7 +18,7 @@ import (
 
 	"golang.org/x/sys/unix"
 
-	"github.com/lxc/lxd/lxd/device/config"
+	deviceConfig "github.com/lxc/lxd/lxd/device/config"
 	"github.com/lxc/lxd/lxd/ucred"
 	"github.com/lxc/lxd/lxd/util"
 	"github.com/lxc/lxd/shared"
@@ -802,7 +802,7 @@ func taskIds(pid int) (error, int64, int64, int64, int64) {
 	return nil, uid, gid, fsuid, fsgid
 }
 
-func CallForkmknod(c container, dev config.Device, requestPID int) int {
+func CallForkmknod(c container, dev deviceConfig.Device, requestPID int) int {
 	rootLink := fmt.Sprintf("/proc/%d/root", requestPID)
 	rootPath, err := os.Readlink(rootLink)
 	if err != nil {
@@ -860,7 +860,7 @@ type MknodArgs struct {
 }
 
 func (s *SeccompServer) doDeviceSyscall(c container, args *MknodArgs, siov *SeccompIovec) int {
-	dev := config.Device{}
+	dev := deviceConfig.Device{}
 	dev["type"] = "unix-char"
 	dev["mode"] = fmt.Sprintf("%#o", args.cMode)
 	dev["major"] = fmt.Sprintf("%d", unix.Major(uint64(args.cDev)))


More information about the lxc-devel mailing list