github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/nomad/structs/errors.go (about)

     1  package structs
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  const (
    10  	errNoLeader            = "No cluster leader"
    11  	errNoRegionPath        = "No path to region"
    12  	errTokenNotFound       = "ACL token not found"
    13  	errPermissionDenied    = "Permission denied"
    14  	errNoNodeConn          = "No path to node"
    15  	errUnknownMethod       = "Unknown rpc method"
    16  	errUnknownNomadVersion = "Unable to determine Nomad version"
    17  	errNodeLacksRpc        = "Node does not support RPC; requires 0.8 or later"
    18  
    19  	// Prefix based errors that are used to check if the error is of a given
    20  	// type. These errors should be created with the associated constructor.
    21  	ErrUnknownAllocationPrefix = "Unknown allocation"
    22  	ErrUnknownNodePrefix       = "Unknown node"
    23  	ErrUnknownJobPrefix        = "Unknown job"
    24  	ErrUnknownEvaluationPrefix = "Unknown evaluation"
    25  	ErrUnknownDeploymentPrefix = "Unknown deployment"
    26  )
    27  
    28  var (
    29  	ErrNoLeader            = errors.New(errNoLeader)
    30  	ErrNoRegionPath        = errors.New(errNoRegionPath)
    31  	ErrTokenNotFound       = errors.New(errTokenNotFound)
    32  	ErrPermissionDenied    = errors.New(errPermissionDenied)
    33  	ErrNoNodeConn          = errors.New(errNoNodeConn)
    34  	ErrUnknownMethod       = errors.New(errUnknownMethod)
    35  	ErrUnknownNomadVersion = errors.New(errUnknownNomadVersion)
    36  	ErrNodeLacksRpc        = errors.New(errNodeLacksRpc)
    37  )
    38  
    39  // IsErrNoLeader returns whether the error is due to there being no leader.
    40  func IsErrNoLeader(err error) bool {
    41  	return err != nil && strings.Contains(err.Error(), errNoLeader)
    42  }
    43  
    44  // IsErrNoRegionPath returns whether the error is due to there being no path to
    45  // the given region.
    46  func IsErrNoRegionPath(err error) bool {
    47  	return err != nil && strings.Contains(err.Error(), errNoRegionPath)
    48  }
    49  
    50  // IsErrTokenNotFound returns whether the error is due to the passed token not
    51  // being resolvable.
    52  func IsErrTokenNotFound(err error) bool {
    53  	return err != nil && strings.Contains(err.Error(), errTokenNotFound)
    54  }
    55  
    56  // IsErrPermissionDenied returns whether the error is due to the operation not
    57  // being allowed due to lack of permissions.
    58  func IsErrPermissionDenied(err error) bool {
    59  	return err != nil && strings.Contains(err.Error(), errPermissionDenied)
    60  }
    61  
    62  // IsErrNoNodeConn returns whether the error is due to there being no path to
    63  // the given node.
    64  func IsErrNoNodeConn(err error) bool {
    65  	return err != nil && strings.Contains(err.Error(), errNoNodeConn)
    66  }
    67  
    68  // IsErrUnknownMethod returns whether the error is due to the operation not
    69  // being allowed due to lack of permissions.
    70  func IsErrUnknownMethod(err error) bool {
    71  	return err != nil && strings.Contains(err.Error(), errUnknownMethod)
    72  }
    73  
    74  // NewErrUnknownAllocation returns a new error caused by the allocation being
    75  // unknown.
    76  func NewErrUnknownAllocation(allocID string) error {
    77  	return fmt.Errorf("%s %q", ErrUnknownAllocationPrefix, allocID)
    78  }
    79  
    80  // NewErrUnknownNode returns a new error caused by the node being unknown.
    81  func NewErrUnknownNode(nodeID string) error {
    82  	return fmt.Errorf("%s %q", ErrUnknownNodePrefix, nodeID)
    83  }
    84  
    85  // NewErrUnknownJob returns a new error caused by the job being unknown.
    86  func NewErrUnknownJob(jobID string) error {
    87  	return fmt.Errorf("%s %q", ErrUnknownJobPrefix, jobID)
    88  }
    89  
    90  // NewErrUnknownEvaluation returns a new error caused by the evaluation being
    91  // unknown.
    92  func NewErrUnknownEvaluation(evaluationID string) error {
    93  	return fmt.Errorf("%s %q", ErrUnknownEvaluationPrefix, evaluationID)
    94  }
    95  
    96  // NewErrUnknownDeployment returns a new error caused by the deployment being
    97  // unknown.
    98  func NewErrUnknownDeployment(deploymentID string) error {
    99  	return fmt.Errorf("%s %q", ErrUnknownDeploymentPrefix, deploymentID)
   100  }
   101  
   102  // IsErrUnknownAllocation returns whether the error is due to an unknown
   103  // allocation.
   104  func IsErrUnknownAllocation(err error) bool {
   105  	return err != nil && strings.Contains(err.Error(), ErrUnknownAllocationPrefix)
   106  }
   107  
   108  // IsErrUnknownNode returns whether the error is due to an unknown
   109  // node.
   110  func IsErrUnknownNode(err error) bool {
   111  	return err != nil && strings.Contains(err.Error(), ErrUnknownNodePrefix)
   112  }
   113  
   114  // IsErrUnknownJob returns whether the error is due to an unknown
   115  // job.
   116  func IsErrUnknownJob(err error) bool {
   117  	return err != nil && strings.Contains(err.Error(), ErrUnknownJobPrefix)
   118  }
   119  
   120  // IsErrUnknownEvaluation returns whether the error is due to an unknown
   121  // evaluation.
   122  func IsErrUnknownEvaluation(err error) bool {
   123  	return err != nil && strings.Contains(err.Error(), ErrUnknownEvaluationPrefix)
   124  }
   125  
   126  // IsErrUnknownDeployment returns whether the error is due to an unknown
   127  // deployment.
   128  func IsErrUnknownDeployment(err error) bool {
   129  	return err != nil && strings.Contains(err.Error(), ErrUnknownDeploymentPrefix)
   130  }
   131  
   132  // IsErrUnknownNomadVersion returns whether the error is due to Nomad being
   133  // unable to determine the version of a node.
   134  func IsErrUnknownNomadVersion(err error) bool {
   135  	return err != nil && strings.Contains(err.Error(), errUnknownNomadVersion)
   136  }
   137  
   138  // IsErrNodeLacksRpc returns whether error is due to a Nomad server being
   139  // unable to connect to a client node because the client is too old (pre-v0.8).
   140  func IsErrNodeLacksRpc(err error) bool {
   141  	return err != nil && strings.Contains(err.Error(), errNodeLacksRpc)
   142  }