Change:
<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . --Is this a BUG REPORT or FEATURE REQUEST?: What happened: If the field in contains multiple entries, e.g. , none of them are enabled. Log message: What you expected to happen: Each of the comma-separated entries should be enabled. How to reproduce it (as minimally and precisely as possible): Read above. Anything else we need to know?: Root cause appears to be the value of is not split before being used in CC Environment: Kubernetes version (use ): Cloud provider or hardware configuration: OS (e.g. from /etc/os-release): Kernel (e.g. ): Install tools: Others:
[MILESTONENOTIFIER] Milestone Issue Current Note: This issue is marked as , and must be updated every 1 day during code freeze. Example update: <details open<summaryIssue Labels</summary- : Issue will be escalated to these SIGs if needed. : Never automatically move issue out of a release milestone; continually escalate to contributor and SIG through all available channels. : Fixes a bug discovered during the current release. </details<details<summaryHelp</summary<ul<li<a href=""Additional instructions</a</li<li<a href=""Commands for setting labels</a</li</ul</details
I think it's better to process when reading
currently is rendered from . While it is defined as in . When inputing , it will be rendered as a string array with length equals 1, instead of (length is 2). The result can be only when we have multiple set in the conf, just as the link shown by Also this is the same with .
I uploaded a PR () to parse the comma-separated values while still supporting the original gcfg muiltvalue mechanism (i.e., allowing setting the field multiple times) pointed out by the the above comments; this ensures backward compatibility (even though I don't know if anyone is using it that way). I'll let the reviewers decide which method they prefer.

Discussion:
if [[ -n "${NODE_INSTANCE_PREFIX:-}" ]]; then use_cloud_config="true" if [[ -n "${NODE_TAGS:-}" ]]; then <del> local -r node_tags="${NODE_TAGS}" </del> <ins> # split NODE_TAGS into an array by comma. IFS=',' read -r -a node_tags <<< ${NODE_TAGS} </ins> else local -r node_tags="${NODE_INSTANCE_PREFIX}" fi cat <<EOF >>/etc/gce.conf <del> node-tags = ${node_tags} </del> node-instance-prefix = ${NODE_INSTANCE_PREFIX} EOF <ins> for tag in ${node_tags[@]}; do cat <<EOF >>/etc/gce.conf node-tags = ${tag} EOF done </ins> fi if [[ -n "${MULTIZONE:-}" ]]; then use_cloud_config="true"

fi if [[ -n "${GCE_ALPHA_FEATURES:-}" ]]; then use_cloud_config="true" <del> cat <<EOF >>/etc/gce.conf alpha-features = ${GCE_ALPHA_FEATURES} </del> <ins> # split GCE_ALPHA_FEATURES into an array by comma. IFS=',' read -r -a alpha_features <<< ${GCE_ALPHA_FEATURES} for feature in ${alpha_features[@]}; do cat <<EOF >>/etc/gce.conf alpha-features = ${feature} </ins> EOF <ins> done </ins> fi if [[ -n "${SECONDARY_RANGE_NAME:-}" ]]; then use_cloud_config="true"

AlphaFeatureGate *AlphaFeatureGate } <ins> // TODO: replace gcfg with json </ins> type ConfigGlobal struct { TokenURL  string `gcfg:"token-url"` TokenBody string `gcfg:"token-body"`

// located in (i.e. where the controller will be running). If this is // blank, then the local zone will be discovered via the metadata server. LocalZone string `gcfg:"local-zone"` <del> // Possible values: List of api names separated by comma. Default to none. </del> <ins> // Default to none. </ins> // For example: MyFeatureFlag AlphaFeatures []string `gcfg:"alpha-features"` }