~juju-qa/ubuntu/yakkety/juju/2.0-rc3-again

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/cmd/builddb/main.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-04-24 22:34:47 UTC
  • Revision ID: package-import@ubuntu.com-20130424223447-f0qdji7ubnyo0s71
Tags: upstream-1.10.0.1
ImportĀ upstreamĀ versionĀ 1.10.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package main
 
2
 
 
3
import (
 
4
        "fmt"
 
5
        "launchpad.net/juju-core/charm"
 
6
        "launchpad.net/juju-core/environs"
 
7
        "launchpad.net/juju-core/juju"
 
8
        "launchpad.net/juju-core/log"
 
9
        "launchpad.net/juju-core/state/api/params"
 
10
        stdlog "log"
 
11
        "os"
 
12
        "path/filepath"
 
13
        "time"
 
14
)
 
15
 
 
16
// Import the providers.
 
17
import (
 
18
        _ "launchpad.net/juju-core/environs/all"
 
19
)
 
20
 
 
21
func main() {
 
22
        log.SetTarget(stdlog.New(os.Stdout, "", stdlog.LstdFlags))
 
23
        if err := build(); err != nil {
 
24
                fmt.Fprintf(os.Stderr, "%v\n", err)
 
25
                os.Exit(1)
 
26
        }
 
27
}
 
28
 
 
29
func build() error {
 
30
        environ, err := environs.NewFromName("")
 
31
        if err != nil {
 
32
                return err
 
33
        }
 
34
        conn, err := juju.NewConn(environ)
 
35
        if err != nil {
 
36
                return err
 
37
        }
 
38
        repo := &charm.LocalRepository{filepath.Dir(os.Args[0])}
 
39
        curl := charm.MustParseURL("local:precise/builddb")
 
40
        ch, err := conn.PutCharm(curl, repo, false)
 
41
        if err != nil {
 
42
                return err
 
43
        }
 
44
        service, err := conn.State.AddService("builddb", ch)
 
45
        if err != nil {
 
46
                return err
 
47
        }
 
48
        if err := service.SetExposed(); err != nil {
 
49
                return err
 
50
        }
 
51
        units, err := conn.AddUnits(service, 1, "")
 
52
        if err != nil {
 
53
                return err
 
54
        }
 
55
 
 
56
        log.Infof("builddb: Waiting for unit to reach %q status...", params.StatusStarted)
 
57
        unit := units[0]
 
58
        last, info, err := unit.Status()
 
59
        if err != nil {
 
60
                return err
 
61
        }
 
62
        logStatus(last, info)
 
63
        for last != params.StatusStarted {
 
64
                time.Sleep(2 * time.Second)
 
65
                if err := unit.Refresh(); err != nil {
 
66
                        return err
 
67
                }
 
68
                status, info, err := unit.Status()
 
69
                if err != nil {
 
70
                        return err
 
71
                }
 
72
                if status != last {
 
73
                        logStatus(status, info)
 
74
                        last = status
 
75
                }
 
76
        }
 
77
        addr, ok := unit.PublicAddress()
 
78
        if !ok {
 
79
                return fmt.Errorf("cannot retrieve files: build unit lacks a public-address")
 
80
        }
 
81
        log.Noticef("builddb: Built files published at http://%s", addr)
 
82
        log.Noticef("builddb: Remember to destroy the environment when you're done...")
 
83
        return nil
 
84
}
 
85
 
 
86
func logStatus(status params.Status, info string) {
 
87
        if info == "" {
 
88
                log.Infof("builddb: Unit status is %q", status)
 
89
        } else {
 
90
                log.Infof("builddb: Unit status is %q: %s", status, info)
 
91
        }
 
92
}