Kongrations
Description
Kongrations is a migrations like for Kong APIs and its associations like consumers and plugins.
You configure an environment and start creating files that will reproduce the specified changes into Kong using Kong Admin API.
Example of a migration to create an API:
create_api do |api|
api.payload = {
name: 'my-api',
uris: '/myapi'
upstream_url: 'https://myapi.mycompany.com',
}
endWhy Kongrations?
- Control what happens into Kong APIs.
- Keep track of every change.
- Apply same changes to different environments.
All of this using a readable Ruby syntax to describe the migrations.
Compatibility
Kongrations was built upon Kong 0.13.x documentation.
Getting Started
Kongrations depends on Ruby 2.2 or greater. Make sure you have it installed, then install Kongrations gem.
gem install kongrationsConfiguring environments
You need to create a file called kongrations.yml and specify the desired environments of Kong.
You can use environments variables on the file too.
environments:
- name: default
kong-admin-url: kong-admin-url.domain.com # Do not include HTTP or HTTPS here.
kong-admin-api-key: 123456789
- name: production
kong-admin-url: kong-admin-url-for-production.domain.com
kong-admin-api-key: <%= ENV['MY_ENV_VARIABLE'] %>Working with environments
Kongrations allows you to use parameters to specify differences across environments. You can do it as follows:
config_env 'default' do |env|
env.upstream_url = 'https://myapi-staging.mycompany.com'
env.retries = 0
end
config_env 'production' do |env|
env.upstream_url = 'https://myapi.mycompany.com'
env.retries = 2
end
create_api do |api|
api.payload = {
name: 'my-api',
uris: '/myapi',
upstream_url: env.upstream_url,
retries: env.retries
}
endFirst, you need to set the variables for your existing environments specified on kongrations.yml file.
Then, you use them through env name, like: env.defined_variable.
Basic usage of the migrations
Defined migrations are mapped into HTTP requests to Kong Admin API accordingly to the documentation.
Every request body described oh the Kong Admin API documentation must be set using the payload name.
After running the migration, Kongrations create a file on ./migrations-data for each Kong environment to store its state. This file should be commited into your version control system. Also, it's extremely important not to touch this file directly, since it's crucial for Kongrations to work normally.
Place your migration files inside ./migrations folder. You can change the default folder putting a path key on kongrations.yml file.
You also need to use .rb extension on them.
To run the migrations, use Kongrations cli, passing an optional parameter to specify the environment name (default environment name is default).
Examples:
$ kongrations # runs for default environment
$ kongrations productionAvailable migrations
Create API
- Kong Admin API Reference
- Usage: pass the request body through
api.payload. - Example:
create_api do |api|
api.payload = {
name: 'my-api',
uris: '/myapi',
upstream_url: 'https://myapi.mycompany.com'
}
endUpdate API
- Kong Admin API Reference
- Usage: pass your API name right after
change_apimethod, then pass the request body throughapi.payload. - Example:
change_api 'api-name' do |api|
api.payload = {
upstream_url: 'https://my-api.mycompany.com'
}
endDelete API
- Kong Admin API Reference
- Usage: pass your API name right after
delete_apimethod. - Example:
delete_api 'api-name'Create Consumer
- Kong Admin API Reference
- Usage: pass the request body through
consumer.payload. - Example:
create_consumer do |consumer|
consumer.payload = {
username: 'my-username'
}
endUpdate Consumer
- Kong Admin API Reference
- Usage: pass your consumer username or custom_id right after
change_consumermethod, then pass the request body throughconsumer.payload. - Example:
change_consumer 'username' do |consumer|
consumer.payload = {
username: 'new-username'
}
endDelete Consumer
- Kong Admin API Reference
- Usage: pass your username or custom_id right after
delete_consumermethod. - Example:
delete_consumer 'username'Create Plugin
- Kong Admin API Reference
- Usage: pass your API name right after
create_plugin_for_apimethod, then pass the request body throughplugin.payload. - Example:
create_plugin_for_api 'api-name' do |plugin|
plugin.payload = {
name: 'cors',
config: {
origins: '*',
methods: 'GET, POST'
}
}
endUpdate Plugin
- Kong Admin API Reference
- Usage: pass your API and plugin names right after
change_plugin_for_apimethod, then pass the request body throughplugin.payload. - Example:
change_plugin_for_api 'api-name', 'cors' do |plugin|
plugin.payload = {
config: {
methods: 'GET'
}
}
endDelete Plugin
- Kong Admin API Reference
- Usage: pass your API and plugin names right after
delete_plugin_for_apimethod. - Example:
delete_plugin_for_api 'api-name', 'cors'