Source code for insights.parsers.openshift_get_with_config

"""
OpenShift Get commands with configuration file
==============================================

The commands set is similar to the ``oc get`` commands. It is used to display openshift resources.
It uses the master configuration file rather than the default configuration when communicated with the client API.
It makes sure this command will only be executed on the master node of an OpenShift cluster.
This command will also not include the commands which display large size outputs.

Parsers included in this module are:

OcGetClusterRoleWithConfig - command ``oc get clusterrole --config /etc/origin/master/admin.kubeconfig``
--------------------------------------------------------------------------------------------------------

OcGetClusterRoleBindingWithConfig - command ``oc get clusterrolebinding --config /etc/origin/master/admin.kubeconfig``
----------------------------------------------------------------------------------------------------------------------
"""
from insights.core import CommandParser
from insights.core.exceptions import ParseException
from insights.core.plugins import parser
from insights.parsers import parse_fixed_table
from insights.specs import Specs


[docs] @parser(Specs.oc_get_clusterrole_with_config) class OcGetClusterRoleWithConfig(CommandParser): """ Class to parse ``oc get clusterrole --config /etc/origin/master/admin.kubeconfig`` A typical sample of the content of this file looks like:: NAME admin asb-access asb-auth basic-user cluster-admin cluster-debugger cluster-reader cluster-status edit hawkular-metrics-admin management-infra-admin namespace-viewer registry-admin Examples: >>> type(oc_get_cluster_role_with_config) <class 'insights.parsers.openshift_get_with_config.OcGetClusterRoleWithConfig'> >>> oc_get_cluster_role_with_config[0] 'admin' """
[docs] def parse_content(self, content): if len(content) < 2 or content[0].strip() != "NAME": raise ParseException("invalid content: {0}".format(content) if content else 'empty file') self.data = list(map(lambda x: x.strip(), content[1:]))
def __getitem__(self, item): return self.data[item] def __contains__(self, item): return item in self.data
[docs] @parser(Specs.oc_get_clusterrolebinding_with_config) class OcGetClusterRoleBindingWithConfig(CommandParser): """ Class to parse ``oc get clusterrolebinding --config /etc/origin/master/admin.kubeconfig`` Attributes: data (list): List of dicts, each dict containing one row of the table rolebinding (dict): It is a dictionary in which the key is rolebinding name and the value is the role. A typical sample of the content of this file looks like:: NAME ROLE USERS GROUPS SERVICE ACCOUNTS SUBJECTS admin /admin openshift-infra/template-instance-controller admin-0 /admin kube-service-catalog/default admin-1 /admin openshift-ansible-service-broker/asb asb-access /asb-access openshift-ansible-service-broker/asb-client asb-auth /asb-auth openshift-ansible-service-broker/asb auth-delegator-openshift-template-service-broker /system:auth-delegator openshift-template-service-broker/apiserver basic-users /basic-user system:authenticated cluster-admin /cluster-admin system:masters cluster-admin-0 /cluster-admin insights-scan/insights-scan Examples: >>> type(oc_get_clusterrolebinding_with_config) <class 'insights.parsers.openshift_get_with_config.OcGetClusterRoleBindingWithConfig'> >>> oc_get_clusterrolebinding_with_config.rolebinding["admin"] '/admin' """
[docs] def parse_content(self, content): if len(content) < 2 or "NAME" not in content[0]: raise ParseException("invalid content: {0}".format(content) if content else 'empty file') self.data = parse_fixed_table(content, header_substitute=[('SERVICE ACCOUNTS', 'SERVICE_ACCOUNTS')]) self.rolebinding = {} for rolebinding in self.data: rolebinding_name = rolebinding["NAME"].strip() rolebinding_role = rolebinding["ROLE"].strip() if rolebinding_name and rolebinding_role: self.rolebinding[rolebinding_name] = rolebinding_role