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

« back to all changes in this revision

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

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

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package main
 
2
 
 
3
import (
 
4
        "fmt"
 
5
        "launchpad.net/gnuflag"
 
6
        "launchpad.net/juju-core/cmd"
 
7
        "launchpad.net/juju-core/constraints"
 
8
        "launchpad.net/juju-core/juju"
 
9
        "launchpad.net/juju-core/state"
 
10
        "launchpad.net/juju-core/state/api/params"
 
11
        "launchpad.net/juju-core/state/statecmd"
 
12
)
 
13
 
 
14
// GetConstraintsCommand shows the constraints for a service or environment.
 
15
type GetConstraintsCommand struct {
 
16
        EnvCommandBase
 
17
        ServiceName string
 
18
        out         cmd.Output
 
19
}
 
20
 
 
21
func (c *GetConstraintsCommand) Info() *cmd.Info {
 
22
        return &cmd.Info{
 
23
                Name:    "get-constraints",
 
24
                Args:    "[<service>]",
 
25
                Purpose: "view constraints",
 
26
        }
 
27
}
 
28
 
 
29
func formatConstraints(value interface{}) ([]byte, error) {
 
30
        return []byte(value.(constraints.Value).String()), nil
 
31
}
 
32
 
 
33
func (c *GetConstraintsCommand) SetFlags(f *gnuflag.FlagSet) {
 
34
        c.EnvCommandBase.SetFlags(f)
 
35
        c.out.AddFlags(f, "constraints", map[string]cmd.Formatter{
 
36
                "constraints": formatConstraints,
 
37
                "yaml":        cmd.FormatYaml,
 
38
                "json":        cmd.FormatJson,
 
39
        })
 
40
}
 
41
 
 
42
func (c *GetConstraintsCommand) Init(args []string) error {
 
43
        if len(args) > 0 {
 
44
                if !state.IsServiceName(args[0]) {
 
45
                        return fmt.Errorf("invalid service name %q", args[0])
 
46
                }
 
47
                c.ServiceName, args = args[0], args[1:]
 
48
        }
 
49
        return cmd.CheckEmpty(args)
 
50
}
 
51
 
 
52
func (c *GetConstraintsCommand) Run(ctx *cmd.Context) error {
 
53
        conn, err := juju.NewConnFromName(c.EnvName)
 
54
        if err != nil {
 
55
                return err
 
56
        }
 
57
        defer conn.Close()
 
58
 
 
59
        var cons constraints.Value
 
60
        if c.ServiceName != "" {
 
61
                args := params.GetServiceConstraints{
 
62
                        ServiceName: c.ServiceName,
 
63
                }
 
64
                var results params.GetServiceConstraintsResults
 
65
                results, err = statecmd.GetServiceConstraints(conn.State, args)
 
66
                cons = results.Constraints
 
67
        } else {
 
68
                cons, err = conn.State.EnvironConstraints()
 
69
        }
 
70
        if err != nil {
 
71
                return err
 
72
        }
 
73
        return c.out.Write(ctx, cons)
 
74
}
 
75
 
 
76
// SetConstraintsCommand shows the constraints for a service or environment.
 
77
type SetConstraintsCommand struct {
 
78
        EnvCommandBase
 
79
        ServiceName string
 
80
        Constraints constraints.Value
 
81
}
 
82
 
 
83
func (c *SetConstraintsCommand) Info() *cmd.Info {
 
84
        return &cmd.Info{
 
85
                Name:    "set-constraints",
 
86
                Args:    "[key=[value] ...]",
 
87
                Purpose: "replace constraints",
 
88
        }
 
89
}
 
90
 
 
91
func (c *SetConstraintsCommand) SetFlags(f *gnuflag.FlagSet) {
 
92
        c.EnvCommandBase.SetFlags(f)
 
93
        f.StringVar(&c.ServiceName, "s", "", "set service constraints")
 
94
        f.StringVar(&c.ServiceName, "service", "", "")
 
95
}
 
96
 
 
97
func (c *SetConstraintsCommand) Init(args []string) (err error) {
 
98
        if c.ServiceName != "" && !state.IsServiceName(c.ServiceName) {
 
99
                return fmt.Errorf("invalid service name %q", c.ServiceName)
 
100
        }
 
101
        c.Constraints, err = constraints.Parse(args...)
 
102
        return err
 
103
}
 
104
 
 
105
func (c *SetConstraintsCommand) Run(_ *cmd.Context) (err error) {
 
106
        conn, err := juju.NewConnFromName(c.EnvName)
 
107
        if err != nil {
 
108
                return err
 
109
        }
 
110
        defer conn.Close()
 
111
        if c.ServiceName == "" {
 
112
                return conn.State.SetEnvironConstraints(c.Constraints)
 
113
        }
 
114
        params := params.SetServiceConstraints{
 
115
                ServiceName: c.ServiceName,
 
116
                Constraints: c.Constraints,
 
117
        }
 
118
        return statecmd.SetServiceConstraints(conn.State, params)
 
119
}