splunk-terraform / terraform-provider-signalfx

Terraform SignalFx provider
https://www.terraform.io/docs/providers/signalfx/
Mozilla Public License 2.0
31 stars 71 forks source link

Error: Failed to get user environment user: Current requires cgo or $USER set in environment #266

Closed kwhitejr closed 3 years ago

kwhitejr commented 3 years ago

I am attempting to deploy a SignalFX dashboard via Terraform from a Jenkins runner. I received the following error and it is not clear to me what is wrong (longer TRACE logs below):

Error: Failed to get user environment user: Current requires cgo or $USER set in environment
  on main.tf line 15, in provider "signalfx":
  15: provider "signalfx" {

Image: hashicorp/terraform:0.13.5 Jenkins: 2.235.1-alpine TF files and SFX credentials themselves are verified fine; I can deploy without issue from local machine. The same pipeline and image run AWS and Pagerduty providers without issue.

Trace logs:

...
2020/11/11 23:27:48 [TRACE] dag/walk: visiting "provider[\"registry.terraform.io/splunk-terraform/signalfx\"]"
2020/11/11 23:27:48 [TRACE] vertex "provider[\"registry.terraform.io/splunk-terraform/signalfx\"]": starting visit (*terraform.NodeApplyableProvider)
2020/11/11 23:27:48 [TRACE] vertex "provider[\"registry.terraform.io/splunk-terraform/signalfx\"]": evaluating
2020/11/11 23:27:48 [TRACE] [walkPlan] Entering eval tree: provider["registry.terraform.io/splunk-terraform/signalfx"]
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalSequence
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalInitProvider
2020-11-11T23:27:48.140Z [INFO]  plugin: configuring client automatic mTLS
2020-11-11T23:27:48.170Z [DEBUG] plugin: starting plugin: path=.terraform_signalfxDashboards/plugins/registry.terraform.io/splunk-terraform/signalfx/6.1.0/linux_amd64/terraform-provider-signalfx_v6.1.0 args=[.terraform_signalfxDashboards/plugins/registry.terraform.io/splunk-terraform/signalfx/6.1.0/linux_amd64/terraform-provider-signalfx_v6.1.0]
2020-11-11T23:27:48.170Z [DEBUG] plugin: plugin started: path=.terraform_signalfxDashboards/plugins/registry.terraform.io/splunk-terraform/signalfx/6.1.0/linux_amd64/terraform-provider-signalfx_v6.1.0 pid=56
2020-11-11T23:27:48.170Z [DEBUG] plugin: waiting for RPC address: path=.terraform_signalfxDashboards/plugins/registry.terraform.io/splunk-terraform/signalfx/6.1.0/linux_amd64/terraform-provider-signalfx_v6.1.0
2020-11-11T23:27:48.180Z [INFO]  plugin.terraform-provider-signalfx_v6.1.0: configuring server automatic mTLS: timestamp=2020-11-11T23:27:48.179Z
2020-11-11T23:27:48.210Z [DEBUG] plugin.terraform-provider-signalfx_v6.1.0: plugin address: address=/tmp/plugin846004023 network=unix timestamp=2020-11-11T23:27:48.210Z
2020-11-11T23:27:48.211Z [DEBUG] plugin: using plugin: version=5
2020-11-11T23:27:48.273Z [TRACE] plugin.stdio: waiting for stdio data
2020/11/11 23:27:48 [TRACE] BuiltinEvalContext: Initialized "provider[\"registry.terraform.io/splunk-terraform/signalfx\"]" provider for provider["registry.terraform.io/splunk-terraform/signalfx"]
2020/11/11 23:27:48 [TRACE] eval: terraform.EvalNoop
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalOpFilter
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalSequence
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalGetProvider
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalOpFilter
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalSequence
2020/11/11 23:27:48 [TRACE] eval: *terraform.EvalConfigProvider
2020/11/11 23:27:48 [TRACE] buildProviderConfig for provider["registry.terraform.io/splunk-terraform/signalfx"]: using explicit config only
2020/11/11 23:27:48 [TRACE] GRPCProvider: GetSchema
2020/11/11 23:27:48 [TRACE] No provider meta schema returned
2020/11/11 23:27:48 [TRACE] GRPCProvider: Configure
2020/11/11 23:27:48 [ERROR] eval: *terraform.EvalConfigProvider, err: Failed to get user environment user: Current requires cgo or $USER set in environment
2020/11/11 23:27:48 [ERROR] eval: *terraform.EvalSequence, err: Failed to get user environment user: Current requires cgo or $USER set in environment
2020/11/11 23:27:48 [ERROR] eval: *terraform.EvalOpFilter, err: Failed to get user environment user: Current requires cgo or $USER set in environment
2020/11/11 23:27:48 [ERROR] eval: *terraform.EvalSequence, err: Failed to get user environment user: Current requires cgo or $USER set in environment
2020/11/11 23:27:48 [TRACE] [walkPlan] Exiting eval tree: provider["registry.terraform.io/splunk-terraform/signalfx"]
2020/11/11 23:27:48 [TRACE] vertex "provider[\"registry.terraform.io/splunk-terraform/signalfx\"]": visit complete
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "module.sfx_golden_metrics.signalfx_time_chart.successful_request_trend (expand)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "signalfx_dashboard_group.team_dashboards (expand)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "module.sfx_golden_metrics.signalfx_single_value_chart.total_requests_per_minute (expand)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "module.sfx_golden_metrics.var.dashboard_group_id (expand)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "module.sfx_golden_metrics.signalfx_dashboard.golden_metrics (expand)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "provider[\"registry.terraform.io/splunk-terraform/signalfx\"] (close)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "module.sfx_golden_metrics.output.dashboard_id (expand)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "module.sfx_golden_metrics (close)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "meta.count-boundary (EachMode fixup)" errored, so skipping
2020/11/11 23:27:48 [TRACE] dag/walk: upstream of "root" errored, so skipping
2020/11/11 23:27:48 [INFO] backend/local: plan operation completed

Error: Failed to get user environment user: Current requires cgo or $USER set in environment

  on main.tf line 15, in provider "signalfx":
  15: provider "signalfx" {


...
kwhitejr commented 3 years ago

The error log seems to be originating from here (provider.go): https://github.com/splunk-terraform/terraform-provider-signalfx/blob/main/signalfx/provider.go#L117-L119

// $HOME/.signalfx.conf second
// this additional variable is used for mocking purposes in tests
if HomeConfigPath == "" {
    usr, err := user.Current()
    if err != nil {
        return nil, fmt.Errorf("Failed to get user environment %s", err.Error())
    }
    HomeConfigPath = usr.HomeDir + HomeConfigSuffix
}
kwhitejr commented 3 years ago

Temporary workaround: set image hashicorp/terraform:0.13.5 environment variable USER to any string.

jrcamp commented 3 years ago

It needs to be able to find a home directory. See https://github.com/splunk-terraform/terraform-provider-signalfx/issues/259#issuecomment-715544374