mirror of
https://github.com/docker/docs.git
synced 2026-04-12 14:25:46 +07:00
Merge pull request #1206 from jimmyxian/fix-pull-return-code
Fix pull return code
This commit is contained in:
@@ -434,7 +434,14 @@ func postImagesCreate(c *context, w http.ResponseWriter, r *http.Request) {
|
||||
if tag := r.Form.Get("tag"); tag != "" {
|
||||
image += ":" + tag
|
||||
}
|
||||
callback := func(what, status string) {
|
||||
|
||||
errorFound := false
|
||||
callback := func(what, status string, err error) {
|
||||
if err != nil {
|
||||
errorFound = true
|
||||
sendJSONMessage(wf, what, fmt.Sprintf("Pulling %s... : %s", image, err.Error()))
|
||||
return
|
||||
}
|
||||
if status == "" {
|
||||
sendJSONMessage(wf, what, fmt.Sprintf("Pulling %s...", image))
|
||||
} else {
|
||||
@@ -442,6 +449,11 @@ func postImagesCreate(c *context, w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
c.cluster.Pull(image, &authConfig, callback)
|
||||
|
||||
if errorFound {
|
||||
sendErrorJSONMessage(wf, 1, "")
|
||||
}
|
||||
|
||||
} else { //import
|
||||
source := r.Form.Get("fromSrc")
|
||||
repo := r.Form.Get("repo")
|
||||
|
||||
17
api/utils.go
17
api/utils.go
@@ -34,6 +34,23 @@ func sendJSONMessage(w io.Writer, id, status string) {
|
||||
json.NewEncoder(w).Encode(message)
|
||||
}
|
||||
|
||||
func sendErrorJSONMessage(w io.Writer, errorCode int, errorMessage string) {
|
||||
error := struct {
|
||||
Code int `json:"code,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
}{
|
||||
errorCode,
|
||||
errorMessage,
|
||||
}
|
||||
|
||||
message := struct {
|
||||
Error interface{} `json:"errorDetail,omitempty"`
|
||||
}{
|
||||
&error,
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(message)
|
||||
}
|
||||
func newClientAndScheme(tlsConfig *tls.Config) (*http.Client, string) {
|
||||
if tlsConfig != nil {
|
||||
return &http.Client{Transport: &http.Transport{TLSClientConfig: tlsConfig}}, "https"
|
||||
|
||||
@@ -41,7 +41,7 @@ type Cluster interface {
|
||||
// `callback` can be called multiple time
|
||||
// `where` is where it is being pulled
|
||||
// `status` is the current status, like "", "in progress" or "downloaded
|
||||
Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string))
|
||||
Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string, err error))
|
||||
|
||||
// Import image
|
||||
// `callback` can be called multiple time
|
||||
|
||||
@@ -270,7 +270,7 @@ func (c *Cluster) RemoveImage(image *cluster.Image) ([]*dockerclient.ImageDelete
|
||||
}
|
||||
|
||||
// Pull will pull images on the cluster nodes
|
||||
func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string)) {
|
||||
func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string, err error)) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -296,7 +296,7 @@ func (c *Cluster) RemoveImages(name string, force bool) ([]*dockerclient.ImageDe
|
||||
}
|
||||
|
||||
// Pull is exported
|
||||
func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string)) {
|
||||
func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, callback func(where, status string, err error)) {
|
||||
var wg sync.WaitGroup
|
||||
|
||||
c.RLock()
|
||||
@@ -307,14 +307,14 @@ func (c *Cluster) Pull(name string, authConfig *dockerclient.AuthConfig, callbac
|
||||
defer wg.Done()
|
||||
|
||||
if callback != nil {
|
||||
callback(engine.Name, "")
|
||||
callback(engine.Name, "", nil)
|
||||
}
|
||||
err := engine.Pull(name, authConfig)
|
||||
if callback != nil {
|
||||
if err != nil {
|
||||
callback(engine.Name, err.Error())
|
||||
callback(engine.Name, "", err)
|
||||
} else {
|
||||
callback(engine.Name, "downloaded")
|
||||
callback(engine.Name, "downloaded", nil)
|
||||
}
|
||||
}
|
||||
}(e)
|
||||
|
||||
@@ -35,3 +35,11 @@ function teardown() {
|
||||
[[ "${lines[1]}" == *"busybox"* ]]
|
||||
done
|
||||
}
|
||||
|
||||
@test "docker pull -check error code" {
|
||||
start_docker 2
|
||||
swarm_manage
|
||||
|
||||
run docker_swarm pull does_not_exist
|
||||
[ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user