do not create properties for configmap/secrets when these are disabled (for configdata only cases) (#1097)
This commit is contained in:
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
@@ -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() {
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user