From 663c8095c24e6f5988fa8d3898a199aed2b8a173 Mon Sep 17 00:00:00 2001 From: Emily Casey Date: Tue, 23 Jun 2020 19:04:43 -0400 Subject: [PATCH] Warns when vault binding has missing or unrecognized method Signed-off-by: Emily Casey --- .../boot/VaultBindingsPropertiesProcessor.java | 14 +++++++++++++- src/main/resources/META-INF/spring.factories | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/cloud/bindings/boot/VaultBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/VaultBindingsPropertiesProcessor.java index 63d0393..388440b 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/VaultBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/VaultBindingsPropertiesProcessor.java @@ -16,8 +16,11 @@ package org.springframework.cloud.bindings.boot; +import org.springframework.boot.context.event.ApplicationPreparedEvent; +import org.springframework.boot.logging.DeferredLog; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.context.ApplicationListener; import org.springframework.core.env.Environment; import java.util.Map; @@ -27,13 +30,15 @@ import static org.springframework.cloud.bindings.boot.Guards.isKindEnabled; /** * An implementation of {@link BindingsPropertiesProcessor} that detects {@link Binding}s of kind: {@value KIND}. */ -public final class VaultBindingsPropertiesProcessor implements BindingsPropertiesProcessor { +public final class VaultBindingsPropertiesProcessor implements BindingsPropertiesProcessor, ApplicationListener { /** * The {@link Binding} kind that this processor is interested in: {@value}. **/ public static final String KIND = "Vault"; + private static final DeferredLog LOG = new DeferredLog(); + @Override public void process(Environment environment, Bindings bindings, Map properties) { if (!isKindEnabled(environment, KIND)) { @@ -47,6 +52,7 @@ public final class VaultBindingsPropertiesProcessor implements BindingsPropertie String authenticationMethod = binding.getSecret().get("method"); if (authenticationMethod == null) { + LOG.warn(String.format("Key 'method' is missing from secret of binding '%s'", binding.getName())); return; } properties.put("spring.cloud.vault.authentication", authenticationMethod); @@ -102,8 +108,14 @@ public final class VaultBindingsPropertiesProcessor implements BindingsPropertie map.from("role").to("spring.cloud.vault.kubernetes.role"); map.from("kubernetes-path").to("spring.cloud.vault.kubernetes.kubernetes-path"); break; + default: + LOG.warn(String.format("Binding '%s' contains unrecognized 'method'", binding.getName())); } }); } + @Override + public void onApplicationEvent(ApplicationPreparedEvent event) { + LOG.switchTo(getClass()); + } } diff --git a/src/main/resources/META-INF/spring.factories b/src/main/resources/META-INF/spring.factories index ee9aa7b..e1aa3cb 100644 --- a/src/main/resources/META-INF/spring.factories +++ b/src/main/resources/META-INF/spring.factories @@ -1,6 +1,7 @@ org.springframework.context.ApplicationListener=\ org.springframework.cloud.bindings.boot.BindingFlattenedEnvironmentPostProcessor, \ - org.springframework.cloud.bindings.boot.BindingSpecificEnvironmentPostProcessor + org.springframework.cloud.bindings.boot.BindingSpecificEnvironmentPostProcessor, \ + org.springframework.cloud.bindings.boot.VaultBindingsPropertiesProcessor org.springframework.boot.env.EnvironmentPostProcessor=\ org.springframework.cloud.bindings.boot.BindingFlattenedEnvironmentPostProcessor, \ org.springframework.cloud.bindings.boot.BindingSpecificEnvironmentPostProcessor