-
Notifications
You must be signed in to change notification settings - Fork 277
/
reader.go
110 lines (86 loc) 路 2.67 KB
/
reader.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
package manifests
import (
"context"
"fmt"
eksdv1 "github.com/aws/eks-distro-build-tooling/release/api/v1alpha1"
"github.com/aws/eks-anywhere/pkg/manifests/bundles"
"github.com/aws/eks-anywhere/pkg/manifests/releases"
releasev1 "github.com/aws/eks-anywhere/release/api/v1alpha1"
)
type FileReader interface {
ReadFile(url string) ([]byte, error)
}
type Reader struct {
FileReader
releasesManifestURL string
}
type ReaderOpt func(*Reader)
func WithReleasesManifest(manifestURL string) ReaderOpt {
return func(r *Reader) {
r.releasesManifestURL = manifestURL
}
}
func NewReader(filereader FileReader, opts ...ReaderOpt) *Reader {
r := &Reader{
FileReader: filereader,
releasesManifestURL: releases.ManifestURL(),
}
for _, opt := range opts {
opt(r)
}
return r
}
// ReadReleaseForVersion returns an EksaRelease based on a version.
func (r *Reader) ReadReleaseForVersion(version string) (*releasev1.EksARelease, error) {
rls, err := releases.ReadReleasesFromURL(r, r.releasesManifestURL)
if err != nil {
return nil, err
}
release, err := releases.ReleaseForVersion(rls, version)
if err != nil {
return nil, err
}
if release == nil {
return nil, fmt.Errorf("invalid version %s, no matching release found", version)
}
return release, nil
}
// ReadBundlesForVersion returns a Bundle based on the version.
func (r *Reader) ReadBundlesForVersion(version string) (*releasev1.Bundles, error) {
release, err := r.ReadReleaseForVersion(version)
if err != nil {
return nil, err
}
return releases.ReadBundlesForRelease(r, release)
}
func (r *Reader) ReadEKSD(eksaVersion, kubeVersion string) (*eksdv1.Release, error) {
b, err := r.ReadBundlesForVersion(eksaVersion)
if err != nil {
return nil, err
}
versionsBundle := bundles.VersionsBundleForKubernetesVersion(b, kubeVersion)
if versionsBundle == nil {
return nil, fmt.Errorf("kubernetes version %s is not supported by bundles manifest %d", kubeVersion, b.Spec.Number)
}
return bundles.ReadEKSD(r, *versionsBundle)
}
func (r *Reader) ReadImages(eksaVersion string) ([]releasev1.Image, error) {
bundle, err := r.ReadBundlesForVersion(eksaVersion)
if err != nil {
return nil, err
}
return bundles.ReadImages(r, bundle)
}
func (r *Reader) ReadImagesFromBundles(_ context.Context, b *releasev1.Bundles) ([]releasev1.Image, error) {
return bundles.ReadImages(r, b)
}
func (r *Reader) ReadCharts(eksaVersion string) ([]releasev1.Image, error) {
bundle, err := r.ReadBundlesForVersion(eksaVersion)
if err != nil {
return nil, err
}
return bundles.Charts(bundle), nil
}
func (r *Reader) ReadChartsFromBundles(ctx context.Context, b *releasev1.Bundles) []releasev1.Image {
return bundles.Charts(b)
}