brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rich...@apache.org
Subject [39/50] [abbrv] brooklyn-client git commit: Add new Godeps
Date Tue, 08 Mar 2016 13:20:12 GMT
http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_metadata/command_metadata.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_metadata/command_metadata.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_metadata/command_metadata.go
new file mode 100644
index 0000000..7f5c1b9
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_metadata/command_metadata.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package command_metadata
+
+import "github.com/codegangsta/cli"
+
+type CommandMetadata struct {
+	Name            string
+	Aliases         []string
+	ShortName       string
+	Usage           string
+	Description     string
+	Flags           []cli.Flag
+	SkipFlagParsing bool
+	TotalArgs       int //Optional: number of required arguments to skip for flag verification
+	Operands        []CommandMetadata
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_runner/runner.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_runner/runner.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_runner/runner.go
new file mode 100644
index 0000000..5fc86e5
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/command_runner/runner.go
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package command_runner
+
+import (
+	"github.com/apache/brooklyn-client/command_factory"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+)
+
+type Runner interface {
+	RunCmdByName(cmdName string, c *cli.Context) (err error)
+	RunSubCmdByName(cmdName string, subCommand string, c *cli.Context) (err error)
+}
+
+type ConcreteRunner struct {
+	cmdFactory command_factory.Factory
+	scope      scope.Scope
+}
+
+func NewRunner(scope scope.Scope, cmdFactory command_factory.Factory) (runner ConcreteRunner) {
+	runner.cmdFactory = cmdFactory
+	runner.scope = scope
+	return
+}
+
+func (runner ConcreteRunner) RunCmdByName(cmdName string, c *cli.Context) error {
+	cmd, err := runner.cmdFactory.GetByCmdName(cmdName)
+	if nil != err {
+		return err
+	}
+
+	cmd.Run(runner.scope, c)
+	return nil
+}
+
+func (runner ConcreteRunner) RunSubCmdByName(cmdName string, subCommand string, c *cli.Context) error {
+	cmd, err := runner.cmdFactory.GetBySubCmdName(cmdName, subCommand)
+	if nil != err {
+		return err
+	}
+
+	cmd.Run(runner.scope, c)
+	return nil
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/access.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/access.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/access.go
new file mode 100644
index 0000000..1ddef76
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/access.go
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/access_control"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+)
+
+type Access struct {
+	network *net.Network
+}
+
+func NewAccess(network *net.Network) (cmd *Access) {
+	cmd = new(Access)
+	cmd.network = network
+	return
+}
+
+func (cmd *Access) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "access",
+		Description: "Show access control",
+		Usage:       "BROOKLYN_NAME access",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Access) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	access, err := access_control.Access(cmd.network)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println("Location Provisioning Allowed:", access.LocationProvisioningAllowed)
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity-stream.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity-stream.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity-stream.go
new file mode 100644
index 0000000..38cec20
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity-stream.go
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/activities"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+)
+
+type ActivityStreamEnv struct {
+	network *net.Network
+}
+
+type ActivityStreamStderr struct {
+	network *net.Network
+}
+
+type ActivityStreamStdin struct {
+	network *net.Network
+}
+
+type ActivityStreamStdout struct {
+	network *net.Network
+}
+
+func NewActivityStreamEnv(network *net.Network) (cmd *ActivityStreamEnv) {
+	cmd = new(ActivityStreamEnv)
+	cmd.network = network
+	return
+}
+
+func NewActivityStreamStderr(network *net.Network) (cmd *ActivityStreamStderr) {
+	cmd = new(ActivityStreamStderr)
+	cmd.network = network
+	return
+}
+
+func NewActivityStreamStdin(network *net.Network) (cmd *ActivityStreamStdin) {
+	cmd = new(ActivityStreamStdin)
+	cmd.network = network
+	return
+}
+
+func NewActivityStreamStdout(network *net.Network) (cmd *ActivityStreamStdout) {
+	cmd = new(ActivityStreamStdout)
+	cmd.network = network
+	return
+}
+
+func (cmd *ActivityStreamEnv) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "env",
+		Description: "Show the ENV stream for a given activity",
+		Usage:       "BROOKLYN_NAME ACTIVITY-SCOPE env",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *ActivityStreamStderr) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "stderr",
+		Description: "Show the STDERR stream for a given activity",
+		Usage:       "BROOKLYN_NAME ACTIVITY-SCOPE stderr",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *ActivityStreamStdin) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "stdin",
+		Description: "Show the STDIN stream for a given activity",
+		Usage:       "BROOKLYN_NAME ACTIVITY-SCOPE ] stdin",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *ActivityStreamStdout) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "stdout",
+		Description: "Show the STDOUT stream for a given activity",
+		Usage:       "BROOKLYN_NAME ACTIVITY-SCOPE stdout",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *ActivityStreamEnv) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	activityStream, err := activities.ActivityStream(cmd.network, scope.Activity, "env")
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(activityStream)
+}
+
+func (cmd *ActivityStreamStderr) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	activityStream, err := activities.ActivityStream(cmd.network, scope.Activity, "stderr")
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(activityStream)
+}
+
+func (cmd *ActivityStreamStdin) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	activityStream, err := activities.ActivityStream(cmd.network, scope.Activity, "stdin")
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(activityStream)
+}
+
+func (cmd *ActivityStreamStdout) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	activityStream, err := activities.ActivityStream(cmd.network, scope.Activity, "stdout")
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(activityStream)
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity.go
new file mode 100644
index 0000000..cee097b
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/activity.go
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/activities"
+	"github.com/apache/brooklyn-client/api/entities"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/models"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+	"sort"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type Activity struct {
+	network *net.Network
+}
+
+func NewActivity(network *net.Network) (cmd *Activity) {
+	cmd = new(Activity)
+	cmd.network = network
+	return
+}
+
+func (cmd *Activity) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "activity",
+		Aliases:     []string{"activities", "act", "acts"},
+		Description: "Show the activity for an application / entity",
+		Usage:       "BROOKLYN_NAME SCOPE activity [ ACTIVITYID]",
+		Flags: []cli.Flag{
+			cli.StringSliceFlag{
+				Name:  "children, c",
+				Usage: "List children of the activity",
+			},
+		},
+	}
+}
+
+func (cmd *Activity) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	if c.NumFlags() > 0 && c.FlagNames()[0] == "children" {
+		cmd.listchildren(c.StringSlice("children")[0])
+	} else {
+		if c.Args().Present() {
+			cmd.show(c.Args().First())
+		} else {
+			if scope.Activity == "" {
+				cmd.list(scope.Application, scope.Entity)
+			} else {
+				cmd.listchildren(scope.Activity)
+			}
+		}
+	}
+}
+
+func (cmd *Activity) show(activityId string) {
+	activity, err := activities.Activity(cmd.network, activityId)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+
+	table := terminal.NewTable([]string{"Id:", activity.Id})
+	table.Add("DisplayName:", activity.DisplayName)
+	table.Add("Description:", activity.Description)
+	table.Add("EntityId:", activity.EntityId)
+	table.Add("EntityDisplayName:", activity.EntityDisplayName)
+	table.Add("Submitted:", time.Unix(activity.SubmitTimeUtc/1000, 0).Format(time.UnixDate))
+	table.Add("Started:", time.Unix(activity.StartTimeUtc/1000, 0).Format(time.UnixDate))
+	table.Add("Ended:", time.Unix(activity.EndTimeUtc/1000, 0).Format(time.UnixDate))
+	table.Add("CurrentStatus:", activity.CurrentStatus)
+	table.Add("IsError:", strconv.FormatBool(activity.IsError))
+	table.Add("IsCancelled:", strconv.FormatBool(activity.IsCancelled))
+	table.Add("SubmittedByTask:", activity.SubmittedByTask.Metadata.Id)
+	if activity.Streams["stdin"].Metadata.Size > 0 ||
+		activity.Streams["stdout"].Metadata.Size > 0 ||
+		activity.Streams["stderr"].Metadata.Size > 0 ||
+		activity.Streams["env"].Metadata.Size > 0 {
+		table.Add("Streams:", fmt.Sprintf("stdin: %d, stdout: %d, stderr: %d, env %d",
+			activity.Streams["stdin"].Metadata.Size,
+			activity.Streams["stdout"].Metadata.Size,
+			activity.Streams["stderr"].Metadata.Size,
+			activity.Streams["env"].Metadata.Size))
+	} else {
+		table.Add("Streams:", "")
+	}
+	table.Add("DetailedStatus:", fmt.Sprintf("\"%s\"", activity.DetailedStatus))
+	table.Print()
+}
+
+func (cmd *Activity) list(application, entity string) {
+	activityList, err := entities.GetActivities(cmd.network, application, entity)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Task", "Submitted", "Status", "Streams"})
+	for _, activity := range activityList {
+		table.Add(activity.Id,
+			truncate(activity.DisplayName),
+			time.Unix(activity.SubmitTimeUtc/1000, 0).Format(time.UnixDate), truncate(activity.CurrentStatus),
+			streams(activity))
+	}
+	table.Print()
+}
+
+func (cmd *Activity) listchildren(activity string) {
+	activityList, err := activities.ActivityChildren(cmd.network, activity)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Task", "Submitted", "Status", "Streams"})
+	for _, activity := range activityList {
+		table.Add(activity.Id,
+			truncate(activity.DisplayName),
+			time.Unix(activity.SubmitTimeUtc/1000, 0).Format(time.UnixDate), truncate(activity.CurrentStatus),
+			streams(activity))
+	}
+	table.Print()
+}
+
+func streams(act models.TaskSummary) string {
+	names := make([]string, 0)
+	for name, _ := range act.Streams {
+		names = append(names, name)
+	}
+	sort.Strings(names)
+	return strings.Join(names, ",")
+}
+
+const truncLimit = 40
+
+func truncate(text string) string {
+	if len(text) < truncLimit {
+		return text
+	}
+	return text[0:(truncLimit-3)] + "..."
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-catalog.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-catalog.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-catalog.go
new file mode 100644
index 0000000..bf79f23
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-catalog.go
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/catalog"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+)
+
+type AddCatalog struct {
+	network *net.Network
+}
+
+func NewAddCatalog(network *net.Network) (cmd *AddCatalog) {
+	cmd = new(AddCatalog)
+	cmd.network = network
+	return
+}
+
+func (cmd *AddCatalog) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "add-catalog",
+		Description: "* Add a new catalog item from the supplied YAML",
+		Usage:       "BROOKLYN_NAME add-catalog FILEPATH",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *AddCatalog) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	create, err := catalog.AddCatalog(cmd.network, c.Args().First())
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(create)
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-children.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-children.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-children.go
new file mode 100644
index 0000000..6492044
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-children.go
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/api/entities"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+	"time"
+)
+
+type AddChildren struct {
+	network *net.Network
+}
+
+func NewAddChildren(network *net.Network) (cmd *AddChildren) {
+	cmd = new(AddChildren)
+	cmd.network = network
+	return
+}
+
+func (cmd *AddChildren) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "add-children",
+		Description: "* Add a child or children to this entity from the supplied YAML",
+		Usage:       "BROOKLYN_NAME SCOPE add-children FILEPATH",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *AddChildren) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	activity, err := entities.AddChildren(cmd.network, scope.Application, scope.Entity, c.Args().First())
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Task", "Submitted", "Status"})
+	table.Add(activity.Id, activity.DisplayName, time.Unix(activity.SubmitTimeUtc/1000, 0).Format(time.UnixDate), activity.CurrentStatus)
+
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-location.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-location.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-location.go
new file mode 100644
index 0000000..32c2db0
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-location.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type AddLocation struct {
+	network *net.Network
+}
+
+func NewAddLocation(network *net.Network) (cmd *AddLocation) {
+	cmd = new(AddLocation)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-policy.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-policy.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-policy.go
new file mode 100644
index 0000000..a17e6c5
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/add-policy.go
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/codegangsta/cli"
+	//"github.com/apache/brooklyn-client/api/entity_policies"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+)
+
+type AddPolicy struct {
+	network *net.Network
+}
+
+func NewAddPolicy(network *net.Network) (cmd *AddPolicy) {
+	cmd = new(AddPolicy)
+	cmd.network = network
+	return
+}
+
+func (cmd *AddPolicy) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "add-policy",
+		Description: "Add a new policy",
+		Usage:       "BROOKLYN_NAME [ SCOPE ] add-policy APPLICATION ENTITY POLICY_TYPE",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *AddPolicy) Run(scope scope.Scope, c *cli.Context) {
+	// Todo
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/application.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/application.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/application.go
new file mode 100644
index 0000000..3538689
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/application.go
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/application"
+	"github.com/apache/brooklyn-client/api/entities"
+	"github.com/apache/brooklyn-client/api/entity_sensors"
+	"github.com/apache/brooklyn-client/api/locations"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+	"strings"
+)
+
+type Application struct {
+	network *net.Network
+}
+
+func NewApplication(network *net.Network) (cmd *Application) {
+	cmd = new(Application)
+	cmd.network = network
+	return
+}
+
+func (cmd *Application) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "application",
+		Aliases:     []string{"applications", "app", "apps"},
+		Description: "Show the status and location of running applications",
+		Usage:       "BROOKLYN_NAME application [APP]",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Application) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	if c.Args().Present() {
+		cmd.show(c.Args().First())
+	} else {
+		cmd.list()
+	}
+}
+
+const serviceIsUpStr = "service.isUp"
+
+func (cmd *Application) show(appName string) {
+	application, err := application.Application(cmd.network, appName)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	entity, err := entities.GetEntity(cmd.network, appName, appName)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	state, err := entity_sensors.CurrentState(cmd.network, appName, appName)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	location, err := locations.GetLocation(cmd.network, application.Spec.Locations[0])
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id:", application.Id})
+	table.Add("Name:", application.Spec.Name)
+	table.Add("Status:", string(application.Status))
+	if serviceUp, ok := state[serviceIsUpStr]; ok {
+		table.Add("ServiceUp:", fmt.Sprintf("%v", serviceUp))
+	}
+	table.Add("Type:", application.Spec.Type)
+	table.Add("CatalogItemId:", entity.CatalogItemId)
+	table.Add("LocationId:", strings.Join(application.Spec.Locations, ", "))
+	table.Add("LocationName:", location.Name)
+	table.Add("LocationSpec:", location.Spec)
+	table.Add("LocationType:", location.Type)
+	table.Print()
+}
+
+func (cmd *Application) list() {
+	applications, err := application.Applications(cmd.network)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Name", "Status", "Location"})
+	for _, app := range applications {
+		table.Add(app.Id, app.Spec.Name, string(app.Status), strings.Join(app.Spec.Locations, ", "))
+	}
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-applications.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-applications.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-applications.go
new file mode 100644
index 0000000..19a4373
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-applications.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogApplication struct {
+	network *net.Network
+}
+
+func NewCatalogApplication(network *net.Network) (cmd *CatalogApplication) {
+	cmd = new(CatalogApplication)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entities.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entities.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entities.go
new file mode 100644
index 0000000..dbec760
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entities.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogEntities struct {
+	network *net.Network
+}
+
+func NewCatalogEntities(network *net.Network) (cmd *CatalogEntities) {
+	cmd = new(CatalogEntities)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entity.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entity.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entity.go
new file mode 100644
index 0000000..23cc295
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-entity.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogEntity struct {
+	network *net.Network
+}
+
+func NewCatalogEntity(network *net.Network) (cmd *CatalogEntity) {
+	cmd = new(CatalogEntity)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-location.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-location.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-location.go
new file mode 100644
index 0000000..40babdd
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-location.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogLocation struct {
+	network *net.Network
+}
+
+func NewCatalogLocation(network *net.Network) (cmd *CatalogLocation) {
+	cmd = new(CatalogLocation)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-locations.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-locations.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-locations.go
new file mode 100644
index 0000000..e1791e8
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-locations.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogLocations struct {
+	network *net.Network
+}
+
+func NewCatalogLocations(network *net.Network) (cmd *CatalogLocations) {
+	cmd = new(CatalogLocations)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policies.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policies.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policies.go
new file mode 100644
index 0000000..3e245db
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policies.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogPolicies struct {
+	network *net.Network
+}
+
+func NewCatalogPolicies(network *net.Network) (cmd *CatalogPolicies) {
+	cmd = new(CatalogPolicies)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policy.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policy.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policy.go
new file mode 100644
index 0000000..82e8a95
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog-policy.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type CatalogPolicy struct {
+	network *net.Network
+}
+
+func NewCatalogPolicy(network *net.Network) (cmd *CatalogPolicy) {
+	cmd = new(CatalogPolicy)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog.go
new file mode 100644
index 0000000..2cb884d
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/catalog.go
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/api/catalog"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+)
+
+type Catalog struct {
+	network *net.Network
+}
+
+func NewCatalog(network *net.Network) (cmd *Catalog) {
+	cmd = new(Catalog)
+	cmd.network = network
+	return
+}
+
+func (cmd *Catalog) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "catalog",
+		Description: "* List the available catalog applications",
+		Usage:       "BROOKLYN_NAME catalog",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Catalog) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	catalog, err := catalog.Catalog(cmd.network)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Name", "Description"})
+	for _, app := range catalog {
+		table.Add(app.Id, app.Name, app.Description)
+	}
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/config.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/config.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/config.go
new file mode 100644
index 0000000..8af3046
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/config.go
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/entity_config"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+)
+
+type Config struct {
+	network *net.Network
+}
+
+func NewConfig(network *net.Network) (cmd *Config) {
+	cmd = new(Config)
+	cmd.network = network
+	return
+}
+
+func (cmd *Config) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "config",
+		Description: "Show the config for an application or entity",
+		Usage:       "BROOKLYN_NAME SCOPE config",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Config) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	if c.Args().Present() {
+		configValue, err := entity_config.ConfigValue(cmd.network, scope.Application, scope.Entity, c.Args().First())
+
+		if nil != err {
+			error_handler.ErrorExit(err)
+		}
+		displayValue, err := stringRepresentation(configValue)
+		if nil != err {
+			error_handler.ErrorExit(err)
+		}
+		fmt.Println(displayValue)
+
+	} else {
+		config, err := entity_config.ConfigCurrentState(cmd.network, scope.Application, scope.Entity)
+		if nil != err {
+			error_handler.ErrorExit(err)
+		}
+		table := terminal.NewTable([]string{"Key", "Value"})
+		for key, value := range config {
+			table.Add(key, fmt.Sprintf("%v", value))
+		}
+		table.Print()
+	}
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-application.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-application.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-application.go
new file mode 100644
index 0000000..f289bbd
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-application.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type DeleteCatalogApplication struct {
+	network *net.Network
+}
+
+func NewDeleteCatalogApplication(network *net.Network) (cmd *DeleteCatalogApplication) {
+	cmd = new(DeleteCatalogApplication)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-entity.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-entity.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-entity.go
new file mode 100644
index 0000000..5953fff
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-entity.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type DeleteCatalogEntity struct {
+	network *net.Network
+}
+
+func NewDeleteCatalogEntity(network *net.Network) (cmd *DeleteCatalogEntity) {
+	cmd = new(DeleteCatalogEntity)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-policy.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-policy.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-policy.go
new file mode 100644
index 0000000..c6b29a6
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete-catalog-policy.go
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/net"
+)
+
+type DeleteCatalogPolicy struct {
+	network *net.Network
+}
+
+func NewDeleteCatalogPolicy(network *net.Network) (cmd *DeleteCatalogPolicy) {
+	cmd = new(DeleteCatalogPolicy)
+	cmd.network = network
+	return
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete.go
new file mode 100644
index 0000000..e4bfdae
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/delete.go
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/application"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+)
+
+type Delete struct {
+	network *net.Network
+}
+
+func NewDelete(network *net.Network) (cmd *Delete) {
+	cmd = new(Delete)
+	cmd.network = network
+	return
+}
+
+func (cmd *Delete) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "delete",
+		Description: "* Delete (expunge) a brooklyn application",
+		Usage:       "BROOKLYN_NAME SCOPE delete",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Delete) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	del, err := application.Delete(cmd.network, scope.Application)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(del)
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/deploy.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/deploy.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/deploy.go
new file mode 100644
index 0000000..3b0607c
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/deploy.go
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/api/application"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/models"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+	"io/ioutil"
+	"os"
+	"strings"
+)
+
+type Deploy struct {
+	network *net.Network
+}
+
+func NewDeploy(network *net.Network) (cmd *Deploy) {
+	cmd = new(Deploy)
+	cmd.network = network
+	return
+}
+
+func (cmd *Deploy) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "deploy",
+		Description: "Deploy a new application from the given YAML (read from file or stdin)",
+		Usage:       "BROOKLYN_NAME deploy ( <FILE> | - )",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Deploy) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+
+	var create models.TaskSummary
+	var err error
+	var blueprint []byte
+	if c.Args().First() == "" {
+		error_handler.ErrorExit("A filename or '-' must be provided as the first argument", error_handler.CLIUsageErrorExitCode)
+	}
+	if c.Args().First() == "-" {
+		blueprint, err = ioutil.ReadAll(os.Stdin)
+		if err != nil {
+			error_handler.ErrorExit(err)
+		}
+		create, err = application.CreateFromBytes(cmd.network, blueprint)
+	} else {
+		create, err = application.Create(cmd.network, c.Args().First())
+	}
+	if nil != err {
+		if httpErr, ok := err.(net.HttpError); ok {
+			error_handler.ErrorExit(strings.Join([]string{httpErr.Status, httpErr.Body}, "\n"), httpErr.Code)
+		} else {
+			error_handler.ErrorExit(err)
+		}
+	}
+	table := terminal.NewTable([]string{"Id:", create.EntityId})
+	table.Add("Name:", create.EntityDisplayName)
+	table.Add("Status:", create.CurrentStatus)
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/destroy-policy.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/destroy-policy.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/destroy-policy.go
new file mode 100644
index 0000000..c358d70
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/destroy-policy.go
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/entity_policies"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+)
+
+type DestroyPolicy struct {
+	network *net.Network
+}
+
+func NewDestroyPolicy(network *net.Network) (cmd *DestroyPolicy) {
+	cmd = new(DestroyPolicy)
+	cmd.network = network
+	return
+}
+
+func (cmd *DestroyPolicy) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "destroy-policy",
+		Description: "Destroy a policy",
+		Usage:       "BROOKLYN_NAME SCOPE destroy-policy POLICY",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *DestroyPolicy) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	spec, err := entity_policies.DestroyPolicy(cmd.network, scope.Application, scope.Entity, c.Args().First())
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Println(spec)
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/effector.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/effector.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/effector.go
new file mode 100644
index 0000000..7105cf9
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/effector.go
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/api/entity_effectors"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+	"strings"
+)
+
+type Effector struct {
+	network *net.Network
+}
+
+func NewEffector(network *net.Network) (cmd *Effector) {
+	cmd = new(Effector)
+	cmd.network = network
+	return
+}
+
+func (cmd *Effector) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "effector",
+		Description: "Show the effectors for an application or entity",
+		Usage:       "BROOKLYN_NAME SCOPE effector [ NAME ]",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Effector) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	effectors, err := entity_effectors.EffectorList(cmd.network, scope.Application, scope.Entity)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Name", "Description", "Parameters"})
+	for _, effector := range effectors {
+		var parameters []string
+		for _, parameter := range effector.Parameters {
+			parameters = append(parameters, parameter.Name)
+		}
+		if !c.Args().Present() || c.Args().First() == effector.Name {
+			table.Add(effector.Name, effector.Description, strings.Join(parameters, ","))
+		}
+	}
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/entity.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/entity.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/entity.go
new file mode 100644
index 0000000..b6688a3
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/entity.go
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/entities"
+	"github.com/apache/brooklyn-client/api/entity_sensors"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+	"os"
+)
+
+type Entity struct {
+	network *net.Network
+}
+
+func NewEntity(network *net.Network) (cmd *Entity) {
+	cmd = new(Entity)
+	cmd.network = network
+	return
+}
+
+func (cmd *Entity) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "entity",
+		Aliases:     []string{"entities", "ent", "ents"},
+		Description: "Show the entities of an application or entity",
+		Usage:       "BROOKLYN_NAME SCOPE entity [ENTITYID]",
+		Flags: []cli.Flag{
+			cli.StringSliceFlag{
+				Name:  "children, c",
+				Usage: "List children of the entity",
+			},
+		},
+	}
+}
+
+func (cmd *Entity) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	if c.NumFlags() > 0 && c.FlagNames()[0] == "children" {
+		cmd.listentity(scope.Application, c.StringSlice("children")[0])
+	} else {
+		if c.Args().Present() {
+			cmd.show(scope.Application, c.Args().First())
+		} else {
+			if scope.Entity == scope.Application {
+				cmd.listapp(scope.Application)
+			} else {
+				cmd.listentity(scope.Application, scope.Entity)
+			}
+		}
+	}
+}
+
+const serviceStateSensor = "service.state"
+const serviceIsUp = "service.isUp"
+
+func (cmd *Entity) show(application, entity string) {
+	summary, err := entities.GetEntity(cmd.network, application, entity)
+	if nil != err {
+		fmt.Fprintf(os.Stderr, "Error: %s\n", err)
+		os.Exit(1)
+	}
+	table := terminal.NewTable([]string{"Id:", summary.Id})
+	table.Add("Name:", summary.Name)
+	configState, err := entity_sensors.CurrentState(cmd.network, application, entity)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	if serviceState, ok := configState[serviceStateSensor]; ok {
+		table.Add("Status:", fmt.Sprintf("%v", serviceState))
+	}
+	if serviceIsUp, ok := configState[serviceIsUp]; ok {
+		table.Add("ServiceUp:", fmt.Sprintf("%v", serviceIsUp))
+	}
+	table.Add("Type:", summary.Type)
+	table.Add("CatalogItemId:", summary.CatalogItemId)
+	table.Print()
+}
+
+func (cmd *Entity) listapp(application string) {
+	entitiesList, err := entities.EntityList(cmd.network, application)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Name", "Type"})
+	for _, entityitem := range entitiesList {
+		table.Add(entityitem.Id, entityitem.Name, entityitem.Type)
+	}
+	table.Print()
+}
+
+func (cmd *Entity) listentity(application string, entity string) {
+	entitiesList, err := entities.Children(cmd.network, application, entity)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+
+	table := terminal.NewTable([]string{"Id", "Name", "Type"})
+	for _, entityitem := range entitiesList {
+		table.Add(entityitem.Id, entityitem.Name, entityitem.Type)
+	}
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/invoke.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/invoke.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/invoke.go
new file mode 100644
index 0000000..1ca6dd8
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/invoke.go
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"errors"
+	"fmt"
+	"github.com/apache/brooklyn-client/api/entity_effectors"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+	"io/ioutil"
+	"strings"
+)
+
+type Invoke struct {
+	network *net.Network
+}
+
+type Stop struct {
+	Invoke
+}
+
+type Start struct {
+	Invoke
+}
+
+type Restart struct {
+	Invoke
+}
+
+func NewInvoke(network *net.Network) (cmd *Invoke) {
+	cmd = new(Invoke)
+	cmd.network = network
+	return
+}
+
+func NewInvokeStop(network *net.Network) (cmd *Stop) {
+	cmd = new(Stop)
+	cmd.network = network
+	return
+}
+
+func NewInvokeStart(network *net.Network) (cmd *Start) {
+	cmd = new(Start)
+	cmd.network = network
+	return
+}
+
+func NewInvokeRestart(network *net.Network) (cmd *Restart) {
+	cmd = new(Restart)
+	cmd.network = network
+	return
+}
+
+var paramFlags = []cli.Flag{
+	cli.StringSliceFlag{
+		Name:  "param, P",
+		Usage: "Parameter and value separated by '=', e.g. -P x=y",
+	},
+}
+
+func (cmd *Invoke) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "invoke",
+		Description: "Invoke an effector of an application and entity",
+		Usage:       "BROOKLYN_NAME EFF-SCOPE invoke [ parameter-options ]",
+		Flags:       paramFlags,
+	}
+}
+
+func (cmd *Stop) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "stop",
+		Description: "Invoke stop effector on an application and entity",
+		Usage:       "BROOKLYN_NAME ENT-SCOPE stop [ parameter-options ]",
+		Flags:       paramFlags,
+	}
+}
+
+func (cmd *Start) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "start",
+		Description: "Invoke start effector on an application and entity",
+		Usage:       "BROOKLYN_NAME ENT-SCOPE start [ parameter-options ]",
+		Flags:       paramFlags,
+	}
+}
+
+func (cmd *Restart) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "restart",
+		Description: "Invoke restart effector on an application and entity",
+		Usage:       "BROOKLYN_NAME ENT-SCOPE restart [ parameter-options ]",
+		Flags:       paramFlags,
+	}
+}
+
+func (cmd *Invoke) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	parms := c.StringSlice("param")
+	invoke(cmd.network, scope.Application, scope.Entity, scope.Effector, parms)
+}
+
+const stopEffector = "stop"
+
+func (cmd *Stop) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	parms := c.StringSlice("param")
+	invoke(cmd.network, scope.Application, scope.Entity, stopEffector, parms)
+}
+
+const startEffector = "start"
+
+func (cmd *Start) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	parms := c.StringSlice("param")
+	invoke(cmd.network, scope.Application, scope.Entity, startEffector, parms)
+}
+
+const restartEffector = "restart"
+
+func (cmd *Restart) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	parms := c.StringSlice("param")
+	invoke(cmd.network, scope.Application, scope.Entity, restartEffector, parms)
+}
+
+func invoke(network *net.Network, application, entity, effector string, parms []string) {
+	names, vals, err := extractParams(parms)
+	result, err := entity_effectors.TriggerEffector(network, application, entity, effector, names, vals)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	} else {
+		if "" != result {
+			fmt.Println(result)
+		}
+	}
+}
+
+func extractParams(parms []string) ([]string, []string, error) {
+	names := make([]string, len(parms))
+	vals := make([]string, len(parms))
+	var err error
+	for i, parm := range parms {
+		index := strings.Index(parm, "=")
+		if index < 0 {
+			return names, vals, errors.New("Parameter value not provided: " + parm)
+		}
+		names[i] = parm[0:index]
+		vals[i], err = extractParamValue(parm[index+1:])
+	}
+	return names, vals, err
+}
+
+const paramDataPrefix string = "@"
+
+func extractParamValue(rawParam string) (string, error) {
+	var err error
+	var val string
+	if strings.HasPrefix(rawParam, paramDataPrefix) {
+		// strip the data prefix from the filename before reading
+		val, err = readParamFromFile(rawParam[len(paramDataPrefix):])
+	} else {
+		val = rawParam
+		err = nil
+	}
+	return val, err
+}
+
+// returning a string rather than byte array, assuming non-binary
+// TODO - if necessary support binary data sending to effector
+func readParamFromFile(filename string) (string, error) {
+	dat, err := ioutil.ReadFile(filename)
+	return string(dat), err
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/list.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/list.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/list.go
new file mode 100644
index 0000000..d675f77
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/list.go
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/command"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+	"strings"
+)
+
+type List struct {
+	network      *net.Network
+	listCommands map[string]command.Command
+}
+
+func NewList(network *net.Network) (cmd *List) {
+	cmd = new(List)
+	cmd.network = network
+	cmd.listCommands = map[string]command.Command{
+	//		ListApplicationCommand: NewApplications(cmd.network),
+	//		ListEntityCommand: NewEntities(cmd.network),
+	//		ListSensorCommand: NewSensors(cmd.network),
+	//		ListEffectorCommand: NewEffector(cmd.network),
+	}
+	return
+}
+
+const ListApplicationCommand = "application"
+const ListEntityCommand = "entities"
+const ListSensorCommand = "sensors"
+const ListEffectorCommand = "effectors"
+
+var listCommands = []string{
+	ListApplicationCommand,
+	ListEntityCommand,
+	ListSensorCommand,
+	ListEffectorCommand,
+}
+var listCommandsUsage = strings.Join(listCommands, " | ")
+
+func (cmd *List) SubCommandNames() []string {
+	return listCommands
+}
+
+func (cmd *List) SubCommand(name string) command.Command {
+	return cmd.listCommands[name]
+}
+
+func (cmd *List) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "list",
+		Description: "List details for a variety of operands",
+		Usage:       "BROOKLYN_NAME SCOPE list (" + listCommandsUsage + ")",
+		Flags:       []cli.Flag{},
+		Operands: []command_metadata.CommandMetadata{
+			cmd.SubCommand(ListApplicationCommand).Metadata(),
+			cmd.SubCommand(ListEntityCommand).Metadata(),
+			cmd.SubCommand(ListSensorCommand).Metadata(),
+			cmd.SubCommand(ListEffectorCommand).Metadata(),
+		},
+	}
+}
+
+func (cmd *List) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Printf("Unrecognised item for list, please use one of (%s)\n", listCommandsUsage)
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/locations.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/locations.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/locations.go
new file mode 100644
index 0000000..79646d5
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/locations.go
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"github.com/apache/brooklyn-client/api/locations"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/apache/brooklyn-client/terminal"
+	"github.com/codegangsta/cli"
+)
+
+type Locations struct {
+	network *net.Network
+}
+
+func NewLocations(network *net.Network) (cmd *Locations) {
+	cmd = new(Locations)
+	cmd.network = network
+	return
+}
+
+func (cmd *Locations) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "locations",
+		Description: "* List the available locations",
+		Usage:       "BROOKLYN_NAME locations",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Locations) Run(scope scope.Scope, c *cli.Context) {
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+	locationList, err := locations.LocationList(cmd.network)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	table := terminal.NewTable([]string{"Id", "Name", "Spec"})
+	for _, location := range locationList {
+		table.Add(location.Id, location.Name, location.Spec)
+	}
+	table.Print()
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-client/blob/195403f1/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/login.go
----------------------------------------------------------------------
diff --git a/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/login.go b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/login.go
new file mode 100644
index 0000000..fd47196
--- /dev/null
+++ b/br/Godeps/_workspace/src/github.com/apache/brooklyn-client/commands/login.go
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package commands
+
+import (
+	"fmt"
+	"github.com/apache/brooklyn-client/api/version"
+	"github.com/apache/brooklyn-client/command_metadata"
+	"github.com/apache/brooklyn-client/error_handler"
+	"github.com/apache/brooklyn-client/io"
+	"github.com/apache/brooklyn-client/net"
+	"github.com/apache/brooklyn-client/scope"
+	"github.com/codegangsta/cli"
+	"golang.org/x/crypto/ssh/terminal"
+	"syscall"
+)
+
+type Login struct {
+	network *net.Network
+	config  *io.Config
+}
+
+func NewLogin(network *net.Network, config *io.Config) (cmd *Login) {
+	cmd = new(Login)
+	cmd.network = network
+	cmd.config = config
+	return
+}
+
+func (cmd *Login) Metadata() command_metadata.CommandMetadata {
+	return command_metadata.CommandMetadata{
+		Name:        "login",
+		Description: "Login to brooklyn",
+		Usage:       "BROOKLYN_NAME login URL [USER [PASSWORD]]",
+		Flags:       []cli.Flag{},
+	}
+}
+
+func (cmd *Login) Run(scope scope.Scope, c *cli.Context) {
+	if !c.Args().Present() {
+		error_handler.ErrorExit("A URL must be provided as the first argument", error_handler.CLIUsageErrorExitCode)
+	}
+
+	// If an argument was not supplied, it is set to empty string
+	cmd.network.BrooklynUrl = c.Args().Get(0)
+	cmd.network.BrooklynUser = c.Args().Get(1)
+	cmd.network.BrooklynPass = c.Args().Get(2)
+
+	if err := net.VerifyLoginURL(cmd.network); err != nil {
+		error_handler.ErrorExit(err)
+	}
+
+	// Strip off trailing '/' from URL if present.
+	if cmd.network.BrooklynUrl[len(cmd.network.BrooklynUrl)-1] == '/' {
+		if len(cmd.network.BrooklynUrl) == 1 {
+			error_handler.ErrorExit("URL must not be a single \"/\" character", error_handler.CLIUsageErrorExitCode)
+		}
+		cmd.network.BrooklynUrl = cmd.network.BrooklynUrl[0 : len(cmd.network.BrooklynUrl)-1]
+	}
+
+	// Prompt for password if not supplied (password is not echoed to screen
+	if cmd.network.BrooklynUser != "" && cmd.network.BrooklynPass == "" {
+		fmt.Print("Enter Password: ")
+		bytePassword, err := terminal.ReadPassword(int(syscall.Stdin))
+		if err != nil {
+			error_handler.ErrorExit(err)
+		}
+		fmt.Printf("\n")
+		cmd.network.BrooklynPass = string(bytePassword)
+	}
+
+	if cmd.config.Map == nil {
+		cmd.config.Map = make(map[string]interface{})
+	}
+	// now persist these credentials to the yaml file
+	auth, ok := cmd.config.Map["auth"].(map[string]interface{})
+	if !ok {
+		auth = make(map[string]interface{})
+		cmd.config.Map["auth"] = auth
+	}
+
+	auth[cmd.network.BrooklynUrl] = map[string]string{
+		"username": cmd.network.BrooklynUser,
+		"password": cmd.network.BrooklynPass,
+	}
+
+	cmd.config.Map["target"] = cmd.network.BrooklynUrl
+	cmd.config.Write()
+
+	loginVersion, err := version.Version(cmd.network)
+	if nil != err {
+		error_handler.ErrorExit(err)
+	}
+	fmt.Printf("Connected to Brooklyn version %s at %s\n", loginVersion.Version, cmd.network.BrooklynUrl)
+}


Mime
View raw message