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"
16
// Import the providers.
18
_ "launchpad.net/juju-core/environs/all"
22
log.SetTarget(stdlog.New(os.Stdout, "", stdlog.LstdFlags))
23
if err := build(); err != nil {
24
fmt.Fprintf(os.Stderr, "%v\n", err)
30
environ, err := environs.NewFromName("")
34
conn, err := juju.NewConn(environ)
38
repo := &charm.LocalRepository{filepath.Dir(os.Args[0])}
39
curl := charm.MustParseURL("local:precise/builddb")
40
ch, err := conn.PutCharm(curl, repo, false)
44
service, err := conn.State.AddService("builddb", ch)
48
if err := service.SetExposed(); err != nil {
51
units, err := conn.AddUnits(service, 1, "")
56
log.Infof("builddb: Waiting for unit to reach %q status...", params.StatusStarted)
58
last, info, err := unit.Status()
63
for last != params.StatusStarted {
64
time.Sleep(2 * time.Second)
65
if err := unit.Refresh(); err != nil {
68
status, info, err := unit.Status()
73
logStatus(status, info)
77
addr, ok := unit.PublicAddress()
79
return fmt.Errorf("cannot retrieve files: build unit lacks a public-address")
81
log.Noticef("builddb: Built files published at http://%s", addr)
82
log.Noticef("builddb: Remember to destroy the environment when you're done...")
86
func logStatus(status params.Status, info string) {
88
log.Infof("builddb: Unit status is %q", status)
90
log.Infof("builddb: Unit status is %q: %s", status, info)