@@ -26,6 +26,7 @@ const (
2626 defaultImageTag = "operator-registry-index:latest"
2727 defaultDatabaseFolder = "database"
2828 defaultDatabaseFile = "index.db"
29+ tmpDirPrefix = "index_tmp"
2930)
3031
3132// ImageIndexer is a struct implementation of the Indexer interface
@@ -53,36 +54,18 @@ type AddToIndexRequest struct {
5354
5455// AddToIndex is an aggregate API used to generate a registry index image with additional bundles
5556func (i ImageIndexer ) AddToIndex (request AddToIndexRequest ) error {
56- databaseFile := defaultDatabaseFile
57-
5857 // set a temp directory
59- workingDir , err := ioutil .TempDir ("./" , "index_tmp" )
58+ tmpDir , err := ioutil .TempDir ("./" , tmpDirPrefix )
6059 if err != nil {
6160 return err
6261 }
63- defer os .RemoveAll (workingDir )
64-
65- // Pull the fromIndex
66- if request .FromIndex != "" {
67- i .Logger .Infof ("Pulling previous image %s to get metadata" , request .FromIndex )
68-
69- // Get the old index image's dbLocationLabel to find this path
70- labels , err := i .LabelReader .GetLabelsFromImage (request .FromIndex )
71- if err != nil {
72- return err
73- }
74- if dbLocation , ok := labels [containertools .DbLocationLabel ]; ok {
75- // extract the database to the file
76- err = i .ImageReader .GetImageData (request .FromIndex , workingDir )
77- if err != nil {
78- return err
79- }
62+ defer os .RemoveAll (tmpDir )
8063
81- databaseFile = path .Join (workingDir , dbLocation )
82- }
83- } else {
84- databaseFile = path .Join (workingDir , databaseFile )
64+ databaseFile , err := i .getDatabaseFile (tmpDir , request .FromIndex )
65+ if err != nil {
66+ return err
8567 }
68+ workingDir := path .Dir (databaseFile )
8669
8770 // Run opm registry add on the database
8871 addToRegistryReq := registry.AddToRegistryRequest {
@@ -127,38 +110,18 @@ type DeleteFromIndexRequest struct {
127110// DeleteFromIndex is an aggregate API used to generate a registry index image
128111// without specific operators
129112func (i ImageIndexer ) DeleteFromIndex (request DeleteFromIndexRequest ) error {
130- databaseFile := defaultDatabaseFile
131-
132113 // set a temp directory
133- workingDir , err := ioutil .TempDir ("./" , "index_tmp" )
114+ tmpDir , err := ioutil .TempDir ("./" , tmpDirPrefix )
134115 if err != nil {
135116 return err
136117 }
137- defer os .RemoveAll (workingDir )
118+ defer os .RemoveAll (tmpDir )
138119
139- // Pull the fromIndex
140- if request .FromIndex != "" {
141- i .Logger .Infof ("Pulling previous image %s to get metadata" , request .FromIndex )
142-
143- // Get the old index image's dbLocationLabel to find this path
144- labels , err := i .LabelReader .GetLabelsFromImage (request .FromIndex )
145- if err != nil {
146- return err
147- }
148- if dbLocation , ok := labels [containertools .DbLocationLabel ]; ok {
149- i .Logger .Infof ("Previous db location %s" , dbLocation )
150-
151- // extract the database to the file
152- err = i .ImageReader .GetImageData (request .FromIndex , workingDir )
153- if err != nil {
154- return err
155- }
156-
157- databaseFile = path .Join (workingDir , dbLocation )
158- }
159- } else {
160- databaseFile = path .Join (workingDir , databaseFile )
120+ databaseFile , err := i .getDatabaseFile (tmpDir , request .FromIndex )
121+ if err != nil {
122+ return err
161123 }
124+ workingDir := path .Dir (databaseFile )
162125
163126 // Run opm registry add on the database
164127 deleteFromRegistryReq := registry.DeleteFromRegistryRequest {
@@ -257,6 +220,33 @@ func (i ImageIndexer) buildDockerfile(binarySourceImage, workingDir, tag string)
257220 return nil
258221}
259222
223+ func (i ImageIndexer ) getDatabaseFile (workingDir , fromIndex string ) (string , error ) {
224+ if fromIndex == "" {
225+ return path .Join (workingDir , defaultDatabaseFile ), nil
226+ }
227+
228+ // Pull the fromIndex
229+ i .Logger .Infof ("Pulling previous image %s to get metadata" , fromIndex )
230+
231+ // Get the old index image's dbLocationLabel to find this path
232+ labels , err := i .LabelReader .GetLabelsFromImage (fromIndex )
233+ if err != nil {
234+ return "" , err
235+ }
236+ dbLocation , ok := labels [containertools .DbLocationLabel ]
237+ if ! ok {
238+ return "" , fmt .Errorf ("Index image %s missing label %s" , fromIndex , containertools .DbLocationLabel )
239+ }
240+
241+ // extract the database to the working directory
242+ err = i .ImageReader .GetImageData (fromIndex , workingDir )
243+ if err != nil {
244+ return "" , err
245+ }
246+
247+ return path .Join (workingDir , dbLocation ), nil
248+ }
249+
260250func build (dockerfileText , imageTag string , commandRunner containertools.CommandRunner , logger * logrus.Entry ) error {
261251 if imageTag == "" {
262252 imageTag = defaultImageTag
@@ -304,7 +294,7 @@ type ExportFromIndexRequest struct {
304294// an index image
305295func (i ImageIndexer ) ExportFromIndex (request ExportFromIndexRequest ) error {
306296 // set a temp directory
307- workingDir , err := ioutil .TempDir ("./" , "index_tmp" )
297+ workingDir , err := ioutil .TempDir ("./" , tmpDirPrefix )
308298 if err != nil {
309299 return err
310300 }
0 commit comments