The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/2263

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Unfortunately, there's not a way to range over a custom type, and there's
no way to sort a map, so we end up with this verbosity :(

Closes #2233

Signed-off-by: Tycho Andersen <[email protected]>
From 7b39b9900e91ca88e84ef8d132bfeb671d8b9871 Mon Sep 17 00:00:00 2001
From: Tycho Andersen <[email protected]>
Date: Thu, 4 Aug 2016 10:58:08 -0600
Subject: [PATCH] alphabetize device processing

Unfortunately, there's not a way to range over a custom type, and there's
no way to sort a map, so we end up with this verbosity :(

Closes #2233

Signed-off-by: Tycho Andersen <[email protected]>
---
 lxd/container_lxc.go | 36 ++++++++++++++++++++++++------------
 lxd/devices.go       |  4 +++-
 lxd/networks.go      |  5 ++++-
 shared/devices.go    | 16 ++++++++++++++++
 4 files changed, 47 insertions(+), 14 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 3a9ca74..cb2f2ca 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -118,7 +118,8 @@ func containerLXCCreate(d *Daemon, args containerArgs) 
(container, error) {
 
        // Look for a rootfs entry
        rootfs := false
-       for _, m := range c.expandedDevices {
+       for _, name := range c.expandedDevices.DeviceNames() {
+               m := c.expandedDevices[name]
                if m["type"] == "disk" && m["path"] == "/" {
                        rootfs = true
                        break
@@ -654,7 +655,8 @@ func (c *containerLXC) initLXC() error {
                }
 
                hasDiskLimits := false
-               for _, m := range c.expandedDevices {
+               for _, name := range c.expandedDevices.DeviceNames() {
+                       m := c.expandedDevices[name]
                        if m["type"] != "disk" {
                                continue
                        }
@@ -720,7 +722,8 @@ func (c *containerLXC) initLXC() error {
        }
 
        // Setup devices
-       for k, m := range c.expandedDevices {
+       for _, k := range c.expandedDevices.DeviceNames() {
+               m := c.expandedDevices[k]
                if shared.StringInSlice(m["type"], []string{"unix-char", 
"unix-block"}) {
                        // Prepare all the paths
                        srcPath := m["path"]
@@ -965,7 +968,8 @@ func (c *containerLXC) startCommon() (string, error) {
        }
 
        // Sanity checks for devices
-       for name, m := range c.expandedDevices {
+       for _, name := range c.expandedDevices.DeviceNames() {
+               m := c.expandedDevices[name]
                switch m["type"] {
                case "disk":
                        if m["source"] != "" && !shared.PathExists(m["source"]) 
{
@@ -1083,7 +1087,8 @@ func (c *containerLXC) startCommon() (string, error) {
        var usbs []usbDevice
 
        // Create the devices
-       for k, m := range c.expandedDevices {
+       for _, k := range c.expandedDevices.DeviceNames() {
+               m := c.expandedDevices[k]
                if shared.StringInSlice(m["type"], []string{"unix-char", 
"unix-block"}) {
                        // Unix device
                        devPath, err := c.createUnixDevice(m)
@@ -1177,7 +1182,8 @@ func (c *containerLXC) startCommon() (string, error) {
 
        // Cleanup any leftover volatile entries
        netNames := []string{}
-       for k, v := range c.expandedDevices {
+       for _, k := range c.expandedDevices.DeviceNames() {
+               v := c.expandedDevices[k]
                if v["type"] == "nic" {
                        netNames = append(netNames, k)
                }
@@ -1404,7 +1410,8 @@ func (c *containerLXC) OnStart() error {
        }
 
        // Apply network limits
-       for name, m := range c.expandedDevices {
+       for _, name := range c.expandedDevices.DeviceNames() {
+               m := c.expandedDevices[name]
                if m["type"] != "nic" {
                        continue
                }
@@ -2259,7 +2266,8 @@ func (c *containerLXC) Update(args containerArgs, 
userRequested bool) error {
                }
 
                var newRootfs shared.Device
-               for _, m := range c.expandedDevices {
+               for _, name := range c.expandedDevices.DeviceNames() {
+                       m := c.expandedDevices[name]
                        if m["type"] == "disk" && m["path"] == "/" {
                                newRootfs = m
                                break
@@ -3314,7 +3322,8 @@ func (c *containerLXC) Exec(command []string, env 
map[string]string, stdin *os.F
 func (c *containerLXC) diskState() map[string]shared.ContainerStateDisk {
        disk := map[string]shared.ContainerStateDisk{}
 
-       for name, d := range c.expandedDevices {
+       for _, name := range c.expandedDevices.DeviceNames() {
+               d := c.expandedDevices[name]
                if d["type"] != "disk" {
                        continue
                }
@@ -3946,7 +3955,8 @@ func (c *containerLXC) fillNetworkDevice(name string, m 
shared.Device) (shared.D
                devNames := []string{}
 
                // Include all static interface names
-               for _, v := range c.expandedDevices {
+               for _, k := range c.expandedDevices.DeviceNames() {
+                       v := c.expandedDevices[k]
                        if v["name"] != "" && !shared.StringInSlice(v["name"], 
devNames) {
                                devNames = append(devNames, v["name"])
                        }
@@ -4344,7 +4354,8 @@ func (c *containerLXC) getDiskLimits() 
(map[string]deviceBlockLimit, error) {
 
        // Process all the limits
        blockLimits := map[string][]deviceBlockLimit{}
-       for _, m := range c.expandedDevices {
+       for _, k := range c.expandedDevices.DeviceNames() {
+               m := c.expandedDevices[k]
                if m["type"] != "disk" {
                        continue
                }
@@ -4518,7 +4529,8 @@ func (c *containerLXC) getHostInterface(name string) 
string {
                }
        }
 
-       for k, dev := range c.expandedDevices {
+       for _, k := range c.expandedDevices.DeviceNames() {
+               dev := c.expandedDevices[k]
                if dev["type"] != "nic" {
                        continue
                }
diff --git a/lxd/devices.go b/lxd/devices.go
index 3932fc8..595c6aa 100644
--- a/lxd/devices.go
+++ b/lxd/devices.go
@@ -480,7 +480,9 @@ func deviceUSBEvent(d *Daemon, usb usbDevice) {
                        continue
                }
 
-               for _, m := range c.ExpandedDevices() {
+               devices := c.ExpandedDevices()
+               for _, name := range devices.DeviceNames() {
+                       m := devices[name]
                        if m["type"] != "usb" {
                                continue
                        }
diff --git a/lxd/networks.go b/lxd/networks.go
index f649b4e..bc209e4 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -54,7 +54,10 @@ type network struct {
 }
 
 func isOnBridge(c container, bridge string) bool {
-       for _, device := range c.ExpandedDevices() {
+       devices := c.ExpandedDevices()
+       for _, name := range devices.DeviceNames() {
+               device := devices[name]
+
                if device["type"] != "nic" {
                        continue
                }
diff --git a/shared/devices.go b/shared/devices.go
index 93eb294..fb2938e 100644
--- a/shared/devices.go
+++ b/shared/devices.go
@@ -1,5 +1,9 @@
 package shared
 
+import (
+       "sort"
+)
+
 type Device map[string]string
 type Devices map[string]Device
 
@@ -102,3 +106,15 @@ func (newBaseDevices Devices) 
ExtendFromProfile(currentFullDevices Devices, newD
 
        return nil
 }
+
+/* DeviceNames returns the device names for this Devices in sorted order */
+func (devices Devices) DeviceNames() []string {
+       sorted := sort.StringSlice([]string{})
+       for k, _ := range devices {
+               sorted = append(sorted, k)
+       }
+
+       sort.Sort(sorted)
+
+       return sorted
+}
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to