本文整理汇总了Golang中github.com/juju/juju/apiserver/params.IsCodeNotFoundOrCodeUnauthorized函数的典型用法代码示例。如果您正苦于以下问题:Golang IsCodeNotFoundOrCodeUnauthorized函数的具体用法?Golang IsCodeNotFoundOrCodeUnauthorized怎么用?Golang IsCodeNotFoundOrCodeUnauthorized使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsCodeNotFoundOrCodeUnauthorized函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: SetUp
func (mr *Machiner) SetUp() (watcher.NotifyWatcher, error) {
// Find which machine we're responsible for.
m, err := mr.config.MachineAccessor.Machine(mr.config.Tag)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
return nil, worker.ErrTerminateAgent
} else if err != nil {
return nil, errors.Trace(err)
}
mr.machine = m
if mr.config.ClearMachineAddressesOnStart {
logger.Debugf("machine addresses ignored on start - resetting machine addresses")
if err := m.SetMachineAddresses(nil); err != nil {
return nil, errors.Annotate(err, "reseting machine addresses")
}
} else {
// Set the addresses in state to the host's addresses.
if err := setMachineAddresses(mr.config.Tag, m); err != nil {
return nil, errors.Annotate(err, "setting machine addresses")
}
}
// Mark the machine as started and log it.
if err := m.SetStatus(status.Started, "", nil); err != nil {
return nil, errors.Annotatef(err, "%s failed to set status started", mr.config.Tag)
}
logger.Infof("%q started", mr.config.Tag)
return m.Watch()
}
示例2: findUnknownInstances
// findUnknownInstances finds instances which are not associated with a machine.
func (task *provisionerTask) findUnknownInstances(stopping []instance.Instance) ([]instance.Instance, error) {
// Make a copy of the instances we know about.
instances := make(map[instance.Id]instance.Instance)
for k, v := range task.instances {
instances[k] = v
}
for _, m := range task.machines {
instId, err := m.InstanceId()
switch {
case err == nil:
delete(instances, instId)
case params.IsCodeNotProvisioned(err):
case params.IsCodeNotFoundOrCodeUnauthorized(err):
default:
return nil, err
}
}
// Now remove all those instances that we are stopping already as we
// know about those and don't want to include them in the unknown list.
for _, inst := range stopping {
delete(instances, inst.Id())
}
var unknown []instance.Instance
for _, inst := range instances {
unknown = append(unknown, inst)
}
return unknown, nil
}
示例3: Handle
func (mr *Machiner) Handle(_ <-chan struct{}) error {
if err := mr.machine.Refresh(); params.IsCodeNotFoundOrCodeUnauthorized(err) {
// NOTE(axw) we can distinguish between NotFound and CodeUnauthorized,
// so we could call NotifyMachineDead here in case the agent failed to
// call NotifyMachineDead directly after setting the machine Dead in
// the first place. We're not doing that to be cautious: the machine
// could be missing from state due to invalid global state.
return worker.ErrTerminateAgent
} else if err != nil {
return err
}
life := mr.machine.Life()
if life == params.Alive {
observedConfig, err := getObservedNetworkConfig(networkingcommon.DefaultNetworkConfigSource())
if err != nil {
return errors.Annotate(err, "cannot discover observed network config")
} else if len(observedConfig) == 0 {
logger.Warningf("not updating network config: no observed config found to update")
}
if len(observedConfig) > 0 {
if err := mr.machine.SetObservedNetworkConfig(observedConfig); err != nil {
return errors.Annotate(err, "cannot update observed network config")
}
}
logger.Debugf("observed network config updated")
return nil
}
logger.Debugf("%q is now %s", mr.config.Tag, life)
if err := mr.machine.SetStatus(status.Stopped, "", nil); err != nil {
return errors.Annotatef(err, "%s failed to set status stopped", mr.config.Tag)
}
// Attempt to mark the machine Dead. If the machine still has units
// assigned, or storage attached, this will fail with
// CodeHasAssignedUnits or CodeMachineHasAttachedStorage respectively.
// Once units or storage are removed, the watcher will trigger again
// and we'll reattempt.
if err := mr.machine.EnsureDead(); err != nil {
if params.IsCodeHasAssignedUnits(err) {
return nil
}
if params.IsCodeMachineHasAttachedStorage(err) {
logger.Tracef("machine still has storage attached")
return nil
}
return errors.Annotatef(err, "%s failed to set machine to dead", mr.config.Tag)
}
// Report on the machine's death. It is important that we do this after
// the machine is Dead, because this is the mechanism we use to clean up
// the machine (uninstall). If we were to report before marking the machine
// as Dead, then we would risk uninstalling prematurely.
if mr.config.NotifyMachineDead != nil {
if err := mr.config.NotifyMachineDead(); err != nil {
return errors.Annotate(err, "reporting machine death")
}
}
return worker.ErrTerminateAgent
}
示例4: NewActionRunner
// NewActionRunner exists to satisfy the Factory interface.
func (f *factory) NewActionRunner(actionId string) (Runner, error) {
ch, err := getCharm(f.paths.GetCharmDir())
if err != nil {
return nil, errors.Trace(err)
}
ok := names.IsValidAction(actionId)
if !ok {
return nil, &badActionError{actionId, "not valid actionId"}
}
tag := names.NewActionTag(actionId)
action, err := f.state.Action(tag)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
return nil, ErrActionNotAvailable
} else if params.IsCodeActionNotAvailable(err) {
return nil, ErrActionNotAvailable
} else if err != nil {
return nil, errors.Trace(err)
}
name := action.Name()
spec, ok := ch.Actions().ActionSpecs[name]
if !ok {
return nil, &badActionError{name, "not defined"}
}
params := action.Params()
if err := spec.ValidateParams(params); err != nil {
return nil, &badActionError{name, err.Error()}
}
actionData := newActionData(name, &tag, params)
ctx, err := f.contextFactory.ActionContext(actionData)
runner := NewRunner(ctx, f.paths)
return runner, nil
}
示例5: changed
// changed ensures that the named unit is deployed, recalled, or removed, as
// indicated by its state.
func (d *Deployer) changed(unitName string) error {
unitTag := names.NewUnitTag(unitName)
// Determine unit life state, and whether we're responsible for it.
logger.Infof("checking unit %q", unitName)
var life params.Life
unit, err := d.st.Unit(unitTag)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
life = params.Dead
} else if err != nil {
return err
} else {
life = unit.Life()
}
// Deployed units must be removed if they're Dead, or if the deployer
// is no longer responsible for them.
if d.deployed.Contains(unitName) {
if life == params.Dead {
if err := d.recall(unitName); err != nil {
return err
}
}
}
// The only units that should be deployed are those that (1) we are responsible
// for and (2) are Alive -- if we're responsible for a Dying unit that is not
// yet deployed, we should remove it immediately rather than undergo the hassle
// of deploying a unit agent purely so it can set itself to Dead.
if !d.deployed.Contains(unitName) {
if life == params.Alive {
return d.deploy(unit)
} else if unit != nil {
return d.remove(unit)
}
}
return nil
}
示例6: Handle
func (mr *Machiner) Handle(_ <-chan struct{}) error {
if err := mr.machine.Refresh(); params.IsCodeNotFoundOrCodeUnauthorized(err) {
return worker.ErrTerminateAgent
} else if err != nil {
return err
}
life := mr.machine.Life()
if life == params.Alive {
return nil
}
logger.Debugf("%q is now %s", mr.tag, life)
if err := mr.machine.SetStatus(params.StatusStopped, "", nil); err != nil {
return errors.Annotatef(err, "%s failed to set status stopped", mr.tag)
}
// Attempt to mark the machine Dead. If the machine still has units
// assigned, or storage attached, this will fail with
// CodeHasAssignedUnits or CodeMachineHasAttachedStorage respectively.
// Once units or storage are removed, the watcher will trigger again
// and we'll reattempt.
if err := mr.machine.EnsureDead(); err != nil {
if params.IsCodeHasAssignedUnits(err) {
return nil
}
if params.IsCodeMachineHasAttachedStorage(err) {
logger.Tracef("machine still has storage attached")
return nil
}
return errors.Annotatef(err, "%s failed to set machine to dead", mr.tag)
}
return worker.ErrTerminateAgent
}
示例7: populateMachineMaps
// populateMachineMaps updates task.instances. Also updates
// task.machines map if a list of IDs is given.
func (task *provisionerTask) populateMachineMaps(ids []string) error {
task.instances = make(map[instance.Id]instance.Instance)
instances, err := task.broker.AllInstances()
if err != nil {
return errors.Annotate(err, "failed to get all instances from broker")
}
for _, i := range instances {
task.instances[i.Id()] = i
}
// Update the machines map with new data for each of the machines in the
// change list.
// TODO(thumper): update for API server later to get all machines in one go.
for _, id := range ids {
machineTag := names.NewMachineTag(id)
machine, err := task.machineGetter.Machine(machineTag)
switch {
case params.IsCodeNotFoundOrCodeUnauthorized(err):
logger.Debugf("machine %q not found in state", id)
delete(task.machines, id)
case err == nil:
task.machines[id] = machine
default:
return errors.Annotatef(err, "failed to get machine %v", id)
}
}
return nil
}
示例8: SetPassword
// SetPassword is part of the ConnFacade interface.
func (facade *connFacade) SetPassword(entity names.Tag, password string) error {
var results params.ErrorResults
args := params.EntityPasswords{
Changes: []params.EntityPassword{{
Tag: entity.String(),
Password: password,
}},
}
err := facade.caller.FacadeCall("SetPasswords", args, &results)
if err != nil {
return errors.Trace(err)
}
if len(results.Results) != 1 {
return errors.Errorf("expected 1 result, got %d", len(results.Results))
}
if err := results.Results[0].Error; err != nil {
if params.IsCodeDead(err) {
return ErrDenied
} else if params.IsCodeNotFoundOrCodeUnauthorized(err) {
return ErrDenied
}
return errors.Trace(err)
}
return nil
}
示例9: Life
// Life is part of the ConnFacade interface.
func (facade *connFacade) Life(entity names.Tag) (Life, error) {
var results params.AgentGetEntitiesResults
args := params.Entities{
Entities: []params.Entity{{Tag: entity.String()}},
}
err := facade.caller.FacadeCall("GetEntities", args, &results)
if err != nil {
return "", errors.Trace(err)
}
if len(results.Entities) != 1 {
return "", errors.Errorf("expected 1 result, got %d", len(results.Entities))
}
if err := results.Entities[0].Error; err != nil {
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
return "", ErrDenied
}
return "", errors.Trace(err)
}
life := Life(results.Entities[0].Life)
switch life {
case Alive, Dying, Dead:
return life, nil
}
return "", errors.Errorf("unknown life value %q", life)
}
示例10: FailAction
// FailAction is part of the operation.Callbacks interface.
func (opc *operationCallbacks) FailAction(actionId, message string) error {
if !names.IsValidAction(actionId) {
return errors.Errorf("invalid action id %q", actionId)
}
tag := names.NewActionTag(actionId)
err := opc.u.st.ActionFinish(tag, params.ActionFailed, nil, message)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
err = nil
}
return err
}
示例11: init
func (w *RemoteStateWatcher) init(unitTag names.UnitTag) (err error) {
// TODO(dfc) named return value is a time bomb
// TODO(axw) move this logic.
defer func() {
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
err = worker.ErrTerminateAgent
}
}()
if w.unit, err = w.st.Unit(unitTag); err != nil {
return err
}
w.service, err = w.unit.Service()
if err != nil {
return err
}
return nil
}
示例12: setUp
func (w *RemoteStateWatcher) setUp(unitTag names.UnitTag) (err error) {
// TODO(dfc) named return value is a time bomb
// TODO(axw) move this logic.
defer func() {
cause := errors.Cause(err)
if params.IsCodeNotFoundOrCodeUnauthorized(cause) {
err = worker.ErrTerminateAgent
}
}()
if w.unit, err = w.st.Unit(unitTag); err != nil {
return errors.Trace(err)
}
w.service, err = w.unit.Application()
if err != nil {
return errors.Trace(err)
}
return nil
}
示例13: Handle
func (mr *Machiner) Handle() error {
if err := mr.machine.Refresh(); params.IsCodeNotFoundOrCodeUnauthorized(err) {
return worker.ErrTerminateAgent
} else if err != nil {
return err
}
if mr.machine.Life() == params.Alive {
return nil
}
logger.Debugf("%q is now %s", mr.tag, mr.machine.Life())
if err := mr.machine.SetStatus(params.StatusStopped, "", nil); err != nil {
return fmt.Errorf("%s failed to set status stopped: %v", mr.tag, err)
}
// If the machine is Dying, it has no units,
// and can be safely set to Dead.
if err := mr.machine.EnsureDead(); err != nil {
return fmt.Errorf("%s failed to set machine to dead: %v", mr.tag, err)
}
return worker.ErrTerminateAgent
}
示例14: relationsChanged
// relationsChanged responds to service relation changes.
func (w *RemoteStateWatcher) relationsChanged(keys []string) error {
w.mu.Lock()
defer w.mu.Unlock()
for _, key := range keys {
relationTag := names.NewRelationTag(key)
rel, err := w.st.Relation(relationTag)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
// If it's actually gone, this unit cannot have entered
// scope, and therefore never needs to know about it.
if ruw, ok := w.relations[relationTag]; ok {
worker.Stop(ruw)
delete(w.relations, relationTag)
delete(w.current.Relations, ruw.relationId)
}
} else if err != nil {
return errors.Trace(err)
} else {
if _, ok := w.relations[relationTag]; ok {
relationSnapshot := w.current.Relations[rel.Id()]
relationSnapshot.Life = rel.Life()
w.current.Relations[rel.Id()] = relationSnapshot
continue
}
ruw, err := w.st.WatchRelationUnits(relationTag, w.unit.Tag())
if err != nil {
return errors.Trace(err)
}
// Because of the delay before handing off responsibility to
// newRelationUnitsWatcher below, add to our own catacomb to
// ensure errors get picked up if they happen.
if err := w.catacomb.Add(ruw); err != nil {
return errors.Trace(err)
}
if err := w.watchRelationUnits(rel, relationTag, ruw); err != nil {
return errors.Trace(err)
}
}
}
return nil
}
示例15: SetUp
func (mr *Machiner) SetUp() (watcher.NotifyWatcher, error) {
// Find which machine we're responsible for.
m, err := mr.st.Machine(mr.tag)
if params.IsCodeNotFoundOrCodeUnauthorized(err) {
return nil, worker.ErrTerminateAgent
} else if err != nil {
return nil, err
}
mr.machine = m
// Set the addresses in state to the host's addresses.
if err := setMachineAddresses(mr.tag, m); err != nil {
return nil, err
}
// Mark the machine as started and log it.
if err := m.SetStatus(params.StatusStarted, "", nil); err != nil {
return nil, fmt.Errorf("%s failed to set status started: %v", mr.tag, err)
}
logger.Infof("%q started", mr.tag)
return m.Watch()
}