@@ -16,6 +16,7 @@ import (
16
16
"github.com/osbuild/images/pkg/arch"
17
17
"github.com/osbuild/images/pkg/cloud"
18
18
"github.com/osbuild/images/pkg/cloud/awscloud"
19
+ "github.com/osbuild/images/pkg/cloud/libvirt"
19
20
"github.com/osbuild/images/pkg/platform"
20
21
)
21
22
@@ -29,6 +30,7 @@ var ErrUploadConfigNotProvided = errors.New("missing all upload configuration")
29
30
var ErrUploadTypeUnsupported = errors .New ("unsupported type" )
30
31
31
32
var awscloudNewUploader = awscloud .NewUploader
33
+ var libvirtNewUploader = libvirt .NewUploader
32
34
33
35
func uploadImageWithProgress (uploader cloud.Uploader , imagePath string ) error {
34
36
f , err := os .Open (imagePath )
@@ -42,14 +44,19 @@ func uploadImageWithProgress(uploader cloud.Uploader, imagePath string) error {
42
44
if err != nil {
43
45
return fmt .Errorf ("cannot stat upload: %v" , err )
44
46
}
47
+ size := uint64 (st .Size ())
45
48
pbar := pb .New64 (st .Size ())
46
49
pbar .Set (pb .Bytes , true )
47
50
pbar .SetWriter (osStdout )
48
51
r := pbar .NewProxyReader (f )
49
52
pbar .Start ()
50
53
defer pbar .Finish ()
51
54
52
- return uploader .UploadAndRegister (r , osStderr )
55
+ if err := uploader .UploadAndRegister (r , size , osStderr ); err != nil {
56
+ return err
57
+ }
58
+
59
+ return nil
53
60
}
54
61
55
62
func uploaderCheckWithProgress (pbar progress.ProgressBar , uploader cloud.Uploader ) error {
@@ -69,6 +76,8 @@ func uploaderFor(cmd *cobra.Command, typeOrCloud string, targetArch string, boot
69
76
switch typeOrCloud {
70
77
case "ami" , "server-ami" , "aws" :
71
78
return uploaderForCmdAWS (cmd , targetArch , bootMode )
79
+ case "libvirt" :
80
+ return uploaderForLibvirt (cmd , targetArch , bootMode )
72
81
default :
73
82
return nil , fmt .Errorf ("%w: %q" , ErrUploadTypeUnsupported , typeOrCloud )
74
83
}
@@ -129,6 +138,22 @@ func uploaderForCmdAWS(cmd *cobra.Command, targetArchStr string, bootMode *platf
129
138
return awscloudNewUploader (region , bucketName , amiName , opts )
130
139
}
131
140
141
+ func uploaderForLibvirt (cmd * cobra.Command , targetArchStr string , bootMode * platform.BootMode ) (cloud.Uploader , error ) {
142
+ connection , err := cmd .Flags ().GetString ("libvirt-connection" )
143
+ if err != nil {
144
+ return nil , err
145
+ }
146
+ pool , err := cmd .Flags ().GetString ("libvirt-pool" )
147
+ if err != nil {
148
+ return nil , err
149
+ }
150
+ volume , err := cmd .Flags ().GetString ("libvirt-volume" )
151
+ if err != nil {
152
+ return nil , err
153
+ }
154
+ return libvirtNewUploader (connection , pool , volume )
155
+ }
156
+
132
157
func detectArchFromImagePath (imagePath string ) string {
133
158
// This detection is currently rather naive, we just look for
134
159
// the file name and try to infer from that. We could extend
0 commit comments