github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/builder/openstack/step_load_extensions.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/mitchellh/multistep"
     8  	"github.com/mitchellh/packer/packer"
     9  	"github.com/rackspace/gophercloud/openstack/compute/v2/extensions"
    10  	"github.com/rackspace/gophercloud/pagination"
    11  )
    12  
    13  // StepLoadExtensions gets the FlavorRef from a Flavor. It first assumes
    14  // that the Flavor is a ref and verifies it. Otherwise, it tries to find
    15  // the flavor by name.
    16  type StepLoadExtensions struct{}
    17  
    18  func (s *StepLoadExtensions) Run(state multistep.StateBag) multistep.StepAction {
    19  	config := state.Get("config").(Config)
    20  	ui := state.Get("ui").(packer.Ui)
    21  
    22  	// We need the v2 compute client
    23  	client, err := config.computeV2Client()
    24  	if err != nil {
    25  		err = fmt.Errorf("Error initializing compute client: %s", err)
    26  		state.Put("error", err)
    27  		return multistep.ActionHalt
    28  	}
    29  
    30  	ui.Say("Discovering enabled extensions...")
    31  	result := make(map[string]struct{}, 15)
    32  	pager := extensions.List(client)
    33  	err = pager.EachPage(func(p pagination.Page) (bool, error) {
    34  		// Extract the extensions from this page
    35  		exts, err := extensions.ExtractExtensions(p)
    36  		if err != nil {
    37  			return false, err
    38  		}
    39  
    40  		for _, ext := range exts {
    41  			log.Printf("[DEBUG] Discovered extension: %s", ext.Alias)
    42  			result[ext.Alias] = struct{}{}
    43  		}
    44  
    45  		return true, nil
    46  	})
    47  	if err != nil {
    48  		err = fmt.Errorf("Error loading extensions: %s", err)
    49  		state.Put("error", err)
    50  		return multistep.ActionHalt
    51  	}
    52  
    53  	state.Put("extensions", result)
    54  	return multistep.ActionContinue
    55  }
    56  
    57  func (s *StepLoadExtensions) Cleanup(state multistep.StateBag) {
    58  }