Maison >développement back-end >Tutoriel Python >Obtenez les données Openshift ConfigMap à l'aide de Python
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.
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!