github.com/cloudfoundry-attic/ltc@v0.0.0-20151123212628-098adc7919fc/docker_runner/docker_metadata_fetcher/docker_session_factory.go (about)

     1  package docker_metadata_fetcher
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"github.com/docker/docker/cliconfig"
     8  	"github.com/docker/docker/registry"
     9  )
    10  
    11  //go:generate counterfeiter -o fake_docker_session/fake_docker_session.go . DockerSession
    12  type DockerSession interface {
    13  	GetRepositoryData(remote string) (*registry.RepositoryData, error)
    14  	GetRemoteTags(registries []string, repository string) (map[string]string, error)
    15  	GetRemoteImageJSON(imgID, registry string) ([]byte, int, error)
    16  }
    17  
    18  //go:generate counterfeiter -o fake_docker_session/fake_docker_session_factory.go . DockerSessionFactory
    19  type DockerSessionFactory interface {
    20  	MakeSession(reposName string, allowInsecure bool) (DockerSession, error)
    21  }
    22  
    23  type dockerSessionFactory struct{}
    24  
    25  func NewDockerSessionFactory() *dockerSessionFactory {
    26  	return &dockerSessionFactory{}
    27  }
    28  
    29  func (factory *dockerSessionFactory) MakeSession(reposName string, allowInsecure bool) (DockerSession, error) {
    30  	repositoryInfo, err := registry.ParseRepositoryInfo(reposName)
    31  	if err != nil {
    32  		return nil, fmt.Errorf("Error resolving Docker repository name:\n" + err.Error())
    33  	}
    34  
    35  	if allowInsecure {
    36  		repositoryInfo.Index.Secure = false
    37  	}
    38  	endpoint, err := registry.NewEndpoint(repositoryInfo.Index, nil, registry.APIVersionUnknown)
    39  	if err != nil {
    40  		return nil, fmt.Errorf("Error Connecting to Docker registry:\n" + err.Error())
    41  	}
    42  	authConfig := &cliconfig.AuthConfig{}
    43  	session, error := registry.NewSession(http.DefaultClient, authConfig, endpoint)
    44  	return session, error
    45  }