kubernetes/kops · error

error loading config file

Error message

error loading config file: %v

What it means

OpenstackConfig.getSection loads the INI config file resolved by filename() using go-ini's ini.Load. If the file cannot be read or parsed (missing, unreadable permissions, malformed INI), the error is wrapped as 'error loading config file'.

Solutions

  1. Verify the resolved path exists and is readable: ls -l $(echo $OPENSTACK_CREDENTIAL_FILE || echo ~/.openstack/config).
  2. Ensure the file is valid INI with [section] headers and key = value lines.
  3. Fix file permissions so the kops process user can read it.
  4. Check the wrapped %v cause for parse errors and fix the offending line.

Example fix

// before (malformed INI)
Global
region RegionOne
// after
[Global]
region = RegionOne
Defensive patterns

Strategy: validation

Validate before calling

// Pre-validate the INI file parses before invoking the library
if _, err := ini.Load(configPath); err != nil {
	return fmt.Errorf("openstack config %s is not valid INI: %w", configPath, err)
}

Prevention

When it happens

Trigger: GetRegion, GetServiceConfig, or getCredentialFromFile -> getSection when the config path (from OPENSTACK_CREDENTIAL_FILE or ~/.openstack/config) does not exist, has wrong permissions, or contains invalid INI syntax.

Common situations: OPENSTACK_CREDENTIAL_FILE pointing to a nonexistent path, config file with YAML/JSON content instead of INI, duplicate/broken keys, or a permissions issue after copying with root ownership.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/507664acc3764bf1. Report an issue: GitHub.

Appendix: source

Thrown at util/pkg/vfs/swiftfs.go:125

	}

	homeDir := homedir.HomeDir()
	if homeDir == "" {
		return "", fmt.Errorf("can not find home directory")
	}
	f := filepath.Join(homeDir, ".openstack", "config")
	klog.V(2).Infof("using openstack config found in %s", f)
	return f, nil
}

func (oc OpenstackConfig) getSection(name string, items []string) (map[string]string, error) {
	filename, err := oc.filename()
	if err != nil {
		return nil, err
	}
	config, err := ini.Load(filename)
	if err != nil {
		return nil, fmt.Errorf("error loading config file: %v", err)
	}
	section, err := config.GetSection(name)
	if err != nil {
		return nil, fmt.Errorf("error getting section of %s: %v", name, err)
	}
	values := make(map[string]string)
	for _, item := range items {
		values[item] = section.Key(item).String()
	}
	return values, nil
}

func (oc OpenstackConfig) GetCredential() (gophercloud.AuthOptions, error) {
	// prioritize environment config
	env, enverr := openstack.AuthOptionsFromEnv()
	if enverr != nil {
		klog.Warningf("Could not initialize OpenStack config from environment: %v", enverr)
		// fallback to config file

View on GitHub (pinned to 4c8573c808)