Pypi: openshift-python-wrapper
A python wrapper for openshift-restclient-python with support for RedHat Container Virtualization. (Openshift Virtualization)
Docs: openshift-python-wrapper docs
From source:
git clone https://github.com/RedHatQE/openshift-python-wrapper.git
cd openshift-python-wrapper
python setup.py install --userFrom pypi:
pip install openshift-python-wrapper --user- Export GitHub token
export GITHUB_TOKEN=<your_github_token>sudo npm install --global release-it
npm install --save-dev @j-ulrich/release-it-regex-bumper
rm -f package.json package-lock.json- Create a release, run from the relevant branch.
To create a 4.11 release, run:
git checkout v4.11
git pull
release-it # Follow the instructionsHosted on readthedocs.io openshift-python-wrapper
For PR dependency we use dpulls
To make PR depends on other PR add depends on #<PR NUMBER> in the PR description.
To change log level export OPENSHIFT_PYTHON_WRAPPER_LOG_LEVEL:
export OPENSHIFT_PYTHON_WRAPPER_LOG_LEVEL=<LOG_LEVEL> # can be: "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"client = DynamicClient(client=kubernetes.config.new_client_from_config())The examples given below are relevant to all resources. For simplicity we will use the resource - Namespace.
Import Namespace:
from resources.namespace import NamespaceCreate a Namespace:
ns = Namespace(name="namespace-example-1")
ns.create()Will return True if creation succeeded.
We can also use the with statement which ensures automatic clean-up of the code executed:
with Namespace(name="namespace-example-2") as ns:
yield nsteardown=False - Disables clean-up after execution.
Wait for Namespace to be in status Active:
ns.wait_for_status(status=Namespace.Status.ACTIVE, timeout=120)Will raise a TimeoutExpiredError if Namespace is not in the desired status.
Delete the Namespace
ns.delete()Will return False if not found.
Checks if Namespace exists on the server:
ns.existsWill return None if not found.
Query to get Pods (resource) in the connected cluster with label of label_example=example. Returns a generator of the resource - pod
for pod in Pod.get(dyn_client=client, label_selector="label_example=example")):
pod.log()We can also get the name of the Node that the pod is running on:
pod.node.nameStart:
with VirtualMachine(
name="vm-example",
namespace="namespace-example",
node_selector="worker-node-example",
) as vm:
vm.start()Stop:
vm.stop()Restart:
vm.restart()Get VMI:
test_vmi = vm.vmiAfter having a VMI, we can wait until VMI is in running state:
test_vmi.wait_until_running()Will raise TimeoutExpiredError if VMI failed to run.
Then, we can get the Pod that is in Running state and execute a command on it:
command_output = test_vmi.virt_launcher_pod.execute(command="command-example")If no Pod was found, will raise ResourceNotFoundError.
Using capture syntax to switch ipv4 config between interfaces
with NodeNetworkConfigurationPolicy(
name="capture_nncp",
capture={'first-nic': 'interfaces.name=="ens8"',
'second-nic': 'interfaces.name=="ens9"'},
teardown=False, # Capture doesn't support reverting config on teardown
...
) as nncp:
nncp.add_interface(name="{{ capture.first-nic.interfaces.0.name }}", set_ipv4="{{ capture.second-nic.interfaces.0.ipv4 }}")
nncp.add_interface(name="{{ capture.second-nic.interfaces.0.name }}", set_ipv4="{{ capture.first-nic.interfaces.0.ipv4 }}")
yield nncpWe use pre-commit for code check.
pre-commit install