0

0

使用 Python 访问 OpenShift ConfigMap 数据

碧海醫心

碧海醫心

发布时间:2025-12-13 19:28:22

|

487人浏览过

|

来源于php中文网

原创

使用 Python 访问 OpenShift ConfigMap 数据

本教程详细介绍了如何利用 openshift python 客户端库高效地获取 configmap 中的数据。文章对比了 `oc.invoke`(模拟命令行操作)和 `oc.selector`(直接 api 交互)两种方法,强调了后者作为推荐实践的优势。通过清晰的代码示例,读者将学习如何遍历项目并提取指定 configmap 的详细数据,从而实现 openshift 资源管理的自动化。

使用 Python 客户端库获取 OpenShift ConfigMap 数据

在 OpenShift 环境中,ConfigMap 是存储非敏感配置数据的重要资源。当需要通过自动化脚本或应用程序来读取这些配置时,使用 OpenShift Python 客户端库是一个高效且强大的选择。本文将深入探讨如何利用该库来获取 ConfigMap 的详细数据,并提供两种实现方法,重点推荐其中一种更符合 Pythonic 风格的实践。

1. 准备工作

首先,请确保已安装 OpenShift Python 客户端库。如果尚未安装,可以通过 pip 进行安装:

pip install openshift-client-python

此外,运行脚本的用户需要具备足够的权限来访问 OpenShift 项目和 ConfigMap 资源。

2. 方法一:通过 oc.invoke 模拟命令行操作

oc.invoke 函数允许你在 Python 脚本中执行与 oc 命令行工具相同的命令。这种方法对于熟悉 oc 命令的用户来说直观易懂,但它本质上是执行外部命令并解析其标准输出。

立即学习Python免费学习笔记(深入)”;

问题背景: 直接运行 oc get configmaps 只能获取 ConfigMap 的名称和一些元数据,而无法获取其内部的 data 字段。为了获取详细数据,我们需要像在命令行中一样,指定输出格式为 JSON,例如 oc get configmap -o json。

实现步骤:

  1. 遍历项目: 首先,使用 oc.selector('projects') 获取所有项目的列表。
  2. 切换项目上下文: 对于每个项目,使用 oc.invoke('project', project_name) 切换到该项目。
  3. 获取 ConfigMap 名称: 使用 oc.invoke('get', ['configmaps', '-o', 'name']) 获取当前项目下所有 ConfigMap 的名称列表。
  4. 逐个获取详细数据: 对于每个 ConfigMap 名称,再次使用 oc.invoke 并指定 -o json 选项来获取其完整的 JSON 描述,然后解析 JSON 字符串以提取 data 字段。

示例代码:

仿M18紫色版整站 For SHOPEX
仿M18紫色版整站 For SHOPEX

SHOPEX仿M18紫色版 ,适合综合商城,服饰商城.化妆品商城等使用.程序基于SHOPEX4.8.5 最新版制作. 安装方法:1.解压上传程序至网站根目录.. 访问:域名/bak.(用户名:admin 密码:123456)2.进入帝国备份王后,配置数据库信息.选择-www.taomoban.net目录.还原数据库.3.修改FTP目录下的config/config.php 数据库连接信息.4.登陆

下载
import openshift as oc
import json

def get_configmap_data_via_invoke():
    """
    使用 oc.invoke 方法获取所有项目的 ConfigMap 数据。
    此方法模拟命令行操作,需解析 JSON 字符串。
    """
    print("--- 使用 oc.invoke 方法获取 ConfigMap 数据 ---")
    projects_selector = oc.selector('projects')
    for project in projects_selector.objects():
        project_name = project.name()
        print(f"\n正在处理项目: {project_name}")

        # 切换到当前项目
        oc.invoke('project', project_name)

        # 获取当前项目下所有 ConfigMap 的名称列表
        # -o name 确保输出只包含资源名称,每行一个
        configmap_names_output = oc.invoke('get', ['configmaps', '-o', 'name']).out()
        configmap_names = [
            line.strip().split('/')[-1] # 移除 'configmap/' 前缀
            for line in configmap_names_output.splitlines() if line.strip()
        ]

        if not configmap_names:
            print(f"  项目 {project_name} 中没有找到 ConfigMap。")
            continue

        for cm_name in configmap_names:
            try:
                # 获取单个 ConfigMap 的完整 JSON 数据
                cm_json_output = oc.invoke('get', ['configmap', cm_name, '-o', 'json']).out()
                manifest = json.loads(cm_json_output)
                data = manifest.get('data', {})
                print(f"  ConfigMap: {cm_name}, 数据: {data}")
            except Exception as e:
                print(f"  获取 ConfigMap '{cm_name}' 数据失败: {e}")

