func TestList(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() HandleListExtensionsSuccessfully(t) count := 0 extensions.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) { count++ actual, err := extensions.ExtractExtensions(page) th.AssertNoErr(t, err) expected := []common.Extension{ common.Extension{ Updated: "2013-01-20T00:00:00-00:00", Name: "Neutron Service Type Management", Links: []interface{}{}, Namespace: "http://docs.openstack.org/ext/neutron/service-type/api/v1.0", Alias: "service-type", Description: "API for retrieving service providers for Neutron advanced services", }, } th.AssertDeepEquals(t, expected, actual) return true, nil }) th.CheckEquals(t, 1, count) }
func (s *StepLoadExtensions) Run(state multistep.StateBag) multistep.StepAction { config := state.Get("config").(Config) ui := state.Get("ui").(packer.Ui) // We need the v2 compute client client, err := config.computeV2Client() if err != nil { err = fmt.Errorf("Error initializing compute client: %s", err) state.Put("error", err) return multistep.ActionHalt } ui.Say("Discovering enabled extensions...") result := make(map[string]struct{}, 15) pager := extensions.List(client) err = pager.EachPage(func(p pagination.Page) (bool, error) { // Extract the extensions from this page exts, err := extensions.ExtractExtensions(p) if err != nil { return false, err } for _, ext := range exts { log.Printf("[DEBUG] Discovered extension: %s", ext.Alias) result[ext.Alias] = struct{}{} } return true, nil }) if err != nil { err = fmt.Errorf("Error loading extensions: %s", err) state.Put("error", err) return multistep.ActionHalt } state.Put("extensions", result) return multistep.ActionContinue }