mirror of https://github.com/docker/docs.git
use apiClient for volumes management
- create volume - list volumes Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
This commit is contained in:
parent
0be5b31f27
commit
4516d1ae16
|
@ -308,7 +308,7 @@ func getVolume(c *context, w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
// GET /volumes
|
||||
func getVolumes(c *context, w http.ResponseWriter, r *http.Request) {
|
||||
volumes := struct{ Volumes []*dockerclient.Volume }{}
|
||||
volumes := struct{ Volumes []*apitypes.Volume }{}
|
||||
|
||||
for _, volume := range c.cluster.Volumes() {
|
||||
tmp := (*volume).Volume
|
||||
|
@ -613,7 +613,7 @@ func postNetworksCreate(c *context, w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
// POST /volumes/create
|
||||
func postVolumesCreate(c *context, w http.ResponseWriter, r *http.Request) {
|
||||
var request dockerclient.VolumeCreateRequest
|
||||
var request apitypes.VolumeCreateRequest
|
||||
|
||||
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
|
||||
httpError(w, err.Error(), http.StatusBadRequest)
|
||||
|
|
|
@ -45,7 +45,7 @@ type Cluster interface {
|
|||
RemoveNetwork(network *Network) error
|
||||
|
||||
// Create a volume
|
||||
CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volume, error)
|
||||
CreateVolume(request *types.VolumeCreateRequest) (*Volume, error)
|
||||
|
||||
// Return all volumes
|
||||
Volumes() Volumes
|
||||
|
|
|
@ -569,14 +569,14 @@ func (e *Engine) RefreshNetworks() error {
|
|||
|
||||
// RefreshVolumes refreshes the list of volumes on the engine.
|
||||
func (e *Engine) RefreshVolumes() error {
|
||||
volumes, err := e.client.ListVolumes()
|
||||
volumesLsRsp, err := e.apiClient.VolumeList(context.TODO(), filters.NewArgs())
|
||||
e.CheckConnectionErr(err)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.Lock()
|
||||
e.volumes = make(map[string]*Volume)
|
||||
for _, volume := range volumes {
|
||||
for _, volume := range volumesLsRsp.Volumes {
|
||||
e.volumes[volume.Name] = &Volume{Volume: *volume, Engine: e}
|
||||
}
|
||||
e.Unlock()
|
||||
|
@ -887,8 +887,8 @@ func (e *Engine) CreateNetwork(request *dockerclient.NetworkCreate) (*dockerclie
|
|||
}
|
||||
|
||||
// CreateVolume creates a volume in the engine
|
||||
func (e *Engine) CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volume, error) {
|
||||
volume, err := e.client.CreateVolume(request)
|
||||
func (e *Engine) CreateVolume(request *types.VolumeCreateRequest) (*Volume, error) {
|
||||
volume, err := e.apiClient.VolumeCreate(context.TODO(), *request)
|
||||
|
||||
e.RefreshVolumes()
|
||||
e.CheckConnectionErr(err)
|
||||
|
@ -896,7 +896,7 @@ func (e *Engine) CreateVolume(request *dockerclient.VolumeCreateRequest) (*Volum
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Volume{Volume: *volume, Engine: e}, nil
|
||||
return &Volume{Volume: volume, Engine: e}, nil
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -161,9 +161,11 @@ func TestEngineCpusMemory(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{}, nil)
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil)
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
|
||||
assert.NoError(t, engine.ConnectWithClient(client, apiClient))
|
||||
|
@ -189,9 +191,11 @@ func TestEngineSpecs(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{}, nil)
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil)
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
|
||||
assert.NoError(t, engine.ConnectWithClient(client, apiClient))
|
||||
|
@ -222,13 +226,14 @@ func TestEngineState(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
|
||||
// The client will return one container at first, then a second one will appear.
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{{Id: "one"}}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil).Once()
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("InspectContainer", "one").Return(&dockerclient.ContainerInfo{Config: &dockerclient.ContainerConfig{CpuShares: 100}}, nil).Once()
|
||||
client.On("ListContainers", true, false, fmt.Sprintf("{%q:[%q]}", "id", "two")).Return([]dockerclient.Container{{Id: "two"}}, nil).Once()
|
||||
client.On("InspectContainer", "two").Return(&dockerclient.ContainerInfo{Config: &dockerclient.ContainerConfig{CpuShares: 100}}, nil).Once()
|
||||
|
@ -277,11 +282,12 @@ func TestCreateContainer(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil).Once()
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
|
||||
assert.NoError(t, engine.ConnectWithClient(client, apiClient))
|
||||
assert.True(t, engine.isConnected())
|
||||
|
@ -297,7 +303,6 @@ func TestCreateContainer(t *testing.T) {
|
|||
client.On("CreateContainer", &mockConfig, name, auth).Return(id, nil).Once()
|
||||
client.On("ListContainers", true, false, fmt.Sprintf(`{"id":[%q]}`, id)).Return([]dockerclient.Container{{Id: id}}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil).Once()
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("InspectContainer", id).Return(&dockerclient.ContainerInfo{Config: &config.ContainerConfig}, nil).Once()
|
||||
container, err := engine.Create(config, name, false, auth)
|
||||
assert.Nil(t, err)
|
||||
|
@ -321,7 +326,6 @@ func TestCreateContainer(t *testing.T) {
|
|||
client.On("CreateContainer", &mockConfig, name, auth).Return(id, nil).Once()
|
||||
client.On("ListContainers", true, false, fmt.Sprintf(`{"id":[%q]}`, id)).Return([]dockerclient.Container{{Id: id}}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil).Once()
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("InspectContainer", id).Return(&dockerclient.ContainerInfo{Config: &config.ContainerConfig}, nil).Once()
|
||||
container, err = engine.Create(config, name, true, auth)
|
||||
assert.Nil(t, err)
|
||||
|
@ -384,10 +388,11 @@ func TestUsedCpus(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil).Once()
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{{Id: "test"}}, nil).Once()
|
||||
client.On("InspectContainer", "test").Return(&dockerclient.ContainerInfo{Config: &dockerclient.ContainerConfig{CpuShares: cpuShares}}, nil).Once()
|
||||
|
||||
|
@ -421,9 +426,10 @@ func TestContainerRemovedDuringRefresh(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil)
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{container1, container2}, nil)
|
||||
client.On("InspectContainer", "c1").Return(info1, errors.New("Not found"))
|
||||
|
@ -452,14 +458,15 @@ func TestDisconnect(t *testing.T) {
|
|||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
|
||||
apiClient.On("VolumeList", mock.Anything,
|
||||
mock.AnythingOfType("Args"),
|
||||
).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("StopAllMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
|
||||
// The client will return one container at first, then a second one will appear.
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{{Id: "one"}}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil).Once()
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
client.On("InspectContainer", "one").Return(&dockerclient.ContainerInfo{Config: &dockerclient.ContainerConfig{CpuShares: 100}}, nil).Once()
|
||||
client.On("ListContainers", true, false, fmt.Sprintf("{%q:[%q]}", "id", "two")).Return([]dockerclient.Container{{Id: "two"}}, nil).Once()
|
||||
client.On("InspectContainer", "two").Return(&dockerclient.ContainerInfo{Config: &dockerclient.ContainerConfig{CpuShares: 100}}, nil).Once()
|
||||
|
|
|
@ -299,7 +299,7 @@ func (c *Cluster) refreshNetworks() {
|
|||
}
|
||||
|
||||
// CreateVolume creates a volume in the cluster
|
||||
func (c *Cluster) CreateVolume(request *dockerclient.VolumeCreateRequest) (*cluster.Volume, error) {
|
||||
func (c *Cluster) CreateVolume(request *types.VolumeCreateRequest) (*cluster.Volume, error) {
|
||||
return nil, errNotSupported
|
||||
}
|
||||
|
||||
|
|
|
@ -492,7 +492,7 @@ func (c *Cluster) CreateNetwork(request *dockerclient.NetworkCreate) (response *
|
|||
}
|
||||
|
||||
// CreateVolume creates a volume in the cluster
|
||||
func (c *Cluster) CreateVolume(request *dockerclient.VolumeCreateRequest) (*cluster.Volume, error) {
|
||||
func (c *Cluster) CreateVolume(request *types.VolumeCreateRequest) (*cluster.Volume, error) {
|
||||
var (
|
||||
wg sync.WaitGroup
|
||||
volume *cluster.Volume
|
||||
|
|
|
@ -137,11 +137,13 @@ func TestImportImage(t *testing.T) {
|
|||
apiClient := engineapimock.NewMockClient()
|
||||
apiClient.On("Info", mock.Anything).Return(mockInfo, nil)
|
||||
apiClient.On("ServerVersion", mock.Anything).Return(mockVersion, nil)
|
||||
apiClient.On("NetworkList", mock.Anything).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("VolumeList", mock.Anything, mock.Anything).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil)
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
|
||||
// connect client
|
||||
engine.ConnectWithClient(client, apiClient)
|
||||
|
@ -188,11 +190,13 @@ func TestLoadImage(t *testing.T) {
|
|||
apiClient := engineapimock.NewMockClient()
|
||||
apiClient.On("Info", mock.Anything).Return(mockInfo, nil)
|
||||
apiClient.On("ServerVersion", mock.Anything).Return(mockVersion, nil)
|
||||
apiClient.On("NetworkList", mock.Anything).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("VolumeList", mock.Anything, mock.Anything).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return([]*dockerclient.Image{}, nil)
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
|
||||
// connect client
|
||||
engine.ConnectWithClient(client, apiClient)
|
||||
|
@ -242,11 +246,13 @@ func TestTagImage(t *testing.T) {
|
|||
apiClient := engineapimock.NewMockClient()
|
||||
apiClient.On("Info", mock.Anything).Return(mockInfo, nil)
|
||||
apiClient.On("ServerVersion", mock.Anything).Return(mockVersion, nil)
|
||||
apiClient.On("NetworkList", mock.Anything).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("NetworkList", mock.Anything,
|
||||
mock.AnythingOfType("NetworkListOptions"),
|
||||
).Return([]types.NetworkResource{}, nil)
|
||||
apiClient.On("VolumeList", mock.Anything, mock.Anything).Return(types.VolumesListResponse{}, nil)
|
||||
client.On("StartMonitorEvents", mock.Anything, mock.Anything, mock.Anything).Return()
|
||||
client.On("ListContainers", true, false, "").Return([]dockerclient.Container{}, nil).Once()
|
||||
client.On("ListImages", mock.Anything).Return(images, nil)
|
||||
client.On("ListVolumes", mock.Anything).Return([]*dockerclient.Volume{}, nil)
|
||||
|
||||
// connect client
|
||||
engine.ConnectWithClient(client, apiClient)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package cluster
|
||||
|
||||
import "github.com/samalba/dockerclient"
|
||||
import "github.com/docker/engine-api/types"
|
||||
|
||||
// Volume is exported
|
||||
type Volume struct {
|
||||
dockerclient.Volume
|
||||
types.Volume
|
||||
|
||||
Engine *Engine
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package cluster
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/samalba/dockerclient"
|
||||
"github.com/docker/engine-api/types"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
@ -16,56 +16,56 @@ func TestGet(t *testing.T) {
|
|||
}
|
||||
volumes := Volumes{
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t1",
|
||||
Driver: "local",
|
||||
},
|
||||
Engine: engines[0],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t2",
|
||||
Driver: "local",
|
||||
},
|
||||
Engine: engines[0],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t3",
|
||||
Driver: "rexray",
|
||||
},
|
||||
Engine: engines[0],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t4",
|
||||
Driver: "flocker",
|
||||
},
|
||||
Engine: engines[0],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t1",
|
||||
Driver: "local",
|
||||
},
|
||||
Engine: engines[1],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t2",
|
||||
Driver: "local",
|
||||
},
|
||||
Engine: engines[1],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t3",
|
||||
Driver: "rexray",
|
||||
},
|
||||
Engine: engines[1],
|
||||
},
|
||||
&Volume{
|
||||
Volume: dockerclient.Volume{
|
||||
Volume: types.Volume{
|
||||
Name: "t4",
|
||||
Driver: "flocker",
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue