NAME

IO::K8s::Deprecated - Registry of CPAN redirect stubs for renamed/retired IO::K8s modules

VERSION

version 1.111

DESCRIPTION

IO::K8s::Deprecated is the permanent home for "tombstone" redirect stub modules: when an IO::K8s class gets renamed or retired, the old module name stays indexed on PAUSE forever against the last release that shipped it -- PAUSE has no delete. Anyone still running cpanm Old::Module::Name would keep installing that stale, superseded code with no hint a replacement exists.

PAUSE indexes per module name, not per distribution: it resolves each module name to whichever shipped release -- of any distribution, including a later release of the same one -- carries the highest $VERSION for that name. IO::K8s ships all ~700 of its API and CRD classes from a single distribution, so a class that is genuinely dropped orphans its name exactly the same way a cross-distribution rename would: PAUSE does not know or care that "the dist is still actively released", it only sees that no shipped release contains that module name above the version of the last one that did.

Not every internally-deprecated IO::K8s class belongs here. IO::K8s has long shipped ~76 *List classes (PodList, ServiceList, etc.) as soft-deprecated warning stubs that pointed callers at the unified IO::K8s::List -- see perldoc -m IO::K8s under "UPGRADING FROM PREVIOUS VERSIONS" for the historical note. As long as those stubs kept shipping under their own name in every IO-K8s release, PAUSE never orphaned them and no tombstone was needed. Only once IO-K8s actually stopped shipping them (dropped the files outright, no longer just warning) did their names become tombstone candidates -- which is what the entries below are. Before adding a tombstone for anything else, confirm the class is truly gone from IO-K8s's current HEAD, not just soft-deprecated in place; also check whether it was intentionally kept for backward compatibility under an older API version (IO-K8s's own convention -- e.g. Apps V1beta1/V1beta2/V1 all still ship side by side -- some renames that look tombstone-worthy at first glance turn out to be reverted for exactly this reason).

This distribution fixes the genuine orphan case with the standard CPAN redirect-takeover pattern: it ships a small stub package under the OLD module name, with an explicit $VERSION set strictly higher than the last CPAN release of IO-K8s that shipped that name. PAUSE then indexes this distribution as canonical for the old name. The stub does nothing at runtime except die immediately on load, naming the replacement module, so cpanm Old::Module::Name (or a cpanfile pinning it) now installs a clear, actionable message instead of silently reinstalling dead code.

This dist itself (IO::K8s::Deprecated, this module) has no runtime behaviour of its own -- it is a documentation landing page and the dzil main module. Each tombstone module is self-contained and carries no dependency on IO::K8s core.

VERSION POLICY

Every file here -- the main module and all tombstones alike -- versions normally and uniformly with the rest of the distribution (RewriteVersion::Transitional / BumpVersionAfterRelease, no version_finder restriction in dist.ini). There is no per-tombstone hand-frozen $VERSION. The starting version, 1.105, was chosen for one reason: it is safely past IO-K8s 1.100, the last CPAN release that shipped any of these module names, and this distribution's own version only ever increases from here, so it stays ahead of that target for good without further special-casing.

That rests on IO-K8s not shipping these names again -- which is an assumption about another distribution, not something a version number can enforce. It has failed once (see "NO LONGER TOMBSTONED"), so it is checked: t/02-name-guard.t fails as soon as a package shipped here is also shipped by the current IO-K8s. A name that comes back in IO-K8s loses its tombstone here; it does not get a higher version.

If a future tombstone is ever added for a name whose last-shipped version is higher than whatever version this dist has reached by then, confirm that before releasing and bump first if needed -- an ordinary version-ordering check, not a reason to reintroduce per-file version overrides.

For the step-by-step procedure to add a new tombstone when a future rename or removal happens -- including how to audit IO-K8s for orphaned module names -- see the io-k8s-deprecated skill (.claude/skills/io-k8s-deprecated/SKILL.md in this repo; packaged into the sharedir at build time).

CURRENT TOMBSTONES

Consolidated into the generic IO::K8s::List (74 classes)

IO-K8s replaced every per-resource *List class with a single generic IO::K8s::List back in its 1.00 Moose-to-Moo rewrite. Each of the classes below was never a real class in the 1.x series -- it only emitted a deprecation warning on load. IO-K8s 1.100 was the last CPAN release to ship even that warning stub; all 76 such stubs were dropped from the distribution outright afterwards. 74 of them stayed gone and are tombstoned here (for the other two see "NO LONGER TOMBSTONED"). Every one of them redirects to the same successor:

