mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-20 11:48:24 -06:00
Downgrade go-dockerclient to before it used the docker packages. Remove new docker packages from vendor. Remove gotty client from vendor, which can't build on solaris at all.
129 lines
3.4 KiB
Go
129 lines
3.4 KiB
Go
// Copyright 2015 go-dockerclient authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package docker
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
)
|
|
|
|
var (
|
|
// ErrNoSuchVolume is the error returned when the volume does not exist.
|
|
ErrNoSuchVolume = errors.New("no such volume")
|
|
|
|
// ErrVolumeInUse is the error returned when the volume requested to be removed is still in use.
|
|
ErrVolumeInUse = errors.New("volume in use and cannot be removed")
|
|
)
|
|
|
|
// Volume represents a volume.
|
|
//
|
|
// See https://goo.gl/FZA4BK for more details.
|
|
type Volume struct {
|
|
Name string `json:"Name" yaml:"Name"`
|
|
Driver string `json:"Driver,omitempty" yaml:"Driver,omitempty"`
|
|
Mountpoint string `json:"Mountpoint,omitempty" yaml:"Mountpoint,omitempty"`
|
|
Labels map[string]string `json:"Labels,omitempty" yaml:"Labels,omitempty"`
|
|
}
|
|
|
|
// ListVolumesOptions specify parameters to the ListVolumes function.
|
|
//
|
|
// See https://goo.gl/FZA4BK for more details.
|
|
type ListVolumesOptions struct {
|
|
Filters map[string][]string
|
|
}
|
|
|
|
// ListVolumes returns a list of available volumes in the server.
|
|
//
|
|
// See https://goo.gl/FZA4BK for more details.
|
|
func (c *Client) ListVolumes(opts ListVolumesOptions) ([]Volume, error) {
|
|
resp, err := c.do("GET", "/volumes?"+queryString(opts), doOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
m := make(map[string]interface{})
|
|
if err := json.NewDecoder(resp.Body).Decode(&m); err != nil {
|
|
return nil, err
|
|
}
|
|
var volumes []Volume
|
|
volumesJSON, ok := m["Volumes"]
|
|
if !ok {
|
|
return volumes, nil
|
|
}
|
|
data, err := json.Marshal(volumesJSON)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := json.Unmarshal(data, &volumes); err != nil {
|
|
return nil, err
|
|
}
|
|
return volumes, nil
|
|
}
|
|
|
|
// CreateVolumeOptions specify parameters to the CreateVolume function.
|
|
//
|
|
// See https://goo.gl/pBUbZ9 for more details.
|
|
type CreateVolumeOptions struct {
|
|
Name string
|
|
Driver string
|
|
DriverOpts map[string]string
|
|
}
|
|
|
|
// CreateVolume creates a volume on the server.
|
|
//
|
|
// See https://goo.gl/pBUbZ9 for more details.
|
|
func (c *Client) CreateVolume(opts CreateVolumeOptions) (*Volume, error) {
|
|
resp, err := c.do("POST", "/volumes/create", doOptions{data: opts})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
var volume Volume
|
|
if err := json.NewDecoder(resp.Body).Decode(&volume); err != nil {
|
|
return nil, err
|
|
}
|
|
return &volume, nil
|
|
}
|
|
|
|
// InspectVolume returns a volume by its name.
|
|
//
|
|
// See https://goo.gl/0g9A6i for more details.
|
|
func (c *Client) InspectVolume(name string) (*Volume, error) {
|
|
resp, err := c.do("GET", "/volumes/"+name, doOptions{})
|
|
if err != nil {
|
|
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
|
return nil, ErrNoSuchVolume
|
|
}
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
var volume Volume
|
|
if err := json.NewDecoder(resp.Body).Decode(&volume); err != nil {
|
|
return nil, err
|
|
}
|
|
return &volume, nil
|
|
}
|
|
|
|
// RemoveVolume removes a volume by its name.
|
|
//
|
|
// See https://goo.gl/79GNQz for more details.
|
|
func (c *Client) RemoveVolume(name string) error {
|
|
resp, err := c.do("DELETE", "/volumes/"+name, doOptions{})
|
|
if err != nil {
|
|
if e, ok := err.(*Error); ok {
|
|
if e.Status == http.StatusNotFound {
|
|
return ErrNoSuchVolume
|
|
}
|
|
if e.Status == http.StatusConflict {
|
|
return ErrVolumeInUse
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
defer resp.Body.Close()
|
|
return nil
|
|
}
|