OpenShift 客户端 Python - 提取资源详细信息

问题描述 投票:0回答:1

因此,我遵循 OpenShift 客户端 Python 文档,我可以使用我创建的脚本来成功列出 pod、作业、部署等资源。

我试图了解如何从这些资源中提取一些更详细的信息,例如年龄、完成情况或“准备”状态。我在文档中找不到有关如何执行此操作的任何说明,但我可能遗漏了一些内容。

我已经尝试过:

namespace = ['testNamespace']
for ns in namespace:
    with oc.project(ns):

        print('Jobs in {}: \n{}'.format(oc.get_project_name(), '\n'.join(oc.selector('jobs').names())))

        print('Ages of jobs in {}: \n{}'.format(oc.get_project_name(), '\n'.join(oc.selector('jobs').ages())))

但是它说 Selector 没有 'ages' 属性。如果有人有与客户打交道的经验,任何建议将不胜感激。

python kubernetes openshift
1个回答
0
投票

quickstart 向您展示如何访问有关对象的信息(请参阅如何访问 pod 的

metadata.ownerReferences
属性)。

使用该示例,我们可以这样查看工作的

creationTimestamp

import sys
import openshift_client as oc

for ns in sys.argv[1:]:
    with oc.project(ns):
        jobs = oc.selector("jobs")
        print("Jobs in {}: \n{}".format(ns, "\n".join(oc.selector("jobs").names())))

        for job in jobs.objects():
            print(f"Job {job.name()} create at {job.model.metadata.creationTimestamp}")

鉴于

kubectl
向我展示:

$ kubectl -n example-namespace get job
NAME                                         COMPLETIONS   DURATION   AGE
daily-openshift-metrics-collector-28534320   1/1           15s        2d4h
daily-openshift-metrics-collector-28535760   1/1           10s        28h
daily-openshift-metrics-collector-28537200   1/1           16s        4h31m
produce-report-28488300                      1/1           43s        34d
produce-report-28532940                      1/1           64s        3d3h

运行上面的代码将产生类似以下内容:

Jobs in example-namespace: 
daily-openshift-metrics-collector-28534320
daily-openshift-metrics-collector-28535760
daily-openshift-metrics-collector-28537200
produce-report-28488300
produce-report-28532940
Job daily-openshift-metrics-collector-28534320 create at 2024-04-02T12:00:00Z
Job daily-openshift-metrics-collector-28535760 create at 2024-04-03T12:00:00Z
Job daily-openshift-metrics-collector-28537200 create at 2024-04-04T12:00:00Z
Job produce-report-28488300 create at 2024-03-01T13:00:00Z
Job produce-report-28532940 create at 2024-04-01T13:00:00Z

看起来您正在尝试获取“age”属性,但是如果您查看 job api 规范,则没有这样的属性。年龄是你需要计算的。也许是这样的:

#!/usr/bin/python

import sys
import openshift_client as oc
import datetime

for ns in sys.argv[1:]:
    with oc.project(ns):
        jobs = oc.selector("jobs")
        print("Jobs in {}: \n{}".format(ns, "\n".join(oc.selector("jobs").names())))

        now = datetime.datetime.now(datetime.UTC)
        for job in jobs.objects():
            created = datetime.datetime.fromisoformat(
                job.model.metadata.creationTimestamp,
            )

            age = now - created
            print(f"Job {job.name()} age is {age}")

运行产生:

Jobs in example-namespace: 
daily-openshift-metrics-collector-28534320
daily-openshift-metrics-collector-28535760
daily-openshift-metrics-collector-28537200
produce-report-28488300
produce-report-28532940
Job daily-openshift-metrics-collector-28534320 age is 2 days, 4:33:53.857197
Job daily-openshift-metrics-collector-28535760 age is 1 day, 4:33:53.857197
Job daily-openshift-metrics-collector-28537200 age is 4:33:53.857197
Job produce-report-28488300 age is 34 days, 3:33:53.857197
Job produce-report-28532940 age is 3 days, 3:33:53.857197

这与

kubectl
告诉我们的相符。

© www.soinside.com 2019 - 2024. All rights reserved.