While investigating bug #1307677, I tried changing my local.jenv file to make it connect directly to the state server. I ended up getting:
$ juju status -e localkvm --debug
2014-04-24 11:45:08 INFO juju.cmd supercommand.go:296 running juju-1.19.1-trusty-amd64 [gc]
2014-04-24 11:45:08 DEBUG juju.conn api.go:185 trying cached API connection settings
2014-04-24 11:45:08 INFO juju.conn api.go:264 connecting to API addresses: [127.0.0.1:17017]
2014-04-24 11:45:08 INFO juju.state.api apiclient.go:198 dialing "wss://127.0.0.1:17017/"
2014-04-24 11:45:08 DEBUG juju.state.api apiclient.go:204 error dialing "wss://127.0.0.1:17017/", will retry: websocket.Dial wss://127.0.0.1:17017/: dial tcp 127.0.0.1:17017: connection refused
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4e06c1]
goroutine 9 [running]:
runtime.panic(0xc4aa20, 0x18db528)
/usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6
launchpad.net/juju-core/environs/config.(*Config).mustString(0x0, 0xd7b1e0, 0x4, 0xc210060918, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/environs/config/config.go:424 +0x31
launchpad.net/juju-core/environs/config.(*Config).Type(0x0, 0xc210060900, 0x430edf)
/home/jameinel/dev/go/src/launchpad.net/juju-core/environs/config/config.go:444 +0x3b
launchpad.net/juju-core/environs.New(0x0, 0xc210134420, 0x0, 0x7fc32ceb5201, 0xc210125300)
/home/jameinel/dev/go/src/launchpad.net/juju-core/environs/open.go:161 +0x27
launchpad.net/juju-core/juju.apiConfigConnect(0x7fc32ceb51e0, 0xc2100519a0, 0xc210129420, 0x7fff2d0496e6, 0x8, ...)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:301 +0x108
launchpad.net/juju-core/juju.func·003(0xc210134420, 0x0, 0x0, 0x0, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:196 +0x6b
launchpad.net/juju-core/utils/parallel.func·005()
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:135 +0x41
created by launchpad.net/juju-core/utils/parallel.(*Try).loop
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:86 +0x9f
goroutine 1 [chan receive]:
launchpad.net/tomb.(*Tomb).Wait(0xc210051850, 0xc210126420, 0xc210081a00)
/home/jameinel/dev/go/src/launchpad.net/tomb/tomb.go:110 +0x42
launchpad.net/juju-core/utils/parallel.(*Try).Result(0xc210051850, 0xc21012a300, 0x0, 0x0, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:192 +0x2e
launchpad.net/juju-core/juju.newAPIFromStore(0x7fff2d0496e6, 0x8, 0x7fc32ceb5138, 0xc2101094d0, 0xf2bc00, ...)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:199 +0x3d7
launchpad.net/juju-core/juju.newAPIClient(0x7fff2d0496e6, 0x8, 0xc2100b5b60, 0x0, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:125 +0x7b
launchpad.net/juju-core/juju.NewAPIClientFromName(0x7fff2d0496e6, 0x8, 0x0, 0x0, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:84 +0x31
main.(*StatusCommand).Run(0xc2100da3c0, 0xc2100bd140, 0x0, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/status.go:77 +0xb7
main.envCmdWrapper.Run(0x7fc32ceb39d0, 0xc2100da3c0, 0xc2100bd140, 0x7fc32cd1d190, 0x2)
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/main.go:162 +0x48
main.(*envCmdWrapper).Run(0xc210036ce0, 0xc2100bd140, 0x14, 0x7fc32cd1d190)
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/addmachine.go:1 +0x9a
launchpad.net/juju-core/cmd.(*SuperCommand).Run(0xc2100cd780, 0xc2100bd140, 0xc2100bd140, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/supercommand.go:297 +0x439
launchpad.net/juju-core/cmd.Main(0x7fc32ceb4e00, 0xc2100cd780, 0xc2100bd140, 0xc21000a010, 0x4, ...)
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/cmd.go:244 +0x283
main.Main(0xc21000a000, 0x5, 0x5)
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/main.go:135 +0x44c2
main.main()
/home/jameinel/dev/go/src/launchpad.net/juju-core/cmd/juju/main.go:177 +0x44
goroutine 3 [syscall]:
os/signal.loop()
/usr/lib/go/src/pkg/os/signal/signal_unix.go:21 +0x1e
created by os/signal.init·1
/usr/lib/go/src/pkg/os/signal/signal_unix.go:27 +0x31
goroutine 6 [select]:
launchpad.net/juju-core/utils/parallel.(*Try).loop(0xc210051850, 0x0, 0x8a8b70, 0xc210052700, 0x443452)
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:83 +0x30f
launchpad.net/juju-core/utils/parallel.func·004()
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:62 +0x54
created by launchpad.net/juju-core/utils/parallel.NewTry
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:65 +0x1b3
goroutine 7 [chan receive]:
launchpad.net/tomb.(*Tomb).Wait(0xc210051cb0, 0xc210134540, 0x4e7b00)
/home/jameinel/dev/go/src/launchpad.net/tomb/tomb.go:110 +0x42
launchpad.net/juju-core/utils/parallel.(*Try).Result(0xc210051cb0, 0xc210134660, 0x0, 0x8bb2c97001, 0x77359400)
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:192 +0x2e
launchpad.net/juju-core/state/api.Open(0xc2101344e0, 0x2faf080, 0x8bb2c97000, 0x77359400, 0x0, ...)
/home/jameinel/dev/go/src/launchpad.net/juju-core/state/api/apiclient.go:139 +0x326
launchpad.net/juju-core/juju.defaultAPIOpen(0xc2101344e0, 0x2faf080, 0x8bb2c97000, 0x77359400, 0x20, ...)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:117 +0x4a
launchpad.net/juju-core/juju.apiInfoConnect(0x7fc32ceb5138, 0xc2101094d0, 0x7fc32ceb51e0, 0xc2100519a0, 0xf2bc00, ...)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:271 +0x2c7
launchpad.net/juju-core/juju.func·002(0xc210134420, 0x436a6f, 0x18ff140, 0x100000000, 0x100000200)
/home/jameinel/dev/go/src/launchpad.net/juju-core/juju/api.go:187 +0x56
launchpad.net/juju-core/utils/parallel.func·005()
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:135 +0x41
created by launchpad.net/juju-core/utils/parallel.(*Try).loop
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:86 +0x9f
goroutine 8 [select]:
launchpad.net/juju-core/utils/parallel.(*Try).loop(0xc210051cb0, 0x0, 0x0, 0x0, 0x35)
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:83 +0x30f
launchpad.net/juju-core/utils/parallel.func·004()
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:62 +0x54
created by launchpad.net/juju-core/utils/parallel.NewTry
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:65 +0x1b3
goroutine 10 [runnable]:
time.Sleep(0x77328fd5)
/usr/lib/go/src/pkg/runtime/time.goc:31 +0x31
launchpad.net/juju-core/utils.(*Attempt).Next(0xc210134720, 0xe58a70)
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/attempt.go:51 +0x122
launchpad.net/juju-core/state/api.func·002(0xc2101346c0, 0x0, 0x0, 0x0, 0x0)
/home/jameinel/dev/go/src/launchpad.net/juju-core/state/api/apiclient.go:192 +0x58
launchpad.net/juju-core/utils/parallel.func·005()
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:135 +0x41
created by launchpad.net/juju-core/utils/parallel.(*Try).loop
/home/jameinel/dev/go/src/launchpad.net/juju-core/utils/parallel/try.go:86 +0x9f
in juju/api.go New(config. NoDefaults, info.BootstrapC onfig() )
cfg, err = config.
That err is never checked. So presumably we have an error in my .jenv file but we are getting an err and then cfg is nil, and then we proceed to just do environs.New(nil) which causes the panic.