{"record":{"id":"1012faf71b48815f","repo":"kubernetes/kops","slug":"heartbeatinterval-not-supported-by-etcd-manager","errorCode":null,"errorMessage":"HeartbeatInterval not supported by etcd-manager","messagePattern":"HeartbeatInterval not supported by etcd-manager","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/model/components/etcdmanager/model.go","lineNumber":443,"sourceCode":"\t\tif etcdCluster.Name == \"events\" && featureflag.EtcdEventsHTTP.Enabled() {\n\t\t\tscheme = \"http\"\n\t\t\tconfig.EtcdInsecure = new(true)\n\t\t\tklog.Warningf(\"etcd cluster %q is configured with TLS disabled (HTTP) via KOPS_FEATURE_FLAGS=EtcdEventsHTTP. This is for experiments only.\", etcdCluster.Name)\n\t\t}\n\n\t\tconfig.PeerUrls = fmt.Sprintf(\"%s://__name__:%d\", scheme, ports.PeerPort)\n\t\tconfig.ClientUrls = fmt.Sprintf(\"%s://%s:%d\", scheme, clientHost, ports.ClientPort)\n\t\tconfig.QuarantineClientUrls = fmt.Sprintf(\"%s://__name__:%d\", scheme, ports.QuarantinedGRPCPort)\n\n\t\t// TODO: We need to wire these into the etcd-manager spec\n\t\t// // add timeout/heartbeat settings\n\t\tif etcdCluster.LeaderElectionTimeout != nil {\n\t\t\t//      envs = append(envs, v1.EnvVar{Name: \"ETCD_ELECTION_TIMEOUT\", Value: convEtcdSettingsToMs(etcdClusterSpec.LeaderElectionTimeout)})\n\t\t\treturn nil, fmt.Errorf(\"LeaderElectionTimeout not supported by etcd-manager\")\n\t\t}\n\t\tif etcdCluster.HeartbeatInterval != nil {\n\t\t\t//      envs = append(envs, v1.EnvVar{Name: \"ETCD_HEARTBEAT_INTERVAL\", Value: convEtcdSettingsToMs(etcdClusterSpec.HeartbeatInterval)})\n\t\t\treturn nil, fmt.Errorf(\"HeartbeatInterval not supported by etcd-manager\")\n\t\t}\n\t}\n\n\t{\n\t\tswitch b.Cluster.GetCloudProvider() {\n\t\tcase kops.CloudProviderAWS:\n\t\t\tconfig.VolumeProvider = \"aws\"\n\n\t\t\tconfig.VolumeTag = []string{\n\t\t\t\tfmt.Sprintf(\"kubernetes.io/cluster/%s=owned\", b.Cluster.Name),\n\t\t\t\tawsup.TagNameEtcdClusterPrefix + etcdCluster.Name,\n\t\t\t\tawsup.TagNameRolePrefix + \"control-plane=1\",\n\t\t\t}\n\t\t\tconfig.VolumeNameTag = awsup.TagNameEtcdClusterPrefix + etcdCluster.Name\n\n\t\tcase kops.CloudProviderAzure:\n\t\t\tconfig.VolumeProvider = \"azure\"\n","sourceCodeStart":425,"sourceCodeEnd":461,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/model/components/etcdmanager/model.go#L425-L461","documentation":"Same pattern as LeaderElectionTimeout: etcdCluster.HeartbeatInterval is a legacy etcd setting that etcd-manager does not support, and rather than dropping it silently buildPod fails with this error so the config stays honest.","triggerScenarios":"Spec contains `etcdClusters[].heartbeatInterval` while etcd-manager manages the cluster; raised during model build in `kops update cluster`.","commonSituations":"Migrated pre-manager cluster specs; heartbeat tuning snippets copied from legacy kOps documentation; automated spec tools emitting legacy fields.","solutions":["Remove `heartbeatInterval` from the etcdCluster spec.","Apply any needed tuning through etcd-manager's supported configuration instead.","Validate the cleaned spec with `kops update cluster --dry-run` before applying."],"exampleFix":"// before\netcdClusters:\n- name: etcd\n  heartbeatInterval: 200ms\n  ...\n// after\netcdClusters:\n- name: etcd\n  ...","handlingStrategy":"validation","validationCode":"for _, c := range spec.EtcdClusters {\n\tif c.HeartbeatInterval != nil {\n\t\treturn fmt.Errorf(\"heartbeatInterval must be removed for etcd-manager clusters\")\n\t}\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remove legacy heartbeatInterval fields before applying manager-based clusters.","Run `kops update cluster --dry-run` to catch unsupported-field errors before real applies.","Keep spec templates aligned with the kOps version in use."],"tags":["kops","etcd-manager","unsupported-field","etcd-tuning"],"backgroundTag":"unsupported-config-option","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}