github.com/AbhinandanKurakure/podman/v3@v3.4.10/libpod/volume_inspect.go (about)

     1  package libpod
     2  
     3  import (
     4  	"github.com/containers/podman/v3/libpod/define"
     5  	pluginapi "github.com/docker/go-plugins-helpers/volume"
     6  	"github.com/pkg/errors"
     7  	"github.com/sirupsen/logrus"
     8  )
     9  
    10  // Inspect provides detailed information about the configuration of the given
    11  // volume.
    12  func (v *Volume) Inspect() (*define.InspectVolumeData, error) {
    13  	if !v.valid {
    14  		return nil, define.ErrVolumeRemoved
    15  	}
    16  
    17  	v.lock.Lock()
    18  	defer v.lock.Unlock()
    19  
    20  	if err := v.update(); err != nil {
    21  		return nil, err
    22  	}
    23  
    24  	data := new(define.InspectVolumeData)
    25  
    26  	data.Mountpoint = v.config.MountPoint
    27  	if v.UsesVolumeDriver() {
    28  		logrus.Debugf("Querying volume plugin %s for status", v.config.Driver)
    29  		data.Mountpoint = v.state.MountPoint
    30  
    31  		if v.plugin == nil {
    32  			return nil, errors.Wrapf(define.ErrMissingPlugin, "volume %s uses volume plugin %s but it is not available, cannot inspect", v.Name(), v.config.Driver)
    33  		}
    34  
    35  		// Retrieve status for the volume.
    36  		// Need to query the volume driver.
    37  		req := new(pluginapi.GetRequest)
    38  		req.Name = v.Name()
    39  		resp, err := v.plugin.GetVolume(req)
    40  		if err != nil {
    41  			return nil, errors.Wrapf(err, "error retrieving volume %s information from plugin %s", v.Name(), v.Driver())
    42  		}
    43  		if resp != nil {
    44  			data.Status = resp.Status
    45  		}
    46  	}
    47  
    48  	data.Name = v.config.Name
    49  	data.Driver = v.config.Driver
    50  	data.CreatedAt = v.config.CreatedTime
    51  	data.Labels = make(map[string]string)
    52  	for k, v := range v.config.Labels {
    53  		data.Labels[k] = v
    54  	}
    55  	data.Scope = v.Scope()
    56  	data.Options = make(map[string]string)
    57  	for k, v := range v.config.Options {
    58  		data.Options[k] = v
    59  	}
    60  	data.UID = v.uid()
    61  	data.GID = v.gid()
    62  	data.Anonymous = v.config.IsAnon
    63  
    64  	return data, nil
    65  }