CLI v7.1.0 "env" command panics if a variable contains values in "{{ }}"
jochenehret opened this issue · 6 comments
- I reviewed open and closed github issues that may be related to my problem.
- I tried updating to the latest version of the CF CLI to see if it fixed my problem.
- I attempted to run the command with
CF_TRACE=1
to help debug the issue. - I am reporting a bug that others will be able to reproduce.
Describe the bug and the command you saw an issue with
We've run cf7 env <appname>
and the command paniced with:
Something unexpected happened. This is a bug in cf.
Please re-run the command that caused this exception with the environment
variable CF_TRACE set to true.
Also, please update to the latest cli and try the command again:
https://code.cloudfoundry.org/cli/releases
Please create an issue at: https://code.cloudfoundry.org/cli/issues
Include the below information when creating the issue:
Command
cf env service-broker-blue
CLI Version
7.1.0+4c3168f9a.2020-09-09
Error
template: Display Text:1: function "app_router_url" not defined
Stack Trace
goroutine 1 [running]:
code.cloudfoundry.org/cli/util/panichandler.HandlePanic()
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/panichandler/handler.go:19 +0x81
panic(0xfeec80, 0xc0005b8840)
/usr/local/go/src/runtime/panic.go:679 +0x1b2
text/template.Must(...)
/usr/local/go/src/text/template/helper.go:23
code.cloudfoundry.org/cli/util/ui.generateTranslationFunc.func1(0xc000568000, 0x6143, 0xc0005b87d0, 0x1, 0x1, 0x4d7ab1, 0x1bf9e40)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/ui/i18n.go:119 +0x40a
code.cloudfoundry.org/cli/util/ui.(*UI).TranslateText(...)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/ui/ui.go:308
code.cloudfoundry.org/cli/util/ui.(*UI).DisplayText(0xc0000e5810, 0xc000568000, 0x6143, 0x0, 0x0, 0x0)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/ui/ui.go:246 +0x124
code.cloudfoundry.org/cli/command/v7.EnvCommand.displayEnvGroup(0x13b0300, 0xc0000e5810, 0x13b9a40, 0xc00001c300, 0x1393360, 0xc0003b2d40, 0x13bd660, 0xc00083f680, 0xc00003d8c0, 0xc00052aa80, ...)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/command/v7/env_command.go:97 +0x175
code.cloudfoundry.org/cli/command/v7.EnvCommand.Execute(0x13b0300, 0xc0000e5810, 0x13b9a40, 0xc00001c300, 0x1393360, 0xc0003b2d40, 0x13bd660, 0xc00083f680, 0xc00003d8c0, 0xc00052aa80, ...)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/command/v7/env_command.go:68 +0x6bf
code.cloudfoundry.org/cli/util/command_parser.(*CommandParser).executionWrapper(0xc00017b840, 0x7f93acaf8340, 0x1c23b18, 0xc00019d380, 0x0, 0x2, 0x0, 0x0)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/command_parser/command_parser.go:93 +0x270
code.cloudfoundry.org/cli/vendor/github.com/jessevdk/go-flags.(*Parser).ParseArgs(0xc000164af0, 0xc00003a040, 0x2, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/vendor/github.com/jessevdk/go-flags/parser.go:331 +0x89c
code.cloudfoundry.org/cli/util/command_parser.(*CommandParser).parse(0xc00017b840, 0xc00003a040, 0x2, 0x2, 0x100e680, 0x1c21340, 0xc000000120, 0xed, 0xc000527e70)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/command_parser/command_parser.go:221 +0xe0
code.cloudfoundry.org/cli/util/command_parser.(*CommandParser).ParseCommandFromArgs(...)
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/util/command_parser/command_parser.go:57
main.main()
/tmp/build/80754af9/gopath/src/code.cloudfoundry.org/cli/main.go:40 +0x19e
Calling cf6 env <appname>
worked. The problematic environment variable seems to be this one:
SERVICEBROKER_CATALOG: {"services":
(... huge json ...)
"endPointAddress": "{{app_router_url}}/SampleServices/ESPM.svc/v2"}
The app_router_url
is interpreted as function call by the GoLang template package. As it is nowhere defined, this call panics:
Line 119 in b823ae5
What happened
(see description)
Expected behavior
We expected the application's environment variables to be printed.
Exact Steps To Reproduce
With CF CLI v7.1.0,
- Push a test app
- cf set-env testapp ENV_VAR "{'{{key}}': 'value'}"
- cf env testapp
Provide more context
Platform:
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
CF CLI versions:
cf7 version 7.1.0+4c3168f9a.2020-09-09 (doesn't work)
cf6 version 6.53.0+8e2b70a4a.2020-10-01 (works)
capi-release: 1.98.0
Notes regarding V6 and V7 CLI support:
- V6:
- Minimum supported version of CF Deployment: v7.0.0 (CAPI Release: 1.74.0 (APIs 2.128.0 and 3.63.0))
- Maximum supported version of CF Deployment: v13.4.0 (CAPI Release: 1.94.0 (APIs 2.149.0 and 3.84.0))
- V7:
- Minimum supported version of CF Deployment: v13.5.0 (CAPI Release: 1.95.0 (APIs 2.150.0 and 3.85.0))
We have created an issue in Pivotal Tracker to manage this:
https://www.pivotaltracker.com/story/show/175814843
The labels on this github issue will be updated when the story is started.
Hello,
I can reproduce this issue in the CLI version: 7.2.0+be4a5ce2b.2020-12-10
Is there any workaround? Of course besides changing the braces?
I wonder why values of environment variables are treated as templates at the cf env command at all?
Obviously, the cf push, cf set-env commands are NOT treating it as templates...
Same issue occurs with CLI v8.0.0 + with the following env variable:
env:
SOME-ENV: "{{\"my-json\":\"value\"}}"
Same here:
Command
cf env my_app_example
CLI Version
8.5.0+73aa161.2022-09-12
Error
template: Display Text:1: function "DmPd" not defined
Stack Trace
goroutine 1 [running]:
code.cloudfoundry.org/cli/util/panichandler.HandlePanic()
/Users/runner/work/cli/cli/util/panichandler/handler.go:19 +0x4c
panic({0x1011da520, 0x14000190ce0})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/runtime/panic.go:838 +0x204
text/template.Must(...)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/text/template/helper.go:25
code.cloudfoundry.org/cli/util/ui.generateTranslationFunc.func1({0x140001c3950, 0x2f}, {0x14000379f90, 0x1, 0x140001945b0?})
/Users/runner/work/cli/cli/util/ui/i18n.go:119 +0x2bc
code.cloudfoundry.org/cli/util/ui.(*UI).TranslateText(...)
/Users/runner/work/cli/cli/util/ui/ui.go:409
code.cloudfoundry.org/cli/util/ui.(*UI).DisplayText(0x140001e02c0, {0x140001c3950, 0x2f}, {0x0?, 0x2?, 0xe?})
/Users/runner/work/cli/cli/util/ui/ui.go:248 +0x15c
code.cloudfoundry.org/cli/command/v7.EnvCommand.displayEnvGroup({{{0x1013ae4c8, 0x140001e02c0}, {0x1013af140, 0x140003bce00}, {0x1013a6d58, 0x14000089140}, {0x1013b1580, 0x1400044c9a0}, 0x14000458000, 0x1400058c5a0}, ...}, ...)
/Users/runner/work/cli/cli/command/v7/env_command.go:96 +0x138
code.cloudfoundry.org/cli/command/v7.EnvCommand.Execute({{{0x1013ae4c8, 0x140001e02c0}, {0x1013af140, 0x140003bce00}, {0x1013a6d58, 0x14000089140}, {0x1013b1580, 0x1400044c9a0}, 0x14000458000, 0x1400058c5a0}, ...}, ...)
/Users/runner/work/cli/cli/command/v7/env_command.go:67 +0x658
code.cloudfoundry.org/cli/util/command_parser.(*CommandParser).executionWrapper(0x140001912d0, {0x1020ae658, 0x101b05150}, {0x14000089120, 0x0, 0x2})
/Users/runner/work/cli/cli/util/command_parser/command_parser.go:93 +0x22c
github.com/jessevdk/go-flags.(*Parser).ParseArgs(0x140000cdc70, {0x14000192190, 0x2, 0x2})
/Users/runner/go/pkg/mod/github.com/jessevdk/go-flags@v1.4.1-0.20181221193153-c0795c8afcf4/parser.go:331 +0x704
code.cloudfoundry.org/cli/util/command_parser.(*CommandParser).parse(0x140001912d0, {0x14000192190?, 0x2, 0x2}, {0x1012056a0, 0x101b02760})
/Users/runner/work/cli/cli/util/command_parser/command_parser.go:224 +0xd0
code.cloudfoundry.org/cli/util/command_parser.(*CommandParser).ParseCommandFromArgs(...)
/Users/runner/work/cli/cli/util/command_parser/command_parser.go:57
main.main()
/Users/runner/work/cli/cli/main.go:41 +0x284
goroutine 18 [chan receive]:
k8s.io/klog/v2.(*loggingT).flushDaemon(0x0?)
/Users/runner/go/pkg/mod/k8s.io/klog/v2@v2.9.0/klog.go:1169 +0x60
created by k8s.io/klog/v2.init.0
/Users/runner/go/pkg/mod/k8s.io/klog/v2@v2.9.0/klog.go:420 +0x154
goroutine 665 [select]:
net/http.(*persistConn).writeLoop(0x14000000240)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/http/transport.go:2392 +0xa4
created by net/http.(*Transport).dialConn
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/http/transport.go:1751 +0x1240
goroutine 664 [IO wait]:
internal/poll.runtime_pollWait(0x1020c8e38, 0x72)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/runtime/netpoll.go:302 +0xa4
internal/poll.(*pollDesc).wait(0x140003cd300?, 0x14000462000?, 0x0)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/internal/poll/fd_poll_runtime.go:83 +0x2c
internal/poll.(*pollDesc).waitRead(...)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0x140003cd300, {0x14000462000, 0x7d38, 0x7d38})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/internal/poll/fd_unix.go:167 +0x1e4
net.(*netFD).Read(0x140003cd300, {0x14000462000?, 0x14000480005?, 0x0?})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/fd_posix.go:55 +0x2c
net.(*conn).Read(0x14000112068, {0x14000462000?, 0x140004f57c8?, 0x1004d8028?})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/net.go:183 +0x38
crypto/tls.(*atLeastReader).Read(0x1400000c5a0, {0x14000462000?, 0x0?, 0x1004ce018?})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/crypto/tls/conn.go:785 +0x44
bytes.(*Buffer).ReadFrom(0x140003bd778, {0x101396378, 0x1400000c5a0})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/bytes/buffer.go:204 +0x94
crypto/tls.(*Conn).readFromUntil(0x140003bd500, {0x128f6e4d8?, 0x14000112068}, 0xa00000000003771?)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/crypto/tls/conn.go:807 +0xd8
crypto/tls.(*Conn).readRecordOrCCS(0x140003bd500, 0x0)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/crypto/tls/conn.go:614 +0xdc
crypto/tls.(*Conn).readRecord(...)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/crypto/tls/conn.go:582
crypto/tls.(*Conn).Read(0x140003bd500, {0x1400001a000, 0x1000, 0x0?})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/crypto/tls/conn.go:1285 +0x180
net/http.(*persistConn).Read(0x14000000240, {0x1400001a000?, 0x1004c9060?, 0x1400053a240?})
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/http/transport.go:1929 +0x54
bufio.(*Reader).fill(0x140001a91a0)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/bufio/bufio.go:106 +0x100
bufio.(*Reader).Peek(0x140001a91a0, 0x1)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/bufio/bufio.go:144 +0x64
net/http.(*persistConn).readLoop(0x14000000240)
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/http/transport.go:2093 +0x148
created by net/http.(*Transport).dialConn
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/net/http/transport.go:1750 +0x11f4
goroutine 361 [chan receive]:
code.cloudfoundry.org/cli/util/configv3.catchSignal(0x0?, {0x1400011e1b0, 0x2b})
/Users/runner/work/cli/cli/util/configv3/write_config.go:64 +0x2c
created by code.cloudfoundry.org/cli/util/configv3.(*Config).WriteConfig
/Users/runner/work/cli/cli/util/configv3/write_config.go:41 +0x214
goroutine 360 [syscall]:
os/signal.signal_recv()
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/runtime/sigqueue.go:148 +0x30
os/signal.loop()
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/os/signal/signal_unix.go:23 +0x20
created by os/signal.Notify.func1.1
/Users/runner/hostedtoolcache/go/1.18.5/x64/src/os/signal/signal.go:151 +0x30
Your Platform Details
e.g. Mac OS X 10.11, Windows 8.1 64-bit, Ubuntu 14.04.3 64-bit
Shell
e.g. Terminal, iTerm, Powershell, Cygwin, gnome-terminal, terminator
Any info on this one? I will gladly pick it up when I find time if needed