openshift-python-wrapper 11.0.111__tar.gz → 11.0.112__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. openshift_python_wrapper-11.0.112/.git +1 -0
  2. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.pre-commit-config.yaml +1 -1
  3. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/PKG-INFO +1 -1
  4. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/README.md +43 -6
  5. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/cli.py +77 -5
  6. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/core/schema.py +233 -45
  7. openshift_python_wrapper-11.0.112/class_generator/exceptions.py +11 -0
  8. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/parsers/explain_parser.py +1 -8
  9. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_cli.py +44 -0
  10. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_schema_new_functions.py +194 -5
  11. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/utils/resource_constants.py +1 -0
  12. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/pyproject.toml +1 -1
  13. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/uv.lock +231 -327
  14. openshift_python_wrapper-11.0.111/.git +0 -1
  15. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.coderabbit.yaml +0 -0
  16. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.dockerignore +0 -0
  17. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.flake8 +0 -0
  18. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.gitattributes +0 -0
  19. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  21. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.github/pull_request_template.md +0 -0
  22. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.github/weekly-digest.yml +0 -0
  23. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.github/workflows/close-stale-issues.yml +0 -0
  24. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.gitignore +0 -0
  25. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.gitleaks.toml +0 -0
  26. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.readthedocs.yaml +0 -0
  27. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.release-it.json +0 -0
  28. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/.sonarcloud.properties +0 -0
  29. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/CONTRIBUTING.md +0 -0
  30. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/LICENSE +0 -0
  31. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/Makefile +0 -0
  32. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/OWNERS +0 -0
  33. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/README.md +0 -0
  34. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/__init__.py +0 -0
  35. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/constants.py +0 -0
  36. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/core/__init__.py +0 -0
  37. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/core/coverage.py +0 -0
  38. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/core/discovery.py +0 -0
  39. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/core/generator.py +0 -0
  40. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/formatters/__init__.py +0 -0
  41. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/formatters/file_writer.py +0 -0
  42. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/formatters/template_renderer.py +0 -0
  43. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/manifests/class_generator_template.j2 +0 -0
  44. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/parsers/__init__.py +0 -0
  45. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/parsers/type_parser.py +0 -0
  46. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/parsers/user_code_parser.py +0 -0
  47. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/py.typed +0 -0
  48. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/schema/__cluster_version__.txt +0 -0
  49. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/schema/__resources-mappings.json.gz +0 -0
  50. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/schema/_definitions.json +0 -0
  51. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/APIServer/api_server.py +0 -0
  52. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
  53. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/ConfigMap/config_map.py +0 -0
  54. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/DNS/dns_config_openshift_io.py +0 -0
  55. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/DNS/dns_operator_openshift_io.py +0 -0
  56. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Deployment/deployment.py +0 -0
  57. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/ImageContentSourcePolicy/image_content_source_policy.py +0 -0
  58. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Ingress/ingress_config_openshift_io.py +0 -0
  59. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Ingress/ingress_networking_k8s_io.py +0 -0
  60. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Machine/machine.py +0 -0
  61. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/NMState/nm_state.py +0 -0
  62. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/OAuth/oauth.py +0 -0
  63. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Pipeline/pipeline.py +0 -0
  64. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Pod/pod.py +0 -0
  65. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/RouteAdvertisements/route_advertisements.py +0 -0
  66. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/Secret/secret.py +0 -0
  67. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +0 -0
  68. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +0 -0
  69. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/manifests/test_parse_explain.j2 +0 -0
  70. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_batch_regeneration.py +0 -0
  71. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_class_generator.py +0 -0
  72. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_generation.py +0 -0
  73. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_resource_discovery.py +0 -0
  74. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_schema_parsing.py +0 -0
  75. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_user_code_parser.py +0 -0
  76. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/tests/test_utils.py +0 -0
  77. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/class_generator/utils.py +0 -0
  78. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/docs/Makefile +0 -0
  79. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/docs/conf.py +0 -0
  80. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/docs/index.rst +0 -0
  81. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/docs/modules.rst +0 -0
  82. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/docs/ocp_resources.rst +0 -0
  83. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/general.py +0 -0
  84. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/node_network_configuration_policy.py +0 -0
  85. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/pods.py +0 -0
  86. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/resource_list.py +0 -0
  87. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/role.py +0 -0
  88. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/special_cases.py +0 -0
  89. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/validation_demo.py +0 -0
  90. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/validation_troubleshooting.py +0 -0
  91. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/examples/virtual_machine.py +0 -0
  92. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/README.md +0 -0
  93. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/__init__.py +0 -0
  94. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/configuration.py +0 -0
  95. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/dynamic_client.py +0 -0
  96. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/exceptions.py +0 -0
  97. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/kubernetes_client.py +0 -0
  98. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/resource_field.py +0 -0
  99. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/resource_instance.py +0 -0
  100. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/resource_manager.py +0 -0
  101. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/resource_registry.py +0 -0
  102. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/resource_storage.py +0 -0
  103. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/status_schema_parser.py +0 -0
  104. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/status_templates.py +0 -0
  105. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/fake_kubernetes_client/types.py +0 -0
  106. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/README.md +0 -0
  107. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/__init__.py +0 -0
  108. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/example_client.py +0 -0
  109. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/server-info.json +0 -0
  110. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/server.py +0 -0
  111. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/tests/__init__.py +0 -0
  112. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/mcp_server/tests/test_server.py +0 -0
  113. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/__init__.py +0 -0
  114. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/aaq.py +0 -0
  115. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/api_server.py +0 -0
  116. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/api_service.py +0 -0
  117. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
  118. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
  119. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/application_aware_resource_quota.py +0 -0
  120. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/authentication_config_openshift_io.py +0 -0
  121. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/authentication_operator_openshift_io.py +0 -0
  122. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/authorino.py +0 -0
  123. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/backup.py +0 -0
  124. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/benchmark.py +0 -0
  125. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/bgp_session_state.py +0 -0
  126. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/catalog_source.py +0 -0
  127. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cdi.py +0 -0
  128. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cdi_config.py +0 -0
  129. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/chaos_engine.py +0 -0
  130. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/chaos_result.py +0 -0
  131. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_claim.py +0 -0
  132. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_deployment.py +0 -0
  133. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_operator.py +0 -0
  134. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_pool.py +0 -0
  135. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_resource_quota.py +0 -0
  136. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_role.py +0 -0
  137. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_role_binding.py +0 -0
  138. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_service_version.py +0 -0
  139. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_user_defined_network.py +0 -0
  140. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cluster_version.py +0 -0
  141. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/config_imageregistry_operator_openshift_io.py +0 -0
  142. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/config_map.py +0 -0
  143. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/config_operator_openshift_io.py +0 -0
  144. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/config_samples_operator_openshift_io.py +0 -0
  145. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/console_cli_download.py +0 -0
  146. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/console_config_openshift_io.py +0 -0
  147. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/console_operator_openshift_io.py +0 -0
  148. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/console_plugin.py +0 -0
  149. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/console_quick_start.py +0 -0
  150. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/controller_revision.py +0 -0
  151. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/cron_job.py +0 -0
  152. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/csi_driver.py +0 -0
  153. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/csi_storage_capacity.py +0 -0
  154. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/custom_resource_definition.py +0 -0
  155. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/daemonset.py +0 -0
  156. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/data_import_cron.py +0 -0
  157. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/data_science_cluster.py +0 -0
  158. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/data_science_pipelines_application.py +0 -0
  159. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/data_source.py +0 -0
  160. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/datavolume.py +0 -0
  161. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/deployment.py +0 -0
  162. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/destination_rule.py +0 -0
  163. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/direct_volume_migration.py +0 -0
  164. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/direct_volume_migration_progress.py +0 -0
  165. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/dns_config_openshift_io.py +0 -0
  166. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/dns_operator_openshift_io.py +0 -0
  167. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/dsc_initialization.py +0 -0
  168. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/endpoint_slice.py +0 -0
  169. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/endpoints.py +0 -0
  170. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/event.py +0 -0
  171. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/exceptions.py +0 -0
  172. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/fence_agent_remediation_templates.py +0 -0
  173. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/forklift_controller.py +0 -0
  174. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/frr_configuration.py +0 -0
  175. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/gateway.py +0 -0
  176. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/gateway_class.py +0 -0
  177. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/gateway_config.py +0 -0
  178. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/gateway_gateway_networking_k8s_io.py +0 -0
  179. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/gateway_networking_istio_io.py +0 -0
  180. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/group.py +0 -0
  181. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/guardrails_orchestrator.py +0 -0
  182. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/hook.py +0 -0
  183. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/host.py +0 -0
  184. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/hostpath_provisioner.py +0 -0
  185. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/hyperconverged.py +0 -0
  186. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/image_caching_internal_knative_dev.py +0 -0
  187. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/image_config_openshift_io.py +0 -0
  188. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/image_content_source_policy.py +0 -0
  189. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/image_digest_mirror_set.py +0 -0
  190. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/image_image_openshift_io.py +0 -0
  191. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/image_stream.py +0 -0
  192. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/imagestreamtag.py +0 -0
  193. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/inference_graph.py +0 -0
  194. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/inference_service.py +0 -0
  195. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/infrastructure.py +0 -0
  196. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/ingress_config_openshift_io.py +0 -0
  197. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/ingress_controller.py +0 -0
  198. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/ingress_networking_k8s_io.py +0 -0
  199. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/installplan.py +0 -0
  200. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/ip_address_pool.py +0 -0
  201. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/jaeger.py +0 -0
  202. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/job.py +0 -0
  203. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/kube_descheduler.py +0 -0
  204. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/kubelet_config.py +0 -0
  205. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/kubevirt.py +0 -0
  206. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/l2_advertisement.py +0 -0
  207. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/lease.py +0 -0
  208. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/limit_range.py +0 -0
  209. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/llama_stack_distribution.py +0 -0
  210. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/llm_inference_service.py +0 -0
  211. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/lm_eval_job.py +0 -0
  212. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/machine.py +0 -0
  213. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/machine_config.py +0 -0
  214. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/machine_config_pool.py +0 -0
  215. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/machine_health_check.py +0 -0
  216. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/machine_set.py +0 -0
  217. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/managed_cluster.py +0 -0
  218. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/maria_db.py +0 -0
  219. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mariadb_operator.py +0 -0
  220. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/metallb.py +0 -0
  221. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mig_analytic.py +0 -0
  222. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mig_cluster.py +0 -0
  223. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mig_controller.py +0 -0
  224. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mig_migration.py +0 -0
  225. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mig_plan.py +0 -0
  226. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/migration.py +0 -0
  227. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/migration_policy.py +0 -0
  228. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/model_registry.py +0 -0
  229. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/model_registry_components_platform_opendatahub_io.py +0 -0
  230. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +0 -0
  231. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mtq.py +0 -0
  232. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/multi_cluster_hub.py +0 -0
  233. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/multi_cluster_observability.py +0 -0
  234. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +0 -0
  235. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +0 -0
  236. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/multi_network_policy.py +0 -0
  237. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/mutating_webhook_config.py +0 -0
  238. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/namespace.py +0 -0
  239. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/network_addons_config.py +0 -0
  240. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/network_attachment_definition.py +0 -0
  241. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/network_config_openshift_io.py +0 -0
  242. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/network_map.py +0 -0
  243. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/network_operator_openshift_io.py +0 -0
  244. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/network_policy.py +0 -0
  245. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/nm_state.py +0 -0
  246. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node.py +0 -0
  247. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_config_openshift_io.py +0 -0
  248. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_health_check.py +0 -0
  249. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_maintenance.py +0 -0
  250. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_network_configuration_enactment.py +0 -0
  251. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_network_configuration_policy.py +0 -0
  252. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
  253. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/node_network_state.py +0 -0
  254. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/notebook.py +0 -0
  255. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/oauth.py +0 -0
  256. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/ocs_initialization.py +0 -0
  257. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/open_telemetry_collector.py +0 -0
  258. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/operator.py +0 -0
  259. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/operator_condition.py +0 -0
  260. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/operator_group.py +0 -0
  261. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/operator_hub.py +0 -0
  262. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/operator_source.py +0 -0
  263. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/package_manifest.py +0 -0
  264. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/peer_authentication.py +0 -0
  265. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/performance_profile.py +0 -0
  266. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/persistent_volume.py +0 -0
  267. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/persistent_volume_claim.py +0 -0
  268. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/pipeline.py +0 -0
  269. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/pipeline_run.py +0 -0
  270. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/plan.py +0 -0
  271. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/pod.py +0 -0
  272. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/pod_disruption_budget.py +0 -0
  273. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/pod_metrics.py +0 -0
  274. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/priority_class.py +0 -0
  275. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/project_config_openshift_io.py +0 -0
  276. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/project_project_openshift_io.py +0 -0
  277. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/project_request.py +0 -0
  278. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/prometheus.py +0 -0
  279. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/prometheus_rule.py +0 -0
  280. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/provider.py +0 -0
  281. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/proxy.py +0 -0
  282. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/py.typed +0 -0
  283. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/rate_limit_policy.py +0 -0
  284. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/reclaim_space_cron_job.py +0 -0
  285. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/reclaim_space_job.py +0 -0
  286. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/replica_set.py +0 -0
  287. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/resource.py +0 -0
  288. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/resource_quota.py +0 -0
  289. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/restore.py +0 -0
  290. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/rhmi.py +0 -0
  291. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/role.py +0 -0
  292. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/role_binding.py +0 -0
  293. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/route.py +0 -0
  294. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/route_advertisements.py +0 -0
  295. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/scaled_object.py +0 -0
  296. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/scheduler.py +0 -0
  297. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/sealed_secret.py +0 -0
  298. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/secret.py +0 -0
  299. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/security_context_constraints.py +0 -0
  300. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/self_node_remediation_templates.py +0 -0
  301. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/self_subject_review.py +0 -0
  302. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service.py +0 -0
  303. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service_account.py +0 -0
  304. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service_mesh_control_plane.py +0 -0
  305. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service_mesh_member.py +0 -0
  306. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service_mesh_member_roll.py +0 -0
  307. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service_monitor.py +0 -0
  308. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/service_serving_knative_dev.py +0 -0
  309. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/serving_runtime.py +0 -0
  310. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/snapshot.py +0 -0
  311. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/sriov_network.py +0 -0
  312. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/sriov_network_node_policy.py +0 -0
  313. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/sriov_network_node_state.py +0 -0
  314. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/ssp.py +0 -0
  315. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/storage_class.py +0 -0
  316. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/storage_cluster.py +0 -0
  317. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/storage_map.py +0 -0
  318. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/storage_profile.py +0 -0
  319. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/subscription.py +0 -0
  320. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/task.py +0 -0
  321. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/task_run.py +0 -0
  322. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/tekton_tasks.py +0 -0
  323. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/template.py +0 -0
  324. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/tempo_stack.py +0 -0
  325. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/token_rate_limit_policy.py +0 -0
  326. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/trustyai_service.py +0 -0
  327. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/upload_token_request.py +0 -0
  328. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/user.py +0 -0
  329. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/user_defined_network.py +0 -0
  330. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/utils/__init__.py +0 -0
  331. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/utils/archive_utils.py +0 -0
  332. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/utils/constants.py +0 -0
  333. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/utils/schema_validator.py +0 -0
  334. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/utils/utils.py +0 -0
  335. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/validating_admission_policy.py +0 -0
  336. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/validating_admission_policy_binding.py +0 -0
  337. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/validating_webhook_config.py +0 -0
  338. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine.py +0 -0
  339. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_clone.py +0 -0
  340. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_cluster_instancetype.py +0 -0
  341. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_cluster_preference.py +0 -0
  342. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_export.py +0 -0
  343. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_import.py +0 -0
  344. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_instance.py +0 -0
  345. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_instance_migration.py +0 -0
  346. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_instance_preset.py +0 -0
  347. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_instance_replica_set.py +0 -0
  348. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_instancetype.py +0 -0
  349. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
  350. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_preference.py +0 -0
  351. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_restore.py +0 -0
  352. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_snapshot.py +0 -0
  353. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_storage_migration.py +0 -0
  354. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_machine_storage_migration_plan.py +0 -0
  355. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/virtual_service.py +0 -0
  356. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/vm_import_config.py +0 -0
  357. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/volume_snapshot.py +0 -0
  358. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/ocp_resources/volume_snapshot_class.py +0 -0
  359. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/pypi-dist/.gitignore +0 -0
  360. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/renovate.json +0 -0
  361. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/scripts/__init__.py +0 -0
  362. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/scripts/diff-from-latest-release.sh +0 -0
  363. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/scripts/diff-from-tag.sh +0 -0
  364. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/scripts/generate_changelog.py +0 -0
  365. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/scripts/get-latest-release.sh +0 -0
  366. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/sonar-project.properties +0 -0
  367. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/__init__.py +0 -0
  368. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/conftest.py +0 -0
  369. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/fixtures/validation_schemas.py +0 -0
  370. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/manifests/vm.yaml +0 -0
  371. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/scripts/__init__.py +0 -0
  372. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/scripts/generate_pytest_test.py +0 -0
  373. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/scripts/validate_resources.py +0 -0
  374. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_api_group_order.py +0 -0
  375. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_camelcase_to_snake.py +0 -0
  376. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resource.py +0 -0
  377. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resource_validation.py +0 -0
  378. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_aaq.py +0 -0
  379. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_api_server.py +0 -0
  380. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_authorino.py +0 -0
  381. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_cdi.py +0 -0
  382. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_cdi_config.py +0 -0
  383. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_cluster_resource_quota.py +0 -0
  384. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_cluster_user_defined_network.py +0 -0
  385. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_config_map.py +0 -0
  386. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_console_config_openshift_io.py +0 -0
  387. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_console_operator_openshift_io.py +0 -0
  388. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_csi_driver.py +0 -0
  389. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_data_import_cron.py +0 -0
  390. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_data_science_cluster.py +0 -0
  391. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_deployment.py +0 -0
  392. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_direct_volume_migration.py +0 -0
  393. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_direct_volume_migration_progress.py +0 -0
  394. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_dns_config_openshift_io.py +0 -0
  395. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_dns_operator_openshift_io.py +0 -0
  396. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_dsc_initialization.py +0 -0
  397. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_group.py +0 -0
  398. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_guardrails_orchestrator.py +0 -0
  399. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_image_caching_internal_knative_dev.py +0 -0
  400. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_image_config_openshift_io.py +0 -0
  401. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_image_content_source_policy.py +0 -0
  402. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_image_image_openshift_io.py +0 -0
  403. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_inference_graph.py +0 -0
  404. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_kube_descheduler.py +0 -0
  405. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_kubelet_config.py +0 -0
  406. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_kubevirt.py +0 -0
  407. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_llama_stack_distribution.py +0 -0
  408. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_lm_eval_job.py +0 -0
  409. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_machine.py +0 -0
  410. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_maria_db.py +0 -0
  411. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_mariadb_operator.py +0 -0
  412. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_mig_analytic.py +0 -0
  413. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_mig_cluster.py +0 -0
  414. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_mig_migration.py +0 -0
  415. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_mig_plan.py +0 -0
  416. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_model_registry.py +0 -0
  417. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_model_registry_components_platform_opendatahub_io.py +0 -0
  418. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +0 -0
  419. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_mtq.py +0 -0
  420. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_namespace.py +0 -0
  421. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_network_config_openshift_io.py +0 -0
  422. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_network_operator_openshift_io.py +0 -0
  423. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_nm_state.py +0 -0
  424. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_node.py +0 -0
  425. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_node_config_openshift_io.py +0 -0
  426. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_node_network_configuration_policy_latest.py +0 -0
  427. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_notebook.py +0 -0
  428. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_oauth.py +0 -0
  429. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_operator.py +0 -0
  430. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_pod.py +0 -0
  431. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_pod_metrics.py +0 -0
  432. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_project_config_openshift_io.py +0 -0
  433. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_project_project_openshift_io.py +0 -0
  434. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_project_request.py +0 -0
  435. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_prometheus.py +0 -0
  436. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_replica_set.py +0 -0
  437. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_scheduler.py +0 -0
  438. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_security_context_constraints.py +0 -0
  439. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_self_subject_review.py +0 -0
  440. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_service.py +0 -0
  441. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_service_mesh_member.py +0 -0
  442. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_service_serving_knative_dev.py +0 -0
  443. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_serving_runtime.py +0 -0
  444. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_snapshot.py +0 -0
  445. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_ssp.py +0 -0
  446. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_storage_cluster.py +0 -0
  447. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_user.py +0 -0
  448. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_user_defined_network.py +0 -0
  449. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +0 -0
  450. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_cluster_preference.py +0 -0
  451. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_export.py +0 -0
  452. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_instance_migration.py +0 -0
  453. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_instance_preset.py +0 -0
  454. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_instance_replica_set.py +0 -0
  455. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_instancetype.py +0 -0
  456. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_virtual_machine_preference.py +0 -0
  457. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_volume_snapshot.py +0 -0
  458. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_resources/test_volume_snapshot_class.py +0 -0
  459. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_schema_loading.py +0 -0
  460. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_unittests.py +0 -0
  461. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_validate_resources.py +0 -0
  462. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_validate_resources_script.py +0 -0
  463. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/test_validation_error.py +0 -0
  464. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tests/utils.py +0 -0
  465. {openshift_python_wrapper-11.0.111 → openshift_python_wrapper-11.0.112}/tox.toml +0 -0
