@@ -597,11 +597,7 @@ func (s stack) CreateHost(ctx context.Context, request abstract.HostRequest) (ho
597597 if server != nil && server .ID != "" {
598598 derr := servers .Delete (s .ComputeClient , server .ID ).ExtractErr ()
599599 if derr != nil {
600- _ = xerr .AddConsequence (
601- fail .Wrap (
602- derr , "cleaning up on failure, failed to delete host" ,
603- ),
604- )
600+ _ = xerr .AddConsequence (fail .Wrap (derr , "cleaning up on failure, failed to delete host" ))
605601 }
606602 }
607603 }
@@ -623,45 +619,46 @@ func (s stack) CreateHost(ctx context.Context, request abstract.HostRequest) (ho
623619 }
624620 }
625621
626- creationZone , zoneErr := s .GetAvailabilityZoneOfServer (server .ID )
622+ ahc .ID = server .ID
623+ ahc .Name = server .Name
624+
625+ creationZone , zoneErr := s .GetAvailabilityZoneOfServer (ahc .ID )
627626 if zoneErr != nil {
628- logrus .Tracef ("Host successfully created but cannot confirm Availability Zone: %s" , zoneErr )
627+ logrus .Tracef ("Host '%s' successfully created but cannot confirm Availability Zone: %s" , server . Name , zoneErr )
629628 } else {
630- logrus .Tracef ("Host successfully created in requested Availability Zone '%s'" , creationZone )
631- if creationZone != srvOpts .AvailabilityZone {
632- if srvOpts .AvailabilityZone != "" {
633- logrus .Warnf (
634- "Host created in the WRONG availability zone: requested '%s' and got instead '%s'" ,
635- srvOpts .AvailabilityZone , creationZone ,
636- )
637- }
629+ logrus .Tracef ("Host '%s' successfully created in requested Availability Zone '%s'" , server .Name , creationZone )
630+ if creationZone != srvOpts .AvailabilityZone && srvOpts .AvailabilityZone != "" {
631+ logrus .Warnf ("Host '%s' created in the WRONG availability zone: requested '%s' and got instead '%s'" , server .Name , srvOpts .AvailabilityZone , creationZone )
638632 }
639633 }
640634
641635 defer func () {
642- if innerXErr != nil {
643- derr := servers .Delete (s .ComputeClient , server .ID ).ExtractErr ()
636+ if innerXErr != nil && ahc . ID != "" {
637+ derr := servers .Delete (s .ComputeClient , ahc .ID ).ExtractErr ()
644638 if derr != nil {
645639 logrus .Errorf ("cleaning up on failure, failed to delete host: %s" , derr .Error ())
640+ } else {
641+ ahc .ID = ""
642+ ahc .Name = ""
646643 }
647644 }
648645 }()
649646
650- ahc .ID = server .ID
651- ahc .Name = server .Name
652-
653647 // Wait that host is ready, not just that the build is started
648+ //FIXME: timings.HostOperationTimeout() may not be sufficient time to wait when hosts are created in parallel...
649+ // at least with it's current default value of 2 minutes and at least for flexibleengine provider
650+ // We should think of a way to increase this timing based on number of hosts are created
654651 server , innerXErr = s .WaitHostState (ctx , ahc , hoststate .Started , timings .HostOperationTimeout ())
655652 if innerXErr != nil {
656653 switch innerXErr .(type ) {
657654 case * fail.ErrNotAvailable :
658655 if server != nil {
659- ahc .ID = server .ID
660- ahc .Name = server .Name
656+ // ahc.ID = server.ID
657+ // ahc.Name = server.Name
661658 ahc .LastState = hoststate .Error
662659 }
663-
664660 return fail .Wrap (innerXErr , "host '%s' is in Error state" , request .ResourceName )
661+
665662 default :
666663 return innerXErr
667664 }
@@ -671,27 +668,15 @@ func (s stack) CreateHost(ctx context.Context, request abstract.HostRequest) (ho
671668 timings .NormalDelay (),
672669 timings .HostLongOperationTimeout (),
673670 )
674- if retryErr != nil {
675- switch retryErr .(type ) {
676- case * retry.ErrStopRetry : // here it should never happen
677- return nil , userData , fail .Wrap (fail .Cause (retryErr ), "stopping retries" )
678- case * retry.ErrTimeout :
679- return nil , userData , fail .Wrap (fail .Cause (retryErr ), "timeout" )
680- default :
681- return nil , userData , retryErr
682- }
683- }
684671
685672 // Starting from here, delete host if exiting with error
686673 defer func () {
687- if ferr != nil {
674+ if ferr != nil && ahc . ID != "" {
688675 derr := s .DeleteHost (ctx , ahc .ID )
689676 if derr != nil {
690677 switch derr .(type ) {
691678 case * fail.ErrNotFound :
692- logrus .Errorf (
693- "Cleaning up on failure, failed to delete host '%s', resource not found: '%v'" , ahc .Name , derr ,
694- )
679+ logrus .Errorf ("Cleaning up on failure, failed to delete host '%s', resource not found: '%v'" , ahc .Name , derr )
695680 case * fail.ErrTimeout :
696681 logrus .Errorf ("Cleaning up on failure, failed to delete host '%s', timeout: '%v'" , ahc .Name , derr )
697682 default :
@@ -702,6 +687,17 @@ func (s stack) CreateHost(ctx context.Context, request abstract.HostRequest) (ho
702687 }
703688 }()
704689
690+ if retryErr != nil {
691+ switch retryErr .(type ) {
692+ case * retry.ErrStopRetry : // here it should never happen
693+ return nil , userData , fail .Wrap (fail .Cause (retryErr ), "stopping retries" )
694+ case * retry.ErrTimeout :
695+ return nil , userData , fail .Wrap (fail .Cause (retryErr ), "timeout" )
696+ default :
697+ return nil , userData , retryErr
698+ }
699+ }
700+
705701 host , xerr = s .complementHost (ctx , ahc , server )
706702 if xerr != nil {
707703 return nil , nil , xerr
0 commit comments