Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLI v7.1.0 "env" command panics if a variable contains values in "{{ }}" #2116

Open
4 tasks done
jochenehret opened this issue Nov 20, 2020 · 5 comments
Open
4 tasks done

Comments

@jochenehret
Copy link

  • 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:

formattedTemplate := template.Must(template.New("Display Text").Parse(translated))

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,

  1. Push a test app
  2. cf set-env testapp ENV_VAR "{'{{key}}': 'value'}"
  3. 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))
@cf-gitbot
Copy link

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.

@eddie-zalar
Copy link

eddie-zalar commented Jul 29, 2021

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...

@johha
Copy link
Contributor

johha commented May 2, 2022

Same issue occurs with CLI v8.0.0 + with the following env variable:

  env:
    SOME-ENV: "{{\"my-json\":\"value\"}}"

@ivanmiklec
Copy link

ivanmiklec commented Oct 12, 2022

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

@veredcon
Copy link

Is this issue is going to be addressed? It happens also in our scenario see here: #2381 in version 8.5.0.
Is there a roadmap when it will be fixed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants