Code Monkey home page Code Monkey logo

spring-vault's Introduction

Spring Vault

Spring Vault provides client-side support for accessing, storing and revoking secrets. With HashiCorp’s Vault you have a central place to manage external secret data for applications across all environments. Vault can manage static and dynamic secrets such as application data, username/password for remote applications/resources and provide credentials for external services such as MySQL, PostgreSQL, Apache Cassandra, Consul, AWS and more.

Getting Help

For a comprehensive treatment of all the Spring Vault features, please refer to:

Features

Specifically for Spring applications:

  • JavaConfig for Vault Client

  • Retrieve secrets from Vault and initialize Spring Environment with remote property sources

  • Obtain secrets secured with SSL

  • Token, AppId, AppRole, Client Certificate, Cubbyhole, and AWS-EC2 authentication

  • Bootstrap application context: a parent context for the main application that can be trained to do anything

Spring Boot users can benefit from Spring Cloud Vault Config, an optimized integration with Vault to provide encrypted Vault properties inside Spring Boot applications. Spring Cloud Vault can also generate credentials for various services like MySQL, PostgreSQL, MongoDB and much more.

Quick Start

Maven configuration

Add the Maven dependency:

<dependency>
  <groupId>org.springframework.vault</groupId>
  <artifactId>spring-vault-core</artifactId>
  <version>${version}</version>
</dependency>

If you’d rather like the latest snapshots of the upcoming major version, use our Maven snapshot repository and declare the appropriate dependency version.

<dependency>
  <groupId>org.springframework.vault</groupId>
  <artifactId>spring-vault</artifactId>
  <version>${version}-SNAPSHOT</version>
</dependency>

<repository>
  <id>spring-snapshot</id>
  <name>Spring Snapshot Repository</name>
  <url>https://repo.spring.io/snapshot</url>
</repository>

Vault Setup

Prerequisites

To get started with Vault and this guide you need a *NIX-like operating systems that provides:

  • curl, openssl and unzip

  • at least Java 8 and a properly configured JAVA_HOME environment variable

Note

If you use Windows Subsystem for Linux (WSL) you have to share JAVA_HOME between WSL and Windows. Call following command in PowerShell:

$ setx WSLENV "JAVA_HOME/p"

Install Vault

$ src/test/bash/install_vault.sh

Create SSL certificates for Vault

$ src/test/bash/create_certificates.sh
Note
create_certificates.sh creates certificates in work/ca and a JKS truststore work/keystore.jsk. If you want to run Spring Vault using this quickstart guide you need to configure the truststore to file:work/keystore.jks.

Start Vault server

$ src/test/bash/local_run_vault.sh

Vault is started listening on 0.0.0.0:8200 using the inmem storage and https. Vault is sealed and not initialized when starting up so you need to initialize it first.

$ cd vault
$ export VAULT_ADDR="https://localhost:8200"
$ export VAULT_SKIP_VERIFY=true # Don't do this for production
$ ./vault operator init

You should see something like:

Key 1: 7149c6a2e16b8833f6eb1e76df03e47f6113a3288b3093faf5033d44f0e70fe701
Key 2: 901c534c7988c18c20435a85213c683bdcf0efcd82e38e2893779f152978c18c02
Key 3: 03ff3948575b1165a20c20ee7c3e6edf04f4cdbe0e82dbff5be49c63f98bc03a03
Key 4: 216ae5cc3ddaf93ceb8e1d15bb9fc3176653f5b738f5f3d1ee00cd7dccbe926e04
Key 5: b2898fc8130929d569c1677ee69dc5f3be57d7c4b494a6062693ce0b1c4d93d805
Initial Root Token: 19aefa97-cccc-bbbb-aaaa-225940e63d76

Vault initialized with 5 keys and a key threshold of 3. Please
securely distribute the above keys. When the Vault is re-sealed,
restarted, or stopped, you must provide at least 3 of these keys
to unseal it again.

Vault does not store the master key. Without at least 3 keys,
your Vault will remain permanently sealed.

Vault will initialize and return a set of unsealing keys and the root token. Pick 3 keys and unseal Vault.

$ ./vault operator unseal (Key 1)
$ ./vault operator unseal (Key 2)
$ ./vault operator unseal (Key 3)

Vault is now initialized and unsealed.

Using VaultTemplate

The class VaultTemplate, located in the package org.springframework.vault.core, is the central class of the Spring’s Vault support providing a rich feature set to interact with Vault. The template offers convenience operations to read, write and delete data in Vault and provides a mapping between your domain objects and Vault data.

You can have Spring initializing Spring Vault by providing a JavaConfig:

