github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/volume/service/opts/opts.go (about)

     1  package opts
     2  
     3  // CreateOption is used to pass options in when creating a volume
     4  type CreateOption func(*CreateConfig)
     5  
     6  // CreateConfig is the set of config options that can be set when creating
     7  // a volume
     8  type CreateConfig struct {
     9  	Options   map[string]string
    10  	Labels    map[string]string
    11  	Reference string
    12  }
    13  
    14  // WithCreateLabel creates a CreateOption which adds a label with the given key/value pair
    15  func WithCreateLabel(key, value string) CreateOption {
    16  	return func(cfg *CreateConfig) {
    17  		if cfg.Labels == nil {
    18  			cfg.Labels = map[string]string{}
    19  		}
    20  		cfg.Labels[key] = value
    21  	}
    22  }
    23  
    24  // WithCreateLabels creates a CreateOption which sets the labels to the
    25  // passed in value
    26  func WithCreateLabels(labels map[string]string) CreateOption {
    27  	return func(cfg *CreateConfig) {
    28  		cfg.Labels = labels
    29  	}
    30  }
    31  
    32  // WithCreateOptions creates a CreateOption which sets the options passed
    33  // to the volume driver when creating a volume to the options passed in.
    34  func WithCreateOptions(opts map[string]string) CreateOption {
    35  	return func(cfg *CreateConfig) {
    36  		cfg.Options = opts
    37  	}
    38  }
    39  
    40  // WithCreateReference creats a CreateOption which sets a reference to use
    41  // when creating a volume. This ensures that the volume is created with a reference
    42  // already attached to it to prevent race conditions with Create and volume cleanup.
    43  func WithCreateReference(ref string) CreateOption {
    44  	return func(cfg *CreateConfig) {
    45  		cfg.Reference = ref
    46  	}
    47  }
    48  
    49  // GetConfig is used with `GetOption` to set options for the volumes service's
    50  // `Get` implementation.
    51  type GetConfig struct {
    52  	Driver        string
    53  	Reference     string
    54  	ResolveStatus bool
    55  }
    56  
    57  // GetOption is passed to the service `Get` add extra details on the get request
    58  type GetOption func(*GetConfig)
    59  
    60  // WithGetDriver provides the driver to get the volume from
    61  // If no driver is provided to `Get`, first the available metadata is checked
    62  // to see which driver it belongs to, if that is not available all drivers are
    63  // probed to find the volume.
    64  func WithGetDriver(name string) GetOption {
    65  	return func(o *GetConfig) {
    66  		o.Driver = name
    67  	}
    68  }
    69  
    70  // WithGetReference indicates to `Get` to increment the reference count for the
    71  // retrieved volume with the provided reference ID.
    72  func WithGetReference(ref string) GetOption {
    73  	return func(o *GetConfig) {
    74  		o.Reference = ref
    75  	}
    76  }
    77  
    78  // WithGetResolveStatus indicates to `Get` to also fetch the volume status.
    79  // This can cause significant overhead in the volume lookup.
    80  func WithGetResolveStatus(cfg *GetConfig) {
    81  	cfg.ResolveStatus = true
    82  }
    83  
    84  // RemoveConfig is used by `RemoveOption` to store config options for remove
    85  type RemoveConfig struct {
    86  	PurgeOnError bool
    87  }
    88  
    89  // RemoveOption is used to pass options to the volumes service `Remove` implementation
    90  type RemoveOption func(*RemoveConfig)
    91  
    92  // WithPurgeOnError is an option passed to `Remove` which will purge all cached
    93  // data about a volume even if there was an error while attempting to remove the
    94  // volume.
    95  func WithPurgeOnError(b bool) RemoveOption {
    96  	return func(o *RemoveConfig) {
    97  		o.PurgeOnError = b
    98  	}
    99  }