github.phpd.cn/hashicorp/packer@v1.3.2/builder/ncloud/step_create_server_image.go (about) 1 package ncloud 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "time" 8 9 ncloud "github.com/NaverCloudPlatform/ncloud-sdk-go/sdk" 10 "github.com/hashicorp/packer/helper/multistep" 11 "github.com/hashicorp/packer/packer" 12 ) 13 14 type StepCreateServerImage struct { 15 Conn *ncloud.Conn 16 CreateServerImage func(serverInstanceNo string) (*ncloud.ServerImage, error) 17 Say func(message string) 18 Error func(e error) 19 Config *Config 20 } 21 22 func NewStepCreateServerImage(conn *ncloud.Conn, ui packer.Ui, config *Config) *StepCreateServerImage { 23 var step = &StepCreateServerImage{ 24 Conn: conn, 25 Say: func(message string) { ui.Say(message) }, 26 Error: func(e error) { ui.Error(e.Error()) }, 27 Config: config, 28 } 29 30 step.CreateServerImage = step.createServerImage 31 32 return step 33 } 34 35 func (s *StepCreateServerImage) createServerImage(serverInstanceNo string) (*ncloud.ServerImage, error) { 36 // Can't create server image when status of server instance is stopping (not stopped) 37 if err := waiterServerInstanceStatus(s.Conn, serverInstanceNo, "NSTOP", 1*time.Minute); err != nil { 38 return nil, err 39 } 40 41 reqParams := new(ncloud.RequestCreateServerImage) 42 reqParams.MemberServerImageName = s.Config.ServerImageName 43 reqParams.MemberServerImageDescription = s.Config.ServerImageDescription 44 reqParams.ServerInstanceNo = serverInstanceNo 45 46 memberServerImageList, err := s.Conn.CreateMemberServerImage(reqParams) 47 if err != nil { 48 return nil, err 49 } 50 51 serverImage := memberServerImageList.MemberServerImageList[0] 52 53 s.Say(fmt.Sprintf("Server Image[%s:%s] is creating...", serverImage.MemberServerImageName, serverImage.MemberServerImageNo)) 54 55 if err := waiterMemberServerImageStatus(s.Conn, serverImage.MemberServerImageNo, "CREAT", 6*time.Hour); err != nil { 56 return nil, errors.New("TIMEOUT : Server Image is not created") 57 } 58 59 s.Say(fmt.Sprintf("Server Image[%s:%s] is created", serverImage.MemberServerImageName, serverImage.MemberServerImageNo)) 60 61 return &serverImage, nil 62 } 63 64 func (s *StepCreateServerImage) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { 65 s.Say("Create Server Image") 66 67 serverInstanceNo := state.Get("InstanceNo").(string) 68 69 serverImage, err := s.CreateServerImage(serverInstanceNo) 70 if err == nil { 71 state.Put("memberServerImage", serverImage) 72 } 73 74 return processStepResult(err, s.Error, state) 75 } 76 77 func (*StepCreateServerImage) Cleanup(multistep.StateBag) { 78 }