Package com.eqixiac.equinix.design.value.ratecard.provider


package com.eqixiac.equinix.design.value.ratecard.provider
Live cloud-provider pricing adapters: RateCard implementations that source current data-egress list prices from the providers' public pricing APIs - AwsPriceListRateCard (AWS Price List bulk offers), AzureRetailPricesRateCard (Azure Retail Prices), GcpBillingCatalogRateCard (GCP Cloud Billing Catalog; the only one needing an API key), and OracleCloudPriceListRateCard (OCI Price List). Every rate they return is tagged PriceSource.PROVIDER_API: live and accurate for the provider side, but public list pricing, not negotiated rates.

The adapters are opt-in - the default value-model chain does not include them. Compose them explicitly, e.g. RateCard.layered(EquinixRateCard.of(fabric), AzureRetailPricesRateCard.create(), ReferenceRateCard.standard()). They price egress only; connection and Cloud Router lookups return empty (those are Equinix-side costs). Rates are per decimal (SI) gigabyte - GCP's per-GiB list prices are converted, with the original recorded in the rate's note.

All adapters share one operational contract (via a common HTTP client): hard connect/read timeouts so an unresponsive endpoint degrades to "no rate" within seconds; fault tolerance - any fetch, parse, or pagination failure yields empty rather than throwing, so a layered chain falls back; success-only memoization - catalogues are fetched lazily and cached for the adapter's lifetime, but a failed or truncated fetch is never cached, so a transient outage is retried instead of pinning "no rate" forever; and credential redaction - API keys never reach log lines.

See Also: