mirror of https://github.com/docker/docs.git
Merge pull request #2132 from nishanttotla/image-ops-engine-api
Moving last few image operations to engine-api
This commit is contained in:
commit
bf9e985d5b
|
@ -1017,12 +1017,28 @@ func (e *Engine) Pull(image string, authConfig *types.AuthConfig) error {
|
||||||
|
|
||||||
// Load an image on the engine
|
// Load an image on the engine
|
||||||
func (e *Engine) Load(reader io.Reader) error {
|
func (e *Engine) Load(reader io.Reader) error {
|
||||||
err := e.client.LoadImage(reader)
|
loadResponse, err := e.apiClient.ImageLoad(context.TODO(), reader, false)
|
||||||
e.CheckConnectionErr(err)
|
e.CheckConnectionErr(err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wait until the image load is finished
|
||||||
|
dec := json.NewDecoder(loadResponse.Body)
|
||||||
|
m := map[string]interface{}{}
|
||||||
|
for {
|
||||||
|
if err := dec.Decode(&m); err != nil {
|
||||||
|
if err == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if the final stream object contained an error, return it
|
||||||
|
if errMsg, ok := m["error"]; ok {
|
||||||
|
return fmt.Errorf("%v", errMsg)
|
||||||
|
}
|
||||||
|
|
||||||
// force fresh images
|
// force fresh images
|
||||||
e.RefreshImages()
|
e.RefreshImages()
|
||||||
|
|
||||||
|
@ -1031,7 +1047,13 @@ func (e *Engine) Load(reader io.Reader) error {
|
||||||
|
|
||||||
// Import image
|
// Import image
|
||||||
func (e *Engine) Import(source string, repository string, tag string, imageReader io.Reader) error {
|
func (e *Engine) Import(source string, repository string, tag string, imageReader io.Reader) error {
|
||||||
_, err := e.client.ImportImage(source, repository, tag, imageReader)
|
opts := types.ImageImportOptions{
|
||||||
|
SourceName: source,
|
||||||
|
RepositoryName: repository,
|
||||||
|
Tag: tag,
|
||||||
|
Source: imageReader,
|
||||||
|
}
|
||||||
|
_, err := e.apiClient.ImageImport(context.TODO(), opts)
|
||||||
e.CheckConnectionErr(err)
|
e.CheckConnectionErr(err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -1249,7 +1271,13 @@ func (e *Engine) BuildImage(buildImage *types.ImageBuildOptions) (io.ReadCloser,
|
||||||
// TagImage tags an image
|
// TagImage tags an image
|
||||||
func (e *Engine) TagImage(IDOrName string, repo string, tag string, force bool) error {
|
func (e *Engine) TagImage(IDOrName string, repo string, tag string, force bool) error {
|
||||||
// send tag request to docker engine
|
// send tag request to docker engine
|
||||||
err := e.client.TagImage(IDOrName, repo, tag, force)
|
opts := types.ImageTagOptions{
|
||||||
|
ImageID: IDOrName,
|
||||||
|
RepositoryName: repo,
|
||||||
|
Tag: tag,
|
||||||
|
Force: force,
|
||||||
|
}
|
||||||
|
err := e.apiClient.ImageTag(context.TODO(), opts)
|
||||||
e.CheckConnectionErr(err)
|
e.CheckConnectionErr(err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -155,7 +155,7 @@ func TestImportImage(t *testing.T) {
|
||||||
|
|
||||||
// import success
|
// import success
|
||||||
readCloser := nopCloser{bytes.NewBufferString("ok")}
|
readCloser := nopCloser{bytes.NewBufferString("ok")}
|
||||||
client.On("ImportImage", mock.Anything, mock.Anything, mock.Anything, mock.AnythingOfType("*io.PipeReader")).Return(readCloser, nil).Once()
|
apiClient.On("ImageImport", mock.Anything, mock.AnythingOfType("types.ImageImportOptions")).Return(readCloser, nil).Once()
|
||||||
|
|
||||||
callback := func(what, status string, err error) {
|
callback := func(what, status string, err error) {
|
||||||
// import success
|
// import success
|
||||||
|
@ -166,7 +166,7 @@ func TestImportImage(t *testing.T) {
|
||||||
// import error
|
// import error
|
||||||
readCloser = nopCloser{bytes.NewBufferString("error")}
|
readCloser = nopCloser{bytes.NewBufferString("error")}
|
||||||
err := fmt.Errorf("Import error")
|
err := fmt.Errorf("Import error")
|
||||||
client.On("ImportImage", mock.Anything, mock.Anything, mock.Anything, mock.AnythingOfType("*io.PipeReader")).Return(readCloser, err).Once()
|
apiClient.On("ImageImport", mock.Anything, mock.AnythingOfType("types.ImageImportOptions")).Return(readCloser, err).Once()
|
||||||
|
|
||||||
callback = func(what, status string, err error) {
|
callback = func(what, status string, err error) {
|
||||||
// import error
|
// import error
|
||||||
|
@ -207,7 +207,8 @@ func TestLoadImage(t *testing.T) {
|
||||||
c.engines[engine.ID] = engine
|
c.engines[engine.ID] = engine
|
||||||
|
|
||||||
// load success
|
// load success
|
||||||
client.On("LoadImage", mock.AnythingOfType("*io.PipeReader")).Return(nil).Once()
|
readCloser := nopCloser{bytes.NewBufferString("")}
|
||||||
|
apiClient.On("ImageLoad", mock.Anything, mock.AnythingOfType("*io.PipeReader"), false).Return(types.ImageLoadResponse{Body: readCloser}, nil).Once()
|
||||||
callback := func(what, status string, err error) {
|
callback := func(what, status string, err error) {
|
||||||
//if load OK, err will be nil
|
//if load OK, err will be nil
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
@ -216,7 +217,7 @@ func TestLoadImage(t *testing.T) {
|
||||||
|
|
||||||
// load error
|
// load error
|
||||||
err := fmt.Errorf("Load error")
|
err := fmt.Errorf("Load error")
|
||||||
client.On("LoadImage", mock.AnythingOfType("*io.PipeReader")).Return(err).Once()
|
apiClient.On("ImageLoad", mock.Anything, mock.AnythingOfType("*io.PipeReader"), false).Return(types.ImageLoadResponse{}, err).Once()
|
||||||
callback = func(what, status string, err error) {
|
callback = func(what, status string, err error) {
|
||||||
// load error, err is not nil
|
// load error, err is not nil
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
@ -263,7 +264,7 @@ func TestTagImage(t *testing.T) {
|
||||||
c.engines[engine.ID] = engine
|
c.engines[engine.ID] = engine
|
||||||
|
|
||||||
// tag image
|
// tag image
|
||||||
client.On("TagImage", mock.Anything, mock.Anything, mock.Anything, false).Return(nil).Once()
|
apiClient.On("ImageTag", mock.Anything, mock.AnythingOfType("types.ImageTagOptions")).Return(nil).Once()
|
||||||
assert.Nil(t, c.TagImage("busybox", "test_busybox", "latest", false))
|
assert.Nil(t, c.TagImage("busybox", "test_busybox", "latest", false))
|
||||||
assert.NotNil(t, c.TagImage("busybox_not_exists", "test_busybox", "latest", false))
|
assert.NotNil(t, c.TagImage("busybox_not_exists", "test_busybox", "latest", false))
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,11 +23,11 @@ function teardown() {
|
||||||
|
|
||||||
docker_swarm load -i $IMAGE_FILE
|
docker_swarm load -i $IMAGE_FILE
|
||||||
|
|
||||||
# and now swarm should have cought the image just loaded.
|
# and now swarm should have caught the image just loaded.
|
||||||
run docker_swarm images -q
|
run docker_swarm images -q
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "${#lines[@]}" -ge 1 ]
|
[ "${#lines[@]}" -ge 1 ]
|
||||||
|
|
||||||
# check node0
|
# check node0
|
||||||
run docker -H ${HOSTS[0]} images
|
run docker -H ${HOSTS[0]} images
|
||||||
[ "${#lines[@]}" -eq 2 ]
|
[ "${#lines[@]}" -eq 2 ]
|
||||||
|
|
Loading…
Reference in New Issue