aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorpaulrbr-fl <43074087+paulrbr-fl@users.noreply.github.com>2020-10-14 10:27:09 +0200
committerGitHub <noreply@github.com>2020-10-14 10:27:09 +0200
commit9c9fe5d8071afd657e57a6c11f60e275c2261246 (patch)
tree83eb5c10f9a792a1b5fc8e88a4a1ed675eb13490
parent2e423637ee780bd273094ad52e49906100724d08 (diff)
parent1443410095d3b4a2a560997e8a0662a1deed1d57 (diff)
downloadansible-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.yml15
-rw-r--r--tasks/upstream.yml16
-rwxr-xr-xtests/kong.py9
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
3from http.server import HTTPServer, CGIHTTPRequestHandler 3from http.server import HTTPServer, CGIHTTPRequestHandler
4import random
4 5
5class SimpleHTTPRequestHandler(CGIHTTPRequestHandler): 6class 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
21httpd = HTTPServer(('127.0.0.1', 8000), SimpleHTTPRequestHandler) 30httpd = HTTPServer(('127.0.0.1', 8000), SimpleHTTPRequestHandler)
22httpd.serve_forever() 31httpd.serve_forever()