Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mapping values are not allowed in this context

I'm a novice regarding YAML format and kubernetes.

The following is a dep_prom.yml file.

--- apiVersion: extensions/v1beta1 kind: Deployment metadata:   labels:     name: prometheus-deployment   name: prometheus   #namespace: prometheus spec:   replicas: 1   template:     metadata:       labels:         app: prometheus     spec:       containers:       - image: prom/prometheus:master         name: prometheus         command:         - "/bin/prometheus"         args:         - "-config.file=/etc/prometheus/prometheus.yml"         - "-storage.local.path=/prometheus"         - "-storage.local.retention=24h"         ports:         - containerPort: 9090           protocol: TCP         volumeMounts:         - mountPath: "/prometheus"           name: data         - mountPath: "/etc/prometheus"           name: config-volume         resources:           requests:             cpu: 100m             memory: 100Mi           limits:             cpu: 500m             memory: 2500Mi       volumes:       - name: data         hostPath:           path: /data/prometheus       - name: config-volume         configMap:           name: prometheus       nodeSelector: westporch-kubeminion-1         kubernetes.io/hostname: 10.0.24.52 --- 

However... When I executed kubectl create -f dep_prom.yml

error: error converting YAML to JSON: yaml: line 47: mapping values are not allowed in this context

Line 47 is nodeSelector: westporch-kubeminion-1

I think that YAML file format is normal.

What is causing this error?

like image 480
Westporch Avatar asked Jun 02 '17 11:06

Westporch


People also ask

What are mapping values?

Map Values() Method in Java With Examples Map Values() method returns the Collection view of the values contained in this map. The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa.

What is Yaml syntax?

YAML syntaxYAML has features that come from Perl, C, XML, HTML, and other programming languages. YAML is also a superset of JSON, so JSON files are valid in YAML. YAML uses Python-style indentation to indicate nesting. Tab characters are not allowed, so whitespaces are used instead.

What is a Yaml file?

YAML is a digestible data serialization language often used to create configuration files with any programming language. Designed for human interaction, YAML is a strict superset of JSON, another data serialization language. But because it's a strict superset, it can do everything that JSON can and more.

What does “mapping values are not allowed” mean?

Or like the error says "mapping values are not allowed in this context". It means that the keys/values you have used in the yaml, may be syntactically right but not semantically.

What does it mean when a map is not allowed in YAML?

1). A syntax error (in your case it is not) in the yaml file. 2). Or like the error says "mapping values are not allowed in this context". It means that the keys/values you have used in the yaml, may be syntactically right but not semantically.

Why does nodeselector need a mapping as argument?

Because these are both key-value pair lines (i.e. item pairs of a block-style mapping) instead of but it might be that nodeSelector needs a mapping as argument instead of the scalar westporch-kubeminion-1 it has now.


1 Answers

You indicate you think the YAML format is normal, but it is not. This is a YAML error caused by the line at the end of the first document, starting with kubernetes.io/hostname being indented relative to the one before it. Because these are both key-value pair lines (i.e. item pairs of a block-style mapping) instead of

      nodeSelector: westporch-kubeminion-1         kubernetes.io/hostname: 10.0.24.52 

you either need to do:

      nodeSelector: westporch-kubeminion-1       kubernetes.io/hostname: 10.0.24.52 

but it might be that nodeSelector needs a mapping as argument instead of the scalar westporch-kubeminion-1 it has now.

      nodeSelector:         kubernetes.io/hostname: 10.0.24.52 

This error might mask a second one in the file, depending on how lenient kubernetes is. The --- is the end-of-directives marker and since the directives are optional it can occur at the start of a YAML document. The one at the bottom of your example indicates the start of a new document. Once you address the first error, you might get a warning about single documents based on that. (The end-of-document marker consists of three dots: ... at the beginning of a line followed by whitespace.

Of course any changes you make should confirm to what kubernetes is expecting, but the above stream is clearly non-valid as YAML in itself.

like image 115
Anthon Avatar answered Sep 20 '22 14:09

Anthon