Skip to content

Commit

Permalink
Add relaxed names to nodeSelector property resolution. (#464)
Browse files Browse the repository at this point in the history
* Add relaxed names to nodeSelector property resolution.

Fixes #462

* Fix KUBERNETES_DEPLOYMENT_NODE_SELECTOR name.
* Use KUBERNETES_DEPLOYER_PROPERTIES_PREFIX in KUBERNETES_DEPLOYMENT_NODE_SELECTOR name.
  • Loading branch information
corneil committed Jul 30, 2024
1 parent b676857 commit 93edfc3
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ PodSpec createPodSpec(AppDeploymentRequest appDeploymentRequest) {
}

Map<String, String> nodeSelectors = this.deploymentPropertiesResolver.getNodeSelectors(deploymentProperties);
if (nodeSelectors.size() > 0) {
if (!nodeSelectors.isEmpty()) {
podSpec.withNodeSelector(nodeSelectors);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
import org.springframework.cloud.deployer.spi.kubernetes.KubernetesDeployerProperties.InitContainer;
import org.springframework.cloud.deployer.spi.kubernetes.KubernetesDeployerProperties.SecretKeyRef;
import org.springframework.cloud.deployer.spi.kubernetes.support.PropertyParserUtils;
import org.springframework.cloud.deployer.spi.kubernetes.support.RelaxedNames;
import org.springframework.cloud.deployer.spi.util.ByteSizeUtils;
import org.springframework.cloud.deployer.spi.util.CommandLineTokenizer;
import org.springframework.core.io.ByteArrayResource;
Expand Down Expand Up @@ -354,15 +355,17 @@ Map<String, String> getNodeSelectors(Map<String, String> deploymentProperties) {
Map<String, String> nodeSelectors = new HashMap<>();

String nodeSelector = this.properties.getNodeSelector();

String nodeSelectorDeploymentProperty = deploymentProperties
.getOrDefault(KubernetesDeployerProperties.KUBERNETES_DEPLOYMENT_NODE_SELECTOR, "");

boolean hasGlobalNodeSelector = StringUtils.hasText(properties.getNodeSelector());
String nodeSelectorDeploymentProperty = deploymentProperties.getOrDefault(KubernetesDeployerProperties.KUBERNETES_DEPLOYMENT_NODE_SELECTOR, "");
for (String name : RelaxedNames.forCamelCase(KubernetesDeployerProperties.KUBERNETES_DEPLOYMENT_NODE_SELECTOR)) {
String value = deploymentProperties.get(name);
if (StringUtils.hasText(value)) {
nodeSelectorDeploymentProperty = value;
break;
}
}
boolean hasDeployerPropertyNodeSelector = StringUtils.hasText(nodeSelectorDeploymentProperty);

if ((hasGlobalNodeSelector && hasDeployerPropertyNodeSelector) ||
(!hasGlobalNodeSelector && hasDeployerPropertyNodeSelector)) {
if (hasDeployerPropertyNodeSelector) {
nodeSelector = nodeSelectorDeploymentProperty;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class KubernetesDeployerProperties {
* Constants for app deployment properties that don't have a deployer level default
* property.
*/
static final String KUBERNETES_DEPLOYMENT_NODE_SELECTOR = "spring.cloud.deployer.kubernetes.deployment.nodeSelector";
static final String KUBERNETES_DEPLOYMENT_NODE_SELECTOR = KUBERNETES_DEPLOYER_PROPERTIES_PREFIX + ".nodeSelector";

/**
* The maximum concurrent tasks allowed for this platform instance.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,18 @@ public void deployWithNodeSelectorDeploymentProperty() throws Exception {

assertThat(podSpec.getNodeSelector()).containsOnly(entry("disktype", "ssd"), entry("os", "linux"));
}
@Test
public void deployWithNodeSelectorTrainTruckCaseProperty() throws Exception {
AppDefinition definition = new AppDefinition("app-test", null);
Map<String, String> props = new HashMap<>();
props.put(KubernetesDeployerProperties.KUBERNETES_DEPLOYER_PROPERTIES_PREFIX + ".node-selector", "os: linux");
AppDeploymentRequest appDeploymentRequest = new AppDeploymentRequest(definition, getResource(), props);

deployer = k8sAppDeployer();
PodSpec podSpec = deployer.createPodSpec(appDeploymentRequest);

assertThat(podSpec.getNodeSelector()).containsOnly(entry("os", "linux"));
}

@Test
public void deployWithNodeSelectorDeploymentPropertyGlobalOverride() throws Exception {
Expand Down

0 comments on commit 93edfc3

Please sign in to comment.