Merge pull request #440 from runcom/image-pull-secret
server: add auth info to image pull
This commit is contained in:
commit
32750cd3f3
1 changed files with 44 additions and 0 deletions
|
@ -1,8 +1,12 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/containers/image/copy"
|
"github.com/containers/image/copy"
|
||||||
|
"github.com/containers/image/types"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
|
pb "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
|
||||||
)
|
)
|
||||||
|
@ -17,7 +21,32 @@ func (s *Server) PullImage(ctx context.Context, req *pb.PullImageRequest) (*pb.P
|
||||||
if img != nil {
|
if img != nil {
|
||||||
image = img.Image
|
image = img.Image
|
||||||
}
|
}
|
||||||
|
var (
|
||||||
|
username string
|
||||||
|
password string
|
||||||
|
)
|
||||||
|
if req.GetAuth() != nil {
|
||||||
|
username = req.GetAuth().Username
|
||||||
|
password = req.GetAuth().Password
|
||||||
|
if req.GetAuth().Auth != "" {
|
||||||
|
var err error
|
||||||
|
username, password, err = decodeDockerAuth(req.GetAuth().Auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
options := ©.Options{}
|
options := ©.Options{}
|
||||||
|
// a not empty username should be sufficient to decide whether to send auth
|
||||||
|
// or not I guess
|
||||||
|
if username != "" {
|
||||||
|
options.SourceCtx = &types.SystemContext{
|
||||||
|
DockerAuthConfig: &types.DockerAuthConfig{
|
||||||
|
Username: username,
|
||||||
|
Password: password,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
_, err := s.images.PullImage(s.imageContext, image, options)
|
_, err := s.images.PullImage(s.imageContext, image, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -28,3 +57,18 @@ func (s *Server) PullImage(ctx context.Context, req *pb.PullImageRequest) (*pb.P
|
||||||
logrus.Debugf("PullImageResponse: %+v", resp)
|
logrus.Debugf("PullImageResponse: %+v", resp)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func decodeDockerAuth(s string) (string, string, error) {
|
||||||
|
decoded, err := base64.StdEncoding.DecodeString(s)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", err
|
||||||
|
}
|
||||||
|
parts := strings.SplitN(string(decoded), ":", 2)
|
||||||
|
if len(parts) != 2 {
|
||||||
|
// if it's invalid just skip, as docker does
|
||||||
|
return "", "", nil
|
||||||
|
}
|
||||||
|
user := parts[0]
|
||||||
|
password := strings.Trim(parts[1], "\x00")
|
||||||
|
return user, password, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue