openshift-python-wrapper 4.21.0__tar.gz → 4.21.2__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.
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.gitignore +0 -1
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.pre-commit-config.yaml +4 -4
- openshift_python_wrapper-4.21.2/AGENTS.md +90 -0
- openshift_python_wrapper-4.21.2/CLAUDE.md +1 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/CONTRIBUTING.md +24 -5
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/PKG-INFO +10 -5
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/README.md +2 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/cli.py +1 -1
- openshift_python_wrapper-4.21.2/class_generator/formatters/file_writer.py +71 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/manifests/class_generator_template.j2 +5 -1
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/test_parse_explain.j2 +10 -15
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_class_generator.py +4 -6
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_cli.py +3 -1
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_instance.py +5 -5
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/status_schema_parser.py +6 -6
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/status_templates.py +21 -21
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/tests/test_server.py +10 -10
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/migration.py +1 -1
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +13 -1
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_import.py +1 -1
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/pyproject.toml +8 -5
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/scripts/generate_pytest_test.py +1 -1
- openshift_python_wrapper-4.21.2/uv.lock +2554 -0
- openshift_python_wrapper-4.21.0/.git +0 -1
- openshift_python_wrapper-4.21.0/class_generator/formatters/file_writer.py +0 -36
- openshift_python_wrapper-4.21.0/uv.lock +0 -2643
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.coderabbit.yaml +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.dockerignore +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.flake8 +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.gitattributes +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/pull_request_template.md +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/weekly-digest.yml +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/workflows/close-stale-issues.yml +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.gitleaks.toml +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.readthedocs.yaml +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.release-it.json +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.sonarcloud.properties +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/LICENSE +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/Makefile +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/OWNERS +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/README.md +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/constants.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/coverage.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/discovery.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/generator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/schema.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/exceptions.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/formatters/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/formatters/template_renderer.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/explain_parser.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/type_parser.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/user_code_parser.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/py.typed +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/schema/__cluster_version__.txt +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/schema/__resources-mappings.json.gz +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/schema/_definitions.json +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/APIServer/api_server.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ConfigMap/config_map.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/DNS/dns_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/DNS/dns_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Deployment/deployment.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ImageContentSourcePolicy/image_content_source_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Ingress/ingress_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Ingress/ingress_networking_k8s_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Machine/machine.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/NMState/nm_state.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/OAuth/oauth.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Pipeline/pipeline.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Pod/pod.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/RouteAdvertisements/route_advertisements.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Secret/secret.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_batch_regeneration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_generation.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_resource_discovery.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_schema_new_functions.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_schema_parsing.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_user_code_parser.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_utils.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/utils.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/Makefile +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/conf.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/index.rst +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/modules.rst +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/ocp_resources.rst +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/general.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/node_network_configuration_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/pods.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/resource_list.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/role.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/special_cases.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/validation_demo.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/validation_troubleshooting.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/virtual_machine.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/README.md +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/configuration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/dynamic_client.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/exceptions.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/kubernetes_client.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_field.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_manager.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_registry.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_storage.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/types.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/README.md +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/example_client.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/server-info.json +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/server.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/tests/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/aaq.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/api_server.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/api_service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/authentication_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/authentication_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/authorino.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/backup.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/benchmark.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/bgp_session_state.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/catalog_source.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cdi.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cdi_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/chaos_engine.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/chaos_result.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_claim.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_deployment.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_operator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_pool.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_role.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_role_binding.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_service_version.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_user_defined_network.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_version.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_imageregistry_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_map.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_samples_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_cli_download.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_plugin.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_quick_start.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/controller_revision.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cron_job.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/csi_driver.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/csi_storage_capacity.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/custom_resource_definition.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/daemonset.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_import_cron.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_science_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_science_pipelines_application.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_source.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/datavolume.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/deployment.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/destination_rule.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/direct_volume_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/direct_volume_migration_progress.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/dns_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/dns_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/dsc_initialization.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/endpoint_slice.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/endpoints.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/event.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/exceptions.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/fence_agent_remediation_templates.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/forklift_controller.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/frr_configuration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_class.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_gateway_networking_k8s_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_networking_istio_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/group.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/guardrails_orchestrator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/hook.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/host.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/hostpath_provisioner.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/hyperconverged.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_caching_internal_knative_dev.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_content_source_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_digest_mirror_set.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_image_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_stream.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/imagestreamtag.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/inference_graph.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/inference_service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/infrastructure.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_controller.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_networking_k8s_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/installplan.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ip_address_pool.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/jaeger.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/job.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/kube_descheduler.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/kubelet_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/kubevirt.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/l2_advertisement.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/lease.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/limit_range.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/llama_stack_distribution.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/llm_inference_service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/lm_eval_job.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_config_pool.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_health_check.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_set.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/managed_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/maria_db.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mariadb_operator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/metallb.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_analytic.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_controller.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_plan.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/migration_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry_components_platform_opendatahub_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mtq.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_cluster_hub.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_cluster_observability.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_network_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mutating_webhook_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/namespace.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_addons_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_attachment_definition.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_map.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/nm_state.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_health_check.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_maintenance.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_enactment.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_state.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/notebook.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/oauth.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ocs_initialization.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/open_telemetry_collector.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_condition.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_group.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_hub.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_source.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/package_manifest.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/peer_authentication.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/performance_profile.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/persistent_volume.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/persistent_volume_claim.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pipeline.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pipeline_run.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/plan.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pod.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pod_disruption_budget.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pod_metrics.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/priority_class.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/project_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/project_project_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/project_request.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/prometheus.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/prometheus_rule.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/provider.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/proxy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/py.typed +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/rate_limit_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/reclaim_space_cron_job.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/reclaim_space_job.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/replica_set.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/resource.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/restore.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/rhmi.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/role.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/role_binding.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/route.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/route_advertisements.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/scaled_object.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/scheduler.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sealed_secret.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/secret.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/security_context_constraints.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/self_node_remediation_templates.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/self_subject_review.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_account.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_control_plane.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_member.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_member_roll.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_monitor.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_serving_knative_dev.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/serving_runtime.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/snapshot.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network_node_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network_node_state.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ssp.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_class.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_map.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_profile.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/subscription.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/task.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/task_run.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/tekton_tasks.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/template.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/tempo_stack.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/token_rate_limit_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/trustyai_service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/upload_token_request.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/user.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/user_defined_network.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/archive_utils.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/constants.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/resource_constants.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/schema_validator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/utils.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_admission_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_admission_policy_binding.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_webhook_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_clone.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_cluster_instancetype.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_cluster_preference.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_export.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_preset.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_replica_set.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instancetype.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_preference.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_restore.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_snapshot.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_storage_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_storage_migration_plan.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/vm_import_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/volume_snapshot.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/volume_snapshot_class.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/pypi-dist/.gitignore +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/renovate.json +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/diff-from-latest-release.sh +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/diff-from-tag.sh +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/generate_changelog.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/get-latest-release.sh +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/sonar-project.properties +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/conftest.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/fixtures/validation_schemas.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/manifests/vm.yaml +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/scripts/__init__.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/scripts/validate_resources.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_api_group_order.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_camelcase_to_snake.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resource.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resource_validation.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_aaq.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_api_server.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_authorino.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cdi.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cdi_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cluster_user_defined_network.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_config_map.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_console_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_console_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_csi_driver.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_data_import_cron.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_data_science_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_deployment.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_direct_volume_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_direct_volume_migration_progress.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dns_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dns_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dsc_initialization.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_group.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_guardrails_orchestrator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_caching_internal_knative_dev.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_content_source_policy.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_image_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_inference_graph.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kube_descheduler.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kubelet_config.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kubevirt.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_llama_stack_distribution.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_lm_eval_job.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_machine.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_maria_db.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mariadb_operator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_analytic.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_plan.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry_components_platform_opendatahub_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mtq.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_namespace.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_network_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_network_operator_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_nm_state.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node_network_configuration_policy_latest.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_notebook.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_oauth.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_operator.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_pod.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_pod_metrics.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_config_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_project_openshift_io.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_request.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_prometheus.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_replica_set.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_scheduler.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_security_context_constraints.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_self_subject_review.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service_mesh_member.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service_serving_knative_dev.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_serving_runtime.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_snapshot.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_ssp.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_storage_cluster.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_user.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_user_defined_network.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_cluster_preference.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_export.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_migration.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_preset.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_replica_set.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instancetype.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_preference.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_volume_snapshot.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_volume_snapshot_class.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_schema_loading.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_unittests.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_validate_resources.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_validate_resources_script.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_validation_error.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/utils.py +0 -0
- {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tox.toml +0 -0
|
@@ -2,7 +2,7 @@ minimum_pre_commit_version: 3.3.0
|
|
|
2
2
|
default_install_hook_types: [pre-commit, commit-msg]
|
|
3
3
|
|
|
4
4
|
default_language_version:
|
|
5
|
-
python: python3
|
|
5
|
+
python: python3.11
|
|
6
6
|
|
|
7
7
|
ci:
|
|
8
8
|
autofix_prs: false
|
|
@@ -45,18 +45,18 @@ repos:
|
|
|
45
45
|
]
|
|
46
46
|
|
|
47
47
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
48
|
-
rev: v0.15.
|
|
48
|
+
rev: v0.15.12
|
|
49
49
|
hooks:
|
|
50
50
|
- id: ruff
|
|
51
51
|
- id: ruff-format
|
|
52
52
|
|
|
53
53
|
- repo: https://github.com/gitleaks/gitleaks
|
|
54
|
-
rev: v8.30.
|
|
54
|
+
rev: v8.30.1
|
|
55
55
|
hooks:
|
|
56
56
|
- id: gitleaks
|
|
57
57
|
|
|
58
58
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
59
|
-
rev: v1.
|
|
59
|
+
rev: v1.20.2
|
|
60
60
|
hooks:
|
|
61
61
|
- id: mypy
|
|
62
62
|
exclude: ^(tests/|examples/|docs/)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# openshift-python-wrapper
|
|
2
|
+
|
|
3
|
+
Python wrapper for kubernetes-python-client providing simplified CRUD and resource-specific methods for Kubernetes/OpenShift resources (233+ wrappers).
|
|
4
|
+
|
|
5
|
+
## Commands
|
|
6
|
+
|
|
7
|
+
- **Package manager**: `uv` — NEVER use `python` or `pip` directly
|
|
8
|
+
- Build/sync: `uv sync`
|
|
9
|
+
- Test all: `uv run --group tests pytest`
|
|
10
|
+
- Test specific: `uv run --group tests pytest tests/test_daemonset.py`
|
|
11
|
+
- Lint: `prek run`
|
|
12
|
+
- Pre-commit setup: `prek install`
|
|
13
|
+
- Generate resource: `class-generator --kind Pod --add-tests`
|
|
14
|
+
- Full verify: `prek run && uv run --group tests pytest`
|
|
15
|
+
|
|
16
|
+
## Definition of Done
|
|
17
|
+
|
|
18
|
+
A task is complete when ALL pass:
|
|
19
|
+
1. `prek run` exits 0 (ruff, mypy, flake8, detect-secrets, gitleaks)
|
|
20
|
+
2. `uv run --group tests pytest` exits 0 — coverage ≥ 65%
|
|
21
|
+
3. Type hints on all new code (enforced by mypy)
|
|
22
|
+
4. Committed with message: `type(scope): description`
|
|
23
|
+
|
|
24
|
+
## When Blocked
|
|
25
|
+
|
|
26
|
+
- Tests fail after 3 attempts → stop, report failing test with full output
|
|
27
|
+
- Missing dependency → `uv add <package>`, never `pip install`
|
|
28
|
+
- Pre-commit fails → read the error, fix the specific violation
|
|
29
|
+
- 🚫 NEVER: skip tests, force push to main, delete files to fix errors
|
|
30
|
+
|
|
31
|
+
## Project
|
|
32
|
+
|
|
33
|
+
- Stack: Python 3.11-3.14 (requires-python >=3.11,<3.15), kubernetes-python-client, timeout-sampler, uv
|
|
34
|
+
- Structure: `ocp_resources/` (resource wrappers), `tests/` (pytest), `class_generator/` (code gen), `fake_kubernetes_client/` (mock client)
|
|
35
|
+
- Key deps: `kubernetes` (API client), `timeout-sampler` (polling), `openshift-python-utilities` (shared utils)
|
|
36
|
+
- Docs: `examples/`, inline docstrings (Google style)
|
|
37
|
+
|
|
38
|
+
## When Adding a Resource
|
|
39
|
+
|
|
40
|
+
- New resources MUST be generated via `class-generator --kind ResourceName --add-tests` — manual creation is not allowed
|
|
41
|
+
- Reference implementations: `ocp_resources/config_map.py` (namespaced), `ocp_resources/node.py` (cluster-scoped)
|
|
42
|
+
- File naming: `snake_case.py` — class naming: exact Kubernetes `kind` (PascalCase)
|
|
43
|
+
- Namespaced → inherit `NamespacedResource`, cluster-scoped → inherit `Resource`
|
|
44
|
+
- Must implement: `__init__()`, `to_dict()`, `api_group` (if not core v1)
|
|
45
|
+
- Reference: `class_generator/README.md`
|
|
46
|
+
|
|
47
|
+
## Generated Code Markers
|
|
48
|
+
|
|
49
|
+
Resource files from `class-generator` use markers to separate generated from manual code:
|
|
50
|
+
- **Start**: `# Generated using https://...class_generator/README.md` (line 1)
|
|
51
|
+
- **End**: `# End of generated code` (inside class)
|
|
52
|
+
|
|
53
|
+
Code between markers is auto-generated — do NOT modify manually. Use `class-generator --kind <Kind> --overwrite --backup` to regenerate. Custom code (helper methods, overrides) goes BELOW the end marker.
|
|
54
|
+
|
|
55
|
+
## When Writing Code
|
|
56
|
+
|
|
57
|
+
- No client-side validation in `to_dict()` — let the K8s/OCP API server return errors. Helper functions in resource classes CAN validate.
|
|
58
|
+
- Context managers for auto-cleanup: `with Pod(name="test", namespace="default") as pod:`
|
|
59
|
+
- Wait utilities: `wait_for_status()`, `wait_for_condition()` via timeout-sampler
|
|
60
|
+
- Sensitive data: add keys to `keys_to_hash` property for automatic log hashing
|
|
61
|
+
- Fake client for tests: `get_client(fake=True)` — no cluster required
|
|
62
|
+
|
|
63
|
+
## When Reviewing Code
|
|
64
|
+
|
|
65
|
+
- Verify generated code markers are intact — no manual edits between markers
|
|
66
|
+
- Check type hints on all new functions/parameters
|
|
67
|
+
- Verify tests exist for new helper methods (not needed for generated `__init__`/`to_dict`)
|
|
68
|
+
- Import path: `ocp_resources.resource_name` (snake_case with underscores)
|
|
69
|
+
|
|
70
|
+
## Boundaries
|
|
71
|
+
|
|
72
|
+
- ✅ Always: use `uv` for Python ops, run `prek install` before first commit, add typing
|
|
73
|
+
- ⚠️ Ask first: adding new dependencies, modifying base `Resource` class, changing CI
|
|
74
|
+
- 🚫 Never: use `python`/`pip` directly, edit generated code between markers, edit files in `docs/` (regenerate with docsfy instead)
|
|
75
|
+
|
|
76
|
+
## Environment
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
OPENSHIFT_PYTHON_WRAPPER_LOG_LEVEL=DEBUG # DEBUG, INFO, WARNING, ERROR, CRITICAL
|
|
80
|
+
OPENSHIFT_PYTHON_WRAPPER_HASH_LOG_DATA="false" # Disable log hashing
|
|
81
|
+
HTTPS_PROXY="http://proxy:8080" # Proxy support
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Additional References
|
|
85
|
+
|
|
86
|
+
- Contributing guide: `CONTRIBUTING.md`
|
|
87
|
+
- Class generator details: `class_generator/README.md`
|
|
88
|
+
- MCP server: `mcp_server/README.md`
|
|
89
|
+
- Release process: `CONTRIBUTING.md` + `.release-it.json`
|
|
90
|
+
- Fake client: `fake_kubernetes_client/` (CRUD, selectors, watch, status generation)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -12,7 +12,7 @@ To get an overview of the project, read the [README](README.md).
|
|
|
12
12
|
### Create a new issue
|
|
13
13
|
|
|
14
14
|
If you find a problem with the code, [search if an issue already exists](https://github.com/RedHatQE/openshift-python-wrapper/issues).
|
|
15
|
-
If you open a pull request to fix the problem, an issue will
|
|
15
|
+
If you open a pull request to fix the problem, an issue will be automatically created.
|
|
16
16
|
If a related issue doesn't exist, you can open a new issue using a relevant [issue form](https://github.com/RedHatQE/openshift-python-wrapper/issues/new/choose).
|
|
17
17
|
|
|
18
18
|
## Pull requests
|
|
@@ -37,13 +37,15 @@ prek install
|
|
|
37
37
|
|
|
38
38
|
## Adding a new module (resource)
|
|
39
39
|
|
|
40
|
-
##### Using generator script
|
|
40
|
+
##### Using generator script (REQUIRED)
|
|
41
|
+
|
|
42
|
+
New resources MUST be added via the class generator — manual creation is not allowed.
|
|
41
43
|
|
|
42
44
|
- [class_generator](class_generator/README.md)
|
|
43
45
|
|
|
44
|
-
##### Manual
|
|
46
|
+
##### Manual code (below `# End of generated code` only)
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
Custom helper methods can be added below the end marker. The generated class structure must follow these rules:
|
|
47
49
|
|
|
48
50
|
- A new file named as the resource under `ocp_resources`; If the resource name is composed of multiple words, separate them with an underscore.
|
|
49
51
|
- A class named as the resource kind.
|
|
@@ -56,4 +58,21 @@ A new resource must follow rules:
|
|
|
56
58
|
Define all the required arguments that are **required** to instantiate the new resource. Optional parameters may be added as well.
|
|
57
59
|
- Implement `to_dict` function.
|
|
58
60
|
|
|
59
|
-
Check [ConfigMap](ocp_resources/
|
|
61
|
+
Check [ConfigMap](ocp_resources/config_map.py) and [Node](ocp_resources/node.py) for reference.
|
|
62
|
+
|
|
63
|
+
### Generated code markers
|
|
64
|
+
|
|
65
|
+
Resource files created by `class-generator` use markers to separate generated from manual code:
|
|
66
|
+
|
|
67
|
+
- **Start marker** (line 1): `# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/class_generator/README.md`
|
|
68
|
+
- **End marker** (inside class): `# End of generated code`
|
|
69
|
+
|
|
70
|
+
Code between these markers is **auto-generated and must NOT be modified manually**.
|
|
71
|
+
To update generated code, use `class-generator --kind <Kind> --overwrite --backup`.
|
|
72
|
+
Custom code (helper methods, overrides) goes **below** the `# End of generated code` marker.
|
|
73
|
+
|
|
74
|
+
### No client-side validation on resource creation
|
|
75
|
+
|
|
76
|
+
When building resource payloads (`to_dict()`), do NOT validate or block at code level (e.g., mutual exclusivity of fields).
|
|
77
|
+
If a payload can be sent to the API, send it — let the Kubernetes/OpenShift API server return the error.
|
|
78
|
+
Helper functions in resource classes (e.g., `wait_for_rollout()`, `restart()`) CAN perform validation and guarding as needed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: openshift-python-wrapper
|
|
3
|
-
Version: 4.21.
|
|
3
|
+
Version: 4.21.2
|
|
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/
|
|
@@ -13,21 +13,24 @@ License-File: LICENSE
|
|
|
13
13
|
Keywords: Kubevirt,Openshift,Openshift Virtualization
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Requires-Python: <3.15,>=3.11
|
|
17
21
|
Requires-Dist: cloup>=3.0.5
|
|
18
22
|
Requires-Dist: colorlog>=6.8.2
|
|
19
23
|
Requires-Dist: deepdiff>=8.0.1
|
|
20
24
|
Requires-Dist: fastmcp>=2.10.4
|
|
21
25
|
Requires-Dist: jinja2>=3.1.4
|
|
22
26
|
Requires-Dist: jsonschema>=4.20.0
|
|
23
|
-
Requires-Dist: kubernetes
|
|
27
|
+
Requires-Dist: kubernetes!=36.0.0,>=31.0.0
|
|
24
28
|
Requires-Dist: packaging>=24.1
|
|
25
29
|
Requires-Dist: pyhelper-utils>=0.0.42
|
|
26
30
|
Requires-Dist: python-benedict>=0.33.2
|
|
27
31
|
Requires-Dist: python-simple-logger>=1.0.40
|
|
28
32
|
Requires-Dist: requests>=2.32.2
|
|
29
33
|
Requires-Dist: rich>=13.9.2
|
|
30
|
-
Requires-Dist: ruff>=0.6.9
|
|
31
34
|
Requires-Dist: timeout-sampler>=0.0.46
|
|
32
35
|
Requires-Dist: xmltodict>=0.13.0
|
|
33
36
|
Description-Content-Type: text/markdown
|
|
@@ -61,6 +64,8 @@ Resource manifests and logs can be easily collected.
|
|
|
61
64
|
|
|
62
65
|
## Installation
|
|
63
66
|
|
|
67
|
+
Requires Python 3.11-3.14.
|
|
68
|
+
|
|
64
69
|
From source:
|
|
65
70
|
|
|
66
71
|
```bash
|
|
@@ -489,7 +489,7 @@ def handle_test_generation(add_tests: bool) -> None:
|
|
|
489
489
|
# Run the generated test file
|
|
490
490
|
LOGGER.info("Running generated tests...")
|
|
491
491
|
test_file = "class_generator/tests/test_class_generator.py"
|
|
492
|
-
exit_code = os.system(f"uv run pytest {test_file}")
|
|
492
|
+
exit_code = os.system(f"uv run --group tests pytest {test_file}")
|
|
493
493
|
|
|
494
494
|
# os.system returns the exit status shifted left by 8 bits
|
|
495
495
|
if exit_code != 0:
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""File writing utilities for generated code."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from pyhelper_utils.shell import run_command
|
|
6
|
+
from simple_logger.logger import get_logger
|
|
7
|
+
|
|
8
|
+
LOGGER = get_logger(name=__name__)
|
|
9
|
+
|
|
10
|
+
# Project root directory (contains pyproject.toml and .pre-commit-config.yaml)
|
|
11
|
+
_PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def write_and_format_rendered(filepath: str, output: str) -> None:
|
|
15
|
+
"""
|
|
16
|
+
Write rendered content to file and format with prek, falling back to ruff.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
filepath: Path to write the file to
|
|
20
|
+
output: Content to write
|
|
21
|
+
"""
|
|
22
|
+
with open(filepath, "w", encoding="utf-8") as fd:
|
|
23
|
+
fd.write(output)
|
|
24
|
+
|
|
25
|
+
pre_commit_config = str(_PROJECT_ROOT / ".pre-commit-config.yaml")
|
|
26
|
+
pyproject_toml = str(_PROJECT_ROOT / "pyproject.toml")
|
|
27
|
+
|
|
28
|
+
# Try prek first (runs all pre-commit hooks including ruff)
|
|
29
|
+
prek_success = False
|
|
30
|
+
try:
|
|
31
|
+
rc, stdout, stderr = run_command(
|
|
32
|
+
command=["uvx", "prek", "-c", pre_commit_config, "run", "--files", filepath],
|
|
33
|
+
verify_stderr=False,
|
|
34
|
+
check=False,
|
|
35
|
+
log_errors=False,
|
|
36
|
+
)
|
|
37
|
+
if not rc:
|
|
38
|
+
if stderr:
|
|
39
|
+
LOGGER.warning(f"Prek hooks failed for {filepath}, falling back to ruff.")
|
|
40
|
+
LOGGER.debug(f"prek stderr: {stderr}")
|
|
41
|
+
else:
|
|
42
|
+
prek_success = True
|
|
43
|
+
|
|
44
|
+
if stdout:
|
|
45
|
+
LOGGER.info(f"{filepath} fixed by prek")
|
|
46
|
+
LOGGER.debug(f"prek stdout: {stdout}")
|
|
47
|
+
except Exception as e:
|
|
48
|
+
LOGGER.warning(f"Failed to run prek for {filepath}, falling back to ruff: {e}")
|
|
49
|
+
|
|
50
|
+
if not prek_success:
|
|
51
|
+
_run_ruff_fallback(filepath=filepath, pyproject_toml=pyproject_toml)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _run_ruff_fallback(filepath: str, pyproject_toml: str) -> None:
|
|
55
|
+
"""Run ruff check --fix and ruff format as fallback when prek fails."""
|
|
56
|
+
for ruff_cmd in (
|
|
57
|
+
["uvx", "ruff", "check", "--fix", "--config", pyproject_toml, filepath],
|
|
58
|
+
["uvx", "ruff", "format", "--config", pyproject_toml, filepath],
|
|
59
|
+
):
|
|
60
|
+
try:
|
|
61
|
+
_, stdout, _ = run_command(
|
|
62
|
+
command=ruff_cmd,
|
|
63
|
+
verify_stderr=False,
|
|
64
|
+
check=False,
|
|
65
|
+
log_errors=False,
|
|
66
|
+
)
|
|
67
|
+
if stdout:
|
|
68
|
+
LOGGER.info(f"{filepath} fixed by ruff")
|
|
69
|
+
LOGGER.debug(f"ruff stdout: {stdout}")
|
|
70
|
+
except Exception as e:
|
|
71
|
+
LOGGER.error(f"Ruff fallback failed for {filepath}: {e}")
|
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
{% endfor %}
|
|
15
15
|
|
|
16
16
|
from typing import Any
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
{% if all_required_args %}
|
|
18
19
|
from ocp_resources.exceptions import MissingRequiredArgumentError
|
|
20
|
+
{% endif %}
|
|
21
|
+
from ocp_resources.resource import {{ base_class }}
|
|
22
|
+
|
|
19
23
|
|
|
20
24
|
class {{ kind }}({{ base_class }}):
|
|
21
25
|
"""
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md#adding-tests
|
|
2
2
|
|
|
3
3
|
import filecmp
|
|
4
|
+
import traceback
|
|
4
5
|
from pathlib import Path
|
|
5
|
-
import pytest
|
|
6
|
-
from typing import List, Tuple, Optional
|
|
7
6
|
|
|
8
7
|
from class_generator.constants import TESTS_MANIFESTS_DIR
|
|
9
8
|
from class_generator.core.generator import class_generator
|
|
10
9
|
from class_generator.utils import execute_parallel_tasks
|
|
11
10
|
|
|
12
11
|
|
|
13
|
-
def _test_single_resource(kind: str, tmp_path: Path) ->
|
|
12
|
+
def _test_single_resource(kind: str, tmp_path: Path) -> tuple[str, str] | None:
|
|
14
13
|
"""
|
|
15
14
|
Test a single resource kind and return failure info if test fails.
|
|
16
15
|
|
|
@@ -45,9 +44,9 @@ def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]
|
|
|
45
44
|
if not filecmp.cmp(output_file, expected_file):
|
|
46
45
|
try:
|
|
47
46
|
# Read both files to show diff details
|
|
48
|
-
with open(output_file
|
|
47
|
+
with open(output_file) as f:
|
|
49
48
|
generated_content = f.read()
|
|
50
|
-
with open(expected_file
|
|
49
|
+
with open(expected_file) as f:
|
|
51
50
|
expected_content = f.read()
|
|
52
51
|
|
|
53
52
|
# Find first difference for debugging
|
|
@@ -60,7 +59,7 @@ def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]
|
|
|
60
59
|
diff_info += f"\nGenerated lines: {len(generated_lines)}, Expected lines: {len(expected_lines)}"
|
|
61
60
|
|
|
62
61
|
# Find first differing line
|
|
63
|
-
for i, (gen_line, exp_line) in enumerate(zip(generated_lines, expected_lines)):
|
|
62
|
+
for i, (gen_line, exp_line) in enumerate(zip(generated_lines, expected_lines, strict=True)):
|
|
64
63
|
if gen_line != exp_line:
|
|
65
64
|
diff_info += f"\nFirst difference at line {i + 1}:"
|
|
66
65
|
diff_info += f"\nGenerated: {repr(gen_line[:100])}..."
|
|
@@ -81,8 +80,6 @@ def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]
|
|
|
81
80
|
return None
|
|
82
81
|
|
|
83
82
|
except Exception as e:
|
|
84
|
-
import traceback
|
|
85
|
-
|
|
86
83
|
error_details = f"Exception during generation: {str(e)}\n"
|
|
87
84
|
error_details += f"Traceback:\n{traceback.format_exc()}"
|
|
88
85
|
return (kind, error_details)
|
|
@@ -97,17 +94,17 @@ def test_parse_explain(tmp_path: Path) -> None:
|
|
|
97
94
|
{% endfor %}
|
|
98
95
|
]
|
|
99
96
|
|
|
100
|
-
failures:
|
|
97
|
+
failures: list[tuple[str, str]] = []
|
|
101
98
|
|
|
102
99
|
# Process test results and collect failures
|
|
103
|
-
def process_test_result(kind: str, result:
|
|
100
|
+
def process_test_result(kind: str, result: tuple[str, str] | None) -> None:
|
|
104
101
|
if result is not None:
|
|
105
102
|
failures.append(result)
|
|
106
103
|
|
|
107
104
|
def handle_test_error(kind: str, exc: Exception) -> None:
|
|
108
105
|
failures.append((kind, f"Task execution failed: {str(exc)}"))
|
|
109
106
|
|
|
110
|
-
def create_test_task(kind: str) ->
|
|
107
|
+
def create_test_task(kind: str) -> tuple[str, str] | None:
|
|
111
108
|
return _test_single_resource(kind, tmp_path / f"test-{kind}")
|
|
112
109
|
|
|
113
110
|
# Run tests in parallel
|
|
@@ -136,12 +133,10 @@ def test_parse_explain(tmp_path: Path) -> None:
|
|
|
136
133
|
|
|
137
134
|
# Create a concise failure message for pytest
|
|
138
135
|
failed_kinds = [kind for kind, _ in failures]
|
|
139
|
-
failure_summary = f"{len(failures)} resource(s) failed: {',
|
|
140
|
-
if len(failed_kinds) > 5:
|
|
141
|
-
failure_summary += f" and {len(failed_kinds) - 5} more"
|
|
136
|
+
failure_summary = f"{len(failures)} resource(s) failed: {','.join(failed_kinds)}"
|
|
142
137
|
|
|
143
138
|
# Fail the test with summary - detailed output is already printed above
|
|
144
|
-
|
|
139
|
+
raise AssertionError(failure_summary)
|
|
145
140
|
|
|
146
141
|
# If we get here, all tests passed
|
|
147
142
|
print(f"\nAll {len(resource_kinds)} resource generation tests passed successfully!")
|
|
@@ -96,15 +96,15 @@ def test_parse_explain(tmp_path: Path) -> None:
|
|
|
96
96
|
"Deployment",
|
|
97
97
|
"ImageContentSourcePolicy",
|
|
98
98
|
"Machine",
|
|
99
|
+
"NMState",
|
|
99
100
|
"Pod",
|
|
100
101
|
"Secret",
|
|
101
|
-
"NMState",
|
|
102
102
|
"ServiceMeshMember",
|
|
103
|
-
"
|
|
103
|
+
"Ingress",
|
|
104
104
|
"OAuth",
|
|
105
105
|
"Pipeline",
|
|
106
|
-
"Ingress",
|
|
107
106
|
"RouteAdvertisements",
|
|
107
|
+
"ServingRuntime",
|
|
108
108
|
]
|
|
109
109
|
|
|
110
110
|
failures: list[tuple[str, str]] = []
|
|
@@ -146,9 +146,7 @@ def test_parse_explain(tmp_path: Path) -> None:
|
|
|
146
146
|
|
|
147
147
|
# Create a concise failure message for pytest
|
|
148
148
|
failed_kinds = [kind for kind, _ in failures]
|
|
149
|
-
failure_summary = f"{len(failures)} resource(s) failed: {',
|
|
150
|
-
if len(failed_kinds) > 5:
|
|
151
|
-
failure_summary += f" and {len(failed_kinds) - 5} more"
|
|
149
|
+
failure_summary = f"{len(failures)} resource(s) failed: {','.join(failed_kinds)}"
|
|
152
150
|
|
|
153
151
|
# Fail the test with summary - detailed output is already printed above
|
|
154
152
|
raise AssertionError(failure_summary)
|
|
@@ -170,7 +170,9 @@ class TestCLIFunctionality:
|
|
|
170
170
|
|
|
171
171
|
assert result.exit_code == 0
|
|
172
172
|
mock_test_gen.assert_called_once()
|
|
173
|
-
mock_os_system.assert_called_once_with(
|
|
173
|
+
mock_os_system.assert_called_once_with(
|
|
174
|
+
"uv run --group tests pytest class_generator/tests/test_class_generator.py"
|
|
175
|
+
)
|
|
174
176
|
|
|
175
177
|
def test_add_tests_requires_kind(self):
|
|
176
178
|
"""Test that --add-tests cannot be used alone."""
|
|
@@ -4,7 +4,7 @@ import copy
|
|
|
4
4
|
import time
|
|
5
5
|
import uuid
|
|
6
6
|
from collections.abc import Iterator
|
|
7
|
-
from datetime import
|
|
7
|
+
from datetime import UTC, datetime
|
|
8
8
|
from typing import TYPE_CHECKING, Any, Union
|
|
9
9
|
|
|
10
10
|
from fake_kubernetes_client.exceptions import ConflictError, MethodNotAllowedError, NotFoundError
|
|
@@ -66,7 +66,7 @@ class FakeResourceInstance:
|
|
|
66
66
|
|
|
67
67
|
def _generate_timestamp(self) -> str:
|
|
68
68
|
"""Generate current UTC timestamp in ISO format"""
|
|
69
|
-
return datetime.now(
|
|
69
|
+
return datetime.now(UTC).isoformat()
|
|
70
70
|
|
|
71
71
|
def create(
|
|
72
72
|
self, body: dict[str, Any] | None = None, namespace: str | None = None, **_kwargs: Any
|
|
@@ -208,7 +208,7 @@ class FakeResourceInstance:
|
|
|
208
208
|
"namespace": resource_namespace or "default",
|
|
209
209
|
"uid": str(uuid.uuid4()),
|
|
210
210
|
"resourceVersion": str(int(time.time() * 1000)),
|
|
211
|
-
"creationTimestamp": datetime.now(
|
|
211
|
+
"creationTimestamp": datetime.now(UTC).isoformat(),
|
|
212
212
|
"generation": 1,
|
|
213
213
|
},
|
|
214
214
|
"involvedObject": {
|
|
@@ -222,8 +222,8 @@ class FakeResourceInstance:
|
|
|
222
222
|
"reason": reason,
|
|
223
223
|
"message": f"{resource_kind} {resource_name} has been {action}",
|
|
224
224
|
"source": {"component": "fake-client", "host": "fake-cluster.example.com"},
|
|
225
|
-
"firstTimestamp": datetime.now(
|
|
226
|
-
"lastTimestamp": datetime.now(
|
|
225
|
+
"firstTimestamp": datetime.now(UTC).isoformat(),
|
|
226
|
+
"lastTimestamp": datetime.now(UTC).isoformat(),
|
|
227
227
|
"count": 1,
|
|
228
228
|
"type": "Normal",
|
|
229
229
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import json
|
|
4
4
|
import os
|
|
5
5
|
import random
|
|
6
|
-
from datetime import
|
|
6
|
+
from datetime import UTC, datetime
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
9
|
|
|
@@ -302,7 +302,7 @@ class StatusSchemaParser:
|
|
|
302
302
|
def _generate_string_value(self, field_name: str, is_ready: bool = True) -> str:
|
|
303
303
|
"""Generate a string value based on field name"""
|
|
304
304
|
if "time" in field_name.lower() or "timestamp" in field_name.lower():
|
|
305
|
-
return datetime.now(
|
|
305
|
+
return datetime.now(UTC).isoformat()
|
|
306
306
|
elif field_name == "message":
|
|
307
307
|
return "Resource is ready" if is_ready else "Resource is not ready"
|
|
308
308
|
elif field_name == "reason":
|
|
@@ -424,14 +424,14 @@ class StatusSchemaParser:
|
|
|
424
424
|
{
|
|
425
425
|
"type": "Ready",
|
|
426
426
|
"status": "True",
|
|
427
|
-
"lastTransitionTime": datetime.now(
|
|
427
|
+
"lastTransitionTime": datetime.now(UTC).isoformat(),
|
|
428
428
|
"reason": "ResourceReady",
|
|
429
429
|
"message": "Resource is ready",
|
|
430
430
|
},
|
|
431
431
|
{
|
|
432
432
|
"type": "Available",
|
|
433
433
|
"status": "True",
|
|
434
|
-
"lastTransitionTime": datetime.now(
|
|
434
|
+
"lastTransitionTime": datetime.now(UTC).isoformat(),
|
|
435
435
|
"reason": "ResourceAvailable",
|
|
436
436
|
"message": "Resource is available",
|
|
437
437
|
},
|
|
@@ -441,14 +441,14 @@ class StatusSchemaParser:
|
|
|
441
441
|
{
|
|
442
442
|
"type": "Ready",
|
|
443
443
|
"status": "False",
|
|
444
|
-
"lastTransitionTime": datetime.now(
|
|
444
|
+
"lastTransitionTime": datetime.now(UTC).isoformat(),
|
|
445
445
|
"reason": "ResourceNotReady",
|
|
446
446
|
"message": "Resource is not ready",
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
449
|
"type": "Available",
|
|
450
450
|
"status": "False",
|
|
451
|
-
"lastTransitionTime": datetime.now(
|
|
451
|
+
"lastTransitionTime": datetime.now(UTC).isoformat(),
|
|
452
452
|
"reason": "ResourceUnavailable",
|
|
453
453
|
"message": "Resource is unavailable",
|
|
454
454
|
},
|