Forms urls and support get url for yandex-export artifact

This commit is contained in:
Gennady Lipenkov 2020-07-09 15:33:00 +03:00
parent fab42a061e
commit 0092007311
1 changed files with 18 additions and 3 deletions

View File

@ -24,6 +24,8 @@ import (
"github.com/hashicorp/packer/template/interpolate" "github.com/hashicorp/packer/template/interpolate"
) )
const defaultStorageEndpoint = "storage.yandexcloud.net"
type Config struct { type Config struct {
common.PackerConfig `mapstructure:",squash"` common.PackerConfig `mapstructure:",squash"`
@ -31,12 +33,13 @@ type Config struct {
// Please be aware that use of space char inside path not supported. // Please be aware that use of space char inside path not supported.
// Also this param support [build](/docs/templates/engine) template function. // Also this param support [build](/docs/templates/engine) template function.
// Check available template data for [Yandex](/docs/builders/yandex#build-template-data) builder. // Check available template data for [Yandex](/docs/builders/yandex#build-template-data) builder.
// Paths to Yandex Object Storage where exported image will be uploaded.
Paths []string `mapstructure:"paths" required:"true"` Paths []string `mapstructure:"paths" required:"true"`
// The folder ID that will be used to launch a temporary instance. // The folder ID that will be used to launch a temporary instance.
// Alternatively you may set value by environment variable YC_FOLDER_ID. // Alternatively you may set value by environment variable YC_FOLDER_ID.
FolderID string `mapstructure:"folder_id" required:"true"` FolderID string `mapstructure:"folder_id" required:"true"`
// Service Account ID with proper permission to modify an instance, create and attach disk and // Service Account ID with proper permission to modify an instance, create and attach disk and
// make upload to specific Yandex Object Storage paths // make upload to specific Yandex Object Storage paths.
ServiceAccountID string `mapstructure:"service_account_id" required:"true"` ServiceAccountID string `mapstructure:"service_account_id" required:"true"`
// The size of the disk in GB. This defaults to `100`, which is 100GB. // The size of the disk in GB. This defaults to `100`, which is 100GB.
DiskSizeGb int `mapstructure:"disk_size" required:"false"` DiskSizeGb int `mapstructure:"disk_size" required:"false"`
@ -234,7 +237,7 @@ func (p *PostProcessor) PostProcess(ctx context.Context, ui packer.Ui, artifact
steps := []multistep.Step{ steps := []multistep.Step{
&yandex.StepCreateSSHKey{ &yandex.StepCreateSSHKey{
Debug: p.config.PackerDebug, Debug: p.config.PackerDebug,
DebugKeyPath: fmt.Sprintf("yc_pp_%s.pem", p.config.PackerBuildName), DebugKeyPath: fmt.Sprintf("yc_export_pp_%s.pem", p.config.PackerBuildName),
}, },
&yandex.StepCreateInstance{ &yandex.StepCreateInstance{
Debug: p.config.PackerDebug, Debug: p.config.PackerDebug,
@ -248,7 +251,10 @@ func (p *PostProcessor) PostProcess(ctx context.Context, ui packer.Ui, artifact
p.runner = common.NewRunner(steps, p.config.PackerConfig, ui) p.runner = common.NewRunner(steps, p.config.PackerConfig, ui)
p.runner.Run(ctx, state) p.runner.Run(ctx, state)
result := &Artifact{paths: p.config.Paths} result := &Artifact{
paths: p.config.Paths,
urls: formUrls(p.config.Paths),
}
return result, false, false, nil return result, false, false, nil
} }
@ -271,3 +277,12 @@ func ycSaneDefaults() yandex.Config {
StateTimeout: 3 * time.Minute, StateTimeout: 3 * time.Minute,
} }
} }
func formUrls(paths []string) []string {
result := []string{}
for _, path := range paths {
url := fmt.Sprintf("https://%s/%s", defaultStorageEndpoint, strings.TrimPrefix(path, "s3://"))
result = append(result, url)
}
return result
}