You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.7 KiB
124 lines
2.7 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"encoding/base64" |
|
"encoding/json" |
|
"io" |
|
"os" |
|
"strings" |
|
|
|
"go-common/library/ecode" |
|
|
|
"github.com/docker/docker/api/types" |
|
"github.com/docker/docker/api/types/filters" |
|
) |
|
|
|
// authConfig get Auth Config. |
|
func (d *Dao) authConfig() (authStr string, err error) { |
|
authConfig := types.AuthConfig{ |
|
Username: d.c.BiliHub.Username, |
|
Password: d.c.BiliHub.Password, |
|
ServerAddress: d.c.BiliHub.HostName, |
|
} |
|
|
|
var encodedJSON []byte |
|
if encodedJSON, err = json.Marshal(authConfig); err != nil { |
|
return |
|
} |
|
authStr = base64.URLEncoding.EncodeToString(encodedJSON) |
|
return |
|
|
|
} |
|
|
|
// ImagePull Image Pull. |
|
func (d *Dao) ImagePull(imageName string) (err error) { |
|
var ( |
|
out io.ReadCloser |
|
authStr string |
|
) |
|
|
|
if authStr, err = d.authConfig(); err != nil { |
|
return |
|
} |
|
|
|
if out, err = d.dockerClient.ImagePull(context.TODO(), imageName, types.ImagePullOptions{RegistryAuth: authStr}); err != nil { |
|
err = ecode.MerlinImagePullErr |
|
return |
|
} |
|
|
|
defer out.Close() |
|
io.Copy(os.Stdout, out) |
|
|
|
return |
|
} |
|
|
|
// ImagePush Image Push. |
|
func (d *Dao) ImagePush(imageName string) (err error) { |
|
var ( |
|
out io.ReadCloser |
|
authStr string |
|
) |
|
|
|
if authStr, err = d.authConfig(); err != nil { |
|
return |
|
} |
|
|
|
if out, err = d.dockerClient.ImagePush(context.TODO(), imageName, types.ImagePushOptions{RegistryAuth: authStr}); err != nil { |
|
err = ecode.MerlinImagePushErr |
|
return |
|
} |
|
|
|
defer out.Close() |
|
io.Copy(os.Stdout, out) |
|
|
|
return |
|
} |
|
|
|
// ImageTag Image Tag. |
|
func (d *Dao) ImageTag(imageSrcName, imageTagName string) (err error) { |
|
err = d.dockerClient.ImageTag(context.TODO(), imageSrcName, imageTagName) |
|
return |
|
} |
|
|
|
// ImageRemove Image Remove. |
|
func (d *Dao) ImageRemove(imageID string) (err error) { |
|
_, err = d.dockerClient.ImageRemove(context.TODO(), imageID, types.ImageRemoveOptions{Force: true, PruneChildren: true}) |
|
return |
|
} |
|
|
|
// ImageGetID Image Get ID. |
|
func (d *Dao) ImageGetID(imageName string) (imageID string, err error) { |
|
var images []types.ImageSummary |
|
|
|
if images, err = d.dockerClient.ImageList(context.TODO(), types.ImageListOptions{}); err != nil { |
|
return |
|
} |
|
|
|
for _, image := range images { |
|
for _, tag := range image.RepoTags { |
|
if tag == imageName { |
|
imageID = image.ID |
|
return |
|
} |
|
} |
|
} |
|
return |
|
} |
|
|
|
// ImageGetAll Image Get All. |
|
func (d *Dao) ImageGetAll() (imageNames []string, err error) { |
|
var images []types.ImageSummary |
|
if images, err = d.dockerClient.ImageList(context.Background(), types.ImageListOptions{Filters: filters.NewArgs()}); err != nil { |
|
return |
|
} |
|
|
|
for _, image := range images { |
|
for _, tag := range image.RepoTags { |
|
if strings.Contains(tag, d.c.BiliHub.HostName) { |
|
imageNames = append(imageNames, tag) |
|
} |
|
} |
|
} |
|
return |
|
}
|
|
|