@@ -2,10 +2,12 @@ package upcloud
22
33import (
44 "fmt"
5+ "log"
56 "strings"
67
78 "github.com/UpCloudLtd/packer-plugin-upcloud/internal/driver"
89 "github.com/UpCloudLtd/upcloud-go-api/v4/upcloud"
10+ "github.com/hashicorp/packer-plugin-sdk/packer/registry/image"
911)
1012
1113// packersdk.Artifact implementation
@@ -40,6 +42,14 @@ func (a *Artifact) String() string {
4042}
4143
4244func (a * Artifact ) State (name string ) interface {} {
45+ if name == image .ArtifactStateURI {
46+ images , err := a .buildHCPPackerRegistryMetadata ()
47+ if err != nil {
48+ log .Printf ("[DEBUG] error encountered when creating a registry image %v" , err )
49+ return nil
50+ }
51+ return images
52+ }
4353 return a .StateData [name ]
4454}
4555
@@ -52,3 +62,35 @@ func (a *Artifact) Destroy() error {
5262 }
5363 return nil
5464}
65+
66+ func (a * Artifact ) buildHCPPackerRegistryMetadata () ([]* image.Image , error ) {
67+ var sourceTemplateUUID , sourceTemplateTitle string
68+ if v , ok := a .StateData ["source_template_uuid" ]; ok {
69+ sourceTemplateUUID = v .(string )
70+ }
71+
72+ if v , ok := a .StateData ["source_template_title" ]; ok {
73+ sourceTemplateTitle = v .(string )
74+ }
75+
76+ images := make ([]* image.Image , 0 )
77+ for _ , template := range a .Templates {
78+ img , err := image .FromArtifact (a ,
79+ image .WithID (template .UUID ),
80+ image .WithRegion (template .Zone ),
81+ image .WithProvider ("upcloud" ),
82+ )
83+ if err != nil {
84+ return images , err
85+ }
86+
87+ img .SourceImageID = sourceTemplateUUID
88+ img .Labels ["source_id" ] = sourceTemplateUUID
89+ img .Labels ["source" ] = sourceTemplateTitle
90+ img .Labels ["name" ] = template .Title
91+ img .Labels ["name_prefix" ] = a .config .TemplatePrefix
92+ img .Labels ["size" ] = fmt .Sprint (template .Size )
93+ images = append (images , img )
94+ }
95+ return images , nil
96+ }
0 commit comments