Skip to content

Commit a68021a

Browse files
Removed stdout logger + refactoring
Removed stdout logging Satellite now exclusively logs towards stderr with a single logger that is passed and retrieved via context Fixed some environment variables names not being set properly and restored configurations to default states
1 parent c93f12c commit a68021a

File tree

10 files changed

+118
-124
lines changed

10 files changed

+118
-124
lines changed

config.toml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# Wether to us the built-in Zot registry or not
2-
bring_own_registry = true
2+
bring_own_registry = false
33

44
# IP address and port of own registry
55
own_registry_adr = "127.0.0.1"
66
own_registry_port = "8585"
7-
# URL of own registry
8-
own_registry_adr = "127.0.0.1:5000"
97

108
# URL of remote registry OR local file path
119
url_or_file = "https://demo.goharbor.io/v2/myproject/album-server"
@@ -14,9 +12,7 @@ url_or_file = "https://demo.goharbor.io/v2/myproject/album-server"
1412
zotConfigPath = "./registry/config.json"
1513

1614
# Set logging level
17-
log_level = "warn"
18-
# url_or_file = "https://demo.goharbor.io/v2/myproject/album-server"
19-
url_or_file = "http://localhost:5001/v2/library/busybox"
15+
log_level = "info"
2016

2117
# For testing purposes :
2218
# https://demo.goharbor.io/v2/myproject/album-server

image-list/images.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,10 @@
55
"repository": "myproject",
66
"images": [
77
{
8-
"name": "album-server@sha256:71df27326a806ef2946ce502d26212efa11d70e4dcea06ceae612eb29cba398b"
8+
"name": "album-server@sha256:39879890008f12c25ea14125aa8e9ec8ef3e167f0b0ed88057e955a8fa32c430"
99
},
1010
{
11-
"name": "album-server"
12-
},
13-
{
14-
"name": "album-server:v1-manifest-app"
11+
"name": "album-server:busybox"
1512
}
1613
]
1714
}

