Saya cuba menggunakan perpustakaan python openshift untuk mendapatkan data peta konfigurasi dalam projek. Saya berjaya mendapatkan nama peta konfigurasi tetapi saya boleh mencari fungsi atau contoh dalam dokumentasi untuk mengekstrak data. Adakah sesiapa yang menghadapi masalah ini atau tahu bagaimana untuk melakukannya?
Ini adalah kod yang saya gunakan untuk mendapatkan nama cm (mengembalikan kamus):
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)
Saya telah mencuba menggunakan oc.selector
并使用 with oc.selector(project_name):
untuk mencuba dan mendapatkan beberapa data tetapi tidak dapat mencari cara untuk mendapatkannya.
Sila ambil perhatian bahawa saya tidak perlu menggunakan arahan oc cmd, saya perlu menggunakan python. Buat masa ini saya hanya memerlukan data dan lihat bagaimana untuk menukarnya kemudian.
Terima kasih.
Jika anda menggunakan oc.invoke
, anda perlu lulus hujah baris arahan yang sesuai. Pertimbangkan perkara yang akan berlaku jika anda menjalankan arahan yang sama secara manual:
$ 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
Anda mendapat nama, tetapi bukan kandungannya. Jika anda mahukan kandungan, anda perlu memilih format output yang lebih sesuai, seperti -o json
:
$ oc get configmaps kubelet-config -o json { "apiversion": "v1", "data": { ... }, "kind": "configmap", "metadata": { "name": "kubelet-config", "namespace": "kube-system", } }
Anda perlu memasukkan parameter yang sama dalam panggilan ke oc.invoke
. Sesuatu seperti ini menunjukkan cara sesuatu berfungsi:
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)
Ini berfungsi, tetapi jangan lakukannya.
Jelas sekali anda sudah tahu cara menggunakan pemilih kerana itulah cara anda mengulangi item anda. Anda harus menggunakan teknik yang sama untuk mengulang peta konfigurasi:
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)
Ini banyak berdasarkan contoh terus dari dokumentasi. Lelaran configmaps.objects()
untuk mendapatkan objek api bagi setiap peta konfigurasi. Anda boleh mengakses nama dan kandungan.
Atas ialah kandungan terperinci Dapatkan data Openshift ConfigMap menggunakan python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!