spg
is a tool that generates Spring profiles based on the current environment.
If you develop your micro services with real environments and your yaml files not up to date probably you spend time fixing. The project aims to save you time and you can use it during development and testing.
There are several ways to install the project.
If you are using MacOS you can install it with Homebrew:
brew tap nekinci/tap
brew install spg
If you want to use it with Docker you can install it with Docker:
docker pull nekinci/spg:latest
alias spg='docker run -v ${PWD}:/go/src/app -v ${HOME}/.spg:/home/spg/.spg nekinci/spg:latest'
If you want to use npm you can install it with npm:
npm install -g spgjs
If there is problem when you try to install with npm, may be you can try to install with this command:
sudo npm install --unsafe-perm -g spgjs
Or you can install it with manual installation of the project:
You can visit release page to see the latest version. After that you can download the project and add it to your PATH.
Firstly you need to create a configuration file. As I explained in the Configuration section you can use the configuration file with the your environment.
And then you must set the configuration file with the spg
command:
spg config set <path to configuration file>
If you want to see the current configuration file you can use the spg config print
command:
spg config print
Or you can unset the configuration file with the spg config unset
command:
spg config unset
To generate a profile you can use the spg generate
command. The following example shows how to generate a profile for the my-profile
environment.
my-profile
environment must be defined in the configuration file. -o
or --output
option is optional. The default value is application-result.yaml
. If you want to change the output file you can use the -o
or --output
option.
And lastly you must be give the already exist profile file as an parameter.
The following command is a working example:
spg generate -p my-profile -o my-new-profile.yml application.yml application-dev.yml
Example:
You have a application.yaml
file with the following content:
server:
port: 8080
client:
urls:
serviceA: servicea.test.com
serviceB: serviceb.test.com
Let's assume you want debug the application in prp environment. But you don't have a application-prp.yaml
file. And you don't know prp urls.
Probably you don't want to create a new file. Because your job is to debug or develop your application. With spg
you can generate a application-prp.yaml
file with the following content:
server:
port: 8080
client:
urls:
serviceA: servicea.prp.com
serviceB: serviceb.prp.com
But first you need to define trainer config file that contains url information of your services. Because spg don't know the url of your services. The following config file is an example:
version: v1
information:
absolute-configs:
- config-key: spring.http.encoding.force # means change the value of spring.http.encoding.force to true
environment:
oc: true
test: false
prp: true
prod: false
- config-key: keycloak.securityConstraints[0].authRoles[0] # means change the first role of the first security constraint
environment:
oc: user
test: user
prp: admin
prod: admin
- config-key: keycloak.roles[].value # means change all role values under keycloak.roles
environment:
oc: user
test: user
prp: admin
prod: admin
- config-key: "*.keycloak.b" # e.g: abc.keycloak.b, a.b.c.keycloak.b, keycloak.b means change all values of keycloak.b
environment:
oc: true
test: false
prp: true
prod: false
fields:
- keys: # metadata keys for decide which fields to change
- a-service
- aService
type: url
environment:
oc:
scheme: http
value: a-service:8080
test:
scheme: http
value: a-service-test.cloud.com
prp:
scheme: http
value: a-service-prp.cloud.com
prod:
scheme: https
value: a-service.com
- Don't handled yet metadata in trainer yaml file* (e.g.
information.fields.keys
) - Config array selectors only support for primitive types. Don't supported for complex types.* (e.g.
maps or arrays
)