diff --git a/.gitignore b/.gitignore index 5db70e7..465cb44 100644 --- a/.gitignore +++ b/.gitignore @@ -17,8 +17,9 @@ local-artifacts airgap-scp.sh # test artifacts -*.tar.* +*.tar* # generated dist/ ./bundle/ +tmp/ diff --git a/pkg/apis/hauler.cattle.io/v1alpha1/cluster_types.go b/pkg/apis/hauler.cattle.io/v1alpha1/cluster_types.go index 84e817c..a039b3d 100644 --- a/pkg/apis/hauler.cattle.io/v1alpha1/cluster_types.go +++ b/pkg/apis/hauler.cattle.io/v1alpha1/cluster_types.go @@ -1,9 +1,11 @@ package v1alpha1 import ( + "bufio" "fmt" "gopkg.in/yaml.v3" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "net/http" ) const ( @@ -49,7 +51,7 @@ func NewDefaultCluster(driver string) *Cluster { case DriverRKE2: d := RKE2Driver{ - Version: "v1.20.6+rke2r1", + Version: "v1.20.7+rke2r1", ReleaseURL: "https://github.com/rancher/rke2/releases/download", } @@ -73,6 +75,7 @@ type Cluster struct { type Driver interface { String() string ExecutableURL() string + Images() []string ReleaseImagesURL() string MarshalConfig() ([]byte, error) } @@ -117,6 +120,22 @@ func (d K3SDriver) String() string { func (d K3SDriver) ExecutableURL() string { return fmt.Sprintf("%s/%s/%s", d.ReleaseURL, d.Version, d.String()) } +func (d K3SDriver) Images() []string { + var images []string + resp, err := http.Get(fmt.Sprintf("%s/%s/%s-images.txt", d.ReleaseURL, d.Version, d.String())) + if err != nil { + fmt.Errorf("to get list of images: %w", err) + } + defer resp.Body.Close() + scanner := bufio.NewScanner(resp.Body) + for scanner.Scan() { + images = append(images, scanner.Text()) + } + if err := scanner.Err(); err != nil { + fmt.Errorf("reading list of images: %w", err) + } + return images +} func (d K3SDriver) ReleaseImagesURL() string { return fmt.Sprintf("%s/%s/%s-airgap-images-amd64.tar.zst", d.ReleaseURL, d.Version, d.String()) } @@ -130,6 +149,10 @@ func (d RKE2Driver) String() string { func (d RKE2Driver) ExecutableURL() string { return fmt.Sprintf("%s/%s/%s.linux-amd64", d.ReleaseURL, d.Version, d.String()) } +func (d RKE2Driver) Images() []string { + // TODO + return nil +} func (d RKE2Driver) ReleaseImagesURL() string { return fmt.Sprintf("%s/%s/%s-images.linux-amd64.tar.zst", d.ReleaseURL, d.Version, d.String()) } diff --git a/pkg/packager/package.go b/pkg/packager/package.go index 239315d..10f6256 100644 --- a/pkg/packager/package.go +++ b/pkg/packager/package.go @@ -65,6 +65,7 @@ func (p *Packager) Package(ctx context.Context, outFile string) error { } var imgs []string + imgs = append(imgs, p.Cluster.Driver.Images()...) imgs = append(imgs, p.Cluster.PreloadImages...) // TODO: User defined preloaded images @@ -98,9 +99,7 @@ func (p *Packager) pkgFiles(ctx context.Context, dir string, rawUrls []string) e func buildDriverURLs(driver v1alpha1.Driver) []string { urls := make([]string, 0) - urls = append(urls, driver.ExecutableURL()) - urls = append(urls, driver.ReleaseImagesURL()) return urls }