[lxc-devel] [lxd/master] lxd init improvements
stgraber on Github
lxc-bot at linuxcontainers.org
Thu Feb 4 11:31:00 UTC 2016
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/20160204/d8be4151/attachment.bin>
-------------- next part --------------
From 5b0f6b7628af7e29f2d758595d1532552f9adcd8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 4 Feb 2016 12:23:01 +0100
Subject: [PATCH 1/3] init: Improve detection of available backends
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #1565
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxd/main.go | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/lxd/main.go b/lxd/main.go
index 8b47714..4558aa8 100644
--- a/lxd/main.go
+++ b/lxd/main.go
@@ -510,6 +510,15 @@ func setupLXD() error {
var networkPort int // Port
var trustPassword string // Trust password
+ backendsAvailable := []string{"dir"}
+ backendsSupported := []string{"dir", "zfs"}
+
+ // Detect zfs
+ out, err := exec.LookPath("zfs")
+ if err == nil && len(out) != 0 {
+ backendsAvailable = append(backendsAvailable, "zfs")
+ }
+
reader := bufio.NewReader(os.Stdin)
askBool := func(question string) bool {
@@ -613,6 +622,14 @@ func setupLXD() error {
if *argAuto {
// Do a bunch of sanity checks
+ if !shared.StringInSlice(*argStorageBackend, backendsSupported) {
+ return fmt.Errorf("The requested backend '%s' isn't supported by lxd init.", *argStorageBackend,)
+ }
+
+ if !shared.StringInSlice(*argStorageBackend, backendsAvailable) {
+ return fmt.Errorf("The requested backend '%s' isn't available on your system (missing tools).", *argStorageBackend,)
+ }
+
if *argStorageBackend == "dir" {
if *argStorageCreateLoop != -1 || *argStorageCreateDevice != "" || *argStoragePool != "" {
return fmt.Errorf("None of --storage-pool, --storage-create-device or --storage-create-pool may be used with the 'dir' backend.")
@@ -655,7 +672,15 @@ func setupLXD() error {
networkPort = *argNetworkPort
trustPassword = *argTrustPassword
} else {
- storageBackend = askChoice("Name of the storage backend to use (dir or zfs): ", []string{"dir", "zfs"})
+ storageBackend = askChoice("Name of the storage backend to use (dir or zfs): ", backendsSupported)
+
+ if !shared.StringInSlice(storageBackend, backendsSupported) {
+ return fmt.Errorf("The requested backend '%s' isn't supported by lxd init.", storageBackend)
+ }
+
+ if !shared.StringInSlice(storageBackend, backendsAvailable) {
+ return fmt.Errorf("The requested backend '%s' isn't available on your system (missing tools).", storageBackend)
+ }
if storageBackend == "zfs" {
if askBool("Create a new ZFS pool (yes/no)? ") {
@@ -698,11 +723,6 @@ func setupLXD() error {
}
if storageBackend == "zfs" {
- out, err := exec.LookPath("zfs")
- if err != nil || len(out) == 0 {
- return fmt.Errorf("The 'zfs' tool isn't available")
- }
-
if storageMode == "loop" {
storageDevice = shared.VarPath("zfs.img")
f, err := os.Create(storageDevice)
From 382bc88584de2eae4c1a8927d92facc0f4915460 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 4 Feb 2016 12:23:37 +0100
Subject: [PATCH 2/3] init: Use zpool create -f to work on unformatted disks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #1566
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxd/main.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lxd/main.go b/lxd/main.go
index 4558aa8..e888010 100644
--- a/lxd/main.go
+++ b/lxd/main.go
@@ -745,7 +745,7 @@ func setupLXD() error {
output, err := exec.Command(
"zpool",
"create", storagePool, storageDevice,
- "-m", "none").CombinedOutput()
+ "-f", "-m", "none").CombinedOutput()
if err != nil {
return fmt.Errorf("Failed to create the ZFS pool: %s", output)
}
From 1df773b9a1ad41c74ad5e3d6db65bba76d325f48 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 4 Feb 2016 12:25:21 +0100
Subject: [PATCH 3/3] init: Attempt to modprobe the zfs module
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Closes #1564
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
lxd/main.go | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lxd/main.go b/lxd/main.go
index e888010..808c0d8 100644
--- a/lxd/main.go
+++ b/lxd/main.go
@@ -723,6 +723,8 @@ func setupLXD() error {
}
if storageBackend == "zfs" {
+ _, _ = exec.Command("modprobe", "zfs").CombinedOutput()
+
if storageMode == "loop" {
storageDevice = shared.VarPath("zfs.img")
f, err := os.Create(storageDevice)
More information about the lxc-devel
mailing list