Using Ansible, Split and Concatenate Kong Config File"

Below is an example configuration file for Kong, including some basic configurations for services:

    kong_yml:
      _format_version: "1.1"

      services:
      - name: example-service
        url: http://example.com/api
        routes:
        - name: example-route
          paths:
          - /example
          methods:
          - GET

we extended this configuration by adding more services, routes, plugins, and other settings as needed. Managing a large Kong configuration file became challenging, so using ansible we split it into multiple files and then concatenating them together making it easier to read, edit, and track changes, improving overall simplicity.


Step 1: Create a directory structure for Ansible role. Navigate to the desired location and create a directory structure like this:


Step 2: In your playbook.yml, include the "kong" role:

    - hosts: localhost
      gather_facts: no

      vars:
        myinput: "vars/kong/includes.yaml"
        myoutput: "vars/kong/vars.yml"


      roles:
        - kong

Step 3: In the roles/kong/tasks/main.yml file, define the tasks for your Kong role.

    - name: include file list
      include_vars:
        file: "{{ myinput }}"
        name: files

    - name: concatenating the kong config files
      template:
        src: concatenate.j2
        dest: "{{ myoutput }}"

Step 4: Create a Jinja2 template in templates/concatenate.j2. This template will be used to concatenate the individual configuration files

    {% for i in files["input-files"] %}
    {{ lookup('file', i) }}
    {% endfor %}

Step 4: I maintain my config files under directory templates/concatenate/config_files . Whenever I create a new config file I added the file path in /vars/kong/includes.yaml .

    input-files:
      - concatenate/config_files/base.yml
      - concatenate/config_files/base1.yml
      - concatenate/config_files/base2.yml

Now, when you run ansible-playbook kong.yml, Ansible will execute the tasks which will concatenate the Kong configuration files in the input path and create a single configuration file in the output path /vars/kong/vars.yml