Is there a way to get JsonPath for nodeSelector key word from kubectl
command line?
If I run the kubectl explain deployment --recursive
command, it will output a list of all key words:
apiVersion <string>
kind <string>
metadata <Object>
annotations <map[string]string>
clusterName <string>
creationTimestamp <string>
deletionGracePeriodSeconds <integer>
deletionTimestamp <string>
finalizers <[]string>
generateName <string>
generation <integer>
initializers <Object>
pending <[]Object>
name <string>
result <Object>
apiVersion <string>
code <integer>
details <Object>
causes <[]Object>
field <string>
message <string>
reason <string>
group <string>
kind <string>
...
This list is quite long and with key word like nodeSelector
it is hard to see that JsonPath is spec.template.spec.nodeSelector
.
One of the ways to do it is to convert output to correct YAML format like this: (I've done several replacements and deletions to get this output. Unfortunately, there are no native options for kubectl to achieve it.)
apiVersion: 'string'
kind: 'string'
metadata:
annotations: 'map[string]string'
clusterName: 'string'
creationTimestamp: 'string'
deletionGracePeriodSeconds: 'integer'
deletionTimestamp: 'string'
finalizers: '[]string'
generateName: 'string'
generation: 'integer'
initializers:
pending:
name: 'string'
result:
apiVersion: 'string'
code: 'integer'
details:
causes:
field: 'string'
message: 'string'
reason: 'string'
...
Now you can apply the solution from this stackoverflow question to get flattened output like this:
{
"apiVersion": "string",
"kind": "string",
"metadata.annotations": "map[string]string",
"metadata.clusterName": "string",
"metadata.creationTimestamp": "string",
"metadata.deletionGracePeriodSeconds": "integer",
"metadata.deletionTimestamp": "string",
"metadata.finalizers": "[]string",
"metadata.generateName": "string",
"metadata.generation": "integer",
"metadata.initializers.pending.name": "string",
"metadata.initializers.result.apiVersion": "string",
"metadata.initializers.result.code": "integer",
"metadata.initializers.result.details.causes.field": "string",
"metadata.initializers.result.details.causes.message": "string",
"metadata.initializers.result.details.causes.reason": "string",
...
}
Then you can filter or search the result to get the values you want.