debian-forge-composer/cmd/osbuild-upload-aws/main.go
Ondřej Budai 579a5df698 upload/aws: add support for session tokens
If a user uses a temporary access key for login, a session token is also
needed.

This commit adds support for it to the internal aws library and also
to the osbuild-upload-aws helper. Note that this doesn't affect the main
osbuild-composer executable nor the worker. Everything here should work
as before and session tokens are not supported. Something for a follow up
if anyone needs it.

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2021-06-28 13:14:19 +03:00

60 lines
1.6 KiB
Go

package main
import (
"flag"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/osbuild/osbuild-composer/internal/upload/awsupload"
)
func main() {
var accessKeyID string
var secretAccessKey string
var sessionToken string
var region string
var bucketName string
var keyName string
var filename string
var imageName string
var shareWith string
var arch string
flag.StringVar(&accessKeyID, "access-key-id", "", "access key ID")
flag.StringVar(&secretAccessKey, "secret-access-key", "", "secret access key")
flag.StringVar(&sessionToken, "session-token", "", "session token")
flag.StringVar(&region, "region", "", "target region")
flag.StringVar(&bucketName, "bucket", "", "target S3 bucket name")
flag.StringVar(&keyName, "key", "", "target S3 key name")
flag.StringVar(&filename, "image", "", "image file to upload")
flag.StringVar(&imageName, "name", "", "AMI name")
flag.StringVar(&shareWith, "account-id", "", "account id to share image with")
flag.StringVar(&arch, "arch", "", "arch (x86_64 or aarch64)")
flag.Parse()
a, err := awsupload.New(region, accessKeyID, secretAccessKey, sessionToken)
if err != nil {
println(err.Error())
return
}
uploadOutput, err := a.Upload(filename, bucketName, keyName)
if err != nil {
println(err.Error())
return
}
fmt.Printf("file uploaded to %s\n", aws.StringValue(&uploadOutput.Location))
var share []string
if shareWith != "" {
share = append(share, shareWith)
}
ami, err := a.Register(imageName, bucketName, keyName, share, arch)
if err != nil {
println(err.Error())
return
}
fmt.Printf("AMI registered: %s\n", aws.StringValue(ami))
}