diff options
author | paulrbr-fl <43074087+paulrbr-fl@users.noreply.github.com> | 2020-10-14 10:27:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-14 10:27:09 +0200 |
commit | 9c9fe5d8071afd657e57a6c11f60e275c2261246 (patch) | |
tree | 83eb5c10f9a792a1b5fc8e88a4a1ed675eb13490 | |
parent | 2e423637ee780bd273094ad52e49906100724d08 (diff) | |
parent | 1443410095d3b4a2a560997e8a0662a1deed1d57 (diff) | |
download | ansible-kong-app-9c9fe5d8071afd657e57a6c11f60e275c2261246.tar.gz ansible-kong-app-9c9fe5d8071afd657e57a6c11f60e275c2261246.tar.zst ansible-kong-app-9c9fe5d8071afd657e57a6c11f60e275c2261246.zip |
Merge pull request #23 from paulrbr-fl/use-put-for-idempotency
Use PUT methods instead of manually detecting if new or update
-rw-r--r-- | tasks/kong-app.yml | 15 | ||||
-rw-r--r-- | tasks/upstream.yml | 16 | ||||
-rwxr-xr-x | tests/kong.py | 9 |
3 files changed, 15 insertions, 25 deletions
diff --git a/tasks/kong-app.yml b/tasks/kong-app.yml index 975e2cd..3c51e7e 100644 --- a/tasks/kong-app.yml +++ b/tasks/kong-app.yml | |||
@@ -2,26 +2,17 @@ | |||
2 | import_tasks: upstream.yml | 2 | import_tasks: upstream.yml |
3 | when: service.upstream is defined | 3 | when: service.upstream is defined |
4 | 4 | ||
5 | - name: Check if service exists | 5 | # https://docs.konghq.com/2.1.x/admin-api/#update-or-create-service |
6 | uri: | ||
7 | url: "{{ server.kong_app_admin_url }}/services/{{ service.name }}" | ||
8 | method: GET | ||
9 | headers: | ||
10 | apikey: "{{ server.kong_app_admin_apikey }}" | ||
11 | status_code: 200,404 | ||
12 | register: kong_app_check_service | ||
13 | |||
14 | - name: Update or Create service | 6 | - name: Update or Create service |
15 | uri: | 7 | uri: |
16 | url: "{{ server.kong_app_admin_url }}/services/{{ exists_service | ternary('', service.name) }}" | 8 | url: "{{ server.kong_app_admin_url }}/services/{{ service.name }}" |
17 | method: "{{ exists_service | ternary('POST', 'PATCH') }}" | 9 | method: PUT |
18 | body: "{{ service_body | to_json }}" | 10 | body: "{{ service_body | to_json }}" |
19 | status_code: 200,201 | 11 | status_code: 200,201 |
20 | headers: | 12 | headers: |
21 | apikey: "{{ server.kong_app_admin_apikey }}" | 13 | apikey: "{{ server.kong_app_admin_apikey }}" |
22 | Content-Type: application/json | 14 | Content-Type: application/json |
23 | vars: | 15 | vars: |
24 | exists_service: "{{ kong_app_check_service.status|default(404) == 404 }}" | ||
25 | service_body: | 16 | service_body: |
26 | name: "{{ service.name }}" | 17 | name: "{{ service.name }}" |
27 | url: "{{ service.url }}" | 18 | url: "{{ service.url }}" |
diff --git a/tasks/upstream.yml b/tasks/upstream.yml index 43c1baf..47f2e89 100644 --- a/tasks/upstream.yml +++ b/tasks/upstream.yml | |||
@@ -2,26 +2,16 @@ | |||
2 | set_fact: | 2 | set_fact: |
3 | upstream: "{{ service.upstream }}" | 3 | upstream: "{{ service.upstream }}" |
4 | 4 | ||
5 | - name: Check if upstream exists | 5 | # https://docs.konghq.com/2.1.x/admin-api/#update-or-create-upstream |
6 | uri: | ||
7 | url: "{{ server.kong_app_admin_url }}/upstreams/{{ upstream.conf.name }}" | ||
8 | method: GET | ||
9 | headers: | ||
10 | apikey: "{{ server.kong_app_admin_apikey }}" | ||
11 | status_code: 200,404 | ||
12 | register: kong_app_check_upstream | ||
13 | |||
14 | - name: Update or Create upstream | 6 | - name: Update or Create upstream |
15 | uri: | 7 | uri: |
16 | url: "{{ server.kong_app_admin_url }}/upstreams/{{ exists_upstream | ternary('', upstream.conf.name) }}" | 8 | url: "{{ server.kong_app_admin_url }}/upstreams/{{ upstream.conf.name) }}" |
17 | method: "{{ exists_upstream | ternary('POST', 'PATCH') }}" | 9 | method: PUT |
18 | body: "{{ upstream.conf | to_json }}" | 10 | body: "{{ upstream.conf | to_json }}" |
19 | status_code: 200,201 | 11 | status_code: 200,201 |
20 | headers: | 12 | headers: |
21 | apikey: "{{ server.kong_app_admin_apikey }}" | 13 | apikey: "{{ server.kong_app_admin_apikey }}" |
22 | Content-Type: application/json | 14 | Content-Type: application/json |
23 | vars: | ||
24 | exists_upstream: "{{ kong_app_check_upstream.status|default(404) == 404 }}" | ||
25 | 15 | ||
26 | - name: Get upstream targets | 16 | - name: Get upstream targets |
27 | uri: | 17 | uri: |
diff --git a/tests/kong.py b/tests/kong.py index a1f9cec..c39542f 100755 --- a/tests/kong.py +++ b/tests/kong.py | |||
@@ -1,6 +1,7 @@ | |||
1 | #!/usr/bin/env python3 | 1 | #!/usr/bin/env python3 |
2 | 2 | ||
3 | from http.server import HTTPServer, CGIHTTPRequestHandler | 3 | from http.server import HTTPServer, CGIHTTPRequestHandler |
4 | import random | ||
4 | 5 | ||
5 | class SimpleHTTPRequestHandler(CGIHTTPRequestHandler): | 6 | class SimpleHTTPRequestHandler(CGIHTTPRequestHandler): |
6 | def do_GET(self): | 7 | def do_GET(self): |
@@ -17,6 +18,14 @@ class SimpleHTTPRequestHandler(CGIHTTPRequestHandler): | |||
17 | self.end_headers() | 18 | self.end_headers() |
18 | self.wfile.write(b'Hello, world!') | 19 | self.wfile.write(b'Hello, world!') |
19 | 20 | ||
21 | def do_PUT(self): | ||
22 | if bool(random.getrandbits(1)): | ||
23 | self.send_response(200) | ||
24 | else: | ||
25 | self.send_response(201) | ||
26 | self.end_headers() | ||
27 | self.wfile.write(b'Hello, world!') | ||
28 | |||
20 | 29 | ||
21 | httpd = HTTPServer(('127.0.0.1', 8000), SimpleHTTPRequestHandler) | 30 | httpd = HTTPServer(('127.0.0.1', 8000), SimpleHTTPRequestHandler) |
22 | httpd.serve_forever() | 31 | httpd.serve_forever() |