def get_reserved()

in k8s/pricing.py [0:0]


def get_reserved(region, instance_type):
    """Get savings plans rates for a specific instance type in a region."""
    savingsplans_client = boto3.client("savingsplans", region_name="us-east-1")

    def request():
        results = []
        nt = None
        while True:
            kwargs = dict(
                filters=[
                    {"name": "instanceType", "values": [instance_type]},
                    {"name": "region", "values": [region]},
                    {"name": "tenancy", "values": ["shared"]},
                    {"name": "productDescription", "values": ["Linux/UNIX"]},
                ],
                serviceCodes=["AmazonEC2"],
            )
            if nt:
                kwargs["nextToken"] = nt

            response = (
                savingsplans_client.describe_savings_plans_offering_rates(
                    **kwargs
                )
            )
            results.extend(response["searchResults"])
            if len(response["nextToken"]) > 0:
                nt = response["nextToken"]
            else:
                break
        return results

    try:
        results = request()
        rates = {
            "1.0y": {"no": None, "partial": None, "all": None},
            "3.0y": {"no": None, "partial": None, "all": None},
        }

        for result in results:
            # Skip unused box entries
            if "UnusedBox" in result["usageType"]:
                continue

            duration_seconds = result["savingsPlanOffering"]["durationSeconds"]
            duration_years = duration_seconds / (365 * 24 * 60 * 60)
            key = f"{duration_years:.1f}y"

            payment_option = (
                result["savingsPlanOffering"]["paymentOption"]
                .lower()
                .split()[0]
            )  # 'no', 'partial', or 'all'
            rate = float(result["rate"])

            if key in rates:
                rates[key][payment_option] = rate

        return (
            rates
            if any(
                any(v is not None for v in year.values())
                for year in rates.values()
            )
            else None
        )
    except Exception as e:
        print(
            f"Error getting reserved cost for {instance_type} in {region}: {str(e)}"
        )
    return None