andandandand
andandandand

Reputation: 22270

Error parsing yaml file: mapping values are not allowed here

I want to upload an app to Google App Engine:

I get this

Error parsing yaml file:
mapping values are not allowed here
  in "/home/antonio/Desktop/ATI/climate-change/app.yaml", line 2, column 8 

When running

./appcfg.py update /home/antonio/Desktop/ATI/climate-change

with this app.yaml file:

application:climate-change
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: helloworld.app

line 2, column 8 corresponds to the version line. What is wrong here? Btw, I'm using Ubuntu 12.04 here.

Upvotes: 134

Views: 341296

Answers (14)

Gerros
Gerros

Reputation: 768

I forgot a colon.

Starting point was:

plugins:
  - search
  - with-pdf

Then I wanted to add properties to - with-pdf and did it this way:

plugins:
  - search
  - with-pdf
      author: My Name

This resulted in a parsing error since now the - with-pdf needs a colon at the end. Then it worked.

plugins:
  - search
  - with-pdf:
      author: My Name

Upvotes: 0

elliptic1
elliptic1

Reputation: 1742

In my case, my url for downloading the file i was trying to parse was no longer valid, and so it was trying to parse the "Oops can't find the file" html page instead of the swagger file I had intended. Fixing my url resolved this.

Upvotes: 0

lysing
lysing

Reputation: 1

I had a similar issue in which the boolean keywords were incorrect.

threadsafe: True
...

Reference CloudBees tutorial found: link

Upvotes: 0

Simon Logic
Simon Logic

Reputation: 408

There was C-styled comment on top:

// some comment
root:
  ...

And nobody noticed this on review :/

Upvotes: 0

Artem S.
Artem S.

Reputation: 669

In my case I had this error when I was writing yml for a bitbucket ci pipeline.

script:
  - curl https://url.com -H "Content-Type: application/json"

Although header comes wrapped in quotes, yml parser complains "mapping values are not allowed here" because there's the space after the colon.

The solution is to remove the space:

script:
  - curl https://url.com -H "Content-Type:application/json"
                                          ^

Upvotes: 2

metasync
metasync

Reputation: 348

In our case, we had weird dash () instead of normal one (-) due to copy and paste.

Upvotes: 0

craftsmannadeem
craftsmannadeem

Reputation: 2943

There are couple of issues in the yaml file as mentioned by most, with yaml files normally it gets messy to identify the issue,

fortunately it can be identified easily with tools like yaml lint and you may not require help from the community.

Install it

npm install -g yaml-lint

Here is how you can validate

E:\githubRepos\prometheus-sql-exporter-usage>yamllint docker-compose.yaml
√ YAML Lint successful.

Upvotes: 2

Dave W. Smith
Dave W. Smith

Reputation: 24966

Change

application:climate-change

to

application: climate-change

The space after the colon is mandatory in yaml if you want a key-value pair. (See http://www.yaml.org/spec/1.2/spec.html#id2759963)

Upvotes: 155

Sajeev
Sajeev

Reputation: 51

Incorrect:

people:
  empId: 123
  empName: John
    empDept: IT

Correct:

people:
  emp:
    id: 123
    name: John
    dept: IT

Upvotes: 5

Graham P Heath
Graham P Heath

Reputation: 7399

My issue was a missing set of quotes;

Foo: bar 'baz'

should be

Foo: "bar 'baz'"

Upvotes: 1

Evgeny Veretennikov
Evgeny Veretennikov

Reputation: 4239

I've seen this error in a similar situation to mentioned in Joe's answer:

description: Too high 5xx responses rate: {{ .Value }} > 0.05

We have a colon in description value. So, the problem is in missing quotes around description value. It can be resolved by adding quotes:

description: 'Too high 5xx responses rate: {{ .Value }} > 0.05'

Upvotes: 8

lcfd
lcfd

Reputation: 1376

Another cause is wrong indentation which means trying to create the wrong objects. I've just fixed one in a Kubernetes Ingress definition:

Wrong

- path: / 
    backend: 
      serviceName: <service_name> 
      servicePort: <port> 

Correct

- path: /
  backend:
    serviceName: <service_name>
    servicePort: <port>

Upvotes: 92

Joe
Joe

Reputation: 1031

Maybe this will help someone else, but I've seen this error when the RHS of the mapping contains a colon without enclosing quotes, such as:

someKey: another key: Change to make today: work out more

should be

someKey: another key: "Change to make today: work out more"

Upvotes: 5

John Mee
John Mee

Reputation: 52253

Or, if spacing is not the problem, it might want the parent directory name rather than the file name.

Not $ dev_appserver helloapp.py
But $ dev_appserver hello/

For example:

Johns-Mac:hello john$ dev_appserver.py helloworld.py
Traceback (most recent call last):
  File "/usr/local/bin/dev_appserver.py", line 82, in <module>
    _run_file(__file__, globals())
...
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/yaml_listener.py", line 212, in _GenerateEventParameters
    raise yaml_errors.EventListenerYAMLError(e)
google.appengine.api.yaml_errors.EventListenerYAMLError: mapping values are not allowed here
  in "helloworld.py", line 3, column 39

Versus

Johns-Mac:hello john$ cd ..
Johns-Mac:fbm john$ dev_appserver.py hello/
INFO     2014-09-15 11:44:27,828 api_server.py:171] Starting API server at: http://localhost:61049
INFO     2014-09-15 11:44:27,831 dispatcher.py:183] Starting module "default" running at: http://localhost:8080

Upvotes: 6

Related Questions