I am trying to get data of a ConfigMap in a project using openshift python library. I managed to get the name of the configmap but I can find the function or example in the documentation to extract the data. Has anyone faced this or knows a way to do that?
This is the code I used to get the CM's name (returns a dict with it):
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)
I did try to use oc.selector and using with oc.selector(project_name): to try and get some data but couldnt find a way to get it.
Please note that I don't need to use oc cmd commands and I have to use python for it. Currently I just need the data, and later see how to change it.
Thank you.
If you're using
oc.invoke, you need to pass the appropriate command line arguments. Consider what happens if you run the same command manually:You get the names, but not the content. If you want the content, you would need to select a more appropriate output format, such as
-o json:You need to include the same arguments in your call to
oc.invoke. Something like this demonstrates how things would work:That works, but don't do that.
It's obvious you already know how to use selectors, since that's how you're iterating over projects. You should be using the same technique to iterate over configmaps:
This is based pretty much on examples straight from the documentation. Iterating over
configmaps.objects()gets you an API object for each ConfigMap. You have access to the name and the content.