~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/lxc/lxd/lxd/api_internal.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package main
 
2
 
 
3
import (
 
4
        "fmt"
 
5
        "net/http"
 
6
        "strconv"
 
7
 
 
8
        "github.com/gorilla/mux"
 
9
)
 
10
 
 
11
var apiInternal = []Command{
 
12
        internalReadyCmd,
 
13
        internalShutdownCmd,
 
14
        internalContainerOnStartCmd,
 
15
        internalContainerOnStopCmd,
 
16
}
 
17
 
 
18
func internalReady(d *Daemon, r *http.Request) Response {
 
19
        if !d.SetupMode {
 
20
                return InternalError(fmt.Errorf("The server isn't currently in setup mode"))
 
21
        }
 
22
 
 
23
        err := d.Ready()
 
24
        if err != nil {
 
25
                return InternalError(err)
 
26
        }
 
27
 
 
28
        d.SetupMode = false
 
29
 
 
30
        return EmptySyncResponse
 
31
}
 
32
 
 
33
func internalWaitReady(d *Daemon, r *http.Request) Response {
 
34
        <-d.readyChan
 
35
 
 
36
        return EmptySyncResponse
 
37
}
 
38
 
 
39
func internalShutdown(d *Daemon, r *http.Request) Response {
 
40
        d.shutdownChan <- true
 
41
 
 
42
        return EmptySyncResponse
 
43
}
 
44
 
 
45
func internalContainerOnStart(d *Daemon, r *http.Request) Response {
 
46
        id, err := strconv.Atoi(mux.Vars(r)["id"])
 
47
        if err != nil {
 
48
                return SmartError(err)
 
49
        }
 
50
 
 
51
        c, err := containerLoadById(d, id)
 
52
        if err != nil {
 
53
                return SmartError(err)
 
54
        }
 
55
 
 
56
        err = c.OnStart()
 
57
        if err != nil {
 
58
                return SmartError(err)
 
59
        }
 
60
 
 
61
        return EmptySyncResponse
 
62
}
 
63
 
 
64
func internalContainerOnStop(d *Daemon, r *http.Request) Response {
 
65
        id, err := strconv.Atoi(mux.Vars(r)["id"])
 
66
        if err != nil {
 
67
                return SmartError(err)
 
68
        }
 
69
 
 
70
        target := r.FormValue("target")
 
71
        if target == "" {
 
72
                target = "unknown"
 
73
        }
 
74
 
 
75
        c, err := containerLoadById(d, id)
 
76
        if err != nil {
 
77
                return SmartError(err)
 
78
        }
 
79
 
 
80
        err = c.OnStop(target)
 
81
        if err != nil {
 
82
                return SmartError(err)
 
83
        }
 
84
 
 
85
        return EmptySyncResponse
 
86
}
 
87
 
 
88
var internalShutdownCmd = Command{name: "shutdown", put: internalShutdown}
 
89
var internalReadyCmd = Command{name: "ready", put: internalReady, get: internalWaitReady}
 
90
var internalContainerOnStartCmd = Command{name: "containers/{id}/onstart", get: internalContainerOnStart}
 
91
var internalContainerOnStopCmd = Command{name: "containers/{id}/onstop", get: internalContainerOnStop}