forked from buildpacks/imgutil
-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
160 lines (135 loc) · 3.46 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package imgutil
import (
"crypto/tls"
"net/http"
"time"
"github.com/google/go-containerregistry/pkg/authn"
v1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/google/go-containerregistry/pkg/v1/types"
)
type ImageOptions struct {
BaseImageRepoName string
PreviousImageRepoName string
Config *v1.Config
CreatedAt time.Time
MediaTypes MediaTypes
Platform Platform
PreserveDigest bool
PreserveHistory bool
WithoutLayers bool // only relevant for layout images
// These options are specified in each implementation's image constructor
BaseImage v1.Image
PreviousImage v1.Image
}
type IndexAddOption func(*AddOptions)
type IndexPushOption func(*PushOptions) error
type AddOptions struct {
All bool
OS, Arch, Variant, OSVersion string
Features, OSFeatures []string
Annotations map[string]string
}
type PushOptions struct {
Insecure, Purge bool
Format types.MediaType
}
type IndexOptions struct {
KeyChain authn.Keychain
XdgPath, Reponame string
InsecureRegistry bool
}
func (o *IndexOptions) Keychain() authn.Keychain {
return o.KeyChain
}
func (o *IndexOptions) XDGRuntimePath() string {
return o.XdgPath
}
func (o *IndexOptions) RepoName() string {
return o.Reponame
}
func (o *IndexOptions) Insecure() bool {
return o.InsecureRegistry
}
// Add all images within the index
func WithAll(all bool) IndexAddOption {
return func(a *AddOptions) {
a.All = all
}
}
// Add a single image from index with given OS
func WithOS(os string) IndexAddOption {
return func(a *AddOptions) {
a.OS = os
}
}
// Add a single image from index with given Architecture
func WithArchitecture(arch string) IndexAddOption {
return func(a *AddOptions) {
a.Arch = arch
}
}
// Add a single image from index with given Variant
func WithVariant(variant string) IndexAddOption {
return func(a *AddOptions) {
a.Variant = variant
}
}
// Add a single image from index with given OSVersion
func WithOSVersion(osVersion string) IndexAddOption {
return func(a *AddOptions) {
a.OSVersion = osVersion
}
}
// Add a single image from index with given Features
func WithFeatures(features []string) IndexAddOption {
return func(a *AddOptions) {
a.Features = features
}
}
// Add a single image from index with given OSFeatures
func WithOSFeatures(osFeatures []string) IndexAddOption {
return func(a *AddOptions) {
a.OSFeatures = osFeatures
}
}
// Add a single image from index with given Annotations
func WithAnnotations(annotations map[string]string) IndexAddOption {
return func(a *AddOptions) {
a.Annotations = annotations
}
}
// Push index to Insecure Registry
func WithInsecure(insecure bool) IndexPushOption {
return func(a *PushOptions) error {
a.Insecure = insecure
return nil
}
}
// If true, Deletes index from local filesystem after pushing to registry
func WithPurge(purge bool) IndexPushOption {
return func(a *PushOptions) error {
a.Purge = purge
return nil
}
}
// Push the Index with given format
func WithFormat(format types.MediaType) IndexPushOption {
return func(a *PushOptions) error {
if !format.IsIndex() {
return ErrUnknownMediaType(format)
}
a.Format = format
return nil
}
}
func getTransport(insecure bool) http.RoundTripper {
// #nosec G402
if insecure {
return &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}
}
return http.DefaultTransport
}