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 }