summaryrefslogtreecommitdiff
path: root/registry/service.go
diff options
context:
space:
mode:
authorNoah Treuhaft <noah.treuhaft@docker.com>2017-05-09 14:00:31 -0700
committerNoah Treuhaft <noah.treuhaft@docker.com>2017-05-16 14:36:36 -0700
commit67fdf574d5acd6ddccb6ece0ffe0ace1c1608712 (patch)
treebd850124b3432c00c71fdc91be52fa1cdec83277 /registry/service.go
parente8c2a33b747ac1f69d3992a47844abf1d7f58910 (diff)
downloaddocker-67fdf574d5acd6ddccb6ece0ffe0ace1c1608712.tar.gz
Add daemon option to push foreign layers
The --allow-nondistributable-artifacts daemon option specifies registries to which foreign layers should be pushed. (By default, foreign layers are not pushed to registries.) Additionally, to make this option effective, foreign layers are now pulled from the registry if possible, falling back to the URLs in the image manifest otherwise. This option is useful when pushing images containing foreign layers to a registry on an air-gapped network so hosts on that network can pull the images without connecting to another server. Signed-off-by: Noah Treuhaft <noah.treuhaft@docker.com>
Diffstat (limited to 'registry/service.go')
-rw-r--r--registry/service.go32
1 files changed, 23 insertions, 9 deletions
diff --git a/registry/service.go b/registry/service.go
index 56dabab754..34e8a13f9e 100644
--- a/registry/service.go
+++ b/registry/service.go
@@ -31,6 +31,7 @@ type Service interface {
Search(ctx context.Context, term string, limit int, authConfig *types.AuthConfig, userAgent string, headers map[string][]string) (*registrytypes.SearchResults, error)
ServiceConfig() *registrytypes.ServiceConfig
TLSConfig(hostname string) (*tls.Config, error)
+ LoadAllowNondistributableArtifacts([]string) error
LoadMirrors([]string) error
LoadInsecureRegistries([]string) error
}
@@ -56,13 +57,17 @@ func (s *DefaultService) ServiceConfig() *registrytypes.ServiceConfig {
defer s.mu.Unlock()
servConfig := registrytypes.ServiceConfig{
- InsecureRegistryCIDRs: make([]*(registrytypes.NetIPNet), 0),
- IndexConfigs: make(map[string]*(registrytypes.IndexInfo)),
- Mirrors: make([]string, 0),
+ AllowNondistributableArtifactsCIDRs: make([]*(registrytypes.NetIPNet), 0),
+ AllowNondistributableArtifactsHostnames: make([]string, 0),
+ InsecureRegistryCIDRs: make([]*(registrytypes.NetIPNet), 0),
+ IndexConfigs: make(map[string]*(registrytypes.IndexInfo)),
+ Mirrors: make([]string, 0),
}
// construct a new ServiceConfig which will not retrieve s.Config directly,
// and look up items in s.config with mu locked
+ servConfig.AllowNondistributableArtifactsCIDRs = append(servConfig.AllowNondistributableArtifactsCIDRs, s.config.ServiceConfig.AllowNondistributableArtifactsCIDRs...)
+ servConfig.AllowNondistributableArtifactsHostnames = append(servConfig.AllowNondistributableArtifactsHostnames, s.config.ServiceConfig.AllowNondistributableArtifactsHostnames...)
servConfig.InsecureRegistryCIDRs = append(servConfig.InsecureRegistryCIDRs, s.config.ServiceConfig.InsecureRegistryCIDRs...)
for key, value := range s.config.ServiceConfig.IndexConfigs {
@@ -74,6 +79,14 @@ func (s *DefaultService) ServiceConfig() *registrytypes.ServiceConfig {
return &servConfig
}
+// LoadAllowNondistributableArtifacts loads allow-nondistributable-artifacts registries for Service.
+func (s *DefaultService) LoadAllowNondistributableArtifacts(registries []string) error {
+ s.mu.Lock()
+ defer s.mu.Unlock()
+
+ return s.config.LoadAllowNondistributableArtifacts(registries)
+}
+
// LoadMirrors loads registry mirrors for Service
func (s *DefaultService) LoadMirrors(mirrors []string) error {
s.mu.Lock()
@@ -235,12 +248,13 @@ func (s *DefaultService) ResolveRepository(name reference.Named) (*RepositoryInf
// APIEndpoint represents a remote API endpoint
type APIEndpoint struct {
- Mirror bool
- URL *url.URL
- Version APIVersion
- Official bool
- TrimHostname bool
- TLSConfig *tls.Config
+ Mirror bool
+ URL *url.URL
+ Version APIVersion
+ AllowNondistributableArtifacts bool
+ Official bool
+ TrimHostname bool
+ TLSConfig *tls.Config
}
// ToV1Endpoint returns a V1 API endpoint based on the APIEndpoint