Troubleshooting
With any porter error, it can really help to re-run the command again with the --debug
flag.
- Examine Previous Logs
- Mapping values are not allowed in this context
- You see apt errors when you use a custom Dockerfile
Examine Previous Logs
Porter saves the logs when a bundle is executed. Comparing the logs from a failing run to those from a successful run may assist with troubleshooting.
Mapping values are not allowed in this context
When you run your bundle you see the following error
executing install action from porter-hello (installation: porter-hello)
=== Step Data ===
map[bundle:map[credentials:map[] dependencies:map[] description:An example Porter configuration images:map[] invocationImage:porter-hello:latest name:porter-hello outputs:map[] parameters:map[test:{"test": "test"}] version:0.1.0]]
=== Step Template ===
exec:
command: bash
description: Install Hello World
flags:
c: echo '{{ bundle.parameters.test }}'
=== Rendered Step ===
exec:
command: bash
description: Install Hello World
flags:
c: echo '{"test": "value"}'
Error: unable to resolve step: invalid step yaml
exec:
command: bash
description: Install Hello World
flags:
c: echo '{"test": "value"}'
: yaml: line 5: mapping values are not allowed in this context
Right now Porter doesn’t preserve the wrapping quotes around mapping values, so if you
have lines that contain a colon followed by a space :
or a hash #
preceeded by a space, then
things will get tricky. If you can remove the space, or wrap the entire line in an extra quote, that
should workaround the problem.
before
parameters:
- name: test
description: test
type: string
default: '{"test": "value"}'
install:
- exec:
description: "Install Hello World"
command: bash
flags:
c: "echo {{ bundle.parameters.test}}"
after
Remove the extra space after the colon when defining the test parameter’s default
parameters:
- name: test
description: test
type: string
default: '{"test":"value"}'
install:
- exec:
description: "Install Hello World"
command: bash
flags:
c: "echo {{ bundle.parameters.test}}"
You see apt errors when you use a custom Dockerfile
When you use a custom Dockerfile you see apt
errors even though you did not use apt in your Dockerfile. This is because
Porter assumes a debian-based base image that has apt available. Many of the mixins use apt to install the dependencies
and the binary that they shim.
Starting Invocation Image Build =======>
Error: unable to build CNAB invocation image: failed to stream docker build output: The command '/bin/sh -c apt-get update && apt-get install -y apt-transport-https curl && curl -o kubectl https://storage.googleapis.com/kubernetes-release/release/v1.15.5/bin/linux/amd64/kubectl && mv kubectl /usr/local/bin && chmod a+x /usr/local/bin/kubectl' returned a non-zero code: 127
For now you must base your custom Dockerfile on debian or ubuntu.