func datasourceCloudStackServiceOfferingRead()

in cloudstack/data_source_cloudstack_service_offering.go [53:87]


func datasourceCloudStackServiceOfferingRead(d *schema.ResourceData, meta interface{}) error {
	cs := meta.(*cloudstack.CloudStackClient)
	p := cs.ServiceOffering.NewListServiceOfferingsParams()
	csServiceOfferings, err := cs.ServiceOffering.ListServiceOfferings(p)

	if err != nil {
		return fmt.Errorf("Failed to list service offerings: %s", err)
	}

	filters := d.Get("filter")
	var serviceOfferings []*cloudstack.ServiceOffering

	for _, s := range csServiceOfferings.ServiceOfferings {
		match, err := applyServiceOfferingFilters(s, filters.(*schema.Set))
		if err != nil {
			return err
		}
		if match {
			serviceOfferings = append(serviceOfferings, s)
		}
	}

	if len(serviceOfferings) == 0 {
		return fmt.Errorf("No service offering is matching with the specified regex")
	}
	//return the latest service offering from the list of filtered service according
	//to its creation date
	serviceOffering, err := latestServiceOffering(serviceOfferings)
	if err != nil {
		return err
	}
	log.Printf("[DEBUG] Selected service offerings: %s\n", serviceOffering.Displaytext)

	return serviceOfferingDescriptionAttributes(d, serviceOffering)
}