Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance client side resolution of plain-text files #789

Open
csterwa opened this issue Sep 11, 2017 · 25 comments
Open

Enhance client side resolution of plain-text files #789

csterwa opened this issue Sep 11, 2017 · 25 comments

Comments

@csterwa
Copy link

csterwa commented Sep 11, 2017

Config server supports serving plain-text configuration files (for configuration tailored to specific libraries or environments), including placeholder resolution from config server properties. (See http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#_serving_plain_text)

It seems that the only way to consume these resources (in OSS) is via RestTemplate or some similar REST client means. This can be complicated when there are additional hoops to jump through in order to resolve access to these files such as secured authentication/authorization around config server. This may require a client to muck about with authentication/authorization beans to get at the access token needed to consume those resources.

To make this easier such client situations, it would be useful to provide some means by which the clients can consume those resources, but without having to deal with the authentication/authorization specifics.

One possible (off-the-cuff) idea might be to provide some sort of ConfigServerResource or other type that would handle the OAuth concerns under the covers. Here is potential pseudo just to further elaborate the point but not yet fleshed out:

FileInputStream fis = configServer.getConfig("myapp","myprofile");

Along with auto resolution such as:

@Value("nginx.conf") // not sure this is possible with `.` in name
FileInputStream nginxConfFileStream

Regardless of the solution, ideally, the client-side piece would be part of Spring Cloud OSS generically, with hooks provided for SCS to provide OAuth details to be included in the request.

@spencergibb
Copy link
Member

It wouldn't be a FileInputStream ever as it would come from a URL. I think the question we need to solve before any client api, is how would SCS provide the OAuth details?

@dsyer
Copy link
Contributor

dsyer commented Sep 12, 2017

Seems like a generic client app concern, rather than anything to do with config server. Maybe we should think about it as a commons feature, or spring cloud security, or even Spring Boot.

@ryanjbaxter
Copy link
Contributor

ryanjbaxter commented Sep 12, 2017

When I talked to @csterwa about this initially it was a config client feature not a server feature. My interpretation was that he just wanted a client side API that would return an InputStream rather than the developer having to figure out how to do this themselves. It seemed like more of an enhancement rather than a new feature.

@dsyer
Copy link
Contributor

dsyer commented Sep 12, 2017

Sure, but my point was that it isn't even really a config client feature. Just a resource type / resolver (which is a core Spring Framework feature, but the security angle makes it higher level concern).

@jyinpci
Copy link

jyinpci commented Nov 20, 2017

Regardless how it will be implemented, I think the ability to have a Spring Boot application to pull in, EASILY, plain text resources from a Spring Cloud configuration server would make Spring Boot more powerful. I have a Spring Boot app that uses different configuration files, camel routes, groovy scripts and velocity templates when being deployed for different customers. Currently, I deploy these custom files along with (but not part of) the Spring Boot fat jar. If it can easily pull in such files from the configuration server, then its deployment and maintenance would be significantly simplified.

@cforce
Copy link

cforce commented Mar 5, 2018

Additionaly as cfg server suppoorts "labels" (which represent git rev )if would make sense that i can check "before" download loading the compelte file if the remote revison is newer then the one i arleady have retrieved.

@csterwa
Copy link
Author

csterwa commented Mar 13, 2018

This has been implemented and pulled through Spring Cloud Services Connectors.

@csterwa csterwa closed this as completed Mar 13, 2018
@cforce
Copy link

cforce commented Mar 18, 2018

Would you please link the documentation for this pull?

@spencergibb
Copy link
Member

@cforce. This was not implemented in the open source project.

@cforce
Copy link

cforce commented Mar 19, 2018

Still can not find the code for feature that allows me to retrieve git revision for checking if my local file is outdated before updating from cfg server

@spencergibb
Copy link
Member

@cforce it's not here.

@leogtzr
Copy link

leogtzr commented May 29, 2018

Hello! has this been implemented?

@spencergibb
Copy link
Member

This was not implemented in the open source project.

See links above

@leogtzr
Copy link

leogtzr commented May 29, 2018

Got it ... thanks!

@vgvineet4
Copy link

What's the final resolution with this enhancement. This use case is pretty generic in my view

@dsyer
Copy link
Contributor

dsyer commented Oct 29, 2018

It’s already generically provided by the Spring Resource abstraction.

@vgvineet4
Copy link

Ok....So mean to say whenever there is any configuration change in the backend of spring configuration server then config client need to pull the resources changed So in this context a plain text configuration or any xml configuration.

@dsyer
Copy link
Contributor

dsyer commented Oct 30, 2018

"Pulling a resource" is normally something that happens in the bean lifecycle. That might happen after a refresh event, for instance. Whether that makes sense in the context of your application is up to you to decide and implement. If you want help with an actual sample app, it might be better to go to Stack Overflow (and link back here if you like).

@vgvineet4
Copy link

In our use case we want to bind the resource from spring cloud config server hosted configurations to bean or instance variable of bean say ,

@bean
public class MyBean {

??how in spring bind plain text or xml config to this instance.
private String name;
}

In our use case there can be anything like security files, xml

@SpiReCZ
Copy link

SpiReCZ commented Sep 3, 2019

I created these 2 issues for text / binary resources resolution.

pivotal-cf/spring-cloud-services-connector#129

#1459

I proposed to either implement the feature or give it away to spring project. Surely everyone can copy the code, create a library from it, implement it by it's own.

But the cleanest way is to add it to the spring project directly. It is a small compact feature so it should not be a problem.

@spencergibb
Copy link
Member

@csterwa maybe we could port the non-oauth version here. See comments in #1459

@SpiReCZ
Copy link

SpiReCZ commented Oct 4, 2019

It has been a month. Can someone eligible please respond?

@spencergibb
Copy link
Member

@SpiReCZ this enhancement has not been scheduled for addition at this time. When it has, it will be added to a Project and Milestone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants