Maison >développement back-end >Tutoriel Python >Obtenez les données Openshift ConfigMap à l'aide de Python

Obtenez les données Openshift ConfigMap à l'aide de Python

王林
王林avant
2024-02-22 12:31:11557parcourir

使用 python 获取 Openshift ConfigMap 数据

Contenu de la question

J'essaie d'utiliser la bibliothèque python openshift pour obtenir les données de la carte de configuration dans le projet. J'ai réussi à obtenir le nom de la configmap mais je peux trouver des fonctions ou des exemples dans la documentation pour extraire les données. Quelqu'un a-t-il rencontré ce problème ou sait comment faire ?

Voici le code que j'utilise pour obtenir le nom du cm (renvoie un dictionnaire) :

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)

J'ai essayé d'utiliser oc.selector 并使用 with oc.selector(project_name): pour essayer d'obtenir des données, mais je n'ai pas trouvé de moyen de les obtenir.

Veuillez noter que je n'ai pas besoin d'utiliser la commande oc cmd, je dois utiliser python. Pour l'instant, j'ai juste besoin des données et je verrai comment les modifier plus tard.

Merci.


Bonne réponse


Si vous utilisez oc.invoke, vous devez transmettre les arguments de ligne de commande appropriés. Considérez ce qui se passerait si vous exécutiez la même commande manuellement :

$ 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

Vous obtenez le nom, mais pas le contenu. Si vous souhaitez du contenu, vous devez choisir un format de sortie plus adapté, tel que -o json : 

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

Vous devez inclure les mêmes paramètres dans l'appel à oc.invoke. Quelque chose comme ceci montre comment les choses fonctionnent :

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)

Cela fonctionne, mais ne le faites pas.

Évidemment, vous savez déjà comment utiliser les sélecteurs, car c'est ainsi que vous parcourez vos éléments. Vous devez utiliser la même technique pour parcourir la carte de configuration :

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)

Ceci est fortement basé sur des exemples directement tirés de la documentation. Itérez configmaps.objects() pour obtenir un objet API pour chaque carte de configuration. Vous pouvez accéder au nom et au contenu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Article précédent:Polar calcule les percentilesArticle suivant:Polar calcule les percentiles