aboutsummaryrefslogtreecommitdiffhomepage
path: root/README.md
blob: 080a320e3469096f8efa5e22a0399f49dc741bc6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
kong-app
=========

[![Build Status](https://travis-ci.com/fretlink/ansible-kong-app.svg?token=D3nFpUxMu7vStDHwUNy4&branch=master)](https://travis-ci.com/fretlink/ansible-kong-app)

This role aims at creating, on a remote kong, a list of services, routes and plugins needed by an app. The API calls are made from the ansible target host. If you use `hosts: localhost` as a target from within your playbook then all API calls will be done from your local machine.

Requirements
------------

A Kong server which you want to configure.

If you want to configure this role with [Dhall](https://dhall-lang.org/) instead of YAML, the role publishes dhall bindings defined in the `dhall/package.dhall` file. These bindings will need Dhall version `1.29.0` or higher.

Role Variables
--------------
* `kong_servers`: an array of kong_server to configure with the following configuration:
  * `kong_app_admin_url` the kong admin API url (mandatory).
  * `kong_app_admin_apikey` the apikey to use during kong admin api calls. Defaults to `""`
  * `services` an array of services to setup. Defaults to `[]`.
    * `name` the name of the service to create for this app, **mandatory**
    * `url` the url of the backend of the app, **mandatory**. May refer to an upstream by its name (https://upstream_name/path)
    * `upstream` if the url reference an upstream a dict with the configuration, optional
      * `conf` the configuration as expected by kong for an upstream creation
        * `name` mandatory name for the upstream
        * `healthchecks` optional healthchecks configuration as expected by kong api
      * `targets` an array of dict defining a target for kong
        * `target` the host:port to reach the target, **mandatory** if a target is defined
        * `weight` the weight of the target, optional
    * `plugins` An array of plugins to activate with their name and config in a dict. (Plugin objects are defined in the [Kong API documentation](https://docs.konghq.com/2.1.x/admin-api/#plugin-object))
      * `name`
      * `config`
    * `routes` An array of routes to create for this service. (Route objects are defined in the [Kong API documentation](https://docs.konghq.com/2.1.x/admin-api/#route-object))
      * `hosts`
      * `paths`
      * `protocols`
      * `methods`

Dependencies
------------

None

Example Playbook
----------------

```yaml
- hosts: localhost
  roles:
     - role: kong-app,
       kong_servers:
         - kong_app_admin_url: http://localhost:8001,
           services:
             - name: example,
               url: http://example.com,
               plugins: [],
               routes: [ { hosts: [my.kong.example], paths: [/] } ]
```

Tests
----

The role is tested with automated continuous integration tests on Travis (see `tests/` directory). The test playbook targets a fake Kong server (visible in `tests/kong.py`).

License
-------

MIT (see LICENSE file for details)

Author Information
------------------

Developed at [Fretlink](https://tech.fretlink.com)