@@ -15,6 +15,7 @@ import (
1515 "strings"
1616 "time"
1717
18+ "github.com/coreos/stream-metadata-go/arch"
1819 "github.com/coreos/stream-metadata-go/stream"
1920 "github.com/pkg/errors"
2021 "github.com/sirupsen/logrus"
@@ -48,7 +49,7 @@ type Config struct {
4849type Release interface {
4950 GetBaseIso (architecture string ) (string , error )
5051 GetBaseIsoVersion (architecture string ) (string , error )
51- ExtractFile (image string , filename string ) ([]string , error )
52+ ExtractFile (image string , filename string , architecture string ) ([]string , error )
5253}
5354
5455type release struct {
@@ -69,15 +70,15 @@ func NewRelease(config Config, releaseImage string, pullSecret string, mirrorCon
6970}
7071
7172const (
72- templateGetImage = "oc adm release info --image-for=%s --insecure=%t %s"
73- templateGetImageWithIcsp = "oc adm release info --image-for=%s --insecure=%t --icsp-file=%s %s"
74- templateImageExtract = "oc image extract --path %s:%s --confirm %s"
75- templateImageExtractWithIcsp = "oc image extract --path %s:%s --confirm --icsp-file=%s %s"
73+ templateGetImage = "oc adm release info --image-for=%s --filter-by-os=linux/%s -- insecure=%t %s"
74+ templateGetImageWithIcsp = "oc adm release info --image-for=%s --filter-by-os=linux/%s -- insecure=%t --icsp-file=%s %s"
75+ templateImageExtract = "oc image extract --path %s:%s --filter-by-os=linux/%s -- confirm %s"
76+ templateImageExtractWithIcsp = "oc image extract --path %s:%s --filter-by-os=linux/%s -- confirm --icsp-file=%s %s"
7677)
7778
7879// ExtractFile extracts the specified file from the given image name, and store it in the cache dir.
79- func (r * release ) ExtractFile (image string , filename string ) ([]string , error ) {
80- imagePullSpec , err := r .getImageFromRelease (image )
80+ func (r * release ) ExtractFile (image string , filename string , architecture string ) ([]string , error ) {
81+ imagePullSpec , err := r .getImageFromRelease (image , architecture )
8182 if err != nil {
8283 return nil , err
8384 }
@@ -87,7 +88,7 @@ func (r *release) ExtractFile(image string, filename string) ([]string, error) {
8788 return nil , err
8889 }
8990
90- path , err := r .extractFileFromImage (imagePullSpec , filename , cacheDir )
91+ path , err := r .extractFileFromImage (imagePullSpec , filename , cacheDir , architecture )
9192 if err != nil {
9293 return nil , err
9394 }
@@ -97,7 +98,7 @@ func (r *release) ExtractFile(image string, filename string) ([]string, error) {
9798// Get the CoreOS ISO from the releaseImage.
9899func (r * release ) GetBaseIso (architecture string ) (string , error ) {
99100 // Get the machine-os-images pullspec from the release and use that to get the CoreOS ISO
100- image , err := r .getImageFromRelease (machineOsImageName )
101+ image , err := r .getImageFromRelease (machineOsImageName , architecture )
101102 if err != nil {
102103 return "" , err
103104 }
@@ -126,7 +127,7 @@ func (r *release) GetBaseIso(architecture string) (string, error) {
126127 }
127128
128129 // Get the base ISO from the payload
129- path , err := r .extractFileFromImage (image , filename , cacheDir )
130+ path , err := r .extractFileFromImage (image , filename , cacheDir , architecture )
130131 if err != nil {
131132 return "" , err
132133 }
@@ -135,7 +136,7 @@ func (r *release) GetBaseIso(architecture string) (string, error) {
135136}
136137
137138func (r * release ) GetBaseIsoVersion (architecture string ) (string , error ) {
138- files , err := r .ExtractFile (machineOsImageName , coreOsStreamFileName )
139+ files , err := r .ExtractFile (machineOsImageName , coreOsStreamFileName , architecture )
139140 if err != nil {
140141 return "" , err
141142 }
@@ -166,7 +167,7 @@ func (r *release) GetBaseIsoVersion(architecture string) (string, error) {
166167 return "" , errors .New ("unable to determine CoreOS release version" )
167168}
168169
169- func (r * release ) getImageFromRelease (imageName string ) (string , error ) {
170+ func (r * release ) getImageFromRelease (imageName string , architecture string ) (string , error ) {
170171 // This requires the 'oc' command so make sure its available
171172 _ , err := exec .LookPath ("oc" )
172173 var cmd string
@@ -179,16 +180,18 @@ func (r *release) getImageFromRelease(imageName string) (string, error) {
179180 return "" , err
180181 }
181182
183+ archName := arch .GoArch (architecture )
184+
182185 if len (r .mirrorConfig ) > 0 {
183186 logrus .Debugf ("Using mirror configuration" )
184187 icspFile , err := getIcspFileFromRegistriesConfig (r .mirrorConfig )
185188 if err != nil {
186189 return "" , err
187190 }
188191 defer removeIcspFile (icspFile )
189- cmd = fmt .Sprintf (templateGetImageWithIcsp , imageName , true , icspFile , r .releaseImage )
192+ cmd = fmt .Sprintf (templateGetImageWithIcsp , imageName , archName , true , icspFile , r .releaseImage )
190193 } else {
191- cmd = fmt .Sprintf (templateGetImage , imageName , true , r .releaseImage )
194+ cmd = fmt .Sprintf (templateGetImage , imageName , archName , true , r .releaseImage )
192195 }
193196
194197 logrus .Debugf ("Fetching image from OCP release (%s)" , cmd )
@@ -203,17 +206,18 @@ func (r *release) getImageFromRelease(imageName string) (string, error) {
203206 return image , nil
204207}
205208
206- func (r * release ) extractFileFromImage (image , file , cacheDir string ) ([]string , error ) {
209+ func (r * release ) extractFileFromImage (image , file , cacheDir string , architecture string ) ([]string , error ) {
207210 var cmd string
211+ archName := arch .GoArch (architecture )
208212 if len (r .mirrorConfig ) > 0 {
209213 icspFile , err := getIcspFileFromRegistriesConfig (r .mirrorConfig )
210214 if err != nil {
211215 return nil , err
212216 }
213217 defer removeIcspFile (icspFile )
214- cmd = fmt .Sprintf (templateImageExtractWithIcsp , file , cacheDir , icspFile , image )
218+ cmd = fmt .Sprintf (templateImageExtractWithIcsp , file , cacheDir , archName , icspFile , image )
215219 } else {
216- cmd = fmt .Sprintf (templateImageExtract , file , cacheDir , image )
220+ cmd = fmt .Sprintf (templateImageExtract , file , cacheDir , archName , image )
217221 }
218222 path := filepath .Join (cacheDir , path .Base (file ))
219223 // Remove file if it exists
@@ -303,7 +307,7 @@ func (r *release) verifyCacheFile(image, file, architecture string) (bool, error
303307 defer os .RemoveAll (tempDir )
304308
305309 shaFilename := fmt .Sprintf (coreOsSha256FileName , architecture )
306- shaFile , err := r .extractFileFromImage (image , shaFilename , tempDir )
310+ shaFile , err := r .extractFileFromImage (image , shaFilename , tempDir , architecture )
307311 if err != nil {
308312 logrus .Debug ("Could not get SHA from payload for cache comparison" )
309313 return false , nil
0 commit comments