@@ -0,0 +1 @@
1
+ gitdir: /tmp/github-webhook-openshift-python-wrapper-0q3sus5t/.git/worktrees/github-webhook-openshift-python-wrapper-0q3sus5t-worktree-fabb997d-c5e5-4da4-a85f-377b5c5c0890
@@ -45,7 +45,7 @@ repos:
45
45
  ]
46
46
 
47
47
  - repo: https://github.com/astral-sh/ruff-pre-commit
48
- rev: v0.14.14
48
+ rev: v0.15.0
49
49
  hooks:
50
50
  - id: ruff
51
51
  - id: ruff-format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openshift-python-wrapper
3
- Version: 11.0.111
3
+ Version: 11.0.112
4
4
  Summary: Wrapper around https://github.com/kubernetes-client/python
5
5
  Project-URL: homepage, https://github.com/RedHatQE/openshift-python-wrapper
6
6
  Project-URL: documentation, https://openshift-python-wrapper.readthedocs.io/en/latest/
@@ -155,18 +155,55 @@ class-generator --kind Pod --add-tests
155
155
 
156
156
  ## Update schema files
157
157
 
158
- - Dependencies
159
- - Kubernetes/Openshift cluster
160
- - [oc](https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/) or [kubectl](https://kubernetes.io/docs/tasks/tools/) (latest version)
161
- - [uv](https://github.com/astral-sh/uv)
158
+ Schema files contain resource definitions used by the class generator. You can update these from a connected Kubernetes/OpenShift cluster.
162
159
 
163
- - Clone this repository
160
+ ### Dependencies
161
+
162
+ - Kubernetes/OpenShift cluster
163
+ - [oc](https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/) or [kubectl](https://kubernetes.io/docs/tasks/tools/) (latest version)
164
+ - [uv](https://github.com/astral-sh/uv)
165
+
166
+ ### Setup
167
+
168
+ Clone this repository:
164
169
 
165
170
  ```bash
166
171
  git clone https://github.com/RedHatQE/openshift-python-wrapper.git
167
172
  cd openshift-python-wrapper
168
173
  ```
169
174
 
170
- - Login to the cluster use admin user and password.
175
+ Login to the cluster using admin user and password.
176
+
177
+ ### Full schema update
178
+
179
+ Update the entire schema from the connected cluster:
180
+
181
+ ```bash
182
+ class-generator --update-schema
183
+ ```
184
+
185
+ This fetches all resource schemas from the cluster and updates the local cache.
186
+
187
+ **Note:** If connected to an older cluster, existing schemas are preserved and only missing resources are added.
188
+
189
+ ### Single resource schema update
190
+
191
+ Update the schema for a single resource without affecting others:
192
+
193
+ ```bash
194
+ class-generator --update-schema-for LlamaStackDistribution
195
+ ```
196
+
197
+ This is useful when:
198
+
199
+ - Connected to an older cluster but need to update a specific CRD
200
+ - A new operator was installed and you need its resource schema
201
+ - You want to refresh just one resource without a full update
202
+
203
+ After updating the schema, regenerate the class:
171
204
 
205
+ ```bash
206
+ class-generator --kind LlamaStackDistribution --overwrite
172
207
  ```
208
+
209
+ **Note:** `--update-schema` and `--update-schema-for` are mutually exclusive. Use one or the other, not both.
@@ -10,14 +10,19 @@ from pathlib import Path
10
10
  from typing import Any
11
11
 
12
12
  import cloup
13
- from cloup.constraints import If, IsSet, accept_none, require_one
13
+ from cloup.constraints import If, IsSet, accept_none, mutually_exclusive, require_one
14
14
  from simple_logger.logger import get_logger
15
15
 
16
16
  from class_generator.constants import TESTS_MANIFESTS_DIR
17
17
  from class_generator.core.coverage import analyze_coverage, generate_report
18
18
  from class_generator.core.discovery import discover_generated_resources
19
19
  from class_generator.core.generator import class_generator
20
- from class_generator.core.schema import ClusterVersionError, update_kind_schema
20
+ from class_generator.core.schema import (
21
+ ClusterVersionError,
22
+ update_kind_schema,
23
+ update_single_resource_schema,
24
+ )
25
+ from class_generator.exceptions import ResourceNotFoundError
21
26
  from class_generator.tests.test_generation import generate_class_generator_tests
22
27
  from class_generator.utils import execute_parallel_tasks
23
28
  from ocp_resources.utils.utils import convert_camel_case_to_snake_case
@@ -28,16 +33,25 @@ LOGGER = get_logger(name=__name__)
28
33
  def validate_actions(
29
34
  kind: str | None,
30
35
  update_schema: bool,
36
+ update_schema_for: str | None,
31
37
  discover_missing: bool,
32
38
  coverage_report: bool,
33
39
  generate_missing: bool,
34
40
  regenerate_all: bool,
35
41
  ) -> None:
36
42
  """Validate that at least one action is specified."""
37
- actions = [kind, update_schema, discover_missing, coverage_report, generate_missing, regenerate_all]
43
+ actions = [
44
+ kind,
45
+ update_schema,
46
+ update_schema_for,
47
+ discover_missing,
48
+ coverage_report,
49
+ generate_missing,
50
+ regenerate_all,
51
+ ]
38
52
  if not any(actions):
39
53
  LOGGER.error(
40
- "At least one action must be specified (--kind, --update-schema, --discover-missing, --coverage-report, --generate-missing, or --regenerate-all)"
54
+ "At least one action must be specified (--kind, --update-schema, --update-schema-for, --discover-missing, --coverage-report, --generate-missing, or --regenerate-all)"
41
55
  )
42
56
  sys.exit(1)
43
57
 
@@ -70,6 +84,33 @@ def handle_schema_update(update_schema: bool, generate_missing: bool) -> bool:
70
84
  return True
71
85
 
72
86
 
87
+ def handle_single_schema_update(update_schema_for: str | None) -> bool:
88
+ """
89
+ Handle single resource schema update operations.
90
+
91
+ Args:
92
+ update_schema_for: The kind name to update schema for, or None
93
+
94
+ Returns:
95
+ True if processing should continue, False if it should exit
96
+ """
97
+ if update_schema_for:
98
+ LOGGER.info(f"Updating schema for single resource: {update_schema_for}")
99
+ try:
100
+ update_single_resource_schema(kind=update_schema_for)
101
+ except ResourceNotFoundError as e:
102
+ LOGGER.error(f"Resource not found: {e}")
103
+ sys.exit(1)
104
+ except (OSError, RuntimeError) as e:
105
+ LOGGER.exception(f"Failed to update schema for {update_schema_for}: {e}")
106
+ sys.exit(1)
107
+
108
+ LOGGER.info(f"Schema updated for {update_schema_for}.")
109
+ return False
110
+
111
+ return True
112
+
113
+
73
114
  def handle_coverage_analysis_and_reporting(
74
115
  coverage_report: bool,
75
116
  discover_missing: bool,
@@ -491,6 +532,17 @@ def handle_test_generation(add_tests: bool) -> None:
491
532
  is_flag=True,
492
533
  show_default=True,
493
534
  )
535
+ @cloup.option(
536
+ "--update-schema-for",
537
+ type=cloup.STRING,
538
+ help="""
539
+ \b
540
+ Update schema for a single resource kind only, without affecting other resources.
541
+ Useful when connected to an older cluster but needing to update a specific CRD.
542
+ Example: --update-schema-for LlamaStackDistribution
543
+ Cannot be used together with --update-schema.
544
+ """,
545
+ )
494
546
  @cloup.option(
495
547
  "--discover-missing",
496
548
  help="Discover resources in the cluster that don't have wrapper classes",
@@ -555,6 +607,20 @@ def handle_test_generation(add_tests: bool) -> None:
555
607
  "regenerate_all",
556
608
  ],
557
609
  )
610
+ @cloup.constraint(
611
+ mutually_exclusive,
612
+ ["update_schema", "update_schema_for"],
613
+ )
614
+ @cloup.constraint(
615
+ If(IsSet("update_schema_for"), then=accept_none),
616
+ [
617
+ "kind",
618
+ "discover_missing",
619
+ "coverage_report",
620
+ "generate_missing",
621
+ "regenerate_all",
622
+ ],
623
+ )
558
624
  @cloup.constraint(
559
625
  If(IsSet("backup"), then=require_one),
560
626
  ["regenerate_all", "overwrite"],
@@ -577,6 +643,7 @@ def main(
577
643
  filter: str | None,
578
644
  json_output: bool,
579
645
  update_schema: bool,
646
+ update_schema_for: str | None,
580
647
  verbose: bool,
581
648
  ) -> None:
582
649
  """Generate Python module for K8S resource."""
@@ -610,13 +677,18 @@ def main(
610
677
  validate_actions(
611
678
  kind=kind,
612
679
  update_schema=update_schema,
680
+ update_schema_for=update_schema_for,
613
681
  discover_missing=discover_missing,
614
682
  coverage_report=coverage_report,
615
683
  generate_missing=generate_missing,
616
684
  regenerate_all=regenerate_all,
617
685
  )
618
686
 
619
- # Handle schema update
687
+ # Handle single resource schema update (if specified)
688
+ if not handle_single_schema_update(update_schema_for=update_schema_for):
689
+ return
690
+
691
+ # Handle full schema update
620
692
  if not handle_schema_update(update_schema=update_schema, generate_missing=generate_missing):
621
693
  return
622
694
 
@@ -12,6 +12,7 @@ from pyhelper_utils.shell import run_command
12
12
  from simple_logger.logger import get_logger
13
13
 
14
14
  from class_generator.constants import DEFINITIONS_FILE, RESOURCES_MAPPING_FILE, SCHEMA_DIR
15
+ from class_generator.exceptions import ResourceNotFoundError
15
16
  from class_generator.utils import execute_parallel_tasks, execute_parallel_with_mapping
16
17
  from ocp_resources.utils.archive_utils import save_json_archive
17
18
  from ocp_resources.utils.schema_validator import SchemaValidator
@@ -503,6 +504,64 @@ def fetch_all_api_schemas(
503
504
  return schemas
504
505
 
505
506
 
507
+ def _build_schema_data(
508
+ def_data: dict[str, Any],
509
+ gvk: dict[str, str],
510
+ is_namespaced: bool,
511
+ ) -> dict[str, Any]:
512
+ """Build schema data dictionary from definition data and GVK info.
513
+
514
+ Args:
515
+ def_data: The definition data from the API schema
516
+ gvk: The group-version-kind dictionary
517
+ is_namespaced: Whether the resource is namespaced
518
+
519
+ Returns:
520
+ Schema data dictionary in the format expected by SchemaValidator
521
+ """
522
+ return {
523
+ "description": def_data.get("description", ""),
524
+ "properties": def_data.get("properties", {}),
525
+ "required": def_data.get("required", []),
526
+ "type": def_data.get("type", "object"),
527
+ "x-kubernetes-group-version-kind": [gvk],
528
+ "namespaced": is_namespaced,
529
+ }
530
+
531
+
532
+ def _merge_schema_into_mapping(
533
+ resources_mapping: dict[str, Any],
534
+ kind_lower: str,
535
+ group: str,
536
+ version: str,
537
+ schema_data: dict[str, Any],
538
+ ) -> tuple[bool, str]:
539
+ """Merge a schema into the resources mapping.
540
+
541
+ Args:
542
+ resources_mapping: The resources mapping dictionary to update
543
+ kind_lower: The lowercase kind name
544
+ group: The API group
545
+ version: The API version
546
+ schema_data: The schema data to merge
547
+
548
+ Returns:
549
+ Tuple of (was_updated, action_description) where action is 'updated', 'added_version', or 'added_new'
550
+ """
551
+ if kind_lower in resources_mapping:
552
+ existing_schemas = resources_mapping[kind_lower]
553
+ for i, existing_schema in enumerate(existing_schemas):
554
+ existing_gvk = existing_schema.get("x-kubernetes-group-version-kind", [{}])[0]
555
+ if existing_gvk.get("group") == group and existing_gvk.get("version") == version:
556
+ existing_schemas[i] = schema_data
557
+ return True, "updated"
558
+ existing_schemas.append(schema_data)
559
+ return True, "added_version"
560
+ else:
561
+ resources_mapping[kind_lower] = [schema_data]
562
+ return True, "added_new"
563
+
564
+
506
565
  def process_schema_definitions(
507
566
  schemas: dict[str, dict[str, Any]],
508
567
  namespacing_dict: dict[str, bool],
@@ -579,51 +638,27 @@ def process_schema_definitions(
579
638
  else:
580
639
  schema_name = f"{version}/{kind}"
581
640
 
582
- # Create schema data in the format expected by SchemaValidator
583
- schema_data = {
584
- "description": def_data.get("description", ""),
585
- "properties": def_data.get("properties", {}),
586
- "required": def_data.get("required", []),
587
- "type": def_data.get("type", "object"),
588
- "x-kubernetes-group-version-kind": [group_kind_version],
589
- "namespaced": is_namespaced,
590
- }
641
+ # Create schema data using helper function
642
+ schema_data = _build_schema_data(def_data, group_kind_version, is_namespaced)
591
643
 
592
644
  # Store in resources_mapping as an array (multiple schemas per kind)
593
645
  kind_lower = kind.lower()
594
646
  if kind_lower not in resources_mapping:
595
- # NEW resource - always add
596
- resources_mapping[kind_lower] = [schema_data]
647
+ # NEW resource - always add using merge helper
648
+ _merge_schema_into_mapping(resources_mapping, kind_lower, group, version, schema_data)
597
649
  new_resources += 1
598
650
  LOGGER.debug(f"Added new resource: {kind_lower}")
599
651
  elif allow_updates:
600
- # UPDATE existing resource - replace schema with same group/version or add new one
601
- existing_schemas = resources_mapping[kind_lower]
602
- updated = False
603
-
604
- for i, existing_schema in enumerate(existing_schemas):
605
- existing_gvk = existing_schema.get("x-kubernetes-group-version-kind", [{}])[0]
606
- new_gvk = group_kind_version
607
-
608
- # Check if this is the same group/version combination
609
- if existing_gvk.get("group") == new_gvk.get("group") and existing_gvk.get("version") == new_gvk.get(
610
- "version"
611
- ):
612
- # UPDATE: Replace existing schema with newer version
613
- existing_schemas[i] = schema_data
614
- updated = True
615
- updated_resources += 1
616
- LOGGER.debug(
617
- f"Updated existing resource schema: {kind_lower} ({new_gvk.get('group', 'core')}/{new_gvk.get('version')})"
618
- )
619
- break
620
-
621
- if not updated:
622
- # ADD: New group/version for existing resource kind
623
- existing_schemas.append(schema_data)
624
- updated_resources += 1
652
+ # UPDATE existing resource using merge helper
653
+ _was_updated, action = _merge_schema_into_mapping(
654
+ resources_mapping, kind_lower, group, version, schema_data
655
+ )
656
+ updated_resources += 1
657
+ if action == "updated":
658
+ LOGGER.debug(f"Updated existing resource schema: {kind_lower} ({group or 'core'}/{version})")
659
+ else:
625
660
  LOGGER.debug(
626
- f"Added new schema version for existing resource: {kind_lower} ({group_kind_version.get('group', 'core')}/{group_kind_version.get('version')})"
661
+ f"Added new schema version for existing resource: {kind_lower} ({group or 'core'}/{version})"
627
662
  )
628
663
  else:
629
664
  # Don't update existing resources when cluster version is older
@@ -1458,22 +1493,18 @@ def _determine_update_strategy(client: str, resources_mapping: dict[Any, Any]) -
1458
1493
  return UpdateStrategy(should_update=should_update, missing_resources=missing_resources, need_v3_index=need_v3_index)
1459
1494
 
1460
1495
 
1461
- def _fetch_api_index_if_needed(client: str, need_v3_index: bool) -> dict[str, Any]:
1462
- """Fetch OpenAPI v3 index if needed.
1496
+ def _fetch_openapi_v3_index(client: str) -> dict[str, Any]:
1497
+ """Fetch OpenAPI v3 index from the cluster.
1463
1498
 
1464
1499
  Args:
1465
1500
  client: The client binary path
1466
- need_v3_index: Whether to fetch the index
1467
1501
 
1468
1502
  Returns:
1469
- Dictionary of API paths or empty dict if not needed
1503
+ Dictionary of API paths
1470
1504
 
1471
1505
  Raises:
1472
- RuntimeError: If fetching the index fails when needed
1506
+ RuntimeError: If fetching the index fails
1473
1507
  """
1474
- if not need_v3_index:
1475
- return {}
1476
-
1477
1508
  LOGGER.info("Fetching OpenAPI v3 index...")
1478
1509
  success, v3_data, _ = run_command(command=shlex.split(f"{client} get --raw /openapi/v3"), check=False)
1479
1510
  if not success:
@@ -1487,6 +1518,25 @@ def _fetch_api_index_if_needed(client: str, need_v3_index: bool) -> dict[str, An
1487
1518
  return paths
1488
1519
 
1489
1520
 
1521
+ def _fetch_api_index_if_needed(client: str, need_v3_index: bool) -> dict[str, Any]:
1522
+ """Fetch OpenAPI v3 index if needed.
1523
+
1524
+ Args:
1525
+ client: The client binary path
1526
+ need_v3_index: Whether to fetch the index
1527
+
1528
+ Returns:
1529
+ Dictionary of API paths or empty dict if not needed
1530
+
1531
+ Raises:
1532
+ RuntimeError: If fetching the index fails when needed
1533
+ """
1534
+ if not need_v3_index:
1535
+ return {}
1536
+
1537
+ return _fetch_openapi_v3_index(client)
1538
+
1539
+
1490
1540
  def _fetch_schemas_based_on_strategy(client: str, strategy: UpdateStrategy, paths: dict[str, Any]) -> dict[str, Any]:
1491
1541
  """Fetch schemas based on the determined update strategy.
1492
1542
 
@@ -1612,3 +1662,141 @@ def update_kind_schema(client: str | None = None) -> None:
1612
1662
  LOGGER.info(
1613
1663
  "No schema files updated - no schemas were fetched (either due to older cluster version with no missing resources, or transient fetch failures)"
1614
1664
  )
1665
+
1666
+
1667
+ def update_single_resource_schema(kind: str, client: str | None = None) -> None:
1668
+ """Update schema for a single resource kind without affecting other resources.
1669
+
1670
+ This function is useful when connected to an older cluster but needing to update
1671
+ a specific CRD (e.g., a newly installed operator's resources).
1672
+
1673
+ Args:
1674
+ kind: The resource Kind to update (e.g., 'LlamaStackDistribution')
1675
+ client: Path to kubectl/oc client binary. If None, will auto-detect.
1676
+
1677
+ Raises:
1678
+ ResourceNotFoundError: If the kind is not found on the cluster
1679
+ RuntimeError: If fetching the schema fails
1680
+ """
1681
+ if client is None:
1682
+ client = get_client_binary()
1683
+
1684
+ LOGGER.info(f"Updating schema for single resource: {kind}")
1685
+
1686
+ # Get dynamic resource-to-API mapping to find the API path for this kind
1687
+ resource_to_api_mapping = build_dynamic_resource_to_api_mapping(client=client)
1688
+
1689
+ if kind not in resource_to_api_mapping:
1690
+ raise ResourceNotFoundError(
1691
+ kind=kind,
1692
+ message=(
1693
+ f"Resource kind '{kind}' not found on the cluster. "
1694
+ f"Ensure the CRD is installed and the kind name is correct (case-sensitive)."
1695
+ ),
1696
+ )
1697
+
1698
+ api_paths_for_kind = resource_to_api_mapping[kind]
1699
+ LOGGER.info(f"Found API paths for {kind}: {api_paths_for_kind}")
1700
+
1701
+ # Fetch OpenAPI v3 index using shared helper function
1702
+ paths = _fetch_openapi_v3_index(client)
1703
+
1704
+ # Filter to only the API paths for this specific kind
1705
+ filter_paths = set()
1706
+ for api_path in api_paths_for_kind:
1707
+ if api_path in paths:
1708
+ filter_paths.add(api_path)
1709
+ else:
1710
+ LOGGER.warning(f"API path {api_path} not found in cluster paths")
1711
+
1712
+ if not filter_paths:
1713
+ raise RuntimeError(
1714
+ f"None of the API paths for {kind} were found in the cluster. Expected paths: {api_paths_for_kind}"
1715
+ )
1716
+
1717
+ LOGGER.info(f"Fetching schemas from {len(filter_paths)} API path(s): {filter_paths}")
1718
+
1719
+ # Fetch only the relevant API schemas
1720
+ schemas = fetch_all_api_schemas(client=client, paths=paths, filter_paths=filter_paths)
1721
+
1722
+ if not schemas:
1723
+ raise RuntimeError(
1724
+ f"Failed to fetch schema for {kind} from API paths {filter_paths}. "
1725
+ f"The API server returned no schema data. Check cluster connectivity and permissions."
1726
+ )
1727
+
1728
+ # Build namespacing dictionary by reusing the existing function and filtering to just this resource
1729
+ full_namespacing_dict = build_namespacing_dict(client=client)
1730
+ if kind in full_namespacing_dict:
1731
+ namespacing_dict = {kind: full_namespacing_dict[kind]}
1732
+ else:
1733
+ LOGGER.warning(f"Could not determine if {kind} is namespaced, defaulting to True")
1734
+ namespacing_dict = {kind: True}
1735
+
1736
+ LOGGER.info(f"Resource {kind} is namespaced: {namespacing_dict[kind]}")
1737
+
1738
+ # Load existing resources mapping
1739
+ resources_mapping = read_resources_mapping_file(skip_cache=True)
1740
+ existing_count = len(resources_mapping)
1741
+ LOGGER.info(f"Loaded {existing_count} existing resources from mapping")
1742
+
1743
+ # Process schema definitions for this specific kind only
1744
+ kind_lower = kind.lower()
1745
+ updated = False
1746
+ new_schemas_for_kind = []
1747
+
1748
+ for _, schema in schemas.items():
1749
+ for _def_name, def_data in schema.get("components", {}).get("schemas", {}).items():
1750
+ gvk_list = def_data.get("x-kubernetes-group-version-kind", [])
1751
+ if not gvk_list:
1752
+ continue
1753
+
1754
+ # Check if this definition is for our target kind
1755
+ for gvk in gvk_list:
1756
+ if gvk.get("kind") == kind:
1757
+ group = gvk.get("group", "")
1758
+ version = gvk.get("version", "")
1759
+
1760
+ # Create schema data using helper function
1761
+ is_namespaced = namespacing_dict.get(kind, True)
1762
+ schema_data = _build_schema_data(def_data, gvk, is_namespaced)
1763
+
1764
+ new_schemas_for_kind.append((group, version, schema_data))
1765
+ LOGGER.debug(f"Found schema for {kind} (group={group}, version={version})")
1766
+ break
1767
+
1768
+ if not new_schemas_for_kind:
1769
+ raise RuntimeError(
1770
+ f"No schema definition found for {kind} in the fetched API schemas. "
1771
+ f"The resource exists on the cluster but its schema could not be extracted. "
1772
+ f"This may indicate an issue with the CRD definition or API server configuration."
1773
+ )
1774
+
1775
+ # Update or add the resource in the mapping using the merge helper
1776
+ updated = False
1777
+ for group, version, new_schema_data in new_schemas_for_kind:
1778
+ _was_updated, action = _merge_schema_into_mapping(
1779
+ resources_mapping, kind_lower, group, version, new_schema_data
1780
+ )
1781
+ updated = True
1782
+ if action == "updated":
1783
+ LOGGER.info(f"Updated existing schema for {kind} ({group}/{version})")
1784
+ elif action == "added_version":
1785
+ LOGGER.info(f"Added new schema version for {kind} ({group}/{version})")
1786
+ else: # added_new
1787
+ LOGGER.info(f"Added new resource {kind} ({group}/{version})")
1788
+
1789
+ if updated:
1790
+ # Save the updated resources mapping
1791
+ try:
1792
+ save_json_archive(resources_mapping, RESOURCES_MAPPING_FILE)
1793
+ LOGGER.info(f"Successfully updated schema for {kind}")
1794
+ LOGGER.info(f"Total resources in mapping: {len(resources_mapping)}")
1795
+ except (OSError, TypeError) as e:
1796
+ raise RuntimeError(f"Failed to save resources mapping: {e}") from e
1797
+
1798
+ # Clear cached mapping data in SchemaValidator to force reload
1799
+ SchemaValidator.clear_cache()
1800
+ SchemaValidator.load_mappings_data()
1801
+ else:
1802
+ LOGGER.info(f"No schema updates needed for {kind} - schema is already up to date")
@@ -0,0 +1,11 @@
1
+ """Custom exceptions for class generator."""
2
+
3
+
4
+ class ResourceNotFoundError(Exception):
5
+ """Raised when a resource kind is not found."""
6
+
7
+ def __init__(self, kind: str, message: str | None = None) -> None:
8
+ self.kind = kind
9
+ if message is None:
10
+ message = f"Resource kind '{kind}' not found"
11
+ super().__init__(message)
@@ -6,6 +6,7 @@ from simple_logger.logger import get_logger
6
6
 
7
7
  from class_generator.constants import MISSING_DESCRIPTION_STR
8
8
  from class_generator.core.schema import extract_group_kind_version, read_resources_mapping_file
9
+ from class_generator.exceptions import ResourceNotFoundError
9
10
  from class_generator.parsers.type_parser import get_property_schema, prepare_property_dict
10
11
  from class_generator.utils import get_latest_version
11
12
  from ocp_resources.resource import Resource
@@ -13,14 +14,6 @@ from ocp_resources.resource import Resource
13
14
  LOGGER = get_logger(name=__name__)
14
15
 
15
16
 
16
- class ResourceNotFoundError(Exception):
17
- """Raised when a resource kind is not found in the schema definition."""
18
-
19
- def __init__(self, kind: str) -> None:
20
- self.kind = kind
21
- super().__init__(f"Resource kind '{kind}' not found in schema definition")
22
-
23
-
24
17
  def parse_explain(kind: str) -> list[dict[str, Any]]:
25
18
  """
26
19
  Parse OpenAPI explain data for a given resource kind.
@@ -6,6 +6,7 @@ from unittest.mock import patch
6
6
  from click.testing import CliRunner
7
7
 
8
8
  from class_generator.cli import main
9
+ from class_generator.core.schema import ResourceNotFoundError
9
10
 
10
11
 
11
12
  class TestCLIFunctionality:
@@ -253,3 +254,46 @@ class TestCLIFunctionality:
253
254
  result = runner.invoke(cli=main, args=[], catch_exceptions=False)
254
255
  assert result.exit_code != 0
255
256
  # Error is printed to stderr, not stdout
257
+
258
+ def test_update_schema_for_single_resource(self):
259
+ """Test --update-schema-for functionality."""
260
+ runner = CliRunner()
261
+
262
+ with patch("class_generator.cli.update_single_resource_schema") as mock_update:
263
+ mock_update.return_value = None
264
+
265
+ result = runner.invoke(cli=main, args=["--update-schema-for", "LlamaStackDistribution"])
266
+
267
+ assert result.exit_code == 0
268
+ mock_update.assert_called_once_with(kind="LlamaStackDistribution")
269
+
270
+ def test_update_schema_for_mutual_exclusivity_with_update_schema(self):
271
+ """Test --update-schema-for and --update-schema are mutually exclusive."""
272
+ runner = CliRunner()
273
+
274
+ result = runner.invoke(cli=main, args=["--update-schema", "--update-schema-for", "Pod"])
275
+
276
+ # Should fail due to mutual exclusivity
277
+ assert result.exit_code != 0
278
+ assert "mutually exclusive" in result.output
279
+
280
+ def test_update_schema_for_cannot_combine_with_kind(self):
281
+ """Test that --update-schema-for cannot be combined with -k/--kind."""
282
+ runner = CliRunner()
283
+
284
+ result = runner.invoke(cli=main, args=["--update-schema-for", "Pod", "-k", "Pod"])
285
+
286
+ # Should fail due to constraint
287
+ assert result.exit_code != 0
288
+
289
+ def test_update_schema_for_resource_not_found(self):
290
+ """Test --update-schema-for with a non-existent resource."""
291
+ runner = CliRunner()
292
+
293
+ with patch("class_generator.cli.update_single_resource_schema") as mock_update:
294
+ mock_update.side_effect = ResourceNotFoundError(kind="FakeResource")
295
+
296
+ result = runner.invoke(cli=main, args=["--update-schema-for", "FakeResource"], catch_exceptions=False)
297
+
298
+ # Should exit with error
299
+ assert result.exit_code != 0