if __name__ == '__main__':
    get_configmap_data_via_invoke()

注意事项: 虽然 oc.invoke 方法可行,但它涉及到字符串解析和 JSON 反序列化,这增加了代码的复杂性,并且在处理大量资源时可能不如直接使用 API 交互高效。

3. 方法二:使用 oc.selector 进行直接 API 交互(推荐)

oc.selector 是 OpenShift Python 客户端库中更推荐的用法,它允许你以更 Pythonic 的方式直接与 OpenShift API 对象交互,而无需解析命令行输出。这种方法返回的是 Python 对象,可以直接访问其属性和方法。

实现步骤:

  1. 遍历项目: 同样使用 oc.selector('projects') 获取项目列表。
  2. 进入项目上下文: 使用 with oc.project(project_name): 语句块,可以安全地在特定项目上下文中执行操作,无需手动切换。
  3. 选择 ConfigMap: 在项目上下文内,使用 oc.selector('configmaps') 来选择当前项目中的所有 ConfigMap。
  4. 遍历 ConfigMap 对象: 迭代 configmaps.objects() 将返回 ConfigMap 的 API 对象实例。
  5. 直接访问数据: 每个 ConfigMap 对象都有一个 as_dict() 方法,可以将其转换为 Python 字典,从而直接访问 data 字段。

示例代码:

import openshift as oc

def get_configmap_data_via_selector():
    """
    使用 oc.selector 方法获取所有项目的 ConfigMap 数据。
    此方法直接与 OpenShift API 对象交互,是推荐的做法。
    """
    print("--- 使用 oc.selector 方法获取 ConfigMap 数据 (推荐) ---")
    projects_selector = oc.selector('projects')
    for project in projects_selector.objects():
        project_name = project.name()
        print(f"\n正在处理项目: {project_name}")

        # 进入项目上下文
        with oc.project(project_name):
            configmaps_selector = oc.selector('configmaps')

            # 检查是否有 ConfigMap
            if not configmaps_selector.objects():
                print(f"  项目 {project_name} 中没有找到 ConfigMap。")
                continue

            for cm in configmaps_selector.objects():
                try:
                    # 直接从 ConfigMap 对象中获取数据
                    # as_dict() 将 API 对象转换为 Python 字典
                    data = cm.as_dict().get('data', {})
                    print(f"  ConfigMap: {cm.name()}, 数据: {data}")
                except Exception as e:
                    print(f"  获取 ConfigMap '{cm.name()}' 数据失败: {e}")

if __name__ == '__main__':
    get_configmap_data_via_selector()

优点:

  • 更简洁的代码: 无需手动解析 JSON 字符串。
  • 更健壮: 直接操作 Python 对象,减少因命令行输出格式变化而导致的错误。
  • 更符合 Pythonic 风格: 与 Python 的面向对象特性更好地结合。
  • 性能更优: 避免了额外的进程创建和字符串处理开销。

4. 总结与最佳实践

本文详细介绍了两种使用 OpenShift Python 客户端库获取 ConfigMap 数据的方法。虽然 oc.invoke 提供了一种模拟命令行操作的途径,但 强烈推荐使用 oc.selector 进行直接的 API 交互。oc.selector 方法不仅代码更简洁、可读性更强,而且在处理 OpenShift 资源时也更加健壮和高效。

在实际应用中,除了获取数据,你可能还需要对 ConfigMap 进行创建、更新或删除操作。OpenShift Python 客户端库同样提供了相应的接口,通常也是通过 oc.selector 获取到资源对象后,调用其对应的方法(如 update()、delete() 等)来实现。始终优先选择直接的 API 交互方式,以构建更可靠和可维护的自动化解决方案。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

765

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1385

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 15.2万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号