Skip to content

AdiZav/openshift-python-wrapper

 
 

Repository files navigation

openshift-python-wrapper

Pypi: openshift-python-wrapper
A python wrapper for openshift-restclient-python with support for RedHat Container Virtualization. (Openshift Virtualization)
Docs: openshift-python-wrapper docs

Installation

From source:

git clone https://github.com/RedHatQE/openshift-python-wrapper.git
cd openshift-python-wrapper
python setup.py install --user

From pypi:

pip install openshift-python-wrapper --user

Release new version

requirements:

  • 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

usage:

  • 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 instructions

docs

Hosted on readthedocs.io openshift-python-wrapper

PR dependency

For PR dependency we use dpulls
To make PR depends on other PR add depends on #<PR NUMBER> in the PR description.

Logging configuration

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"

Examples

Client

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

Import Namespace:

from resources.namespace import Namespace

Create

Create 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 ns

teardown=False - Disables clean-up after execution.

Wait

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

Delete the Namespace

ns.delete()

Will return False if not found.

Exists

Checks if Namespace exists on the server:

ns.exists

Will return None if not found.

Get

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.name

VM

Start:

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.vmi

After 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.

NNCP Capture Syntax

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 nncp

Code check

We use pre-commit for code check.

pre-commit install

About

A python wrapper for https://github.com/openshift/openshift-restclient-python. With support for RedHat Container Virtualization.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 98.5%
  • Shell 1.2%
  • Makefile 0.3%