使用这款开源 Python API 封装器与您的集群对话

结合开放 API 和 Python 编程语言的强大功能。
2 位读者喜欢这篇文章。
Best of Opensource.com: Business

Ron 在 Flickr 上发布。CC BY-NC-SA 2.0

围绕 API 创建封装器的开源项目正变得越来越流行。这些项目使开发人员更容易与 API 交互并在其应用程序中使用它们。openshift-python-wrapper 项目是 openshift-restclient-python 的封装器。最初是为了帮助我们的团队使用 OpenShift API 而创建的内部软件包,后来成为一个 开源项目(Apache License 2.0)。

本文讨论了 API 封装器是什么、它为什么有用,以及来自该封装器的一些示例。

为什么使用 API 封装器?

API 封装器是位于应用程序和 API 之间的一层代码。它通过抽象出发出请求和解析响应中涉及的一些复杂性,简化了 API 访问过程。封装器还可以提供 API 本身不提供的附加功能,例如缓存或错误处理。

使用 API 封装器使代码更模块化且更易于维护。您可以使用为与 API 交互提供一致接口的封装器,而不是为每个 API 编写自定义代码。它可以节省时间、避免代码重复并减少出错的机会。

使用 API 封装器的另一个好处是,它可以保护您的代码免受 API 更改的影响。如果 API 更改其接口,您可以更新封装器代码,而无需修改您的应用程序代码。这可以减少长期维护应用程序所需的工作。

安装

该应用程序位于 PyPi 上,因此请使用 pip 命令安装 openshift-python-wrapper

$ python3 -m pip install openshift-python-wrapper

Python 封装器

OpenShift REST API 提供了对 OpenShift 平台许多功能的编程访问。该封装器为使用 openshift-restclient-python 库与 API 交互提供了简单直观的界面。它标准化了如何使用集群资源,并提供了统一的资源 CRUD(创建、读取、更新和删除)流程。它还提供了额外的功能,例如特定于资源的功能,否则需要用户自己实现。该封装器使代码更易于阅读和长期维护。

简化的用例的一个示例是与容器交互。在容器内运行命令需要使用 Kubernetes 流、处理错误等等。封装器处理了所有这些,并提供了 简单直观的功能

>>> from ocp_resources.pod import Pod
>>> from ocp_utilities.infra import get_client
>>> client = get_client()

ocp_utilities.infra INFO Trying to get
client via new_client_from_config

>>> pod = Pod(client=client, name="nginx-deployment-7fb96c846b-b48mv", namespace="default")
>>> pod.execute("ls")

ocp_resources Pod INFO Execute ls on
nginx-deployment-7fb96c846b-b48mv (ip-10-0-155-108.ec2.internal)

'bin\nboot\ndev\netc\nhome\nlib\nlib64\nmedia\nmnt\nopt\nproc\nroot\nrun\nsbin\nsrv\nsys\ntmp\nusr\nvar\n'

开发人员或测试人员可以使用此封装器——我们的团队在编写代码时考虑到了测试。使用 Python 功能,上下文管理器可以提供开箱即用的资源创建和删除,继承可用于扩展特定用例的功能。Pytest fixtures 可以利用代码进行 setup 和 teardown,不留下任何残留。资源甚至可以保存以进行调试。资源清单和日志可以轻松收集。

这是一个上下文管理器的示例

@pytest.fixture(scope="module")
def namespace():
    admin_client = get_client()
    with Namespace(client=admin_client, name="test-ns",) as ns:
        ns.wait_for_status(status=Namespace.Status.ACTIVE, timeout=240)
        yield ns

def test_ns(namespace):
    print(namespace.name)

生成器迭代资源,如下所示

>>> from ocp_resources.node import Node
>>> from ocp_utilities.infra import get_client
>>> admin_client = get_client()
# This returns a generator
>>> for node in Node.get(dyn_client=admin_client): 
        print(node.name)

ip-10-0-128-213.ec2.internal

面向开源社区的开源代码

套用一句流行语,“如果你爱你的代码,就让它自由。” openshift-python-wrapper 项目最初是 OpenShift Virtualization 的实用程序模块。随着越来越多的项目从代码中受益,我们决定将这些实用程序提取到一个单独的存储库中并开源。再套用一句俗语,“如果代码没有回到你身边,那就意味着它从来不属于你。” 我们喜欢说,一旦发生这种情况,它才是真正的开源。

更多的贡献者和维护者意味着代码属于社区。欢迎所有人贡献。

ruth netser
在高科技行业工作超过 20 年。RedHat 的首席 QE。我喜欢设计和编写代码,并探索新技术。我喜欢和孩子们共度时光,喜欢骑山地自行车,并在户外度过时光。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.