本文整理汇总了Golang中github.com/juju/errors.IsNotFound函数的典型用法代码示例。如果您正苦于以下问题:Golang IsNotFound函数的具体用法?Golang IsNotFound怎么用?Golang IsNotFound使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsNotFound函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: convertAccountsForShow
func (c *showControllerCommand) convertAccountsForShow(controllerName string, controller *ShowControllerDetails) {
accounts, err := c.store.AllAccounts(controllerName)
if err != nil && !errors.IsNotFound(err) {
controller.Errors = append(controller.Errors, err.Error())
}
if len(accounts) > 0 {
controller.Accounts = make(map[string]*AccountDetails)
for accountName, account := range accounts {
details := &AccountDetails{User: account.User}
controller.Accounts[accountName] = details
if c.showPasswords {
details.Password = account.Password
}
if err := c.convertModelsForShow(controllerName, accountName, details); err != nil {
controller.Errors = append(controller.Errors, err.Error())
}
}
}
controller.CurrentAccount, err = c.store.CurrentAccount(controllerName)
if err != nil && !errors.IsNotFound(err) {
controller.Errors = append(controller.Errors, err.Error())
}
}
示例2: cleanupDyingUnit
// cleanupDyingUnit marks resources owned by the unit as dying, to ensure
// they are cleaned up as well.
func (st *State) cleanupDyingUnit(name string) error {
unit, err := st.Unit(name)
if errors.IsNotFound(err) {
return nil
} else if err != nil {
return err
}
// Mark the unit as departing from its joined relations, allowing
// related units to start converging to a state in which that unit
// is gone as quickly as possible.
relations, err := unit.RelationsJoined()
if err != nil {
return err
}
for _, relation := range relations {
relationUnit, err := relation.Unit(unit)
if errors.IsNotFound(err) {
continue
} else if err != nil {
return err
}
if err := relationUnit.PrepareLeaveScope(); err != nil {
return err
}
}
// Mark storage attachments as dying, so that they are detached
// and removed from state, allowing the unit to terminate.
return st.cleanupUnitStorageAttachments(unit.UnitTag(), false)
}
示例3: NewResolvePendingResourceOps
// NewResolvePendingResourceOps generates mongo transaction operations
// to set the identified resource as active.
//
// Leaking mongo details (transaction ops) is a necessary evil since we
// do not have any machinery to facilitate transactions between
// different components.
func (p ResourcePersistence) NewResolvePendingResourceOps(resID, pendingID string) ([]txn.Op, error) {
if pendingID == "" {
return nil, errors.New("missing pending ID")
}
oldDoc, err := p.getOnePending(resID, pendingID)
if errors.IsNotFound(err) {
return nil, errors.NotFoundf("pending resource %q (%s)", resID, pendingID)
}
if err != nil {
return nil, errors.Trace(err)
}
pending, err := doc2resource(oldDoc)
if err != nil {
return nil, errors.Trace(err)
}
exists := true
if _, err := p.getOne(resID); errors.IsNotFound(err) {
exists = false
} else if err != nil {
return nil, errors.Trace(err)
}
ops := newResolvePendingResourceOps(pending, exists)
return ops, nil
}
示例4: RemoveStorageAttachment
// Remove removes the storage attachment from state, and may remove its storage
// instance as well, if the storage instance is Dying and no other references to
// it exist. It will fail if the storage attachment is not Dead.
func (st *State) RemoveStorageAttachment(storage names.StorageTag, unit names.UnitTag) (err error) {
defer errors.DeferredAnnotatef(&err, "cannot remove storage attachment %s:%s", storage.Id(), unit.Id())
buildTxn := func(attempt int) ([]txn.Op, error) {
s, err := st.storageAttachment(storage, unit)
if errors.IsNotFound(err) {
return nil, jujutxn.ErrNoOperations
} else if err != nil {
return nil, errors.Trace(err)
}
inst, err := st.storageInstance(storage)
if errors.IsNotFound(err) {
// This implies that the attachment was removed
// after the call to st.storageAttachment.
return nil, jujutxn.ErrNoOperations
} else if err != nil {
return nil, errors.Trace(err)
}
ops, err := removeStorageAttachmentOps(st, s, inst)
if err != nil {
return nil, errors.Trace(err)
}
return ops, nil
}
return st.run(buildTxn)
}
示例5: findImageMetadata
// findImageMetadata returns all image metadata or an error fetching them.
// It looks for image metadata in state.
// If none are found, we fall back on original image search in simple streams.
func (p *ProvisionerAPI) findImageMetadata(imageConstraint *imagemetadata.ImageConstraint, env environs.Environ) ([]params.CloudImageMetadata, error) {
// Look for image metadata in state.
stateMetadata, err := p.imageMetadataFromState(imageConstraint)
if err != nil && !errors.IsNotFound(err) {
// look into simple stream if for some reason can't get from controller,
// so do not exit on error.
logger.Infof("could not get image metadata from controller: %v", err)
}
logger.Debugf("got from controller %d metadata", len(stateMetadata))
// No need to look in data sources if found in state.
if len(stateMetadata) != 0 {
return stateMetadata, nil
}
// If no metadata is found in state, fall back to original simple stream search.
// Currently, an image metadata worker picks up this metadata periodically (daily),
// and stores it in state. So potentially, this collection could be different
// to what is in state.
dsMetadata, err := p.imageMetadataFromDataSources(env, imageConstraint)
if err != nil {
if !errors.IsNotFound(err) {
return nil, errors.Trace(err)
}
}
logger.Debugf("got from data sources %d metadata", len(dsMetadata))
return dsMetadata, nil
}
示例6: obliterateUnit
// obliterateUnit removes a unit from state completely. It is not safe or
// sane to obliterate any unit in isolation; its only reasonable use is in
// the context of machine obliteration, in which we can be sure that unclean
// shutdown of units is not going to leave a machine in a difficult state.
func (st *State) obliterateUnit(unitName string) error {
unit, err := st.Unit(unitName)
if errors.IsNotFound(err) {
return nil
} else if err != nil {
return err
}
// Unlike the machine, we *can* always destroy the unit, and (at least)
// prevent further dependencies being added. If we're really lucky, the
// unit will be removed immediately.
if err := unit.Destroy(); err != nil {
return errors.Annotatef(err, "cannot destroy unit %q", unitName)
}
if err := unit.Refresh(); errors.IsNotFound(err) {
return nil
} else if err != nil {
return err
}
for _, subName := range unit.SubordinateNames() {
if err := st.obliterateUnit(subName); err != nil {
return err
}
}
if err := unit.EnsureDead(); err != nil {
return err
}
return unit.Remove()
}
示例7: cleanupUnitStorageAttachments
func (st *State) cleanupUnitStorageAttachments(unitTag names.UnitTag, remove bool) error {
storageAttachments, err := st.UnitStorageAttachments(unitTag)
if err != nil {
return err
}
for _, storageAttachment := range storageAttachments {
storageTag := storageAttachment.StorageInstance()
err := st.DestroyStorageAttachment(storageTag, unitTag)
if errors.IsNotFound(err) {
continue
} else if err != nil {
return err
}
if !remove {
continue
}
err = st.RemoveStorageAttachment(storageTag, unitTag)
if errors.IsNotFound(err) {
continue
} else if err != nil {
return err
}
}
return nil
}
示例8: serveLoginPost
func (h *localLoginHandlers) serveLoginPost(p httprequest.Params) (interface{}, error) {
if err := p.Request.ParseForm(); err != nil {
return nil, err
}
waitId := p.Request.Form.Get("waitid")
if waitId == "" {
return nil, errors.NotValidf("missing waitid")
}
username := p.Request.Form.Get("user")
password := p.Request.Form.Get("password")
if !names.IsValidUser(username) {
return nil, errors.NotValidf("username %q", username)
}
userTag := names.NewUserTag(username)
if !userTag.IsLocal() {
return nil, errors.NotValidf("non-local username %q", username)
}
authenticator := h.authCtxt.authenticator(p.Request.Host)
if _, err := authenticator.Authenticate(h.state, userTag, params.LoginRequest{
Credentials: password,
}); err != nil {
// Mark the interaction as done (but failed),
// unblocking a pending "/auth/wait" request.
if err := h.authCtxt.localUserInteractions.Done(waitId, userTag, err); err != nil {
if !errors.IsNotFound(err) {
logger.Warningf(
"failed to record completion of interaction %q for %q",
waitId, userTag.Id(),
)
}
}
return nil, errors.Trace(err)
}
// Provide the client with a macaroon that they can use to
// prove that they have logged in, and obtain a discharge
// macaroon.
m, err := h.authCtxt.CreateLocalLoginMacaroon(userTag)
if err != nil {
return nil, err
}
cookie, err := httpbakery.NewCookie(macaroon.Slice{m})
if err != nil {
return nil, err
}
http.SetCookie(p.Response, cookie)
// Mark the interaction as done, unblocking a pending
// "/auth/wait" request.
if err := h.authCtxt.localUserInteractions.Done(
waitId, userTag, nil,
); err != nil {
if errors.IsNotFound(err) {
err = errors.New("login timed out")
}
return nil, err
}
return nil, nil
}
示例9: UserAccess
// UserAccess returns the access the user has on the model state
// and the host controller.
func UserAccess(st *state.State, utag names.UserTag) (modelUser, controllerUser permission.UserAccess, err error) {
var none permission.UserAccess
modelUser, err = st.UserAccess(utag, st.ModelTag())
if err != nil && !errors.IsNotFound(err) {
return none, none, errors.Trace(err)
}
controllerUser, err = state.ControllerAccess(st, utag)
if err != nil && !errors.IsNotFound(err) {
return none, none, errors.Trace(err)
}
// TODO(perrito666) remove the following section about everyone group
// when groups are implemented, this accounts only for the lack of a local
// ControllerUser when logging in from an external user that has not been granted
// permissions on the controller but there are permissions for the special
// everyone group.
if !utag.IsLocal() {
controllerUser, err = maybeUseGroupPermission(st.UserAccess, controllerUser, st.ControllerTag(), utag)
if err != nil {
return none, none, errors.Annotatef(err, "obtaining ControllerUser for everyone group")
}
}
if permission.IsEmptyUserAccess(modelUser) &&
permission.IsEmptyUserAccess(controllerUser) {
return none, none, errors.NotFoundf("model or controller user")
}
return modelUser, controllerUser, nil
}
示例10: AddSpace
// AddSpace creates and returns a new space.
func (st *State) AddSpace(name string, providerId network.Id, subnets []string, isPublic bool) (newSpace *Space, err error) {
defer errors.DeferredAnnotatef(&err, "adding space %q", name)
if !names.IsValidSpace(name) {
return nil, errors.NewNotValid(nil, "invalid space name")
}
spaceDoc := spaceDoc{
Life: Alive,
Name: name,
IsPublic: isPublic,
ProviderId: string(providerId),
}
newSpace = &Space{doc: spaceDoc, st: st}
ops := []txn.Op{{
C: spacesC,
Id: name,
Assert: txn.DocMissing,
Insert: spaceDoc,
}}
if providerId != "" {
ops = append(ops, st.networkEntityGlobalKeyOp("space", providerId))
}
for _, subnetId := range subnets {
// TODO:(mfoord) once we have refcounting for subnets we should
// also assert that the refcount is zero as moving the space of a
// subnet in use is not permitted.
ops = append(ops, txn.Op{
C: subnetsC,
Id: subnetId,
Assert: txn.DocExists,
Update: bson.D{{"$set", bson.D{{"space-name", name}}}},
})
}
if err := st.runTransaction(ops); err == txn.ErrAborted {
if _, err := st.Space(name); err == nil {
return nil, errors.AlreadyExistsf("space %q", name)
}
for _, subnetId := range subnets {
if _, err := st.Subnet(subnetId); errors.IsNotFound(err) {
return nil, err
}
}
if err := newSpace.Refresh(); err != nil {
if errors.IsNotFound(err) {
return nil, errors.Errorf("ProviderId %q not unique", providerId)
}
return nil, errors.Trace(err)
}
return nil, errors.Trace(err)
} else if err != nil {
return nil, err
}
return newSpace, nil
}
示例11: convertControllerDetails
// convertControllerDetails takes a map of Controllers and
// the recently used model for each and creates a list of
// amalgamated controller and model details.
func (c *listControllersCommand) convertControllerDetails(storeControllers map[string]jujuclient.ControllerDetails) (map[string]ControllerItem, []string) {
if len(storeControllers) == 0 {
return nil, nil
}
errs := []string{}
addError := func(msg, controllerName string, err error) {
logger.Errorf(fmt.Sprintf("getting current %s for controller %s: %v", msg, controllerName, err))
errs = append(errs, msg)
}
controllers := map[string]ControllerItem{}
for controllerName, details := range storeControllers {
serverName := ""
// The most recently connected-to address
// is the first in the list.
if len(details.APIEndpoints) > 0 {
serverName = details.APIEndpoints[0]
}
var userName, modelName string
accountName, err := c.store.CurrentAccount(controllerName)
if err != nil {
if !errors.IsNotFound(err) {
addError("account name", controllerName, err)
continue
}
} else {
currentAccount, err := c.store.AccountByName(controllerName, accountName)
if err != nil {
addError("account details", controllerName, err)
continue
}
userName = currentAccount.User
currentModel, err := c.store.CurrentModel(controllerName, accountName)
if err != nil {
if !errors.IsNotFound(err) {
addError("model", controllerName, err)
continue
}
}
modelName = currentModel
}
controllers[controllerName] = ControllerItem{
ModelName: modelName,
User: userName,
Server: serverName,
APIEndpoints: details.APIEndpoints,
ControllerUUID: details.ControllerUUID,
CACert: details.CACert,
}
}
return controllers, errs
}
示例12: ModelConfigDefaultValues
// ModelConfigDefaultValues returns the default config values to be used
// when creating a new model, and the origin of those values.
func (st *State) ModelConfigDefaultValues() (config.ModelDefaultAttributes, error) {
model, err := st.Model()
if err != nil {
return nil, errors.Trace(err)
}
cloudName := model.Cloud()
cloud, err := st.Cloud(cloudName)
if err != nil {
return nil, errors.Trace(err)
}
result := make(config.ModelDefaultAttributes)
// Juju defaults
defaultAttrs, err := st.defaultInheritedConfig()
if err != nil {
return nil, errors.Trace(err)
}
for k, v := range defaultAttrs {
result[k] = config.AttributeDefaultValues{Default: v}
}
// Controller config
ciCfg, err := st.controllerInheritedConfig()
if err != nil && !errors.IsNotFound(err) {
return nil, errors.Trace(err)
}
for k, v := range ciCfg {
if ds, ok := result[k]; ok {
ds.Controller = v
result[k] = ds
} else {
result[k] = config.AttributeDefaultValues{Controller: v}
}
}
// Region config
for _, region := range cloud.Regions {
rspec := &environs.RegionSpec{Cloud: cloudName, Region: region.Name}
riCfg, err := st.regionInheritedConfig(rspec)()
if err != nil {
if errors.IsNotFound(err) {
continue
}
return nil, errors.Trace(err)
}
for k, v := range riCfg {
regCfg := config.RegionDefaultValue{Name: region.Name, Value: v}
if ds, ok := result[k]; ok {
ds.Regions = append(result[k].Regions, regCfg)
result[k] = ds
} else {
result[k] = config.AttributeDefaultValues{Regions: []config.RegionDefaultValue{regCfg}}
}
}
}
return result, nil
}
示例13: getMaybeSignedMetadata
// getMaybeSignedMetadata returns metadata records matching the specified constraint in params.
func getMaybeSignedMetadata(source DataSource, params GetMetadataParams, signed bool) ([]interface{}, *ResolveInfo, error) {
makeIndexPath := func(basePath string) string {
pathNoSuffix := fmt.Sprintf(basePath, params.StreamsVersion)
indexPath := pathNoSuffix + UnsignedSuffix
if signed {
indexPath = pathNoSuffix + SignedSuffix
}
return indexPath
}
resolveInfo := &ResolveInfo{}
resolveInfo.Source = source.Description()
resolveInfo.Signed = signed
indexPath := makeIndexPath(defaultIndexPath)
logger.Tracef("looking for data index using path %s", indexPath)
mirrorsPath := fmt.Sprintf(defaultMirrorsPath, params.StreamsVersion)
cons := params.LookupConstraint
indexRef, indexURL, err := fetchIndex(
source, indexPath, mirrorsPath, cons.Params().CloudSpec, signed, params.ValueParams,
)
logger.Tracef("looking for data index using URL %s", indexURL)
if errors.IsNotFound(err) || errors.IsUnauthorized(err) {
legacyIndexPath := makeIndexPath(defaultLegacyIndexPath)
logger.Tracef("%s not accessed, actual error: %v", indexPath, err)
logger.Tracef("%s not accessed, trying legacy index path: %s", indexPath, legacyIndexPath)
indexPath = legacyIndexPath
indexRef, indexURL, err = fetchIndex(
source, indexPath, mirrorsPath, cons.Params().CloudSpec, signed, params.ValueParams,
)
}
resolveInfo.IndexURL = indexURL
if err != nil {
if errors.IsNotFound(err) || errors.IsUnauthorized(err) {
logger.Tracef("cannot load index %q: %v", indexURL, err)
}
return nil, resolveInfo, err
}
logger.Tracef("read metadata index at %q", indexURL)
items, err := indexRef.getLatestMetadataWithFormat(cons, ProductFormat, signed)
if err != nil {
if errors.IsNotFound(err) {
logger.Debugf("skipping index %q because of missing information: %v", indexURL, err)
return nil, resolveInfo, err
}
if _, ok := err.(*noMatchingProductsError); ok {
logger.Debugf("%v", err)
}
}
if indexRef.Source.Description() == "mirror" {
resolveInfo.MirrorURL = indexRef.Source.(*urlDataSource).baseURL
}
return items, resolveInfo, err
}
示例14: HasPermission
// HasPermission returns true if the specified user has the specified
// permission on target.
func HasPermission(userGetter userAccessFunc, utag names.Tag,
requestedPermission permission.Access, target names.Tag) (bool, error) {
validForKind := false
switch requestedPermission {
case permission.LoginAccess, permission.AddModelAccess, permission.SuperuserAccess:
validForKind = target.Kind() == names.ControllerTagKind
case permission.ReadAccess, permission.WriteAccess, permission.AdminAccess:
validForKind = target.Kind() == names.ModelTagKind
}
if !validForKind {
return false, nil
}
userTag, ok := utag.(names.UserTag)
if !ok {
// lets not reveal more than is strictly necessary
return false, nil
}
user, err := userGetter(userTag, target)
if err != nil && !errors.IsNotFound(err) {
return false, errors.Annotatef(err, "while obtaining %s user", target.Kind())
}
// there is a special case for external users, a group called [email protected]
if target.Kind() == names.ControllerTagKind && !userTag.IsLocal() {
controllerTag, ok := target.(names.ControllerTag)
if !ok {
return false, errors.NotValidf("controller tag")
}
// TODO(perrito666) remove the following section about everyone group
// when groups are implemented, this accounts only for the lack of a local
// ControllerUser when logging in from an external user that has not been granted
// permissions on the controller but there are permissions for the special
// everyone group.
user, err = maybeUseGroupPermission(userGetter, user, controllerTag, userTag)
if err != nil {
return false, errors.Trace(err)
}
if permission.IsEmptyUserAccess(user) {
return false, nil
}
}
// returning this kind of information would be too much information to reveal too.
if errors.IsNotFound(err) {
return false, nil
}
modelPermission := user.Access.EqualOrGreaterModelAccessThan(requestedPermission) && target.Kind() == names.ModelTagKind
controllerPermission := user.Access.EqualOrGreaterControllerAccessThan(requestedPermission) && target.Kind() == names.ControllerTagKind
if !controllerPermission && !modelPermission {
return false, nil
}
return true, nil
}
示例15: existingCredentialsForCloud
func (c *addCredentialCommand) existingCredentialsForCloud() (*jujucloud.CloudCredential, error) {
existingCredentials, err := c.store.CredentialForCloud(c.CloudName)
if err != nil && !errors.IsNotFound(err) {
return nil, errors.Annotate(err, "reading existing credentials for cloud")
}
if errors.IsNotFound(err) {
existingCredentials = &jujucloud.CloudCredential{
AuthCredentials: make(map[string]jujucloud.Credential),
}
}
return existingCredentials, nil
}