NAME
IO::K8s::Deprecated - Registry of CPAN redirect stubs for renamed/retired IO::K8s modules
VERSION
version 1.105
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. IO-K8s will never ship these names again (they are permanently removed, not merely between releases), and this distribution's own version only ever increases from here, so 1.105 stays ahead of that target for good without further special-casing.
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 (76 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 were dropped from the distribution outright afterwards. 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::Apimachinery::Pkg::Apis::Meta::V1::APIGroupList
IO::K8s::Apimachinery::Pkg::Apis::Meta::V1::APIResourceList
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 76 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.
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