openshift-python-wrapper 10.0.68__tar.gz → 10.0.69__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-10.0.68 → openshift_python_wrapper-10.0.69}/PKG-INFO +2 -2
- openshift_python_wrapper-10.0.69/ocp_resources/csidriver.py +212 -0
- openshift_python_wrapper-10.0.69/ocp_resources/service.py +420 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/pyproject.toml +2 -2
- openshift_python_wrapper-10.0.68/ocp_resources/csidriver.py +0 -9
- openshift_python_wrapper-10.0.68/ocp_resources/service.py +0 -16
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/LICENSE +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/README.md +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/__init__.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/aaq.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/api_server.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/api_service.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/application_aware_resource_quota.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/backup.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/benchmark.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/catalog_source.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cdi.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cdi_config.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/chaos_engine.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/chaos_result.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_claim.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_deployment.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_operator.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_pool.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_role.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_role_binding.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_service_version.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cluster_version.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/configmap.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/console_cli_download.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/console_plugin.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/console_quick_start.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/constants.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/controller_revision.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/cron_job.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/csi_storage_capacity.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/custom_resource_definition.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/daemonset.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/data_import_cron.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/data_source.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/datavolume.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/deployment.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/destination_rule.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/dns.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/endpoint_slice.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/endpoints.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/event.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/fence_agent_remediation_templates.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/forklift_controller.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/gateway.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/group.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/hook.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/host.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/hostpath_provisioner.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/hyperconverged.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/image.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/image_content_source_policy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/image_digest_mirror_set.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/image_stream.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/imagestreamtag.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/inference_service.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/infrastructure.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/ingress_controller.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/installplan.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/ip_address_pool.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/job.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/kube_descheduler.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/kubevirt.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/kubevirt_common_templates_bundle.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/kubevirt_metrics_aggregation.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/kubevirt_node_labeller_bundle.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/kubevirt_template_validaotr.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/l2_advertisement.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/lease.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/limit_range.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/machine.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/machine_config.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/machine_config_pool.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/machine_health_check.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/machine_set.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/managed_cluster.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/metallb.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/migration.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/migration_policy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/mtq.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/mtv.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/multi_cluster_hub.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/multi_cluster_observability.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/multi_network_policy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/mutating_webhook_config.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/namespace.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/network.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/network_addons_config.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/network_attachment_definition.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/network_map.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/network_policy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/nmstate.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/node.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/node_health_check.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/node_maintenance.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/node_network_configuration_enactment.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/node_network_configuration_policy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/node_network_state.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/oauth.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/ocs_initialization.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/operator.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/operator_condition.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/operator_group.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/operator_hub.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/operator_source.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/package_manifest.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/peer_authentication.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/performance_profile.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/persistent_volume.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/persistent_volume_claim.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/pipeline.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/pipelineruns.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/plan.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/pod.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/pod_disruption_budget.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/pod_metrics.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/priority_class.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/project.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/prometheus.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/prometheus_rule.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/provider.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/proxy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/reclaim_space_cron_job.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/reclaim_space_job.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/replicaset.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/resource.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/resource_quota.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/restore.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/rhmi.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/role.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/role_binding.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/route.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/scheduler.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/sealed_secret.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/secret.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/security_context_constraints.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/self_node_remediation_templates.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/service_account.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/service_mesh_control_plane.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/service_mesh_member_roll.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/service_monitor.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/serving_runtime.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/sriov_network.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/sriov_network_node_policy.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/sriov_network_node_state.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/ssp.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/storage_class.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/storage_map.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/storage_profile.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/subscription.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/task_run.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/tekton_tasks.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/template.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/trustyai_service.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/upload_token_request.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/utils.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/validating_webhook_config.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_Instance_replica_set.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_clone.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_cluster_instance_types.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_cluster_preferences.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_export.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_import.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_instance.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_instance_migration.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_instance_preset.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_instance_types.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_preferences.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_restore.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_machine_snapshot.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/virtual_service.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/vm_import_config.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/volume_snapshot.py +0 -0
- {openshift_python_wrapper-10.0.68 → openshift_python_wrapper-10.0.69}/ocp_resources/volume_snapshot_class.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: openshift-python-wrapper
|
|
3
|
-
Version: 10.0.
|
|
3
|
+
Version: 10.0.69
|
|
4
4
|
Summary: Wrapper around https://github.com/kubernetes-client/python
|
|
5
5
|
Home-page: https://github.com/RedHatQE/openshift-python-wrapper
|
|
6
6
|
License: Apache-2.0
|
|
@@ -21,7 +21,7 @@ Requires-Dist: colorlog (>=6.7.0,<7.0.0)
|
|
|
21
21
|
Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
|
|
22
22
|
Requires-Dist: kubernetes (>=30.0.0,<31.0.0)
|
|
23
23
|
Requires-Dist: packaging (>=23.1,<24.0)
|
|
24
|
-
Requires-Dist: pyhelper-utils (>=0.0.
|
|
24
|
+
Requires-Dist: pyhelper-utils (>=0.0.30,<0.0.31)
|
|
25
25
|
Requires-Dist: python-benedict (>=0.33.0,<0.34.0)
|
|
26
26
|
Requires-Dist: python-simple-logger (>=1.0.6)
|
|
27
27
|
Requires-Dist: rich (>=13.7.1,<14.0.0)
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, Optional
|
|
4
|
+
from ocp_resources.resource import Resource
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class CSIDriver(Resource):
|
|
8
|
+
"""
|
|
9
|
+
CSIDriver captures information about a Container Storage Interface (CSI)
|
|
10
|
+
volume driver deployed on the cluster. Kubernetes attach detach controller
|
|
11
|
+
uses this object to determine whether attach is required. Kubelet uses this
|
|
12
|
+
object to determine whether pod information needs to be passed on mount.
|
|
13
|
+
CSIDriver objects are non-namespaced.
|
|
14
|
+
|
|
15
|
+
API Link: https://kubernetes-csi.github.io/docs/csi-driver-object.html
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
api_group: str = Resource.ApiGroup.STORAGE_K8S_IO
|
|
19
|
+
|
|
20
|
+
def __init__(
|
|
21
|
+
self,
|
|
22
|
+
attach_required: Optional[bool] = None,
|
|
23
|
+
fs_group_policy: Optional[str] = "",
|
|
24
|
+
pod_info_on_mount: Optional[bool] = None,
|
|
25
|
+
requires_republish: Optional[bool] = None,
|
|
26
|
+
se_linux_mount: Optional[bool] = None,
|
|
27
|
+
storage_capacity: Optional[bool] = None,
|
|
28
|
+
token_requests: Optional[Dict[str, Any]] = None,
|
|
29
|
+
volume_lifecycle_modes: Optional[Dict[str, Any]] = None,
|
|
30
|
+
**kwargs: Any,
|
|
31
|
+
) -> None:
|
|
32
|
+
"""
|
|
33
|
+
Args:
|
|
34
|
+
attach_required(bool): attachRequired indicates this CSI volume driver requires an attach operation
|
|
35
|
+
(because it implements the CSI ControllerPublishVolume() method), and that
|
|
36
|
+
the Kubernetes attach detach controller should call the attach volume
|
|
37
|
+
interface which checks the volumeattachment status and waits until the
|
|
38
|
+
volume is attached before proceeding to mounting. The CSI external-attacher
|
|
39
|
+
coordinates with CSI volume driver and updates the volumeattachment status
|
|
40
|
+
when the attach operation is complete. If the CSIDriverRegistry feature gate
|
|
41
|
+
is enabled and the value is specified to false, the attach operation will be
|
|
42
|
+
skipped. Otherwise the attach operation will be called.
|
|
43
|
+
|
|
44
|
+
This field is immutable.
|
|
45
|
+
|
|
46
|
+
fs_group_policy(str): fsGroupPolicy defines if the underlying volume supports changing ownership
|
|
47
|
+
and permission of the volume before being mounted. Refer to the specific
|
|
48
|
+
FSGroupPolicy values for additional details.
|
|
49
|
+
|
|
50
|
+
This field is immutable.
|
|
51
|
+
|
|
52
|
+
Defaults to ReadWriteOnceWithFSType, which will examine each volume to
|
|
53
|
+
determine if Kubernetes should modify ownership and permissions of the
|
|
54
|
+
volume. With the default policy the defined fsGroup will only be applied if
|
|
55
|
+
a fstype is defined and the volume's access mode contains ReadWriteOnce.
|
|
56
|
+
|
|
57
|
+
pod_info_on_mount(bool): podInfoOnMount indicates this CSI volume driver requires additional pod
|
|
58
|
+
information (like podName, podUID, etc.) during mount operations, if set to
|
|
59
|
+
true. If set to false, pod information will not be passed on mount. Default
|
|
60
|
+
is false.
|
|
61
|
+
|
|
62
|
+
The CSI driver specifies podInfoOnMount as part of driver deployment. If
|
|
63
|
+
true, Kubelet will pass pod information as VolumeContext in the CSI
|
|
64
|
+
NodePublishVolume() calls. The CSI driver is responsible for parsing and
|
|
65
|
+
validating the information passed in as VolumeContext.
|
|
66
|
+
|
|
67
|
+
The following VolumeConext will be passed if podInfoOnMount is set to true.
|
|
68
|
+
This list might grow, but the prefix will be used.
|
|
69
|
+
"csi.storage.k8s.io/pod.name": pod.Name "csi.storage.k8s.io/pod.namespace":
|
|
70
|
+
pod.Namespace "csi.storage.k8s.io/pod.uid": string(pod.UID)
|
|
71
|
+
"csi.storage.k8s.io/ephemeral": "true" if the volume is an ephemeral inline
|
|
72
|
+
volume
|
|
73
|
+
defined by a CSIVolumeSource, otherwise
|
|
74
|
+
"false"
|
|
75
|
+
|
|
76
|
+
"csi.storage.k8s.io/ephemeral" is a new feature in Kubernetes 1.16. It is
|
|
77
|
+
only required for drivers which support both the "Persistent" and
|
|
78
|
+
"Ephemeral" VolumeLifecycleMode. Other drivers can leave pod info disabled
|
|
79
|
+
and/or ignore this field. As Kubernetes 1.15 doesn't support this field,
|
|
80
|
+
drivers can only support one mode when deployed on such a cluster and the
|
|
81
|
+
deployment determines which mode that is, for example via a command line
|
|
82
|
+
parameter of the driver.
|
|
83
|
+
|
|
84
|
+
This field is immutable.
|
|
85
|
+
|
|
86
|
+
requires_republish(bool): requiresRepublish indicates the CSI driver wants `NodePublishVolume` being
|
|
87
|
+
periodically called to reflect any possible change in the mounted volume.
|
|
88
|
+
This field defaults to false.
|
|
89
|
+
|
|
90
|
+
Note: After a successful initial NodePublishVolume call, subsequent calls to
|
|
91
|
+
NodePublishVolume should only update the contents of the volume. New mount
|
|
92
|
+
points will not be seen by a running container.
|
|
93
|
+
|
|
94
|
+
se_linux_mount(bool): seLinuxMount specifies if the CSI driver supports "-o context" mount option.
|
|
95
|
+
|
|
96
|
+
When "true", the CSI driver must ensure that all volumes provided by this
|
|
97
|
+
CSI driver can be mounted separately with different `-o context` options.
|
|
98
|
+
This is typical for storage backends that provide volumes as filesystems on
|
|
99
|
+
block devices or as independent shared volumes. Kubernetes will call
|
|
100
|
+
NodeStage / NodePublish with "-o context=xyz" mount option when mounting a
|
|
101
|
+
ReadWriteOncePod volume used in Pod that has explicitly set SELinux context.
|
|
102
|
+
In the future, it may be expanded to other volume AccessModes. In any case,
|
|
103
|
+
Kubernetes will ensure that the volume is mounted only with a single SELinux
|
|
104
|
+
context.
|
|
105
|
+
|
|
106
|
+
When "false", Kubernetes won't pass any special SELinux mount options to the
|
|
107
|
+
driver. This is typical for volumes that represent subdirectories of a
|
|
108
|
+
bigger shared filesystem.
|
|
109
|
+
|
|
110
|
+
Default is "false".
|
|
111
|
+
|
|
112
|
+
storage_capacity(bool): storageCapacity indicates that the CSI volume driver wants pod scheduling to
|
|
113
|
+
consider the storage capacity that the driver deployment will report by
|
|
114
|
+
creating CSIStorageCapacity objects with capacity information, if set to
|
|
115
|
+
true.
|
|
116
|
+
|
|
117
|
+
The check can be enabled immediately when deploying a driver. In that case,
|
|
118
|
+
provisioning new volumes with late binding will pause until the driver
|
|
119
|
+
deployment has published some suitable CSIStorageCapacity object.
|
|
120
|
+
|
|
121
|
+
Alternatively, the driver can be deployed with the field unset or false and
|
|
122
|
+
it can be flipped later when storage capacity information has been
|
|
123
|
+
published.
|
|
124
|
+
|
|
125
|
+
This field was immutable in Kubernetes <= 1.22 and now is mutable.
|
|
126
|
+
|
|
127
|
+
token_requests(Dict[Any, Any]): tokenRequests indicates the CSI driver needs pods' service account tokens it
|
|
128
|
+
is mounting volume for to do necessary authentication. Kubelet will pass the
|
|
129
|
+
tokens in VolumeContext in the CSI NodePublishVolume calls. The CSI driver
|
|
130
|
+
should parse and validate the following VolumeContext:
|
|
131
|
+
"csi.storage.k8s.io/serviceAccount.tokens": {
|
|
132
|
+
"<audience>": {
|
|
133
|
+
"token": <token>,
|
|
134
|
+
"expirationTimestamp": <expiration timestamp in RFC3339>,
|
|
135
|
+
},
|
|
136
|
+
...
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
Note: Audience in each TokenRequest should be different and at most one
|
|
140
|
+
token is empty string. To receive a new token after expiry,
|
|
141
|
+
RequiresRepublish can be used to trigger NodePublishVolume periodically.
|
|
142
|
+
TokenRequest contains parameters of a service account token.
|
|
143
|
+
|
|
144
|
+
FIELDS:
|
|
145
|
+
audience <string> -required-
|
|
146
|
+
audience is the intended audience of the token in "TokenRequestSpec". It
|
|
147
|
+
will default to the audiences of kube apiserver.
|
|
148
|
+
|
|
149
|
+
expirationSeconds <integer>
|
|
150
|
+
expirationSeconds is the duration of validity of the token in
|
|
151
|
+
"TokenRequestSpec". It has the same default value of "ExpirationSeconds" in
|
|
152
|
+
"TokenRequestSpec".
|
|
153
|
+
|
|
154
|
+
volume_lifecycle_modes(Dict[Any, Any]): volumeLifecycleModes defines what kind of volumes this CSI volume driver
|
|
155
|
+
supports. The default if the list is empty is "Persistent", which is the
|
|
156
|
+
usage defined by the CSI specification and implemented in Kubernetes via the
|
|
157
|
+
usual PV/PVC mechanism.
|
|
158
|
+
|
|
159
|
+
The other mode is "Ephemeral". In this mode, volumes are defined inline
|
|
160
|
+
inside the pod spec with CSIVolumeSource and their lifecycle is tied to the
|
|
161
|
+
lifecycle of that pod. A driver has to be aware of this because it is only
|
|
162
|
+
going to get a NodePublishVolume call for such a volume.
|
|
163
|
+
|
|
164
|
+
For more information about implementing this mode, see
|
|
165
|
+
https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A driver
|
|
166
|
+
can support one or more of these modes and more modes may be added in the
|
|
167
|
+
future.
|
|
168
|
+
|
|
169
|
+
This field is beta. This field is immutable.
|
|
170
|
+
|
|
171
|
+
"""
|
|
172
|
+
super().__init__(**kwargs)
|
|
173
|
+
|
|
174
|
+
self.attach_required = attach_required
|
|
175
|
+
self.fs_group_policy = fs_group_policy
|
|
176
|
+
self.pod_info_on_mount = pod_info_on_mount
|
|
177
|
+
self.requires_republish = requires_republish
|
|
178
|
+
self.se_linux_mount = se_linux_mount
|
|
179
|
+
self.storage_capacity = storage_capacity
|
|
180
|
+
self.token_requests = token_requests
|
|
181
|
+
self.volume_lifecycle_modes = volume_lifecycle_modes
|
|
182
|
+
|
|
183
|
+
def to_dict(self) -> None:
|
|
184
|
+
super().to_dict()
|
|
185
|
+
|
|
186
|
+
if not self.yaml_file:
|
|
187
|
+
self.res["spec"] = {}
|
|
188
|
+
_spec = self.res["spec"]
|
|
189
|
+
|
|
190
|
+
if self.attach_required is not None:
|
|
191
|
+
_spec["attachRequired"] = self.attach_required
|
|
192
|
+
|
|
193
|
+
if self.fs_group_policy:
|
|
194
|
+
_spec["fsGroupPolicy"] = self.fs_group_policy
|
|
195
|
+
|
|
196
|
+
if self.pod_info_on_mount is not None:
|
|
197
|
+
_spec["podInfoOnMount"] = self.pod_info_on_mount
|
|
198
|
+
|
|
199
|
+
if self.requires_republish is not None:
|
|
200
|
+
_spec["requiresRepublish"] = self.requires_republish
|
|
201
|
+
|
|
202
|
+
if self.se_linux_mount is not None:
|
|
203
|
+
_spec["seLinuxMount"] = self.se_linux_mount
|
|
204
|
+
|
|
205
|
+
if self.storage_capacity is not None:
|
|
206
|
+
_spec["storageCapacity"] = self.storage_capacity
|
|
207
|
+
|
|
208
|
+
if self.token_requests:
|
|
209
|
+
_spec["tokenRequests"] = self.token_requests
|
|
210
|
+
|
|
211
|
+
if self.volume_lifecycle_modes:
|
|
212
|
+
_spec["volumeLifecycleModes"] = self.volume_lifecycle_modes
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, Optional
|
|
4
|
+
from ocp_resources.resource import NamespacedResource
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Service(NamespacedResource):
|
|
8
|
+
"""
|
|
9
|
+
Service is a named abstraction of software service (for example, mysql)
|
|
10
|
+
consisting of local port (for example 3306) that the proxy listens on, and
|
|
11
|
+
the selector that determines which pods will answer requests sent through
|
|
12
|
+
the proxy.
|
|
13
|
+
|
|
14
|
+
API Link: https://kubernetes.io/docs/concepts/services-networking/service/
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
class Type:
|
|
18
|
+
CLUSTER_IP = "ClusterIP"
|
|
19
|
+
NODE_PORT = "NodePort"
|
|
20
|
+
LOAD_BALANCER = "LoadBalancer"
|
|
21
|
+
|
|
22
|
+
api_version: str = NamespacedResource.ApiVersion.V1
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
allocate_load_balancer_node_ports: Optional[bool] = None,
|
|
27
|
+
cluster_ip: Optional[str] = "",
|
|
28
|
+
cluster_ips: Optional[Dict[str, Any]] = None,
|
|
29
|
+
external_ips: Optional[Dict[str, Any]] = None,
|
|
30
|
+
external_name: Optional[str] = "",
|
|
31
|
+
external_traffic_policy: Optional[str] = "",
|
|
32
|
+
health_check_node_port: Optional[int] = None,
|
|
33
|
+
internal_traffic_policy: Optional[str] = "",
|
|
34
|
+
ip_families: Optional[Dict[str, Any]] = None,
|
|
35
|
+
ip_family_policy: Optional[str] = "",
|
|
36
|
+
load_balancer_class: Optional[str] = "",
|
|
37
|
+
load_balancer_ip: Optional[str] = "",
|
|
38
|
+
load_balancer_source_ranges: Optional[Dict[str, Any]] = None,
|
|
39
|
+
ports: Optional[Dict[str, Any]] = None,
|
|
40
|
+
publish_not_ready_addresses: Optional[bool] = None,
|
|
41
|
+
selector: Optional[Dict[str, Any]] = None,
|
|
42
|
+
session_affinity: Optional[str] = "",
|
|
43
|
+
session_affinity_config: Optional[Dict[str, Any]] = None,
|
|
44
|
+
type: Optional[str] = "",
|
|
45
|
+
**kwargs: Any,
|
|
46
|
+
) -> None:
|
|
47
|
+
"""
|
|
48
|
+
Args:
|
|
49
|
+
allocate_load_balancer_node_ports(bool): allocateLoadBalancerNodePorts defines if NodePorts will be automatically
|
|
50
|
+
allocated for services with type LoadBalancer. Default is "true". It may be
|
|
51
|
+
set to "false" if the cluster load-balancer does not rely on NodePorts. If
|
|
52
|
+
the caller requests specific NodePorts (by specifying a value), those
|
|
53
|
+
requests will be respected, regardless of this field. This field may only be
|
|
54
|
+
set for services with type LoadBalancer and will be cleared if the type is
|
|
55
|
+
changed to any other type.
|
|
56
|
+
|
|
57
|
+
cluster_ip(str): clusterIP is the IP address of the service and is usually assigned randomly.
|
|
58
|
+
If an address is specified manually, is in-range (as per system
|
|
59
|
+
configuration), and is not in use, it will be allocated to the service;
|
|
60
|
+
otherwise creation of the service will fail. This field may not be changed
|
|
61
|
+
through updates unless the type field is also being changed to ExternalName
|
|
62
|
+
(which requires this field to be blank) or the type field is being changed
|
|
63
|
+
from ExternalName (in which case this field may optionally be specified, as
|
|
64
|
+
describe above). Valid values are "None", empty string (""), or a valid IP
|
|
65
|
+
address. Setting this to "None" makes a "headless service" (no virtual IP),
|
|
66
|
+
which is useful when direct endpoint connections are preferred and proxying
|
|
67
|
+
is not required. Only applies to types ClusterIP, NodePort, and
|
|
68
|
+
LoadBalancer. If this field is specified when creating a Service of type
|
|
69
|
+
ExternalName, creation will fail. This field will be wiped when updating a
|
|
70
|
+
Service to type ExternalName. More info:
|
|
71
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
|
|
72
|
+
|
|
73
|
+
cluster_ips(Dict[Any, Any]): ClusterIPs is a list of IP addresses assigned to this service, and are
|
|
74
|
+
usually assigned randomly. If an address is specified manually, is in-range
|
|
75
|
+
(as per system configuration), and is not in use, it will be allocated to
|
|
76
|
+
the service; otherwise creation of the service will fail. This field may not
|
|
77
|
+
be changed through updates unless the type field is also being changed to
|
|
78
|
+
ExternalName (which requires this field to be empty) or the type field is
|
|
79
|
+
being changed from ExternalName (in which case this field may optionally be
|
|
80
|
+
specified, as describe above). Valid values are "None", empty string (""),
|
|
81
|
+
or a valid IP address. Setting this to "None" makes a "headless service"
|
|
82
|
+
(no virtual IP), which is useful when direct endpoint connections are
|
|
83
|
+
preferred and proxying is not required. Only applies to types ClusterIP,
|
|
84
|
+
NodePort, and LoadBalancer. If this field is specified when creating a
|
|
85
|
+
Service of type ExternalName, creation will fail. This field will be wiped
|
|
86
|
+
when updating a Service to type ExternalName. If this field is not
|
|
87
|
+
specified, it will be initialized from the clusterIP field. If this field
|
|
88
|
+
is specified, clients must ensure that clusterIPs[0] and clusterIP have the
|
|
89
|
+
same value.
|
|
90
|
+
|
|
91
|
+
This field may hold a maximum of two entries (dual-stack IPs, in either
|
|
92
|
+
order). These IPs must correspond to the values of the ipFamilies field.
|
|
93
|
+
Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field.
|
|
94
|
+
More info:
|
|
95
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
|
|
96
|
+
|
|
97
|
+
external_ips(Dict[Any, Any]): externalIPs is a list of IP addresses for which nodes in the cluster will
|
|
98
|
+
also accept traffic for this service. These IPs are not managed by
|
|
99
|
+
Kubernetes. The user is responsible for ensuring that traffic arrives at a
|
|
100
|
+
node with this IP. A common example is external load-balancers that are not
|
|
101
|
+
part of the Kubernetes system.
|
|
102
|
+
|
|
103
|
+
external_name(str): externalName is the external reference that discovery mechanisms will return
|
|
104
|
+
as an alias for this service (e.g. a DNS CNAME record). No proxying will be
|
|
105
|
+
involved. Must be a lowercase RFC-1123 hostname
|
|
106
|
+
(https://tools.ietf.org/html/rfc1123) and requires `type` to be
|
|
107
|
+
"ExternalName".
|
|
108
|
+
|
|
109
|
+
external_traffic_policy(str): externalTrafficPolicy describes how nodes distribute service traffic they
|
|
110
|
+
receive on one of the Service's "externally-facing" addresses (NodePorts,
|
|
111
|
+
ExternalIPs, and LoadBalancer IPs). If set to "Local", the proxy will
|
|
112
|
+
configure the service in a way that assumes that external load balancers
|
|
113
|
+
will take care of balancing the service traffic between nodes, and so each
|
|
114
|
+
node will deliver traffic only to the node-local endpoints of the service,
|
|
115
|
+
without masquerading the client source IP. (Traffic mistakenly sent to a
|
|
116
|
+
node with no endpoints will be dropped.) The default value, "Cluster", uses
|
|
117
|
+
the standard behavior of routing to all endpoints evenly (possibly modified
|
|
118
|
+
by topology and other features). Note that traffic sent to an External IP or
|
|
119
|
+
LoadBalancer IP from within the cluster will always get "Cluster" semantics,
|
|
120
|
+
but clients sending to a NodePort from within the cluster may need to take
|
|
121
|
+
traffic policy into account when picking a node.
|
|
122
|
+
|
|
123
|
+
Possible enum values:
|
|
124
|
+
- `"Cluster"`
|
|
125
|
+
- `"Cluster"` routes traffic to all endpoints.
|
|
126
|
+
- `"Local"`
|
|
127
|
+
- `"Local"` preserves the source IP of the traffic by routing only to
|
|
128
|
+
endpoints on the same node as the traffic was received on (dropping the
|
|
129
|
+
traffic if there are no local endpoints).
|
|
130
|
+
|
|
131
|
+
health_check_node_port(int): healthCheckNodePort specifies the healthcheck nodePort for the service. This
|
|
132
|
+
only applies when type is set to LoadBalancer and externalTrafficPolicy is
|
|
133
|
+
set to Local. If a value is specified, is in-range, and is not in use, it
|
|
134
|
+
will be used. If not specified, a value will be automatically allocated.
|
|
135
|
+
External systems (e.g. load-balancers) can use this port to determine if a
|
|
136
|
+
given node holds endpoints for this service or not. If this field is
|
|
137
|
+
specified when creating a Service which does not need it, creation will
|
|
138
|
+
fail. This field will be wiped when updating a Service to no longer need it
|
|
139
|
+
(e.g. changing type). This field cannot be updated once set.
|
|
140
|
+
|
|
141
|
+
internal_traffic_policy(str): InternalTrafficPolicy describes how nodes distribute service traffic they
|
|
142
|
+
receive on the ClusterIP. If set to "Local", the proxy will assume that pods
|
|
143
|
+
only want to talk to endpoints of the service on the same node as the pod,
|
|
144
|
+
dropping the traffic if there are no local endpoints. The default value,
|
|
145
|
+
"Cluster", uses the standard behavior of routing to all endpoints evenly
|
|
146
|
+
(possibly modified by topology and other features).
|
|
147
|
+
|
|
148
|
+
Possible enum values:
|
|
149
|
+
- `"Cluster"` routes traffic to all endpoints.
|
|
150
|
+
- `"Local"` routes traffic only to endpoints on the same node as the client
|
|
151
|
+
pod (dropping the traffic if there are no local endpoints).
|
|
152
|
+
|
|
153
|
+
ip_families(Dict[Any, Any]): IPFamilies is a list of IP families (e.g. IPv4, IPv6) assigned to this
|
|
154
|
+
service. This field is usually assigned automatically based on cluster
|
|
155
|
+
configuration and the ipFamilyPolicy field. If this field is specified
|
|
156
|
+
manually, the requested family is available in the cluster, and
|
|
157
|
+
ipFamilyPolicy allows it, it will be used; otherwise creation of the service
|
|
158
|
+
will fail. This field is conditionally mutable: it allows for adding or
|
|
159
|
+
removing a secondary IP family, but it does not allow changing the primary
|
|
160
|
+
IP family of the Service. Valid values are "IPv4" and "IPv6". This field
|
|
161
|
+
only applies to Services of types ClusterIP, NodePort, and LoadBalancer, and
|
|
162
|
+
does apply to "headless" services. This field will be wiped when updating a
|
|
163
|
+
Service to type ExternalName.
|
|
164
|
+
|
|
165
|
+
This field may hold a maximum of two entries (dual-stack families, in either
|
|
166
|
+
order). These families must correspond to the values of the clusterIPs
|
|
167
|
+
field, if specified. Both clusterIPs and ipFamilies are governed by the
|
|
168
|
+
ipFamilyPolicy field.
|
|
169
|
+
|
|
170
|
+
ip_family_policy(str): IPFamilyPolicy represents the dual-stack-ness requested or required by this
|
|
171
|
+
Service. If there is no value provided, then this field will be set to
|
|
172
|
+
SingleStack. Services can be "SingleStack" (a single IP family),
|
|
173
|
+
"PreferDualStack" (two IP families on dual-stack configured clusters or a
|
|
174
|
+
single IP family on single-stack clusters), or "RequireDualStack" (two IP
|
|
175
|
+
families on dual-stack configured clusters, otherwise fail). The ipFamilies
|
|
176
|
+
and clusterIPs fields depend on the value of this field. This field will be
|
|
177
|
+
wiped when updating a service to type ExternalName.
|
|
178
|
+
|
|
179
|
+
Possible enum values:
|
|
180
|
+
- `"PreferDualStack"` indicates that this service prefers dual-stack when
|
|
181
|
+
the cluster is configured for dual-stack. If the cluster is not configured
|
|
182
|
+
for dual-stack the service will be assigned a single IPFamily. If the
|
|
183
|
+
IPFamily is not set in service.spec.ipFamilies then the service will be
|
|
184
|
+
assigned the default IPFamily configured on the cluster
|
|
185
|
+
- `"RequireDualStack"` indicates that this service requires dual-stack.
|
|
186
|
+
Using IPFamilyPolicyRequireDualStack on a single stack cluster will result
|
|
187
|
+
in validation errors. The IPFamilies (and their order) assigned to this
|
|
188
|
+
service is based on service.spec.ipFamilies. If service.spec.ipFamilies was
|
|
189
|
+
not provided then it will be assigned according to how they are configured
|
|
190
|
+
on the cluster. If service.spec.ipFamilies has only one entry then the
|
|
191
|
+
alternative IPFamily will be added by apiserver
|
|
192
|
+
- `"SingleStack"` indicates that this service is required to have a single
|
|
193
|
+
IPFamily. The IPFamily assigned is based on the default IPFamily used by the
|
|
194
|
+
cluster or as identified by service.spec.ipFamilies field
|
|
195
|
+
|
|
196
|
+
load_balancer_class(str): loadBalancerClass is the class of the load balancer implementation this
|
|
197
|
+
Service belongs to. If specified, the value of this field must be a
|
|
198
|
+
label-style identifier, with an optional prefix, e.g. "internal-vip" or
|
|
199
|
+
"example.com/internal-vip". Unprefixed names are reserved for end-users.
|
|
200
|
+
This field can only be set when the Service type is 'LoadBalancer'. If not
|
|
201
|
+
set, the default load balancer implementation is used, today this is
|
|
202
|
+
typically done through the cloud provider integration, but should apply for
|
|
203
|
+
any default implementation. If set, it is assumed that a load balancer
|
|
204
|
+
implementation is watching for Services with a matching class. Any default
|
|
205
|
+
load balancer implementation (e.g. cloud providers) should ignore Services
|
|
206
|
+
that set this field. This field can only be set when creating or updating a
|
|
207
|
+
Service to type 'LoadBalancer'. Once set, it can not be changed. This field
|
|
208
|
+
will be wiped when a service is updated to a non 'LoadBalancer' type.
|
|
209
|
+
|
|
210
|
+
load_balancer_ip(str): Only applies to Service Type: LoadBalancer. This feature depends on whether
|
|
211
|
+
the underlying cloud-provider supports specifying the loadBalancerIP when a
|
|
212
|
+
load balancer is created. This field will be ignored if the cloud-provider
|
|
213
|
+
does not support the feature. Deprecated: This field was under-specified and
|
|
214
|
+
its meaning varies across implementations, and it cannot support dual-stack.
|
|
215
|
+
As of Kubernetes v1.24, users are encouraged to use implementation-specific
|
|
216
|
+
annotations when available. This field may be removed in a future API
|
|
217
|
+
version.
|
|
218
|
+
|
|
219
|
+
load_balancer_source_ranges(Dict[Any, Any]): If specified and supported by the platform, this will restrict traffic
|
|
220
|
+
through the cloud-provider load-balancer will be restricted to the specified
|
|
221
|
+
client IPs. This field will be ignored if the cloud-provider does not
|
|
222
|
+
support the feature." More info:
|
|
223
|
+
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
|
|
224
|
+
|
|
225
|
+
ports(Dict[Any, Any]): The list of ports that are exposed by this service. More info:
|
|
226
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
|
|
227
|
+
ServicePort contains information on service's port.
|
|
228
|
+
|
|
229
|
+
FIELDS:
|
|
230
|
+
appProtocol <string>
|
|
231
|
+
The application protocol for this port. This field follows standard
|
|
232
|
+
Kubernetes label syntax. Un-prefixed names are reserved for IANA standard
|
|
233
|
+
service names (as per RFC-6335 and
|
|
234
|
+
https://www.iana.org/assignments/service-names). Non-standard protocols
|
|
235
|
+
should use prefixed names such as mycompany.com/my-custom-protocol.
|
|
236
|
+
|
|
237
|
+
name <string>
|
|
238
|
+
The name of this port within the service. This must be a DNS_LABEL. All
|
|
239
|
+
ports within a ServiceSpec must have unique names. When considering the
|
|
240
|
+
endpoints for a Service, this must match the 'name' field in the
|
|
241
|
+
EndpointPort. Optional if only one ServicePort is defined on this service.
|
|
242
|
+
|
|
243
|
+
nodePort <integer>
|
|
244
|
+
The port on each node on which this service is exposed when type is NodePort
|
|
245
|
+
or LoadBalancer. Usually assigned by the system. If a value is specified,
|
|
246
|
+
in-range, and not in use it will be used, otherwise the operation will fail.
|
|
247
|
+
If not specified, a port will be allocated if this Service requires one. If
|
|
248
|
+
this field is specified when creating a Service which does not need it,
|
|
249
|
+
creation will fail. This field will be wiped when updating a Service to no
|
|
250
|
+
longer need it (e.g. changing type from NodePort to ClusterIP). More info:
|
|
251
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
|
252
|
+
|
|
253
|
+
port <integer> -required-
|
|
254
|
+
The port that will be exposed by this service.
|
|
255
|
+
|
|
256
|
+
protocol <string>
|
|
257
|
+
The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". Default is
|
|
258
|
+
TCP.
|
|
259
|
+
|
|
260
|
+
Possible enum values:
|
|
261
|
+
- `"SCTP"` is the SCTP protocol.
|
|
262
|
+
- `"TCP"` is the TCP protocol.
|
|
263
|
+
- `"UDP"` is the UDP protocol.
|
|
264
|
+
|
|
265
|
+
targetPort <IntOrString>
|
|
266
|
+
Number or name of the port to access on the pods targeted by the service.
|
|
267
|
+
Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If
|
|
268
|
+
this is a string, it will be looked up as a named port in the target Pod's
|
|
269
|
+
container ports. If this is not specified, the value of the 'port' field is
|
|
270
|
+
used (an identity map). This field is ignored for services with
|
|
271
|
+
clusterIP=None, and should be omitted or set equal to the 'port' field. More
|
|
272
|
+
info:
|
|
273
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
|
|
274
|
+
|
|
275
|
+
publish_not_ready_addresses(bool): publishNotReadyAddresses indicates that any agent which deals with endpoints
|
|
276
|
+
for this Service should disregard any indications of ready/not-ready. The
|
|
277
|
+
primary use case for setting this field is for a StatefulSet's Headless
|
|
278
|
+
Service to propagate SRV DNS records for its Pods for the purpose of peer
|
|
279
|
+
discovery. The Kubernetes controllers that generate Endpoints and
|
|
280
|
+
EndpointSlice resources for Services interpret this to mean that all
|
|
281
|
+
endpoints are considered "ready" even if the Pods themselves are not. Agents
|
|
282
|
+
which consume only Kubernetes generated endpoints through the Endpoints or
|
|
283
|
+
EndpointSlice resources can safely assume this behavior.
|
|
284
|
+
|
|
285
|
+
selector(Dict[Any, Any]): Route service traffic to pods with label keys and values matching this
|
|
286
|
+
selector. If empty or not present, the service is assumed to have an
|
|
287
|
+
external process managing its endpoints, which Kubernetes will not modify.
|
|
288
|
+
Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type
|
|
289
|
+
is ExternalName. More info:
|
|
290
|
+
https://kubernetes.io/docs/concepts/services-networking/service/
|
|
291
|
+
|
|
292
|
+
session_affinity(str): Supports "ClientIP" and "None". Used to maintain session affinity. Enable
|
|
293
|
+
client IP based session affinity. Must be ClientIP or None. Defaults to
|
|
294
|
+
None. More info:
|
|
295
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
|
|
296
|
+
|
|
297
|
+
Possible enum values:
|
|
298
|
+
- `"ClientIP"` is the Client IP based.
|
|
299
|
+
- `"None"` - no session affinity.
|
|
300
|
+
|
|
301
|
+
session_affinity_config(Dict[Any, Any]): sessionAffinityConfig contains the configurations of session affinity.
|
|
302
|
+
SessionAffinityConfig represents the configurations of session affinity.
|
|
303
|
+
|
|
304
|
+
FIELDS:
|
|
305
|
+
clientIP <ClientIPConfig>
|
|
306
|
+
clientIP contains the configurations of Client IP based session affinity.
|
|
307
|
+
|
|
308
|
+
type(str): type determines how the Service is exposed. Defaults to ClusterIP. Valid
|
|
309
|
+
options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ClusterIP"
|
|
310
|
+
allocates a cluster-internal IP address for load-balancing to endpoints.
|
|
311
|
+
Endpoints are determined by the selector or if that is not specified, by
|
|
312
|
+
manual construction of an Endpoints object or EndpointSlice objects. If
|
|
313
|
+
clusterIP is "None", no virtual IP is allocated and the endpoints are
|
|
314
|
+
published as a set of endpoints rather than a virtual IP. "NodePort" builds
|
|
315
|
+
on ClusterIP and allocates a port on every node which routes to the same
|
|
316
|
+
endpoints as the clusterIP. "LoadBalancer" builds on NodePort and creates an
|
|
317
|
+
external load-balancer (if supported in the current cloud) which routes to
|
|
318
|
+
the same endpoints as the clusterIP. "ExternalName" aliases this service to
|
|
319
|
+
the specified externalName. Several other fields do not apply to
|
|
320
|
+
ExternalName services. More info:
|
|
321
|
+
https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
|
|
322
|
+
|
|
323
|
+
Possible enum values:
|
|
324
|
+
- `"ClusterIP"` means a service will only be accessible inside the cluster,
|
|
325
|
+
via the cluster IP.
|
|
326
|
+
- `"ExternalName"` means a service consists of only a reference to an
|
|
327
|
+
external name that kubedns or equivalent will return as a CNAME record, with
|
|
328
|
+
no exposing or proxying of any pods involved.
|
|
329
|
+
- `"LoadBalancer"` means a service will be exposed via an external load
|
|
330
|
+
balancer (if the cloud provider supports it), in addition to 'NodePort'
|
|
331
|
+
type.
|
|
332
|
+
- `"NodePort"` means a service will be exposed on one port of every node,
|
|
333
|
+
in addition to 'ClusterIP' type.
|
|
334
|
+
|
|
335
|
+
"""
|
|
336
|
+
super().__init__(**kwargs)
|
|
337
|
+
|
|
338
|
+
self.allocate_load_balancer_node_ports = allocate_load_balancer_node_ports
|
|
339
|
+
self.cluster_ip = cluster_ip
|
|
340
|
+
self.cluster_ips = cluster_ips
|
|
341
|
+
self.external_ips = external_ips
|
|
342
|
+
self.external_name = external_name
|
|
343
|
+
self.external_traffic_policy = external_traffic_policy
|
|
344
|
+
self.health_check_node_port = health_check_node_port
|
|
345
|
+
self.internal_traffic_policy = internal_traffic_policy
|
|
346
|
+
self.ip_families = ip_families
|
|
347
|
+
self.ip_family_policy = ip_family_policy
|
|
348
|
+
self.load_balancer_class = load_balancer_class
|
|
349
|
+
self.load_balancer_ip = load_balancer_ip
|
|
350
|
+
self.load_balancer_source_ranges = load_balancer_source_ranges
|
|
351
|
+
self.ports = ports
|
|
352
|
+
self.publish_not_ready_addresses = publish_not_ready_addresses
|
|
353
|
+
self.selector = selector
|
|
354
|
+
self.session_affinity = session_affinity
|
|
355
|
+
self.session_affinity_config = session_affinity_config
|
|
356
|
+
self.type = type
|
|
357
|
+
|
|
358
|
+
def to_dict(self) -> None:
|
|
359
|
+
super().to_dict()
|
|
360
|
+
|
|
361
|
+
if not self.yaml_file:
|
|
362
|
+
self.res["spec"] = {}
|
|
363
|
+
_spec = self.res["spec"]
|
|
364
|
+
|
|
365
|
+
if self.allocate_load_balancer_node_ports is not None:
|
|
366
|
+
_spec["allocateLoadBalancerNodePorts"] = self.allocate_load_balancer_node_ports
|
|
367
|
+
|
|
368
|
+
if self.cluster_ip:
|
|
369
|
+
_spec["clusterIP"] = self.cluster_ip
|
|
370
|
+
|
|
371
|
+
if self.cluster_ips:
|
|
372
|
+
_spec["clusterIPs"] = self.cluster_ips
|
|
373
|
+
|
|
374
|
+
if self.external_ips:
|
|
375
|
+
_spec["externalIPs"] = self.external_ips
|
|
376
|
+
|
|
377
|
+
if self.external_name:
|
|
378
|
+
_spec["externalName"] = self.external_name
|
|
379
|
+
|
|
380
|
+
if self.external_traffic_policy:
|
|
381
|
+
_spec["externalTrafficPolicy"] = self.external_traffic_policy
|
|
382
|
+
|
|
383
|
+
if self.health_check_node_port:
|
|
384
|
+
_spec["healthCheckNodePort"] = self.health_check_node_port
|
|
385
|
+
|
|
386
|
+
if self.internal_traffic_policy:
|
|
387
|
+
_spec["internalTrafficPolicy"] = self.internal_traffic_policy
|
|
388
|
+
|
|
389
|
+
if self.ip_families:
|
|
390
|
+
_spec["ipFamilies"] = self.ip_families
|
|
391
|
+
|
|
392
|
+
if self.ip_family_policy:
|
|
393
|
+
_spec["ipFamilyPolicy"] = self.ip_family_policy
|
|
394
|
+
|
|
395
|
+
if self.load_balancer_class:
|
|
396
|
+
_spec["loadBalancerClass"] = self.load_balancer_class
|
|
397
|
+
|
|
398
|
+
if self.load_balancer_ip:
|
|
399
|
+
_spec["loadBalancerIP"] = self.load_balancer_ip
|
|
400
|
+
|
|
401
|
+
if self.load_balancer_source_ranges:
|
|
402
|
+
_spec["loadBalancerSourceRanges"] = self.load_balancer_source_ranges
|
|
403
|
+
|
|
404
|
+
if self.ports:
|
|
405
|
+
_spec["ports"] = self.ports
|
|
406
|
+
|
|
407
|
+
if self.publish_not_ready_addresses is not None:
|
|
408
|
+
_spec["publishNotReadyAddresses"] = self.publish_not_ready_addresses
|
|
409
|
+
|
|
410
|
+
if self.selector:
|
|
411
|
+
_spec["selector"] = self.selector
|
|
412
|
+
|
|
413
|
+
if self.session_affinity:
|
|
414
|
+
_spec["sessionAffinity"] = self.session_affinity
|
|
415
|
+
|
|
416
|
+
if self.session_affinity_config:
|
|
417
|
+
_spec["sessionAffinityConfig"] = self.session_affinity_config
|
|
418
|
+
|
|
419
|
+
if self.type:
|
|
420
|
+
_spec["type"] = self.type
|
|
@@ -19,7 +19,7 @@ warn_unused_ignores = true
|
|
|
19
19
|
|
|
20
20
|
[tool.poetry]
|
|
21
21
|
name = "openshift-python-wrapper"
|
|
22
|
-
version = "10.0.
|
|
22
|
+
version = "10.0.69"
|
|
23
23
|
description = "Wrapper around https://github.com/kubernetes-client/python"
|
|
24
24
|
authors = ["Meni Yakove <myakove@gmail.com>", "Ruth Netser <rnetser@gmail.com>"]
|
|
25
25
|
readme = "README.md"
|
|
@@ -68,6 +68,6 @@ python-simple-logger = ">=1.0.6"
|
|
|
68
68
|
jinja2 = "^3.1.2"
|
|
69
69
|
timeout-sampler = ">=0.0.17"
|
|
70
70
|
click = "^8.1.7"
|
|
71
|
-
pyhelper-utils = "^0.0.
|
|
71
|
+
pyhelper-utils = "^0.0.30"
|
|
72
72
|
ruff = "^0.5.3"
|
|
73
73
|
rich = "^13.7.1"
|