1
1
package startup
2
2
3
3
import (
4
- "errors"
5
4
"fmt"
6
5
"path/filepath"
7
6
"strings"
@@ -13,49 +12,68 @@ import (
13
12
"github.com/rs/zerolog/log"
14
13
)
15
14
16
- func InstallExternalBackends (galleries []config.Gallery , backendPath string , downloadStatus func (string , string , string , float64 ), backends ... string ) error {
17
- var errs error
15
+ func InstallExternalBackends (galleries []config.Gallery , backendPath string , downloadStatus func (string , string , string , float64 ), backend , name , alias string ) error {
18
16
systemState , err := system .GetSystemState ()
19
17
if err != nil {
20
18
return fmt .Errorf ("failed to get system state: %w" , err )
21
19
}
22
- for _ , backend := range backends {
23
- uri := downloader .URI (backend )
24
- switch {
25
- case uri .LooksLikeDir ():
26
- name := filepath .Base (backend )
27
- log .Info ().Str ("backend" , backend ).Str ("name" , name ).Msg ("Installing backend from path" )
28
- if err := gallery .InstallBackend (backendPath , & gallery.GalleryBackend {
29
- Metadata : gallery.Metadata {
30
- Name : name ,
31
- },
32
- URI : backend ,
33
- }, downloadStatus ); err != nil {
34
- errs = errors .Join (err , fmt .Errorf ("error installing backend %s" , backend ))
35
- }
36
- case uri .LooksLikeOCI ():
37
- name , err := uri .FilenameFromUrl ()
38
- if err != nil {
39
- return fmt .Errorf ("failed to get filename from URL: %w" , err )
40
- }
41
- // strip extension if any
42
- name = strings .TrimSuffix (name , filepath .Ext (name ))
20
+ uri := downloader .URI (backend )
21
+ switch {
22
+ case uri .LooksLikeDir ():
23
+ if name == "" { // infer it from the path
24
+ name = filepath .Base (backend )
25
+ }
26
+ log .Info ().Str ("backend" , backend ).Str ("name" , name ).Msg ("Installing backend from path" )
27
+ if err := gallery .InstallBackend (backendPath , & gallery.GalleryBackend {
28
+ Metadata : gallery.Metadata {
29
+ Name : name ,
30
+ },
31
+ Alias : alias ,
32
+ URI : backend ,
33
+ }, downloadStatus ); err != nil {
34
+ return fmt .Errorf ("error installing backend %s: %w" , backend , err )
35
+ }
36
+ case uri .LooksLikeOCI () && ! uri .LooksLikeOCIFile ():
37
+ if name == "" {
38
+ return fmt .Errorf ("specifying a name is required for OCI images" )
39
+ }
40
+ log .Info ().Str ("backend" , backend ).Str ("name" , name ).Msg ("Installing backend from OCI image" )
41
+ if err := gallery .InstallBackend (backendPath , & gallery.GalleryBackend {
42
+ Metadata : gallery.Metadata {
43
+ Name : name ,
44
+ },
45
+ Alias : alias ,
46
+ URI : backend ,
47
+ }, downloadStatus ); err != nil {
48
+ return fmt .Errorf ("error installing backend %s: %w" , backend , err )
49
+ }
50
+ case uri .LooksLikeOCIFile ():
51
+ name , err := uri .FilenameFromUrl ()
52
+ if err != nil {
53
+ return fmt .Errorf ("failed to get filename from URL: %w" , err )
54
+ }
55
+ // strip extension if any
56
+ name = strings .TrimSuffix (name , filepath .Ext (name ))
43
57
44
- log .Info ().Str ("backend" , backend ).Str ("name" , name ).Msg ("Installing backend from OCI image" )
45
- if err := gallery .InstallBackend (backendPath , & gallery.GalleryBackend {
46
- Metadata : gallery.Metadata {
47
- Name : name ,
48
- },
49
- URI : backend ,
50
- }, downloadStatus ); err != nil {
51
- errs = errors .Join (err , fmt .Errorf ("error installing backend %s" , backend ))
52
- }
53
- default :
54
- err := gallery .InstallBackendFromGallery (galleries , systemState , backend , backendPath , downloadStatus , true )
55
- if err != nil {
56
- errs = errors .Join (err , fmt .Errorf ("error installing backend %s" , backend ))
57
- }
58
+ log .Info ().Str ("backend" , backend ).Str ("name" , name ).Msg ("Installing backend from OCI image" )
59
+ if err := gallery .InstallBackend (backendPath , & gallery.GalleryBackend {
60
+ Metadata : gallery.Metadata {
61
+ Name : name ,
62
+ },
63
+ Alias : alias ,
64
+ URI : backend ,
65
+ }, downloadStatus ); err != nil {
66
+ return fmt .Errorf ("error installing backend %s: %w" , backend , err )
67
+ }
68
+ default :
69
+ if name != "" || alias != "" {
70
+ return fmt .Errorf ("specifying a name or alias is not supported for this backend" )
71
+ }
72
+ err := gallery .InstallBackendFromGallery (galleries , systemState , backend , backendPath , downloadStatus , true )
73
+ if err != nil {
74
+ return fmt .Errorf ("error installing backend %s: %w" , backend , err )
58
75
}
59
76
}
60
- return errs
77
+
78
+ return nil
61
79
}
0 commit comments