do not create properties for configmap/secrets when these are disabled (for configdata only cases) (#1097)

This commit is contained in:
erabii
2022-10-20 17:36:01 +03:00
committed by GitHub
parent feecb049c8
commit af61f5d3f9
7 changed files with 53 additions and 42 deletions

View File

@@ -70,7 +70,7 @@ public class KubernetesClientConfigDataLocationResolver extends KubernetesConfig
registerRetryBeans(configMapProperties, secretsProperties, bootstrapContext, coreV1Api, namespaceProvider);
}
else {
if (configMapProperties.isEnabled()) {
if (configMapProperties != null && configMapProperties.isEnabled()) {
KubernetesClientConfigMapPropertySourceLocator configMapPropertySourceLocator = new KubernetesClientConfigMapPropertySourceLocator(
coreV1Api, configMapProperties, namespaceProvider);
bootstrapContext.registerIfAbsent(ConfigMapPropertySourceLocator.class,
@@ -80,7 +80,7 @@ public class KubernetesClientConfigDataLocationResolver extends KubernetesConfig
event.getBootstrapContext().get(ConfigMapPropertySourceLocator.class)));
}
if (secretsProperties.isEnabled()) {
if (secretsProperties != null && secretsProperties.isEnabled()) {
KubernetesClientSecretsPropertySourceLocator secretsPropertySourceLocator = new KubernetesClientSecretsPropertySourceLocator(
coreV1Api, namespaceProvider, secretsProperties);
bootstrapContext.registerIfAbsent(SecretsPropertySourceLocator.class,
@@ -95,7 +95,7 @@ public class KubernetesClientConfigDataLocationResolver extends KubernetesConfig
private void registerRetryBeans(ConfigMapConfigProperties configMapProperties,
SecretsConfigProperties secretsProperties, ConfigurableBootstrapContext bootstrapContext,
CoreV1Api coreV1Api, KubernetesNamespaceProvider namespaceProvider) {
if (configMapProperties.isEnabled()) {
if (configMapProperties != null && configMapProperties.isEnabled()) {
ConfigMapPropertySourceLocator configMapPropertySourceLocator = new KubernetesClientConfigMapPropertySourceLocator(
coreV1Api, configMapProperties, namespaceProvider);
if (isRetryEnabledForConfigMap(configMapProperties)) {
@@ -110,7 +110,7 @@ public class KubernetesClientConfigDataLocationResolver extends KubernetesConfig
event.getBootstrapContext().get(ConfigMapPropertySourceLocator.class)));
}
if (secretsProperties.isEnabled()) {
if (secretsProperties != null && secretsProperties.isEnabled()) {
SecretsPropertySourceLocator secretsPropertySourceLocator = new KubernetesClientSecretsPropertySourceLocator(
coreV1Api, namespaceProvider, secretsProperties);
if (isRetryEnabledForSecrets(secretsProperties)) {

View File

@@ -93,9 +93,9 @@ public abstract class KubernetesConfigDataLocationResolver
public List<KubernetesConfigDataResource> resolveProfileSpecific(ConfigDataLocationResolverContext resolverContext,
ConfigDataLocation location, Profiles profiles) throws ConfigDataLocationNotFoundException {
PropertyHolder propertyHolder = loadProperties(resolverContext);
KubernetesClientProperties properties = propertyHolder.kubernetesClientProperties;
ConfigMapConfigProperties configMapProperties = propertyHolder.configMapConfigProperties;
SecretsConfigProperties secretsProperties = propertyHolder.secretsProperties;
KubernetesClientProperties properties = propertyHolder.kubernetesClientProperties();
ConfigMapConfigProperties configMapProperties = propertyHolder.configMapConfigProperties();
SecretsConfigProperties secretsProperties = propertyHolder.secretsProperties();
ConfigurableBootstrapContext bootstrapContext = resolverContext.getBootstrapContext();
bootstrapContext.registerIfAbsent(KubernetesClientProperties.class, InstanceSupplier.of(properties));
@@ -103,21 +103,27 @@ public abstract class KubernetesConfigDataLocationResolver
"configDataKubernetesClientProperties",
event.getBootstrapContext().get(KubernetesClientProperties.class)));
bootstrapContext.registerIfAbsent(ConfigMapConfigProperties.class, InstanceSupplier.of(configMapProperties));
bootstrapContext.addCloseListener(event -> event.getApplicationContext().getBeanFactory().registerSingleton(
"configDataConfigMapConfigProperties",
event.getBootstrapContext().get(ConfigMapConfigProperties.class)));
if (configMapProperties != null) {
bootstrapContext.registerIfAbsent(ConfigMapConfigProperties.class,
InstanceSupplier.of(configMapProperties));
bootstrapContext.addCloseListener(event -> event.getApplicationContext().getBeanFactory().registerSingleton(
"configDataConfigMapConfigProperties",
event.getBootstrapContext().get(ConfigMapConfigProperties.class)));
}
bootstrapContext.registerIfAbsent(SecretsConfigProperties.class, InstanceSupplier.of(secretsProperties));
bootstrapContext.addCloseListener(event -> event.getApplicationContext().getBeanFactory().registerSingleton(
"configDataSecretsConfigProperties", event.getBootstrapContext().get(SecretsConfigProperties.class)));
if (secretsProperties != null) {
bootstrapContext.registerIfAbsent(SecretsConfigProperties.class, InstanceSupplier.of(secretsProperties));
bootstrapContext.addCloseListener(event -> event.getApplicationContext().getBeanFactory().registerSingleton(
"configDataSecretsConfigProperties",
event.getBootstrapContext().get(SecretsConfigProperties.class)));
}
HashMap<String, Object> kubernetesConfigData = new HashMap<>();
kubernetesConfigData.put("spring.cloud.kubernetes.client.namespace", properties.getNamespace());
if (propertyHolder.applicationName != null) {
if (propertyHolder.applicationName() != null) {
// If its null it means sprig.application.name was not set so don't add it to
// the property source
kubernetesConfigData.put("spring.application.name", propertyHolder.applicationName);
kubernetesConfigData.put("spring.application.name", propertyHolder.applicationName());
}
PropertySource<Map<String, Object>> propertySource = new MapPropertySource("kubernetesConfigData",
kubernetesConfigData);
@@ -148,11 +154,13 @@ public abstract class KubernetesConfigDataLocationResolver
}
protected boolean isRetryEnabledForConfigMap(ConfigMapConfigProperties configMapProperties) {
return RETRY_IS_PRESENT && configMapProperties.getRetry().isEnabled() && configMapProperties.isFailFast();
return RETRY_IS_PRESENT && configMapProperties != null && configMapProperties.getRetry().isEnabled()
&& configMapProperties.isFailFast();
}
protected boolean isRetryEnabledForSecrets(SecretsConfigProperties secretsProperties) {
return RETRY_IS_PRESENT && secretsProperties.getRetry().isEnabled() && secretsProperties.isFailFast();
return RETRY_IS_PRESENT && secretsProperties != null && secretsProperties.getRetry().isEnabled()
&& secretsProperties.isFailFast();
}
protected KubernetesNamespaceProvider kubernetesNamespaceProvider(Environment environment) {
@@ -183,17 +191,23 @@ public abstract class KubernetesConfigDataLocationResolver
}
else {
kubernetesClientProperties = binder
.bind(KubernetesClientProperties.PREFIX, Bindable.of(KubernetesClientProperties.class), bindHandler)
.orElseGet(KubernetesClientProperties::new);
.bindOrCreate(KubernetesClientProperties.PREFIX, Bindable.of(KubernetesClientProperties.class), bindHandler);
}
kubernetesClientProperties.setNamespace(namespace);
ConfigMapConfigProperties configMapConfigProperties = binder
.bind(ConfigMapConfigProperties.PREFIX, ConfigMapConfigProperties.class)
.orElseGet(ConfigMapConfigProperties::new);
SecretsConfigProperties secretsProperties = binder
.bind(SecretsConfigProperties.PREFIX, SecretsConfigProperties.class)
.orElseGet(SecretsConfigProperties::new);
boolean configEnabled = binder.bind("spring.cloud.kubernetes.config.enabled", boolean.class).orElse(true);
boolean secretsEnabled = binder.bind("spring.cloud.kubernetes.secrets.enabled", boolean.class).orElse(true);
ConfigMapConfigProperties configMapConfigProperties = null;
if (configEnabled) {
configMapConfigProperties = binder.bindOrCreate(ConfigMapConfigProperties.PREFIX, ConfigMapConfigProperties.class);
}
SecretsConfigProperties secretsProperties = null;
if (secretsEnabled) {
secretsProperties = binder.bindOrCreate(SecretsConfigProperties.PREFIX, SecretsConfigProperties.class);
}
return new PropertyHolder(kubernetesClientProperties, configMapConfigProperties, secretsProperties,
applicationName);

View File

@@ -62,14 +62,6 @@ public class KubernetesConfigDataResource extends ConfigDataResource {
return this.properties;
}
public ConfigMapConfigProperties getConfigMapProperties() {
return configMapProperties;
}
public SecretsConfigProperties getSecretsConfigProperties() {
return secretsConfigProperties;
}
public boolean isOptional() {
return this.optional;
}

View File

@@ -72,7 +72,7 @@ public class Fabric8ConfigDataLocationResolver extends KubernetesConfigDataLocat
namespaceProvider);
}
else {
if (configMapProperties.isEnabled()) {
if (configMapProperties != null && configMapProperties.isEnabled()) {
Fabric8ConfigMapPropertySourceLocator configMapPropertySourceLocator = new Fabric8ConfigMapPropertySourceLocator(
kubernetesClient, configMapProperties, namespaceProvider);
bootstrapContext.registerIfAbsent(ConfigMapPropertySourceLocator.class,
@@ -81,7 +81,7 @@ public class Fabric8ConfigDataLocationResolver extends KubernetesConfigDataLocat
.registerSingleton("configDataConfigMapPropertySourceLocator",
event.getBootstrapContext().get(ConfigMapPropertySourceLocator.class)));
}
if (secretsProperties.isEnabled()) {
if (secretsProperties != null && secretsProperties.isEnabled()) {
Fabric8SecretsPropertySourceLocator secretsPropertySourceLocator = new Fabric8SecretsPropertySourceLocator(
kubernetesClient, secretsProperties, namespaceProvider);
bootstrapContext.registerIfAbsent(SecretsPropertySourceLocator.class,
@@ -96,7 +96,7 @@ public class Fabric8ConfigDataLocationResolver extends KubernetesConfigDataLocat
private void registerRetryBeans(ConfigMapConfigProperties configMapProperties,
SecretsConfigProperties secretsProperties, ConfigurableBootstrapContext bootstrapContext,
KubernetesClient kubernetesClient, KubernetesNamespaceProvider namespaceProvider) {
if (configMapProperties.isEnabled()) {
if (configMapProperties != null && configMapProperties.isEnabled()) {
ConfigMapPropertySourceLocator configMapPropertySourceLocator = new Fabric8ConfigMapPropertySourceLocator(
kubernetesClient, configMapProperties, namespaceProvider);
if (isRetryEnabledForConfigMap(configMapProperties)) {
@@ -111,7 +111,7 @@ public class Fabric8ConfigDataLocationResolver extends KubernetesConfigDataLocat
event.getBootstrapContext().get(ConfigMapPropertySourceLocator.class)));
}
if (secretsProperties.isEnabled()) {
if (secretsProperties != null && secretsProperties.isEnabled()) {
SecretsPropertySourceLocator secretsPropertySourceLocator = new Fabric8SecretsPropertySourceLocator(
kubernetesClient, secretsProperties, namespaceProvider);
if (isRetryEnabledForSecrets(secretsProperties)) {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.kubernetes.fabric8.config.locator_retry;
package org.springframework.cloud.kubernetes.fabric8.config.locator_retry.fail_fast_enabled_retry_disabled;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.kubernetes.fabric8.config.locator_retry;
package org.springframework.cloud.kubernetes.fabric8.config.locator_retry.fail_fast_enabled_retry_disabled;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
@@ -23,7 +23,9 @@ import org.junit.jupiter.api.BeforeAll;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
import org.springframework.cloud.kubernetes.commons.config.ConfigMapConfigProperties;
import org.springframework.cloud.kubernetes.fabric8.config.Application;
/**
@@ -49,7 +51,10 @@ class ConfigDataConfigFailFastEnabledButRetryDisabled extends ConfigFailFastEnab
private static KubernetesClient mockClient;
@MockBean
KubernetesNamespaceProvider kubernetesNamespaceProvider;
private KubernetesNamespaceProvider kubernetesNamespaceProvider;
@SpyBean
private ConfigMapConfigProperties properties;
@BeforeAll
static void setup() {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.kubernetes.fabric8.config.locator_retry;
package org.springframework.cloud.kubernetes.fabric8.config.locator_retry.fail_fast_enabled_retry_disabled;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.KubernetesClient;