IO::K8s::Api::Admissionregistration::V1alpha1::InitializerConfigurationList
IO::K8s::Api::Admissionregistration::V1beta1::MutatingWebhookConfigurationList
IO::K8s::Api::Admissionregistration::V1beta1::ValidatingWebhookConfigurationList
IO::K8s::Api::Apps::V1beta1::ControllerRevisionList
IO::K8s::Api::Apps::V1beta1::DeploymentList
IO::K8s::Api::Apps::V1beta1::StatefulSetList
IO::K8s::Api::Apps::V1beta2::ControllerRevisionList
IO::K8s::Api::Apps::V1beta2::DaemonSetList
IO::K8s::Api::Apps::V1beta2::DeploymentList
IO::K8s::Api::Apps::V1beta2::ReplicaSetList
IO::K8s::Api::Apps::V1beta2::StatefulSetList
IO::K8s::Api::Apps::V1::ControllerRevisionList
IO::K8s::Api::Apps::V1::DaemonSetList
IO::K8s::Api::Apps::V1::DeploymentList
IO::K8s::Api::Apps::V1::ReplicaSetList
IO::K8s::Api::Apps::V1::StatefulSetList
IO::K8s::Api::Auditregistration::V1alpha1::AuditSinkList
IO::K8s::Api::Autoscaling::V1::HorizontalPodAutoscalerList
IO::K8s::Api::Autoscaling::V2beta1::HorizontalPodAutoscalerList
IO::K8s::Api::Autoscaling::V2beta2::HorizontalPodAutoscalerList
IO::K8s::Api::Batch::V1beta1::CronJobList
IO::K8s::Api::Batch::V1::JobList
IO::K8s::Api::Batch::V2alpha1::CronJobList
IO::K8s::Api::Certificates::V1beta1::CertificateSigningRequestList
IO::K8s::Api::Coordination::V1beta1::LeaseList
IO::K8s::Api::Core::V1::ComponentStatusList
IO::K8s::Api::Core::V1::ConfigMapList
IO::K8s::Api::Core::V1::EndpointsList
IO::K8s::Api::Core::V1::EventList
IO::K8s::Api::Core::V1::LimitRangeList
IO::K8s::Api::Core::V1::NamespaceList
IO::K8s::Api::Core::V1::NodeList
IO::K8s::Api::Core::V1::PersistentVolumeClaimList
IO::K8s::Api::Core::V1::PersistentVolumeList
IO::K8s::Api::Core::V1::PodList
IO::K8s::Api::Core::V1::PodTemplateList
IO::K8s::Api::Core::V1::ReplicationControllerList
IO::K8s::Api::Core::V1::ResourceQuotaList
IO::K8s::Api::Core::V1::SecretList
IO::K8s::Api::Core::V1::ServiceAccountList
IO::K8s::Api::Core::V1::ServiceList
IO::K8s::Api::Events::V1beta1::EventList
IO::K8s::ApiExtensionsApiServer::Pkg::Apis::Apiextensions::V1beta1::CustomResourceDefinitionList
IO::K8s::Api::Extensions::V1beta1::DaemonSetList
IO::K8s::Api::Extensions::V1beta1::DeploymentList
IO::K8s::Api::Extensions::V1beta1::IngressList
IO::K8s::Api::Extensions::V1beta1::NetworkPolicyList
IO::K8s::Api::Extensions::V1beta1::PodSecurityPolicyList
IO::K8s::Api::Extensions::V1beta1::ReplicaSetList
IO::K8s::Api::Networking::V1::NetworkPolicyList
IO::K8s::Api::Policy::V1beta1::PodDisruptionBudgetList
IO::K8s::Api::Policy::V1beta1::PodSecurityPolicyList
IO::K8s::Api::Rbac::V1alpha1::ClusterRoleBindingList
IO::K8s::Api::Rbac::V1alpha1::ClusterRoleList
IO::K8s::Api::Rbac::V1alpha1::RoleBindingList
IO::K8s::Api::Rbac::V1alpha1::RoleList
IO::K8s::Api::Rbac::V1beta1::ClusterRoleBindingList
IO::K8s::Api::Rbac::V1beta1::ClusterRoleList
IO::K8s::Api::Rbac::V1beta1::RoleBindingList
IO::K8s::Api::Rbac::V1beta1::RoleList
IO::K8s::Api::Rbac::V1::ClusterRoleBindingList
IO::K8s::Api::Rbac::V1::ClusterRoleList
IO::K8s::Api::Rbac::V1::RoleBindingList
IO::K8s::Api::Rbac::V1::RoleList
IO::K8s::Api::Scheduling::V1alpha1::PriorityClassList
IO::K8s::Api::Scheduling::V1beta1::PriorityClassList
IO::K8s::Api::Settings::V1alpha1::PodPresetList
IO::K8s::Api::Storage::V1alpha1::VolumeAttachmentList
IO::K8s::Api::Storage::V1beta1::StorageClassList
IO::K8s::Api::Storage::V1beta1::VolumeAttachmentList
IO::K8s::Api::Storage::V1::StorageClassList
IO::K8s::Api::Storage::V1::VolumeAttachmentList
IO::K8s::KubeAggregator::Pkg::Apis::Apiregistration::V1::APIServiceList
IO::K8s::KubeAggregator::Pkg::Apis::Apiregistration::V1beta1::APIServiceList

