validatePurchasePreconditions (added in #2160) requires only Details.Region for an EC2 Instance Savings Plan. With InstanceFamily unset and OfferingID empty, the real run can refuse in lookupEC2OfferingIDStrict (savingsplans/client.go:529-543: ambiguous or no offerings) while the dry run reports success. Require InstanceFamily unless OfferingID is set. Note the recommendation-completeness test fixture has no family and will need one.
validatePurchasePreconditions (added in #2160) requires only Details.Region for an EC2 Instance Savings Plan. With InstanceFamily unset and OfferingID empty, the real run can refuse in lookupEC2OfferingIDStrict (savingsplans/client.go:529-543: ambiguous or no offerings) while the dry run reports success. Require InstanceFamily unless OfferingID is set. Note the recommendation-completeness test fixture has no family and will need one.