@@ -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
@@ -54,36 +55,18 @@ type AddToIndexRequest struct {
5455
5556// AddToIndex is an aggregate API used to generate a registry index image with additional bundles
5657func (i ImageIndexer ) AddToIndex (request AddToIndexRequest ) error {
57- databaseFile := defaultDatabaseFile
58-
5958 // set a temp directory
60- workingDir , err := ioutil .TempDir ("./" , "index_tmp" )
59+ tmpDir , err := ioutil .TempDir ("./" , tmpDirPrefix )
6160 if err != nil {
6261 return err
6362 }
64- defer os .RemoveAll (workingDir )
65-
66- // Pull the fromIndex
67- if request .FromIndex != "" {
68- i .Logger .Infof ("Pulling previous image %s to get metadata" , request .FromIndex )
69-
70- // Get the old index image's dbLocationLabel to find this path
71- labels , err := i .LabelReader .GetLabelsFromImage (request .FromIndex )
72- if err != nil {
73- return err
74- }
75- if dbLocation , ok := labels [containertools .DbLocationLabel ]; ok {
76- // extract the database to the file
77- err = i .ImageReader .GetImageData (request .FromIndex , workingDir )
78- if err != nil {
79- return err
80- }
63+ defer os .RemoveAll (tmpDir )
8164
82- databaseFile = path .Join (workingDir , dbLocation )
83- }
84- } else {
85- databaseFile = path .Join (workingDir , databaseFile )
65+ databaseFile , err := i .getDatabaseFile (tmpDir , request .FromIndex )
66+ if err != nil {
67+ return err
8668 }
69+ workingDir := path .Dir (databaseFile )
8770
8871 // Run opm registry add on the database
8972 addToRegistryReq := registry.AddToRegistryRequest {
@@ -129,38 +112,18 @@ type DeleteFromIndexRequest struct {
129112// DeleteFromIndex is an aggregate API used to generate a registry index image
130113// without specific operators
131114func (i ImageIndexer ) DeleteFromIndex (request DeleteFromIndexRequest ) error {
132- databaseFile := defaultDatabaseFile
133-
134115 // set a temp directory
135- workingDir , err := ioutil .TempDir ("./" , "index_tmp" )
116+ tmpDir , err := ioutil .TempDir ("./" , tmpDirPrefix )
136117 if err != nil {
137118 return err
138119 }
139- defer os .RemoveAll (workingDir )
120+ defer os .RemoveAll (tmpDir )
140121
141- // Pull the fromIndex
142- if request .FromIndex != "" {
143- i .Logger .Infof ("Pulling previous image %s to get metadata" , request .FromIndex )
144-
145- // Get the old index image's dbLocationLabel to find this path
146- labels , err := i .LabelReader .GetLabelsFromImage (request .FromIndex )
147- if err != nil {
148- return err
149- }
150- if dbLocation , ok := labels [containertools .DbLocationLabel ]; ok {
151- i .Logger .Infof ("Previous db location %s" , dbLocation )
152-
153- // extract the database to the file
154- err = i .ImageReader .GetImageData (request .FromIndex , workingDir )
155- if err != nil {
156- return err
157- }
158-
159- databaseFile = path .Join (workingDir , dbLocation )
160- }
161- } else {
162- databaseFile = path .Join (workingDir , databaseFile )
122+ databaseFile , err := i .getDatabaseFile (tmpDir , request .FromIndex )
123+ if err != nil {
124+ return err
163125 }
126+ workingDir := path .Dir (databaseFile )
164127
165128 // Run opm registry add on the database
166129 deleteFromRegistryReq := registry.DeleteFromRegistryRequest {
@@ -259,6 +222,33 @@ func (i ImageIndexer) buildDockerfile(binarySourceImage, workingDir, tag string)
259222 return nil
260223}
261224
225+ func (i ImageIndexer ) getDatabaseFile (workingDir , fromIndex string ) (string , error ) {
226+ if fromIndex == "" {
227+ return path .Join (workingDir , defaultDatabaseFile ), nil
228+ }
229+
230+ // Pull the fromIndex
231+ i .Logger .Infof ("Pulling previous image %s to get metadata" , fromIndex )
232+
233+ // Get the old index image's dbLocationLabel to find this path
234+ labels , err := i .LabelReader .GetLabelsFromImage (fromIndex )
235+ if err != nil {
236+ return "" , err
237+ }
238+ dbLocation , ok := labels [containertools .DbLocationLabel ]
239+ if ! ok {
240+ return "" , fmt .Errorf ("Index image %s missing label %s" , fromIndex , containertools .DbLocationLabel )
241+ }
242+
243+ // extract the database to the working directory
244+ err = i .ImageReader .GetImageData (fromIndex , workingDir )
245+ if err != nil {
246+ return "" , err
247+ }
248+
249+ return path .Join (workingDir , dbLocation ), nil
250+ }
251+
262252func build (dockerfileText , imageTag string , commandRunner containertools.CommandRunner , logger * logrus.Entry ) error {
263253 if imageTag == "" {
264254 imageTag = defaultImageTag
@@ -306,7 +296,7 @@ type ExportFromIndexRequest struct {
306296// an index image
307297func (i ImageIndexer ) ExportFromIndex (request ExportFromIndexRequest ) error {
308298 // set a temp directory
309- workingDir , err := ioutil .TempDir ("./" , "index_tmp" )
299+ workingDir , err := ioutil .TempDir ("./" , tmpDirPrefix )
310300 if err != nil {
311301 return err
312302 }
0 commit comments