locks.go raw

   1  package linodego
   2  
   3  import (
   4  	"context"
   5  )
   6  
   7  // LockType represents the type of lock that can be applied to a resource
   8  // NOTE: Locks can only be used with v4beta.
   9  type LockType string
  10  
  11  // LockType enums
  12  const (
  13  	LockTypeCannotDelete                 LockType = "cannot_delete"
  14  	LockTypeCannotDeleteWithSubresources LockType = "cannot_delete_with_subresources"
  15  )
  16  
  17  // LockedEntity represents the entity that is locked
  18  // NOTE: Locks can only be used with v4beta.
  19  type LockedEntity struct {
  20  	ID    int        `json:"id"`
  21  	Type  EntityType `json:"type"`
  22  	Label string     `json:"label"`
  23  	URL   string     `json:"url"`
  24  }
  25  
  26  // Lock represents a resource lock
  27  // NOTE: Locks can only be used with v4beta.
  28  type Lock struct {
  29  	ID       int          `json:"id"`
  30  	LockType LockType     `json:"lock_type"`
  31  	Entity   LockedEntity `json:"entity"`
  32  }
  33  
  34  // LockCreateOptions fields are those accepted by CreateLock
  35  // NOTE: Locks can only be used with v4beta.
  36  type LockCreateOptions struct {
  37  	EntityType EntityType `json:"entity_type"`
  38  	EntityID   int        `json:"entity_id"`
  39  	LockType   LockType   `json:"lock_type"`
  40  }
  41  
  42  // ListLocks returns a paginated list of Locks
  43  // NOTE: Locks can only be used with v4beta.
  44  func (c *Client) ListLocks(ctx context.Context, opts *ListOptions) ([]Lock, error) {
  45  	return getPaginatedResults[Lock](ctx, c, "locks", opts)
  46  }
  47  
  48  // GetLock gets a single Lock with the provided ID
  49  // NOTE: Locks can only be used with v4beta.
  50  func (c *Client) GetLock(ctx context.Context, lockID int) (*Lock, error) {
  51  	e := formatAPIPath("locks/%d", lockID)
  52  	return doGETRequest[Lock](ctx, c, e)
  53  }
  54  
  55  // CreateLock creates a lock for a resource
  56  // NOTE: Locks can only be used with v4beta.
  57  func (c *Client) CreateLock(ctx context.Context, opts LockCreateOptions) (*Lock, error) {
  58  	return doPOSTRequest[Lock](ctx, c, "locks", opts)
  59  }
  60  
  61  // DeleteLock deletes a single Lock with the provided ID
  62  // NOTE: Locks can only be used with v4beta.
  63  func (c *Client) DeleteLock(ctx context.Context, lockID int) error {
  64  	e := formatAPIPath("locks/%d", lockID)
  65  	return doDELETERequest(ctx, c, e)
  66  }
  67