commit
e5f9546f86
6 changed files with 219 additions and 0 deletions
@ -0,0 +1,29 @@ |
|||
--- |
|||
|
|||
- name: Get a list of available services |
|||
uri: |
|||
url: "https://{{ threescale_admin_hostname }}/admin/api/services.json?access_token={{ access_token }}" |
|||
validate_certs: no |
|||
register: response |
|||
|
|||
- set_fact: |
|||
services: '{{ response.json|json_query(''services[*].service.system_name'') }}' |
|||
services_details: '{{ response.json|json_query(''services[].{"system_name": service.system_name, "id": service.id}'') }}' |
|||
|
|||
- name: Get the list of existing applications |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/applications.json?access_token={{ access_token|urlencode }} |
|||
validate_certs: no |
|||
register: response |
|||
|
|||
- set_fact: |
|||
applications: '{{ response.json|json_query(''applications[*].application.name'') }}' |
|||
|
|||
- name: Get the default (first) account |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/accounts.json?access_token={{ access_token|urlencode }}&state=approved&page=1&per_page=1 |
|||
validate_certs: no |
|||
register: response |
|||
|
|||
- set_fact: |
|||
account_id: '{{ response.json.accounts[0].account.id }}' |
|||
@ -0,0 +1,66 @@ |
|||
--- |
|||
|
|||
- debug: msg="Working on service {{ item.service.name }}" |
|||
|
|||
- set_fact: |
|||
body_create_svc: '{{ "access_token=" ~ access_token|urlencode }}' |
|||
|
|||
- set_fact: |
|||
body_create_svc: '{{ body_create_svc ~ "&" ~ (param.key|urlencode) ~ "=" ~ (param.value|urlencode) }}' |
|||
with_dict: '{{ item.service }}' |
|||
loop_control: |
|||
loop_var: param |
|||
when: 'item.service.system_name not in services' |
|||
|
|||
- name: Create the service |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/services.json |
|||
validate_certs: no |
|||
method: POST |
|||
body: '{{ body_create_svc }}' |
|||
status_code: 201 |
|||
register: response |
|||
when: 'item.service.system_name not in services' |
|||
|
|||
- set_fact: |
|||
services: '{{ services|union([ item.service.system_name ]) }}' |
|||
services_details: '{{ services_details|union([{ "system_name": item.service.system_name, "id": response.json.service.id }]) }}' |
|||
when: 'item.service.system_name not in services' |
|||
|
|||
- set_fact: |
|||
service_id: '{{ (services_details|selectattr("system_name", "equalto", item.service.system_name)|first)["id"] }}' |
|||
|
|||
- set_fact: |
|||
body_update_proxy: '{{ "access_token=" ~ access_token|urlencode }}' |
|||
|
|||
- set_fact: |
|||
body_update_proxy: '{{ body_update_proxy ~ "&" ~ (param.key|urlencode) ~ "=" ~ (param.value|urlencode) }}' |
|||
with_dict: '{{ item.proxy }}' |
|||
loop_control: |
|||
loop_var: param |
|||
|
|||
- name: Set Backend URL |
|||
set_fact: |
|||
body_update_proxy: '{{ body_update_proxy ~ "&api_backend" ~ "=" ~ (item.backend|urlencode) }}' |
|||
|
|||
- name: Update the proxy |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/services/{{ service_id }}/proxy.json |
|||
validate_certs: no |
|||
method: PATCH |
|||
body: '{{ body_update_proxy }}' |
|||
|
|||
- name: Get the list of existing application plans |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/services/{{ service_id }}/application_plans.json?access_token={{ access_token|urlencode }} |
|||
validate_certs: no |
|||
register: response |
|||
|
|||
- set_fact: |
|||
application_plans: '{{ response.json|json_query(''plans[*].application_plan.system_name'') }}' |
|||
application_plans_details: '{{ response.json|json_query(''plans[].{"system_name": application_plan.system_name, "id": application_plan.id}'') }}' |
|||
|
|||
- include: create_application_plan.yml |
|||
with_items: '{{ item.application_plans }}' |
|||
loop_control: |
|||
loop_var: plan |
|||
@ -0,0 +1,38 @@ |
|||
--- |
|||
|
|||
- debug: msg="Working on plan {{ plan.system_name }} / service {{ item.service.name }}" |
|||
|
|||
- set_fact: |
|||
body_create_plan: '{{ "access_token=" ~ access_token|urlencode }}' |
|||
|
|||
- set_fact: |
|||
body_create_plan: '{{ body_create_plan ~ "&" ~ (param.key|urlencode) ~ "=" ~ (param.value|urlencode) }}' |
|||
with_dict: '{{ plan }}' |
|||
loop_control: |
|||
loop_var: param |
|||
# applications is a nested hash that is used to create client applications later |
|||
when: 'param.key != ''applications'' and plan.system_name not in application_plans ' |
|||
|
|||
- name: Create the application plan |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/services/{{ service_id }}/application_plans.json |
|||
validate_certs: no |
|||
method: POST |
|||
body: '{{ body_create_plan }}' |
|||
status_code: 201 |
|||
register: response |
|||
when: 'plan.system_name not in application_plans' |
|||
|
|||
- set_fact: |
|||
application_plans: '{{ application_plans|union([ plan.system_name ]) }}' |
|||
application_plans_details: '{{ application_plans_details|union([{ "system_name": plan.system_name, "id": response.json.application_plan.id }]) }}' |
|||
when: 'plan.system_name not in application_plans' |
|||
|
|||
- set_fact: |
|||
plan_id: '{{ (application_plans_details|selectattr("system_name", "equalto", plan.system_name)|first)["id"] }}' |
|||
|
|||
- include: create_applications.yml |
|||
with_items: '{{ plan.applications }}' |
|||
loop_control: |
|||
loop_var: app |
|||
when: 'app.name not in applications' |
|||
@ -0,0 +1,21 @@ |
|||
--- |
|||
|
|||
- debug: msg="Working on application {{ app.name }} / plan {{ plan.system_name }} / service {{ item.service.name }}" |
|||
|
|||
- set_fact: |
|||
body_create_app: '{{ "access_token=" ~ (access_token|urlencode) ~ "&plan_id=" ~ (plan_id) }}' |
|||
|
|||
- set_fact: |
|||
body_create_app: '{{ body_create_app ~ "&" ~ (param.key|urlencode) ~ "=" ~ (param.value|urlencode) }}' |
|||
with_dict: '{{ app }}' |
|||
loop_control: |
|||
loop_var: param |
|||
|
|||
- name: Create the application |
|||
uri: |
|||
url: https://{{ threescale_admin_hostname }}/admin/api/accounts/{{ account_id }}/applications.json |
|||
validate_certs: no |
|||
method: POST |
|||
body: '{{ body_create_app }}' |
|||
status_code: 201 |
|||
register: response |
|||
@ -0,0 +1,2 @@ |
|||
[3scale] |
|||
localhost ansible_connection=local threescale_admin_hostname=<TENANT>.3scale.net access_token=<ACCESS_TOKEN> |
|||
@ -0,0 +1,63 @@ |
|||
--- |
|||
|
|||
- name: Provision APIs in 3scale |
|||
hosts: 3scale |
|||
become: no |
|||
vars: |
|||
threescale_apis_to_create: |
|||
- service: |
|||
name: "Hello API" |
|||
system_name: hello-api |
|||
backend_version: 1 # 1 means "API Key" |
|||
proxy: |
|||
credentials_location: headers |
|||
api_test_path: /rest/Hello%20API%20Mock/0.8/v1/hello?David |
|||
backend: http://example:8080 |
|||
application_plans: |
|||
- name: Default |
|||
system_name: default |
|||
default: true |
|||
state: published |
|||
applications: |
|||
- name: Hello App |
|||
description: "This is my very first application" |
|||
- service: |
|||
name: "Github API" |
|||
system_name: github-api |
|||
backend_version: 1 # 1 means "API Key" |
|||
proxy: |
|||
credentials_location: headers |
|||
api_test_path: / |
|||
backend: https://api.github.com |
|||
application_plans: |
|||
- name: Default |
|||
system_name: default |
|||
default: true |
|||
state: published |
|||
applications: |
|||
- name: GitHub Test App |
|||
description: "This is my very first application" |
|||
- service: |
|||
name: "Hello API OAuth" |
|||
system_name: hello-api-oauth |
|||
backend_version: oauth |
|||
proxy: |
|||
credentials_location: headers |
|||
api_test_path: /rest/Hello%20API%20Mock/0.8/v1/hello?Gavin |
|||
backend: http://example:8080 |
|||
application_plans: |
|||
- name: Default |
|||
system_name: default |
|||
default: true |
|||
state: published |
|||
applications: |
|||
- name: Hello App with OAuth |
|||
description: "This is my very first application using OAuth" |
|||
redirect_url: https://www.getpostman.com/oauth2/callback |
|||
application_id: "my-app" |
|||
application_key: "{{ 'my-app'|sha1() }}" |
|||
|
|||
tasks: |
|||
- include: "3scale_status.yml" |
|||
- include: "create_api.yml" |
|||
with_items: '{{ threescale_apis_to_create }}' |
|||
Loading…
Reference in new issue