Get Openshift ConfigMap data using python

王林
Release: 2024-02-22 12:31:11
forward
523 people have browsed it

使用 python 获取 Openshift ConfigMap 数据

Question content

I am trying to use the openshift python library to get the data of the configmap in the project. I managed to get the name of the configmap but I can find functions or examples in the documentation for extracting the data. Has anyone encountered this problem or knows how to do this?

This is the code I use to get the cm name (returns a dictionary):

import openshift as oc

if __name__ == '__main__':
    project_selector = oc.selector('projects')
    projects = project_selector.objects()
    number_of_projects = len(projects)
    for project in projects:
        name = project.model.metadata.name
        oc.invoke('project', name)
        tokens = oc.invoke('get', ['configmaps']).actions()[0].as_dict()['out'].replace('\n', ' ').split(' ')
        configmap_data = [x for x in tokens if len(x) > 0 and not x.isupper()]
        print(configmap_data)
Copy after login

I did try using oc.selector and using with oc.selector(project_name): to try and get some data, but couldn't find a way to get it.

Please note that I don't need to use the oc cmd command, I have to use python. For now I just need the data and see how to change it later.

Thanks.


Correct answer


If you use oc.invoke, you need to pass the appropriate command line arguments. Consider what would happen if you ran the same command manually:

$ oc get configmaps
name                                                   data   age
coredns                                                1      54d
extension-apiserver-authentication                     6      54d
kube-apiserver-legacy-service-account-token-tracking   1      54d
kube-proxy                                             2      54d
kube-root-ca.crt                                       1      54d
kubeadm-config                                         1      54d
kubelet-config                                         1      54d
Copy after login

You get the name, but not the content. If you want content, you need to choose a more appropriate output format, such as -o json:

$ oc get configmaps kubelet-config -o json
{
    "apiversion": "v1",
    "data": {
        ...
    },
    "kind": "configmap",
    "metadata": {
        "name": "kubelet-config",
        "namespace": "kube-system",
    }
}
Copy after login

You need to include the same parameters in the call to oc.invoke. Something like this demonstrates how things work:

import openshift as oc
import json

project_selector = oc.selector('projects')
projects = project_selector.objects()
for project in projects:
    # get a list of configmap names
    configmaps = oc.invoke('get', ['-n', project.name(), '-o', 'name', 'configmaps'])

    # for each configmap, get the content
    for cm in configmaps.out().splitlines():
        out = oc.invoke('get', ['-n', project.name(), '-o', 'json', cm])
        manifest = json.loads(out.out())
        data = manifest['data']
        print(data)
Copy after login

This works, but don't do it.

Obviously you already know how to use selectors, since that's how you iterate over items. You should use the same technique to iterate over the configuration map:

import openshift as oc

projects = oc.selector('projects')
for project in projects.objects():
    with oc.project(project.name()):
        configmaps = oc.selector('configmaps')
        for cm in configmaps.objects():
            data = cm.as_dict()['data']
            print(data)
Copy after login

This is heavily based on examples straight from the documentation. Iterate configmaps.objects() to get an api object for each configmap. You can access the name and content.

The above is the detailed content of Get Openshift ConfigMap data using python. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!