@Configuration
public class AppConfig extends AbstractVaultConfiguration {

    /**
     * Specify an endpoint for connecting to Vault.
     */
    @Override
    public VaultEndpoint vaultEndpoint() {
        return new VaultEndpoint();
    }

    /**
     * Configure a client authentication.
     * Please consider a more secure authentication method
     * for production use.
     */
    @Override
    public ClientAuthentication clientAuthentication() {
        return new TokenAuthentication("…");
    }
}

and then use VaultTemplate through its interface VaultOperations:

public class MyApp {

    @Autowired VaultOperations vaultOperations;

    public void useVault() {

        Secrets secrets = new Secrets();
        secrets.username = "hello";
        secrets.password = "world";

        vaultOperations.write("secret/myapp", secrets);

        VaultResponseSupport<Secrets> response = vaultOperations.read("secret/myapp", Secrets.class);
        System.out.println(response.getData().getUsername());

        vaultOperations.delete("secret/myapp");
    }
}

@VaultPropertySource

@VaultPropertySource provides a convenient and declarative mechanism for adding a PropertySource to Spring’s Environment.

To be used in conjunction with @Configuration classes. Example usage

Given a Vault path secret/my-application containing the configuration data pair database.password=mysecretpassword, the following @Configuration class uses @VaultPropertySource to contribute secret/my-application to the Environment’s set of `PropertySources.

@Configuration
@VaultPropertySource("secret/my-application")
public class AppConfig {

    @Autowired Environment env;

    @Bean
    public TestBean testBean() {
        TestBean testBean = new TestBean();
        testBean.setPassword(env.getProperty("database.password"));
        return testBean;
    }
}

Building

Build requirements for Vault

Spring Vault requires SSL certificates and a running Vault instance listening on localhost:8200. Certificates and the Vault setup are scripted, the scripts are located in src/test/bash.

The following scripts need to be run prior to building the project for the tests to pass.

$ ./src/test/bash/install_vault.sh
$ ./src/test/bash/create_certificates.sh
$ ./src/test/bash/env.sh
$ ./src/test/bash/local_run_vault.sh

Alternatively you can run

$ ./src/test/bash/start.sh

Changes to the documentation should be made to the adocs found under src/main/asciidoc/

Basic Compile and Test

To build the source you will need to install JDK 1.6.

Spring Vault uses Maven for most build-related activities, and you should be able to get off the ground quite quickly by cloning the project you are interested in and typing

$ ./mvnw install
Note
You can also install Maven (>=3.3.3) yourself and run the mvn command in place of ./mvnw in the examples below. If you do that you also might need to add -P spring if your local Maven settings do not contain repository declarations for spring pre-release artifacts.
Note
Be aware that you might need to increase the amount of memory available to Maven by setting a MAVEN_OPTS environment variable with a value like -Xmx512m -XX:MaxPermSize=128m. We try to cover this in the .mvn configuration, so if you find you have to do it to make a build succeed, please raise a ticket to get the settings added to source control.

For hints on how to build the project look in .travis.yml if there is one. There should be a "script" and maybe "install" command. Also look at the "services" section to see if any services need to be running locally (e.g. mongo or rabbit). Ignore the git-related bits that you might find in "before_install" since they’re related to setting git credentials and you already have those.

Note
If all else fails, build with the command from .travis.yml (usually ./mvnw install).

Documentation

The module has a "distribute" profile, and if you switch that on it will try to build asciidoc sources from src/main/asciidoc.

Working with the code

If you don’t have an IDE preference we would recommend that you use Spring Tools Suite or Eclipse when working with the code. We use the m2eclipe eclipse plugin for maven support. Other IDEs and tools should also work without issue as long as they use Maven 3.3.3 or better.

Importing into eclipse with m2eclipse

We recommend the m2eclipe eclipse plugin when working with eclipse. If you don’t already have m2eclipse installed it is available from the "eclipse marketplace".

Note
Older versions of m2e do not support Maven 3.3, so once the projects are imported into Eclipse you will also need to tell m2eclipse to use the right profile for the projects.If you see many different errors related to the POMs in the projects, check that you have an up to date installation. If you can’t upgrade m2e, add the "spring" profile to your settings.xml. Alternatively you can copy the repository settings from the "spring" profile of the parent pom into your settings.xml.

Importing into eclipse without m2eclipse

If you prefer not to use m2eclipse you can generate eclipse project metadata using the following command:

$ ./mvnw eclipse:eclipse

The generated eclipse projects can be imported by selecting import existing projects from the file menu.

Importing into IntelliJ

In IntelliJ, choose File -→ Open and select the pom.xml it will automatically detect it is a Maven project and starts downloading all necessary dependencies.

Formatting code (Spring Java Format)

The project uses Spring Java Format through the spring-javaformat-maven-plugin. You can run ./mvnw spring-javaformat:apply to reformat code. Follow the instructions for Eclipse or IntelliJ to install a plugin to enable formatting in your favorite IDE.

Contributing

Spring Vault is released under the non-restrictive Apache 2.0 license, and follows a very standard Github development process, using Github tracker for issues and merging pull requests into main. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below.

Sign the Contributor License Agreement

Before we accept a non-trivial patch or pull request we will need you to sign the Contributor License Agreement. Signing the contributor’s agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. Active contributors might be asked to join the core team, and given the ability to merge pull requests.

Code of Conduct

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].

Code Conventions and Housekeeping

None of these is essential for a pull request, but they will all help. They can also be added after the original pull request but before a merge.

  • Spring Vault uses the Spring JavaFormat conventions. Formatting is applied when running the build through $ ./mvnw compile IDE plugins are available from https://github.com/spring-io/spring-javaformat.

  • Make sure all new .java files to have a Javadoc class comment with at least an @author tag identifying you, and preferably at least a paragraph on what the class is for.

  • Add the ASF license header comment to all new .java files (copy from existing files in the project)

  • Add yourself as an @author to the .java files that you modify substantially (more than cosmetic changes).

  • Please include unit tests.

  • If no-one else is using your branch, please rebase it against the current main (or other target branch in the main project).

  • When writing a commit message please follow these conventions, if you are fixing an existing issue please add Fixes gh-XXXX at the end of the commit message (where XXXX is the issue number).

spring-vault's People

Contributors

aantono avatar abremora avatar adeinega avatar andreasgebauer avatar bdemers avatar christophetd avatar danielfran avatar fivesmallq avatar hwangnara avatar maaaace avatar mp911de avatar mryangza avatar nbaars avatar raoofm avatar runbing avatar sdeleuze avatar sokomishalov avatar spencergibb avatar spring-builds avatar spring-operator avatar sstrang avatar svefeh avatar sworisbreathing avatar thomaskasene avatar tiwarivikash avatar tweiand avatar voberle avatar whiskeysierra avatar yfaney avatar zak905 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-vault's Issues

Add support to manage policies.

Creating policies in Vault is cumbersome due to the missing documentation and a rather inconvenient format. It would make sense to provide data structures that reflect Vault's policy format so administration of policies could be leveraged.

Reactive Support

It would be nice to have optional reactive support with vault for when Spring 5 goes GA.

Getting Started and Dependencies

The current Getting Started documentation states the dependencies necessary are:

<dependencies>

  <!-- other dependency elements omitted -->

  <dependency>
    <groupId>org.springframework.vault</groupId>
    <artifactId>spring-vault-core</artifactId>
    <version>{version}</version>
  </dependency>

</dependencies>

I found that in order to run the simple application, I need the following:

<dependencies>
    <dependency>
        <groupId>org.springframework.vault</groupId>
        <artifactId>spring-vault-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

It might be nice to bring in these dependencies transitively. If not, then it would at least be nice to include the necessary jars in the docs

VaultOperations and Passivity

Given we cannot control the vault API, how would we add additional functionality to VaultOperations and remain passive?

Document How to Externalize Vault's Token w/ VaultPropertySoure

It would be nice to document how to externalize Vault's Token when using VaultPropertySource. At the moment, there is a bit of a chicken and the egg problem when using standard Spring Environment.

One solution might be to instruct users to leverage system properties for this. We might also discuss how Spring Cloud (and in the future Spring Boot) have bootstrap.properties.

http://docs.spring.io/spring-vault/docs/1.0.0.BUILD-SNAPSHOT/reference/html/#vault.core.propertysupport

SLF4J vs commons-logging?

Is it intentional to use SLF4J as apposed to commons-logging (as Spring Framework does)? If it is, this doesn't seem ideal given the framework uses commons-logging. We should probably also update the dependencies for #20 to have slf4j an implementation and switch to jcl-over-slf4j

Fix missing plugin versions

[INFO] [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-source-plugin is missing.
[INFO] [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing.
[INFO] [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-deploy-plugin is missing.

VaultPropertySource should renew leases

Currently VaultPropertySource does not renew leases. Since every secret in Vault has a lease, it should renew the lease to ensure that the application continues to work even after the lease expires.

Spring Cloud Vault provides LeasingVaultPropertySource, but this means that VaultPropertySource really has no value for a long running application since the credentials will expire.

VaultBootstrapConfiguration Error

Hi!
Since today I'm having the following error while trying to start my application, yesterday was working OK.

Is it possible that same changes in the snapshot crashes with my code?

Thanks a lot!

Caused by: java.lang.NoSuchMethodException: org.springframework.cloud.vault.config.VaultBootstrapConfiguration$$EnhancerBySpringCGLIB$$f3816d8f.<init>()
        at java.lang.Class.getConstructor0(Class.java:3082)
        at java.lang.Class.getDeclaredConstructor(Class.java:2178)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80)
        ... 57 more

@VaultPropertySource should support custom prefixes

Currently @VaultPropertySource requires a vault path to function and registers all the keys associated to that path in the environment. This is very convenient, but a relative path loses some of the meaning of the variable name. For example, consider a setup which is @VaultPropertySource("mysql/creds/readonly"). Consuming the database username and password is now tied to the variables username and password. This isn't very meaningful in the context of the application, but it was in the context of the vault path.

It would be nice if the @VaultPropertySource supported a prefix. Something like: @VaultPropertySource(value="mysql/creds/readonly", propertyNamePrefix = "database."). Now the database username and password would be associated to the variables database.username and database.password.

VaultResponse is incompatible with Vault 0.6.2 (missing warnings in VaultResponseSupport)

The HTTP API for Vault now (as of 0.6.2) has a "warnings" field:

{
  "request_id":"f3fdbc6c-183e-1684-56dd-77b16eaac36d",
  "lease_id":"",
  "renewable":false,
  "lease_duration":2764800,
  "data":
  {
     "password":"test2",
     "username":"test"
  },
  "wrap_info":null,
  "warnings":null,
  "auth":null
}

This isn't bound in VaultResponseSupport and while VaultResponseSupport ignores unknowns, VaultResponse overrides that. When Jackson tries to deserialize for VaultOperations.read, it fails.

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "warnings" (class org.springframework.vault.support.VaultResponse), not marked as ignorable (8 known properties: "lease_id", "wrap_info", "renewable", "auth", "lease_duration", "data", "request_id", "metadata"])

Add PropertySource support

Add support to retrieve data from Vault paths and use it as PropertySource inside a Spring Environment.

Request sent in XML instead of JSON when com.fasterxml.jackson.dataformat.xml.XmlMapper exists in the classpath

We are running into issue with request sent in XML format instead of JSON, when com.fasterxml.jackson.dataformat.xml.XmlMapper exists in the classpath. This can be fixed by specifying the content-type to application/json, but it's very cumbersome to do this each time we want to make Vault request.

Also in certain places such as ClientCertificateAuthentication the content-type is set to null, resulting in the MappingJackson2XmlHttpMessageConverter being used and XML being sent

Reshape APIs

Currently the APIs of VaultTemplate and VaultClient look a lot like RestTemplate. If users want to do the REST operations, they already have RestTemplate to do this. It would be nice if the VaultClient APIs reflected the intent rather than the underlying REST semantics.

Task execution does not consider timeout

The use of AsyncTaskExecutor.execute(Runnable runnable, long delay) executes tasks immediately and not deferred. This causes an infinite loop and massive load on Vault.

The renewal should adopt the nature of its AsyncTaskExecutor: If the executor is a TaskScheduler it should schedule tasks otherwise delay task execution.

Consider adding a EnvironmentVaultConfiguration

Spring Vault usage requires either subclassing AbstractVaultConfiguration or providing beans by a custom app configuration. It would make sense to provide a EnvironmentVaultConfiguration to improve dev experience and resolve configuration from Environment.

A possible implementation could look like:

@Configuration
public class EnvironmentVaultConfiguration extends AbstractVaultConfiguration implements ApplicationContextAware {

    /**
     * Specify an endpoint for connecting to Vault.
     */
    @Override
    public VaultEndpoint vaultEndpoint() {
        String uri = getEnvironment().getProperty("vault.uri");
        if(uri != null) {
            return VaultEndpoint.from(URI.create(uri));
        }
        // ...
        throw new IllegalStateException();
    }

    /**
     * Configure a client authentication. Please consider a more secure
     * authentication method for production use.
     */
    @Override
    public ClientAuthentication clientAuthentication() {
        // ...
        String token = getEnvironment().getProperty("vault.token");
        if(token != null) {
            return new TokenAuthentication(token);
        }
        // ...
        throw new IllegalStateException();
    }
}

Thanks to @rwinch who proposed the idea.

Support Cubbyhole authentication

Cubbyhole authentication uses Vault primitives to provide a secured authentication workflow. Cubbyhole authentication uses tokens as primary login method. An ephemeral token is used to obtain a second, login VaultToken from Vault’s Cubbyhole secret backend. The login token is usually longer-lived and used to interact with Vault. The login token can be retrieved either from a wrapped response or from the data section.

See also: spring-cloud/spring-cloud-vault#15

Flatten hierarchical JSON objects into property paths

Flatten hierarchical JSON objects to property paths using dot-notation

  {
    "database": {
      "password": ...
    },
    "items": ["one", "two"],  
    "user.name": ...,
  }

should result in

database.password=...
items[0]=one
items[1]=two
user.name=...

Consul Tokens from Spring Vault do not get picked up by Spring Cloud Config Consul

I'm trying to get a consul token from vault, so that spring cloud consul can get additional config from consul.

When I use this config:

# bootstrap.yml

## Config for vault
spring.cloud.vault:
  host: vault.host
  port: 443
  scheme: https # must be https for production
  config:
    lifecycle:
      enabled: true
    order: -10
  authentication: APPROLE # Same thing happens when using token
  app-role:
    role-id: ******
    secret-id: *******
  consul:
    enabled: true
    role: application
  fail-fast: false

## Consul config
spring.cloud.consul:
  enabled: true
  host: 127.0.0.1 
  port: 8500
  config:
    enabled: true
    format: FILES
    failFast: true
    profile-separator: '-'
    default-context: application

Here's what I see on app startup:

2016-12-01 11:01:19.701 DEBUG 58221 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Could not find key 'spring.cloud.consul.token' in any property source
2016-12-01 11:01:19.701 DEBUG 58221 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Could not find key 'CONSUL_TOKEN' in any property source
2016-12-01 11:01:21.383 DEBUG 58221 --- [           main] org.apache.http.wire                     : http-outgoing-0 << "{"request_id":"3d26b618-1636-fa7b-2a1b-6039d3e4383f","lease_id":"consul/creds/application/570da8f4-7b23-6cf6-5956-8bcec0f9b735","renewable":true,"lease_duration":2592000,"data":{"token":"xxxxxxxxxx"},"wrap_info":null,"warnings":null,"auth":null}[\n]"
2016-12-01 11:01:21.854 DEBUG 58221 --- [           main] org.apache.http.wire                     :  >> "GET /v1/kv/config/application.properties?token= HTTP/1.1[\r][\n]"
2016-12-01 11:01:21.878 DEBUG 58221 --- [           main] org.apache.http.wire                     :  >> "GET /v1/kv/config/application.yaml?token= HTTP/1.1[\r][\n]"
2016-12-01 11:01:21.905 DEBUG 58221 --- [           main] org.apache.http.wire                     :  >> "GET /v1/kv/config/application.yml?token= HTTP/1.1[\r][\n]"
2016-12-01 11:01:21.920 DEBUG 58221 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'spring.cloud.consul.token' in [bootstrapProperties] with type [String]

Note that while a vault token is obtained, Spring Cloud Consul does not seem to be picking it up.

Here's the dependencies in play (With Spring boot 1.4.2.RELEASE)

[INFO] +- org.springframework.cloud:spring-cloud-consul-config:jar:1.1.2.RELEASE:compile
[INFO] +- org.springframework.cloud:spring-cloud-starter-consul-discovery:jar:1.1.2.RELEASE:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-starter-consul:jar:1.1.2.RELEASE:compile
[INFO] |  |  +- org.springframework.cloud:spring-cloud-commons:jar:1.1.6.RELEASE:compile
[INFO] |  |  +- org.springframework.cloud:spring-cloud-context:jar:1.1.6.RELEASE:compile
[INFO] |  |  +- org.springframework.cloud:spring-cloud-consul-core:jar:1.1.2.RELEASE:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-consul-discovery:jar:1.1.2.RELEASE:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-netflix-core:jar:1.2.3.RELEASE:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-starter-ribbon:jar:1.2.3.RELEASE:compile
[INFO] |  |  +- org.springframework.cloud:spring-cloud-starter:jar:1.1.6.RELEASE:compile
[INFO] |  |  +- org.springframework.cloud:spring-cloud-starter-archaius:jar:1.2.3.RELEASE:compile
[INFO] +- org.springframework.cloud:spring-cloud-vault-starter-config:jar:1.0.0.M1:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-vault-config:jar:1.0.0.M1:compile
[INFO] +- org.springframework.cloud:spring-cloud-vault-config-consul:jar:1.0.0.M1:compile# cloud dependencies

Looking at the /env endpoint, the property is set, but apparently not in time, for consul to start.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.