// PrivateAddress implements the server side of Client.PrivateAddress. func (c *Client) PrivateAddress(p params.PrivateAddress) (results params.PrivateAddressResults, err error) { switch { case names.IsMachine(p.Target): machine, err := c.api.state.Machine(p.Target) if err != nil { return results, err } addr := instance.SelectInternalAddress(machine.Addresses(), false) if addr == "" { return results, fmt.Errorf("machine %q has no internal address", machine) } return params.PrivateAddressResults{PrivateAddress: addr}, nil case names.IsUnit(p.Target): unit, err := c.api.state.Unit(p.Target) if err != nil { return results, err } addr, ok := unit.PrivateAddress() if !ok { return results, fmt.Errorf("unit %q has no internal address", unit) } return params.PrivateAddressResults{PrivateAddress: addr}, nil } return results, fmt.Errorf("unknown unit or machine %q", p.Target) }
func (c *RemoveMachineCommand) Init(args []string) error { if len(args) == 0 { return fmt.Errorf("no machines specified") } for _, id := range args { if !names.IsMachine(id) { return fmt.Errorf("invalid machine id %q", id) } } c.MachineIds = args return nil }
// Init initializes the command for running. func (a *MachineAgent) Init(args []string) error { if !names.IsMachine(a.MachineId) { return fmt.Errorf("--machine-id option must be set, and expects a non-negative integer") } if err := a.AgentConf.CheckArgs(args); err != nil { return err } a.runner = newRunner(isFatal, moreImportant) a.upgradeComplete = make(chan struct{}) a.workersStarted = make(chan struct{}) return nil }
// ParsePlacement attempts to parse the specified string and create a // corresponding Placement structure. // // If the placement directive is non-empty and missing a scope, // ErrPlacementScopeMissing will be returned as well as a Placement // with an empty Scope field. func ParsePlacement(directive string) (*Placement, error) { if directive == "" { return nil, nil } if colon := strings.IndexRune(directive, ':'); colon != -1 { scope, directive := directive[:colon], directive[colon+1:] if scope == "" { return nil, ErrPlacementScopeMissing } // Sanity check: machine/container scopes require a machine ID as the value. if (scope == MachineScope || isContainerType(scope)) && !names.IsMachine(directive) { return nil, fmt.Errorf("invalid value %q for %q scope: expected machine-id", directive, scope) } return &Placement{Scope: scope, Directive: directive}, nil } if names.IsMachine(directive) { return &Placement{Scope: MachineScope, Directive: directive}, nil } if isContainerType(directive) { return &Placement{Scope: directive}, nil } return nil, ErrPlacementScopeMissing }