| package registry |
| |
| import ( |
| "encoding/json" |
| "net" |
| |
| "github.com/opencontainers/image-spec/specs-go/v1" |
| ) |
| |
| // ServiceConfig stores daemon registry services configuration. |
| type ServiceConfig struct { |
| AllowNondistributableArtifactsCIDRs []*NetIPNet |
| AllowNondistributableArtifactsHostnames []string |
| InsecureRegistryCIDRs []*NetIPNet `json:"InsecureRegistryCIDRs"` |
| IndexConfigs map[string]*IndexInfo `json:"IndexConfigs"` |
| Mirrors []string |
| } |
| |
| // NetIPNet is the net.IPNet type, which can be marshalled and |
| // unmarshalled to JSON |
| type NetIPNet net.IPNet |
| |
| // String returns the CIDR notation of ipnet |
| func (ipnet *NetIPNet) String() string { |
| return (*net.IPNet)(ipnet).String() |
| } |
| |
| // MarshalJSON returns the JSON representation of the IPNet |
| func (ipnet *NetIPNet) MarshalJSON() ([]byte, error) { |
| return json.Marshal((*net.IPNet)(ipnet).String()) |
| } |
| |
| // UnmarshalJSON sets the IPNet from a byte array of JSON |
| func (ipnet *NetIPNet) UnmarshalJSON(b []byte) (err error) { |
| var ipnetStr string |
| if err = json.Unmarshal(b, &ipnetStr); err == nil { |
| var cidr *net.IPNet |
| if _, cidr, err = net.ParseCIDR(ipnetStr); err == nil { |
| *ipnet = NetIPNet(*cidr) |
| } |
| } |
| return |
| } |
| |
| // IndexInfo contains information about a registry |
| // |
| // RepositoryInfo Examples: |
| // { |
| // "Index" : { |
| // "Name" : "docker.io", |
| // "Mirrors" : ["https://registry-2.docker.io/v1/", "https://registry-3.docker.io/v1/"], |
| // "Secure" : true, |
| // "Official" : true, |
| // }, |
| // "RemoteName" : "library/debian", |
| // "LocalName" : "debian", |
| // "CanonicalName" : "docker.io/debian" |
| // "Official" : true, |
| // } |
| // |
| // { |
| // "Index" : { |
| // "Name" : "127.0.0.1:5000", |
| // "Mirrors" : [], |
| // "Secure" : false, |
| // "Official" : false, |
| // }, |
| // "RemoteName" : "user/repo", |
| // "LocalName" : "127.0.0.1:5000/user/repo", |
| // "CanonicalName" : "127.0.0.1:5000/user/repo", |
| // "Official" : false, |
| // } |
| type IndexInfo struct { |
| // Name is the name of the registry, such as "docker.io" |
| Name string |
| // Mirrors is a list of mirrors, expressed as URIs |
| Mirrors []string |
| // Secure is set to false if the registry is part of the list of |
| // insecure registries. Insecure registries accept HTTP and/or accept |
| // HTTPS with certificates from unknown CAs. |
| Secure bool |
| // Official indicates whether this is an official registry |
| Official bool |
| } |
| |
| // SearchResult describes a search result returned from a registry |
| type SearchResult struct { |
| // StarCount indicates the number of stars this repository has |
| StarCount int `json:"star_count"` |
| // IsOfficial is true if the result is from an official repository. |
| IsOfficial bool `json:"is_official"` |
| // Name is the name of the repository |
| Name string `json:"name"` |
| // IsAutomated indicates whether the result is automated |
| IsAutomated bool `json:"is_automated"` |
| // Description is a textual description of the repository |
| Description string `json:"description"` |
| } |
| |
| // SearchResults lists a collection search results returned from a registry |
| type SearchResults struct { |
| // Query contains the query string that generated the search results |
| Query string `json:"query"` |
| // NumResults indicates the number of results the query returned |
| NumResults int `json:"num_results"` |
| // Results is a slice containing the actual results for the search |
| Results []SearchResult `json:"results"` |
| } |
| |
| // DistributionInspect describes the result obtained from contacting the |
| // registry to retrieve image metadata |
| type DistributionInspect struct { |
| // Descriptor contains information about the manifest, including |
| // the content addressable digest |
| Descriptor v1.Descriptor |
| // Platforms contains the list of platforms supported by the image, |
| // obtained by parsing the manifest |
| Platforms []v1.Platform |
| } |