All 74 redirect to: IO::K8s::List.

Removed -- classic DRA control-plane-controller allocation (4 classes)

resource.k8s.io/v1alpha3 shipped an alpha-only (never GA) "classic DRA" allocation flow that coordinated WaitForFirstConsumer resource-claim scheduling between the scheduler and an external controller. When Dynamic Resource Allocation graduated to GA with an architecturally different structured-parameters model at resource.k8s.io/v1, that whole mechanism -- including these four classes -- was dropped. There is no 1:1 successor for any of them; the current DRA API is IO::K8s::Api::Resource::V1::ResourceClaim and IO::K8s::Api::Resource::V1::DeviceClass. Last shipped in IO-K8s 1.100:

IO::K8s::Api::Resource::V1alpha3::PodSchedulingContext
IO::K8s::Api::Resource::V1alpha3::PodSchedulingContextSpec
IO::K8s::Api::Resource::V1alpha3::PodSchedulingContextStatus
IO::K8s::Api::Resource::V1alpha3::ResourceClaimSchedulingStatus

Unlike the admission/auth/flowcontrol classes noted below, these had no lingering old-cluster backward-compatibility rationale to keep them around in IO-K8s: DRA itself was alpha-only when these shipped, never GA, so there was no "still-supported older cluster" depending on this API the way there is for a long-GA API's deprecated beta track.

NO LONGER TOMBSTONED

Release 1.105 of this distribution shipped tombstones for two more names, swept up with the *List classes above because IO-K8s had carried them as the same kind of warning stub up to 1.100:

IO::K8s::Apimachinery::Pkg::Apis::Meta::V1::APIGroupList
IO::K8s::Apimachinery::Pkg::Apis::Meta::V1::APIResourceList

They are not lists of resources, though, but the meta.v1 Kinds the API server answers discovery requests with -- they carry groups and resources, not items, so IO::K8s::List was never a replacement for them. IO-K8s 1.106 ships both again as real classes. A name IO-K8s ships is not an orphan, and a tombstone for it does harm: both distributions install the same file, so whichever is installed last wins, and installing this distribution after IO-K8s replaced the working classes with stubs that die on load. Both tombstones were therefore removed.

If IO-K8s-Deprecated 1.105 was installed on top of IO-K8s 1.106 or later, upgrading this distribution does not bring the two classes back -- an installer does not delete files a newer release no longer ships. Reinstall IO-K8s (cpanm --reinstall IO::K8s) to restore them.

The rule this left behind -- no package shipped here may be shipped by the current IO-K8s -- is held by t/02-name-guard.t.

CONSIDERED BUT NOT TOMBSTONED

The Cilium v1.19.2 upgrade in IO-K8s 1.100 initially dropped 8 cilium.io/v2alpha1 classes (promoting 6 to cilium.io/v2, removing 2 outright). Those classes were restored in IO-K8s for backward compatibility instead -- they now ship alongside their current-API-version siblings, matching this dist's own convention of keeping multiple API versions of a resource side by side. No tombstone was needed after the restore; see io-k8s-p5's Changes for the restoring release. Recorded here so a future audit doesn't rediscover and re-tombstone the same names.

A v1.31 -> v1.36 upstream sync of IO-K8s also flagged (and then kept, not removed) the older served-but-superseded API tracks admissionregistration.k8s.io/{v1alpha1,v1beta1} ValidatingAdmissionPolicy, authentication.k8s.io/{v1alpha1,v1beta1} SelfSubjectReview, and flowcontrol.apiserver.k8s.io/v1beta3 -- all long-GA APIs whose older alpha/beta tracks may still be needed by callers targeting an older cluster, the same backward-compatibility rationale as the Cilium restore above. No tombstone needed for these either.

SEE ALSO

IO::K8s::List, IO::K8s::Api::Resource::V1::ResourceClaim, IO::K8s

SUPPORT

Issues

Please report bugs and feature requests on GitHub at https://github.com/Getty/io-k8s-p5-deprecated/issues.

IRC

Join #kubernetes on irc.perl.org or message Getty directly.

CONTRIBUTING

Contributions are welcome! Please fork the repository and submit a pull request.

AUTHORS

  • Torsten Raudssus <torsten@raudssus.de>

  • Jose Luis Martinez Torres <jlmartin@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2018-2026 by Jose Luis Martinez Torres <jlmartin@cpan.org>.

This is free software, licensed under:

The Apache License, Version 2.0, January 2004