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

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) ===
Adds `instanceInstantiate` function and replaces use of `containerLXCLoad` with it.

This function will then detect the instance type and call `containerLXCLoad` for containers and will then be modified in the future to instantiate VM instance types.
From bd849a1ec6422831e6901f0634d5deee7cc3a917 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 17 Sep 2019 10:57:17 +0100
Subject: [PATCH 1/2] lxd/container: Adds instanceInstantiate function

instanceInstantiate function will create the correct underlying struct based on 
instance type and returns it as an Instance.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/container.go | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/lxd/container.go b/lxd/container.go
index dce1e8f191..70b3df455f 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -1143,6 +1143,24 @@ func instanceLoadAllInternal(dbInstances []db.Instance, 
s *state.State) ([]Insta
        return instances, nil
 }
 
+// instanceInstantiate creates the underlying instance type struct and returns 
it as an Instance.
+func instanceInstantiate(s *state.State, args db.InstanceArgs, cProfiles 
[]api.Profile) (Instance, error) {
+       var inst Instance
+       var err error
+
+       if args.Type == instancetype.Container {
+               inst, err = containerLXCLoad(s, args, cProfiles)
+       } else {
+               return nil, fmt.Errorf("Invalid instance type for instance %s", 
args.Name)
+       }
+
+       if err != nil {
+               return nil, err
+       }
+
+       return inst, nil
+}
+
 func containerCompareSnapshots(source Instance, target Instance) ([]Instance, 
[]Instance, error) {
        // Get the source snapshots
        sourceSnapshots, err := source.Snapshots()

From 73fd165c973b094da112d7832c7de1bde061c16a Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Tue, 17 Sep 2019 10:58:22 +0100
Subject: [PATCH 2/2] lxd: Replaces use of containerLXCLoad with
 instanceInstantiate

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/container.go       | 20 +++++++-------------
 lxd/containers.go      |  4 ++--
 lxd/containers_post.go |  4 ++--
 3 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/lxd/container.go b/lxd/container.go
index 70b3df455f..dfb40fb0b9 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -986,13 +986,12 @@ func instanceLoadByProjectAndName(s *state.State, 
project, name string) (Instanc
        }
 
        args := db.ContainerToArgs(container)
-
-       c, err := containerLXCLoad(s, args, nil)
+       inst, err := instanceInstantiate(s, args, nil)
        if err != nil {
                return nil, errors.Wrap(err, "Failed to load container")
        }
 
-       return c, nil
+       return inst, nil
 }
 
 func instanceLoadByProject(s *state.State, project string) ([]Instance, error) 
{
@@ -1126,18 +1125,13 @@ func instanceLoadAllInternal(dbInstances []db.Instance, 
s *state.State) ([]Insta
                        cProfiles = append(cProfiles, 
profiles[dbInstance.Project][name])
                }
 
-               if dbInstance.Type == instancetype.Container {
-                       args := db.ContainerToArgs(&dbInstance)
-                       ct, err := containerLXCLoad(s, args, cProfiles)
-                       if err != nil {
-                               return nil, err
-                       }
-                       instances = append(instances, ct)
-               } else {
-                       // TODO add virtual machine load here.
-                       continue
+               args := db.ContainerToArgs(&dbInstance)
+               inst, err := instanceInstantiate(s, args, cProfiles)
+               if err != nil {
+                       return nil, err
                }
 
+               instances = append(instances, inst)
        }
 
        return instances, nil
diff --git a/lxd/containers.go b/lxd/containers.go
index ab403bf639..0d4f588db5 100644
--- a/lxd/containers.go
+++ b/lxd/containers.go
@@ -278,7 +278,7 @@ func containersShutdown(s *state.State) error {
 
                for project, names := range cnames {
                        for _, name := range names {
-                               c, err := containerLXCLoad(s, db.InstanceArgs{
+                               inst, err := instanceInstantiate(s, 
db.InstanceArgs{
                                        Project: project,
                                        Name:    name,
                                        Config:  make(map[string]string),
@@ -287,7 +287,7 @@ func containersShutdown(s *state.State) error {
                                        return err
                                }
 
-                               instances = append(instances, c)
+                               instances = append(instances, inst)
                        }
                }
        }
diff --git a/lxd/containers_post.go b/lxd/containers_post.go
index 5c79e675d2..79e403a45d 100644
--- a/lxd/containers_post.go
+++ b/lxd/containers_post.go
@@ -323,12 +323,12 @@ func createFromMigration(d *Daemon, project string, req 
*api.InstancesPost) resp
                        }
                } else {
                        // Retrieve the future storage pool
-                       cM, err := containerLXCLoad(d.State(), args, nil)
+                       inst, err := instanceInstantiate(d.State(), args, nil)
                        if err != nil {
                                return response.InternalError(err)
                        }
 
-                       _, rootDiskDevice, err := 
shared.GetRootDiskDevice(cM.ExpandedDevices().CloneNative())
+                       _, rootDiskDevice, err := 
shared.GetRootDiskDevice(inst.ExpandedDevices().CloneNative())
                        if err != nil {
                                return response.InternalError(err)
                        }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to