internal/replicate/replicate.go

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,18 @@ func stripPrefix(imageName string) string {
5959

6060
func (r *BasicReplicator) DeleteExtraImages(ctx context.Context, imgs []store.Image) error {
6161
log := logger.FromContext(ctx)
62-
errLog := logger.ErrorLoggerFromContext(ctx)
6362
zotUrl := os.Getenv("ZOT_URL")
64-
host := os.Getenv("HOST")
6563
registry := os.Getenv("REGISTRY")
6664
repository := os.Getenv("REPOSITORY")
65+
image := os.Getenv("IMAGE")
6766

68-
localRegistry := fmt.Sprintf("%s/%s/%s/%s", zotUrl, host, registry, repository)
67+
localRegistry := fmt.Sprintf("%s/%s/%s/%s", zotUrl, registry, repository, image)
6968
log.Info().Msgf("Local registry: %s", localRegistry)
7069

7170
// Get the list of images from the local registry
7271
localImages, err := crane.ListTags(localRegistry)
7372
if err != nil {
74-
errLog.Error().Msgf("failed to list tags: %v", err)
73+
log.Error().Msgf("failed to list tags: %v", err)
7574
return err
7675
}
7776

@@ -90,7 +89,7 @@ func (r *BasicReplicator) DeleteExtraImages(ctx context.Context, imgs []store.Im
9089
log.Info().Msgf("Deleting image: %s", localImage)
9190
err := crane.Delete(fmt.Sprintf("%s:%s", localRegistry, localImage))
9291
if err != nil {
93-
errLog.Error().Msgf("failed to delete image: %v", err)
92+
log.Error().Msgf("failed to delete image: %v", err)
9493
return err
9594
}
9695
log.Info().Msgf("Image deleted: %s", localImage)
@@ -101,35 +100,35 @@ func (r *BasicReplicator) DeleteExtraImages(ctx context.Context, imgs []store.Im
101100
}
102101

103102
func getPullSource(ctx context.Context, image string) string {
104-
errLog := logger.ErrorLoggerFromContext(ctx)
103+
log := logger.FromContext(ctx)
105104
input := os.Getenv("USER_INPUT")
106105
scheme := os.Getenv("SCHEME")
107106
if strings.HasPrefix(scheme, "http://") || strings.HasPrefix(scheme, "https://") {
108-
url := os.Getenv("HOST") + "/" + os.Getenv("REGISTRY") + "/" + image
107+
url := os.Getenv("REGISTRY") + "/" + os.Getenv("REPOSITORY") + "/" + image
109108
return url
110109
} else {
111110
registryInfo, err := getFileInfo(ctx, input)
112111
if err != nil {
113-
errLog.Error().Msgf("Error getting file info: %v", err)
112+
log.Error().Msgf("Error getting file info: %v", err)
114113
return ""
115114
}
116115
registryURL := registryInfo.RegistryUrl
117116
registryURL = strings.TrimPrefix(registryURL, "https://")
118-
registryURL = strings.TrimSuffix(registryURL, "v2/")
117+
registryURL = strings.TrimSuffix(registryURL, "/v2/")
119118

120119
// TODO: Handle multiple repositories
121120
repositoryName := registryInfo.Repositories[0].Repository
122121

123-
return registryURL + repositoryName + "/" + image
122+
return registryURL + "/" + repositoryName + "/" + image
124123
}
125124
}
126125

127126
func getFileInfo(ctx context.Context, input string) (*RegistryInfo, error) {
128-
errLog := logger.ErrorLoggerFromContext(ctx)
127+
log := logger.FromContext(ctx)
129128
// Get the current working directory
130129
workingDir, err := os.Getwd()
131130
if err != nil {
132-
errLog.Error().Msgf("Error getting current directory: %v", err)
131+
log.Error().Msgf("Error getting current directory: %v", err)
133132
return nil, err
134133
}
135134

@@ -139,14 +138,14 @@ func getFileInfo(ctx context.Context, input string) (*RegistryInfo, error) {
139138
// Read the file
140139
jsonData, err := os.ReadFile(fullPath)
141140
if err != nil {
142-
errLog.Error().Msgf("Error reading file: %v", err)
141+
log.Error().Msgf("Error reading file: %v", err)
143142
return nil, err
144143
}
145144

146145
var registryInfo RegistryInfo
147146
err = json.Unmarshal(jsonData, &registryInfo)
148147
if err != nil {
149-
errLog.Error().Msgf("Error unmarshalling JSON data: %v", err)
148+
log.Error().Msgf("Error unmarshalling JSON data: %v", err)
150149
return nil, err
151150
}
152151

@@ -155,24 +154,22 @@ func getFileInfo(ctx context.Context, input string) (*RegistryInfo, error) {
155154

156155
func CopyImage(ctx context.Context, imageName string) error {
157156
log := logger.FromContext(ctx)
158-
errLog := logger.ErrorLoggerFromContext(ctx)
159157
log.Info().Msgf("Copying image: %s", imageName)
160158
zotUrl := os.Getenv("ZOT_URL")
161159
if zotUrl == "" {
162-
errLog.Error().Msg("ZOT_URL environment variable is not set")
160+
log.Error().Msg("ZOT_URL environment variable is not set")
163161
return fmt.Errorf("ZOT_URL environment variable is not set")
164162
}
165163

166-
// Clean up the image name by removing any host part
167-
cleanedImageName := removeHostName(imageName)
168-
destRef := fmt.Sprintf("%s/%s", zotUrl, cleanedImageName)
169-
fmt.Println("Destination reference:", destRef)
164+
// Build the destination reference
165+
destRef := fmt.Sprintf("%s/%s", zotUrl, imageName)
166+
log.Info().Msgf("Destination reference: %s", destRef)
170167

171168
// Get credentials from environment variables
172169
username := os.Getenv("HARBOR_USERNAME")
173170
password := os.Getenv("HARBOR_PASSWORD")
174171
if username == "" || password == "" {
175-
errLog.Error().Msg("HARBOR_USERNAME or HARBOR_PASSWORD environment variable is not set")
172+
log.Error().Msg("HARBOR_USERNAME or HARBOR_PASSWORD environment variable is not set")
176173
return fmt.Errorf("HARBOR_USERNAME or HARBOR_PASSWORD environment variable is not set")
177174
}
178175

@@ -184,7 +181,7 @@ func CopyImage(ctx context.Context, imageName string) error {
184181
// Pull the image with authentication
185182
srcImage, err := crane.Pull(imageName, crane.WithAuth(auth), crane.Insecure)
186183
if err != nil {
187-
errLog.Error().Msgf("Failed to pull image: %v", err)
184+
log.Error().Msgf("Failed to pull image: %v", err)
188185
return fmt.Errorf("failed to pull image: %w", err)
189186
} else {
190187
log.Info().Msg("Image pulled successfully")
@@ -193,7 +190,7 @@ func CopyImage(ctx context.Context, imageName string) error {
193190
// Push the image to the destination registry
194191
err = crane.Push(srcImage, destRef, crane.Insecure)
195192
if err != nil {
196-
errLog.Error().Msgf("Failed to push image: %v", err)
193+
log.Error().Msgf("Failed to push image: %v", err)
197194
return fmt.Errorf("failed to push image: %w", err)
198195
} else {
199196
log.Info().Msg("Image pushed successfully")
@@ -203,19 +200,9 @@ func CopyImage(ctx context.Context, imageName string) error {
203200
// This is required because it is a temporary directory used by crane to pull and push images to and from
204201
// And crane does not automatically clean it
205202
if err := os.RemoveAll("./local-oci-layout"); err != nil {
206-
errLog.Error().Msgf("Failed to remove directory: %v", err)
203+
log.Error().Msgf("Failed to remove directory: %v", err)
207204
return fmt.Errorf("failed to remove directory: %w", err)
208205
}
209206

210207
return nil
211208
}
212-
213-
// take only the parts after the hostname
214-
func removeHostName(imageName string) string {
215-
parts := strings.Split(imageName, "/")
216-
if len(parts) > 1 {
217-
return strings.Join(parts[1:], "/")
218-
}
219-
220-
return imageName
221-
}

internal/satellite/satellite.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ func NewSatellite(ctx context.Context, storer store.Storer, replicator replicate
2323

2424
func (s *Satellite) Run(ctx context.Context) error {
2525
log := logger.FromContext(ctx)
26-
errLog := logger.ErrorLoggerFromContext(ctx)
2726

2827
// Execute the initial operation immediately without waiting for the ticker
2928
imgs, err := s.storer.List(ctx)
3029
if err != nil {
31-
errLog.Error().Err(err).Msg("Error listing images")
30+
log.Error().Err(err).Msg("Error listing images")
3231
return err
3332
}
3433
if len(imgs) == 0 {
@@ -37,7 +36,7 @@ func (s *Satellite) Run(ctx context.Context) error {
3736
for _, img := range imgs {
3837
err = s.replicator.Replicate(ctx, img.Name)
3938
if err != nil {
40-
errLog.Error().Err(err).Msg("Error replicating image")
39+
log.Error().Err(err).Msg("Error replicating image")
4140
return err
4241
}
4342
}
@@ -56,7 +55,7 @@ func (s *Satellite) Run(ctx context.Context) error {
5655
case <-ticker.C:
5756
imgs, err := s.storer.List(ctx)
5857
if err != nil {
59-
errLog.Error().Err(err).Msg("Error listing images")
58+
log.Error().Err(err).Msg("Error listing images")
6059
return err
6160
}
6261
if len(imgs) == 0 {
@@ -65,7 +64,7 @@ func (s *Satellite) Run(ctx context.Context) error {
6564
for _, img := range imgs {
6665
err = s.replicator.Replicate(ctx, img.Name)
6766
if err != nil {
68-
errLog.Error().Err(err).Msg("Error replicating image")
67+
log.Error().Err(err).Msg("Error replicating image")
6968
return err
7069
}
7170
}

internal/store/file-fetch.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ func (f *FileImageList) Type(ctx context.Context) string {
3030
}
3131

3232
func FileImageListFetcher(ctx context.Context, relativePath string) *FileImageList {
33-
errLog := logger.ErrorLoggerFromContext(ctx)
33+
log := logger.FromContext(ctx)
3434
// Get the current working directory
3535
dir, err := os.Getwd()
3636
if err != nil {
37-
errLog.Error().Err(err).Msg("Error getting current directory")
37+
log.Error().Err(err).Msg("Error getting current directory")
3838
return nil
3939
}
4040

@@ -47,21 +47,21 @@ func FileImageListFetcher(ctx context.Context, relativePath string) *FileImageLi
4747
}
4848

4949
func (client *FileImageList) List(ctx context.Context) ([]Image, error) {
50-
errLog := logger.ErrorLoggerFromContext(ctx)
50+
log := logger.FromContext(ctx)
5151
var images []Image
5252

5353
// Read the file
5454
data, err := os.ReadFile(client.Path)
5555
if err != nil {
56-
errLog.Error().Err(err).Msg("Error reading file")
56+
log.Error().Err(err).Msg("Error reading file")
5757
return nil, err
5858
}
5959

6060
var imageData ImageData
6161
// Parse the JSON data
6262
err = json.Unmarshal(data, &imageData)
6363
if err != nil {
64-
errLog.Error().Err(err).Msg("Error unmarshalling JSON data")
64+
log.Error().Err(err).Msg("Error unmarshalling JSON data")
6565
return nil, err
6666
}
6767

internal/store/http-fetch.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ func (r *RemoteImageList) Type(ctx context.Context) string {
3737

3838
func (client *RemoteImageList) List(ctx context.Context) ([]Image, error) {
3939
log := logger.FromContext(ctx)
40-
errLog := logger.ErrorLoggerFromContext(ctx)
4140
// Construct the URL for fetching tags
4241
url := client.BaseURL + "/tags/list"
4342

@@ -49,7 +48,7 @@ func (client *RemoteImageList) List(ctx context.Context) ([]Image, error) {
4948
// Create a new HTTP request
5049
req, err := http.NewRequest("GET", url, nil)
5150
if err != nil {
52-
errLog.Error().Msgf("failed to create request: %v", err)
51+
log.Error().Msgf("failed to create request: %v", err)
5352
return nil, err
5453
}
5554

@@ -65,22 +64,22 @@ func (client *RemoteImageList) List(ctx context.Context) ([]Image, error) {
6564
log.Info().Msgf("Sending request to %s", url)
6665
resp, err := httpClient.Do(req)
6766
if err != nil {
68-
errLog.Error().Msgf("failed to send request: %v", err)
67+
log.Error().Msgf("failed to send request: %v", err)
6968
return nil, err
7069
}
7170
defer resp.Body.Close()
7271

7372
// Read the response body
7473
body, err := io.ReadAll(resp.Body)
7574
if err != nil {
76-
errLog.Error().Msgf("failed to read response body: %v", err)
75+
log.Error().Msgf("failed to read response body: %v", err)
7776
return nil, err
7877
}
7978

8079
// Unmarshal the JSON response
8180
var tagListResponse TagListResponse
8281
if err := json.Unmarshal(body, &tagListResponse); err != nil {
83-
errLog.Error().Msgf("failed to unmarshal response: %v", err)
82+
log.Error().Msgf("failed to unmarshal response: %v", err)
8483
return nil, err
8584
}
8685

@@ -97,7 +96,7 @@ func (client *RemoteImageList) List(ctx context.Context) ([]Image, error) {
9796
}
9897

9998
func (client *RemoteImageList) GetDigest(ctx context.Context, tag string) (string, error) {
100-
errLog := logger.ErrorLoggerFromContext(ctx)
99+
log := logger.FromContext(ctx)
101100
// Construct the image reference
102101
imageRef := fmt.Sprintf("%s:%s", client.BaseURL, tag)
103102
// Remove extra characters from the URL
@@ -114,7 +113,7 @@ func (client *RemoteImageList) GetDigest(ctx context.Context, tag string) (strin
114113
Password: password,
115114
}), crane.Insecure)
116115
if err != nil {
117-
errLog.Error().Msgf("failed to get digest using crane: %v", err)
116+
log.Error().Msgf("failed to get digest using crane: %v", err)
118117
return "", nil
119118
}
120119

0 commit comments

Comments
 (0)