grafana/k6 · error

failed to open config file: %w

Error message

failed to open config file: %w

What it means

loadConfigFromFile opens the JSON config file referenced by config=path using the provided fsext.Fs; this error wraps the open failure (file missing, permission denied). The url secret source cannot read its configuration and startup fails.

Source

Thrown at internal/secretsource/url/url.go:501

	// Read headers - iterate through all environment variables
	// Headers are prefixed with K6_SECRET_SOURCE_URL_HEADER_
	for key, value := range env {
		if after, ok := strings.CutPrefix(key, "K6_SECRET_SOURCE_URL_HEADER_"); ok {
			headerName := after
			if cfg.Headers == nil {
				cfg.Headers = make(map[string]string)
			}
			cfg.Headers[headerName] = value
		}
	}

	return cfg, nil
}

func loadConfigFromFile(configPath string, fs fsext.Fs) (extConfig, error) {
	file, err := fs.Open(configPath)
	if err != nil {
		return extConfig{}, fmt.Errorf("failed to open config file: %w", err)
	}
	defer func() { _ = file.Close() }()

	configData, err := io.ReadAll(file)
	if err != nil {
		return extConfig{}, fmt.Errorf("failed to read config file: %w", err)
	}

	var fileCfg extConfig
	if err := json.Unmarshal(configData, &fileCfg); err != nil {
		return extConfig{}, fmt.Errorf("failed to parse JSON config: %w", err)
	}

	return fileCfg, nil
}

func validateURLTemplate(urlTemplate string) error {
	if urlTemplate == "" {

View on GitHub (pinned to 01ffac6f24)

Solutions

  1. Verify the config file path and permissions
  2. Use an absolute path for config=
  3. Fall back to inline key=value options instead of a config file
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at internal/secretsource/url/url.go:501 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18). Data as JSON: /api/errors/4debf9cbb2e8c10b. Report an issue: GitHub.