2023-05-04 08:49:11 +08:00
[#]: subject: "Talk to your cluster with this open source Python API wrapper"
[#]: via: "https://opensource.com/article/23/4/cluster-open-source-python-api-wrapper"
[#]: author: "Ruth Netser https://opensource.com/users/rnetser1"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
2023-05-07 23:27:20 +08:00
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15793-1.html"
2023-05-04 08:49:11 +08:00
2023-05-07 23:27:20 +08:00
使用开源 Python API 封装器与你的集群对话
2023-05-04 08:49:11 +08:00
======
2023-05-07 23:27:20 +08:00
![][0]
> 结合开放的 API 和 Python 编程语言的力量。
围绕 API 创建封装器的开源项目正变得越来越流行。这些项目使开发人员更容易与 API 交互并在他们的应用中使用它们。`openshift-python-wrapper` 项目是 [openshift-restclient-python][1] 的封装器。最初是一个帮助我们的团队使用 OpenShift API 的内部包,后来变成了一个[开源项目][2]( Apache 许可证 2.0)。
2023-05-04 08:49:11 +08:00
本文讨论了什么是 API 封装器,为什么它很有用,以及封装器的一些例子。
### 为什么要使用 API 封装器?
2023-05-07 23:27:20 +08:00
API 封装器是位于应用和 API 之间的一层代码。它通过将一些涉及发出请求和解析响应的复杂性抽象出来,以简化 API 访问过程。封装器还可以提供 API 本身提供的功能之外的附加功能,例如缓存或错误处理。
2023-05-04 08:49:11 +08:00
使用 API 封装器使代码更加模块化并且更易于维护。无需为每个 API 编写自定义代码,你可以使用封装器来提供与 API 交互的一致接口。它可以节省时间,避免代码重复,并减少出错的机会。
2023-05-07 23:27:20 +08:00
使用 API 封装器的另一个好处是它可以保护你的代码免受 API 变化的影响。如果 API 更改了它的接口,你可以更新封装器代码而无需修改你的应用程序代码。随着时间的推移,这可以减少维护应用程序所需的工作。
2023-05-04 08:49:11 +08:00
### 安装
该应用位于 [PyPi][3] 上,因此使用 [pip 命令][4] 安装 `openshift-python-wrapper` :
```
$ python3 -m pip install openshift-python-wrapper
```
### Python 封装器
2023-05-07 23:27:20 +08:00
[OpenShift REST API][5] 提供对 OpenShift 平台的许多功能的编程访问。封装器提供了一个简单直观的界面,用于使用 `openshift-restclient-python` 库与 API 进行交互。它标准化了如何使用集群资源,并提供了统一的资源 CRUD( 创建、读取、更新和删除) 流程。它还提供额外的功能, 例如需要由用户实现的特定于资源的功能。随着时间的推移, 封装器使代码更易于阅读和维护。
2023-05-04 08:49:11 +08:00
2023-05-07 23:27:20 +08:00
简化用法的一个示例是与容器交互。在容器内运行命令需要使用 Kubernetes 流、处理错误等。封装器处理这一切并提供 [简单直观的功能][6]。
2023-05-04 08:49:11 +08:00
```
>>> 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 可以使用代码进行设置和拆卸,不留任何遗留物。甚至可以保存资源用于调试。可以轻松收集资源清单和日志。
这是上下文管理器的示例:
```
@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
```
### 开源社区的开源代码
2023-05-07 23:27:20 +08:00
套用一句流行的说法,“如果你热爱你的代码,就应该让它自由。” `openshift-python-wrapper` 项目最初是作为 [OpenShift 虚拟化][7] 的实用模块。随着越来越多的项目从代码中受益,我们决定将这些程序提取到一个单独的仓库中并将其开源。套用另一句俗语,“如果代码不回到你这里,那就意味着它从未属于你。” 一旦这种情况发生,它就真正成为了开源。
2023-05-04 08:49:11 +08:00
更多的贡献者和维护者意味着代码属于社区。欢迎大家贡献。
2023-05-07 23:27:20 +08:00
*( 题图: MJ/5ca32a4a-2194-4b36-ade9-053433e79201) *
2023-05-04 08:49:11 +08:00
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/4/cluster-open-source-python-api-wrapper
作者:[Ruth Netser][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
2023-05-07 23:27:20 +08:00
校对:[wxy](https://github.com/wxy)
2023-05-04 08:49:11 +08:00
本文由 [LCTT ](https://github.com/LCTT/TranslateProject ) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/rnetser1
[b]: https://github.com/lkxed/
[1]: https://github.com/openshift/openshift-restclient-python
[2]: https://github.com/RedHatQE/openshift-python-wrapper
[3]: https://pypi.org/project/openshift-python-wrapper/
[4]: https://opensource.com/downloads/pip-cheat-sheet
[5]: https://access.redhat.com/documentation/en-us/openshift_container_platform/3.5/html-single/using_the_openshift_rest_api/index?intcmp=7013a000002qLH8AAM
[6]: https://github.com/RedHatQE/openshift-python-wrapper/blob/main/ocp_resources/pod.py#L72
2023-05-07 23:27:20 +08:00
[7]: https://www.redhat.com/en/technologies/cloud-computing/openshift/virtualization?intcmp=7013a000002qLH8AAM
[0]: https://img.linux.net.cn/data/attachment/album/202305/07/232516w8j766mkp7pz7frl.png