123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- 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
- }
|