[lxc-devel] [lxd/master] More API tweaks and fixes
stgraber on Github
lxc-bot at linuxcontainers.org
Thu Apr 25 21:08:39 UTC 2019
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/20190425/24f81c0e/attachment.bin>
-------------- next part --------------
From 437ad517e6dc4b09bb70f6d428562d458d5cb06a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 25 Apr 2019 16:47:33 -0400
Subject: [PATCH 1/3] lxd/network: Fix DNS records for projects
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/networks_utils.go | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/lxd/networks_utils.go b/lxd/networks_utils.go
index a7de30c088..c3afbae9ac 100644
--- a/lxd/networks_utils.go
+++ b/lxd/networks_utils.go
@@ -896,7 +896,7 @@ func networkUpdateStatic(s *state.State, networkName string) error {
entries[d["parent"]] = [][]string{}
}
- entries[d["parent"]] = append(entries[d["parent"]], []string{d["hwaddr"], projectPrefix(c.Project(), c.Name()), d["ipv4.address"], d["ipv6.address"]})
+ entries[d["parent"]] = append(entries[d["parent"]], []string{d["hwaddr"], c.Project(), c.Name(), d["ipv4.address"], d["ipv6.address"]})
}
}
@@ -931,36 +931,37 @@ func networkUpdateStatic(s *state.State, networkName string) error {
// Apply the changes
for entryIdx, entry := range entries {
hwaddr := entry[0]
- cName := entry[1]
- ipv4Address := entry[2]
- ipv6Address := entry[3]
+ project := entry[1]
+ cName := entry[2]
+ ipv4Address := entry[3]
+ ipv6Address := entry[4]
line := hwaddr
// Look for duplicates
duplicate := false
for iIdx, i := range entries {
- if entry[1] == i[1] {
+ if projectPrefix(entry[1], entry[2]) == projectPrefix(i[1], i[2]) {
// Skip ourselves
continue
}
if entry[0] == i[0] {
// Find broken configurations
- logger.Errorf("Duplicate MAC detected: %s and %s", entry[1], i[1])
+ logger.Errorf("Duplicate MAC detected: %s and %s", projectPrefix(entry[1], entry[2]), projectPrefix(i[1], i[2]))
}
- if i[2] == "" && i[3] == "" {
+ if i[3] == "" && i[4] == "" {
// Skip unconfigured
continue
}
- if entry[2] == i[2] && entry[3] == i[3] {
+ if entry[3] == i[3] && entry[4] == i[4] {
// Find identical containers (copies with static configuration)
if entryIdx > iIdx {
duplicate = true
} else {
line = fmt.Sprintf("%s,%s", line, i[0])
- logger.Debugf("Found containers with duplicate IPv4/IPv6: %s and %s", entry[1], i[1])
+ logger.Debugf("Found containers with duplicate IPv4/IPv6: %s and %s", projectPrefix(entry[1], entry[2]), projectPrefix(i[1], i[2]))
}
}
}
@@ -986,7 +987,7 @@ func networkUpdateStatic(s *state.State, networkName string) error {
continue
}
- err := ioutil.WriteFile(shared.VarPath("networks", network, "dnsmasq.hosts", cName), []byte(line+"\n"), 0644)
+ err := ioutil.WriteFile(shared.VarPath("networks", network, "dnsmasq.hosts", projectPrefix(project, cName)), []byte(line+"\n"), 0644)
if err != nil {
return err
}
From 26409167ba9e7447928c887160378faf82969100 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Thu, 25 Apr 2019 17:06:32 -0400
Subject: [PATCH 2/3] lxd/network: Filter leases by project
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/networks.go | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/lxd/networks.go b/lxd/networks.go
index 1f5494b0ff..8882800842 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -665,6 +665,7 @@ func doNetworkUpdate(d *Daemon, name string, oldConfig map[string]string, req ap
func networkLeasesGet(d *Daemon, r *http.Request) Response {
name := mux.Vars(r)["name"]
+ project := projectParam(r)
// Try to get the network
n, err := doNetworkGet(d, name)
@@ -678,11 +679,12 @@ func networkLeasesGet(d *Daemon, r *http.Request) Response {
}
leases := []api.NetworkLease{}
+ projectMacs := []string{}
// Get all static leases
if !isClusterNotification(r) {
// Get all the containers
- containers, err := containerLoadFromAllProjects(d.State())
+ containers, err := containerLoadByProject(d.State(), project)
if err != nil {
return SmartError(err)
}
@@ -701,6 +703,11 @@ func networkLeasesGet(d *Daemon, r *http.Request) Response {
continue
}
+ // Record the MAC
+ if d["hwaddr"] != "" {
+ projectMacs = append(projectMacs, d["hwaddr"])
+ }
+
// Add the lease
if d["ipv4.address"] != "" {
leases = append(leases, api.NetworkLease{
@@ -800,6 +807,18 @@ func networkLeasesGet(d *Daemon, r *http.Request) Response {
if err != nil {
return SmartError(err)
}
+
+ // Filter based on project
+ filteredLeases := []api.NetworkLease{}
+ for _, lease := range leases {
+ if !shared.StringInSlice(lease.Hwaddr, projectMacs) {
+ continue
+ }
+
+ filteredLeases = append(filteredLeases, lease)
+ }
+
+ leases = filteredLeases
}
return SyncResponse(true, leases)
From f5a64c26302f121bcd594ea3b40b979bff1cac15 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Wed, 24 Apr 2019 19:14:38 -0400
Subject: [PATCH 3/3] lxd/api: Handle AccessHandler
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 | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/lxd/daemon.go b/lxd/daemon.go
index 254936a982..06820f6065 100644
--- a/lxd/daemon.go
+++ b/lxd/daemon.go
@@ -377,27 +377,32 @@ func (d *Daemon) createCmd(restAPI *mux.Router, version string, c APIEndpoint) {
var resp Response
resp = NotImplemented(nil)
+ handleRequest := func(action APIEndpointAction) Response {
+ if action.Handler == nil {
+ return NotImplemented(nil)
+ }
+
+ if action.AccessHandler != nil {
+ resp := action.AccessHandler(d, r)
+ if resp != EmptySyncResponse {
+ return resp
+ }
+ }
+
+ return action.Handler(d, r)
+ }
+
switch r.Method {
case "GET":
- if c.Get.Handler != nil {
- resp = c.Get.Handler(d, r)
- }
+ resp = handleRequest(c.Get)
case "PUT":
- if c.Put.Handler != nil {
- resp = c.Put.Handler(d, r)
- }
+ resp = handleRequest(c.Put)
case "POST":
- if c.Post.Handler != nil {
- resp = c.Post.Handler(d, r)
- }
+ resp = handleRequest(c.Post)
case "DELETE":
- if c.Delete.Handler != nil {
- resp = c.Delete.Handler(d, r)
- }
+ resp = handleRequest(c.Delete)
case "PATCH":
- if c.Patch.Handler != nil {
- resp = c.Patch.Handler(d, r)
- }
+ resp = handleRequest(c.Patch)
default:
resp = NotFound(fmt.Errorf("Method '%s' not found", r.Method))
}
More information about the lxc-devel
mailing list