vitessio/vitess · critical

error creating vtctldclient proxy config: %w

Error message

error creating vtctldclient proxy config: %w

What it means

cluster.New fails when vtctldclient.Parse cannot construct the vtctld proxy connection config from the cluster proto and cfg.VtctldFlags. Like the vtsql step, this is config/flag validation at startup; the underlying parse error is preserved as the cause.

Source

Thrown at go/vt/vtadmin/cluster/cluster.go:133

	protocluster := cluster.ToProto()

	vtsqlargs := buildPFlagSlice(cfg.VtSQLFlags)

	vtsqlCfg, err := vtsql.Parse(protocluster, disco, vtsqlargs)
	if err != nil {
		return nil, fmt.Errorf("error creating vtsql connection config: %w", err)
	}

	for _, opt := range cfg.vtsqlConfigOpts {
		vtsqlCfg = opt(vtsqlCfg)
	}

	vtctldargs := buildPFlagSlice(cfg.VtctldFlags)

	vtctldCfg, err := vtctldclient.Parse(protocluster, disco, vtctldargs)
	if err != nil {
		return nil, fmt.Errorf("error creating vtctldclient proxy config: %w", err)
	}

	for _, opt := range cfg.vtctldConfigOpts {
		vtctldCfg = opt(vtctldCfg)
	}

	cluster.DB, err = vtsql.New(ctx, vtsqlCfg)
	if err != nil {
		return nil, fmt.Errorf("error creating vtsql proxy: %w", err)
	}

	cluster.Vtctld, err = vtctldclient.New(ctx, vtctldCfg)
	if err != nil {
		return nil, fmt.Errorf("error creating vtctldclient: %w", err)
	}

	if cfg.TabletFQDNTmplStr != "" {
		cluster.TabletFQDNTmpl, err = template.New(cluster.ID + "-tablet-fqdn").Parse(cfg.TabletFQDNTmplStr)

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Correct the vtctld flags (host/port of the vtctld server) in the cluster config
  2. Validate flag names against vtctldclient.Parse for your version
  3. Test flags individually to isolate the offending one

Example fix

// before
vtctld: "-vtctld-host"
// after
vtctld: "-vtctld-host vtctld.example.com -vtctld-port 15999"
Defensive patterns

Strategy: validation

Validate before calling

// pre-validate vtctld flags before BuildCluster
if err := validateFlagNames("vtctld", cfg.VtctldFlags); err != nil {
    return fmt.Errorf("bad vtctld flags: %w", err)
}

Try / catch

c, err := cluster.BuildCluster(ctx, cfg)
if err != nil {
    if strings.Contains(err.Error(), "vtctldclient proxy config") {
        return fmt.Errorf("check --vtctld flags for cluster %q: %w", cfg.ID, err)
    }
    return err
}

Prevention

When it happens

Trigger: cfg.VtctldFlags contains an unknown or invalid flag for building the vtctldclient proxy config during cluster.BuildCluster.

Common situations: Wrong vtctld host/port; renamed or removed vtctld flags after upgrading vitess; malformed flag string (missing values, bad quoting).

Related errors


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/b3441e046787fe68. Report an issue: GitHub.