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

王林
Libérer: 2024-02-22 12:31:11
avant
557 Les gens l'ont consulté

使用 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)
Copier après la connexion

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
Copier après la connexion

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",
    }
}
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal