github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/cmd/juju/service/constraints.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package service
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/names"
    11  	"launchpad.net/gnuflag"
    12  
    13  	"github.com/juju/juju/cmd/juju/common"
    14  	"github.com/juju/juju/constraints"
    15  )
    16  
    17  const getConstraintsDoc = `
    18  Shows the list of constraints that have been set on the specified service
    19  using juju service set-constraints.  You can also view constraints
    20  set for an environment by using juju environment get-constraints.
    21  
    22  Constraints set on a service are combined with environment constraints for
    23  commands (such as juju deploy) that provision machines for services.  Where
    24  environment and service constraints overlap, the service constraints take
    25  precedence.
    26  
    27  See Also:
    28     juju help constraints
    29     juju help service set-constraints
    30     juju help deploy
    31     juju help machine add
    32     juju help add-unit
    33  `
    34  
    35  const setConstraintsDoc = `
    36  Sets machine constraints on specific service, which are used as the
    37  default constraints for all new machines provisioned by that service.
    38  You can also set constraints on an environment by using
    39  juju environment set-constraints.
    40  
    41  Constraints set on a service are combined with environment constraints for
    42  commands (such as juju deploy) that provision machines for services.  Where
    43  environment and service constraints overlap, the service constraints take
    44  precedence.
    45  
    46  Example:
    47  
    48      set-constraints wordpress mem=4G     (all new wordpress machines must have at least 4GB of RAM)
    49  
    50  See Also:
    51     juju help constraints
    52     juju help service get-constraints
    53     juju help deploy
    54     juju help machine add
    55     juju help add-unit
    56  `
    57  
    58  // ServiceGetConstraintsCommand shows the constraints for a service.
    59  // It is just a wrapper for the common GetConstraintsCommand which
    60  // enforces that a service is specified.
    61  type ServiceGetConstraintsCommand struct {
    62  	common.GetConstraintsCommand
    63  }
    64  
    65  func (c *ServiceGetConstraintsCommand) Info() *cmd.Info {
    66  	return &cmd.Info{
    67  		Name:    "get-constraints",
    68  		Args:    "<service>",
    69  		Purpose: "view constraints on a service",
    70  		Doc:     getConstraintsDoc,
    71  	}
    72  }
    73  
    74  func (c *ServiceGetConstraintsCommand) Init(args []string) error {
    75  	if len(args) == 0 {
    76  		return fmt.Errorf("no service name specified")
    77  	}
    78  	if !names.IsValidService(args[0]) {
    79  		return fmt.Errorf("invalid service name %q", args[0])
    80  	}
    81  
    82  	c.ServiceName = args[0]
    83  	return nil
    84  }
    85  
    86  // ServiceSetConstraintsCommand sets the constraints for a service.
    87  // It is just a wrapper for the common SetConstraintsCommand which
    88  // enforces that a service is specified.
    89  type ServiceSetConstraintsCommand struct {
    90  	common.SetConstraintsCommand
    91  }
    92  
    93  func (c *ServiceSetConstraintsCommand) Info() *cmd.Info {
    94  	return &cmd.Info{
    95  		Name:    "set-constraints",
    96  		Args:    "<service> [key=[value] ...]",
    97  		Purpose: "set constraints on a service",
    98  		Doc:     setConstraintsDoc,
    99  	}
   100  }
   101  
   102  // SetFlags overrides SetFlags for SetConstraintsCommand since that
   103  // will register a flag to specify the service, and the flag is not
   104  // required with this service supercommand.
   105  func (c *ServiceSetConstraintsCommand) SetFlags(f *gnuflag.FlagSet) {}
   106  
   107  func (c *ServiceSetConstraintsCommand) Init(args []string) (err error) {
   108  	if len(args) == 0 {
   109  		return fmt.Errorf("no service name specified")
   110  	}
   111  	if !names.IsValidService(args[0]) {
   112  		return fmt.Errorf("invalid service name %q", args[0])
   113  	}
   114  
   115  	c.ServiceName, args = args[0], args[1:]
   116  
   117  	c.Constraints, err = constraints.Parse(args...)
   118  	return err
   119  }