Skip to content

Commit d96c196

Browse files
Merge pull request #786 from NHSDigital/develop
APIM-R 1.19 Cut
2 parents 4d57764 + d1fa14e commit d96c196

35 files changed

+500
-581
lines changed

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ lint: copy-examples
2323
clean:
2424
rm -rf build
2525
rm -rf dist
26-
rm -rf specification/components/examples
26+
rm -rf specification/components/r4/examples
27+
rm -rf specification/components/stu3/examples
2728

2829
publish: clean copy-examples
2930
mkdir -p build
@@ -55,6 +56,7 @@ release: clean publish build-proxy
5556
cp ecs-proxies-deploy.yml dist/ecs-deploy-sandbox.yml
5657
cp pyproject.toml dist/pyproject.toml
5758
cp poetry.lock dist/poetry.lock
59+
cp -R macros dist
5860

5961
test:
6062
echo "TODO: add tests"

macros/manifest_macros.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
{%- macro environment(ENV) -%}
2+
- name: {{ ENV.name }}
3+
products:
4+
{% endmacro %}
5+
6+
{%- macro product(ENV, MODE, TITLE, product_name, display_name) -%}
7+
- name: e-referrals-service-api-{{ product_name }}{{ MODE.nameSuffix }}
8+
approvalType: {{ ENV.approval_type | default('auto') }}
9+
attributes:
10+
- name: access
11+
value: public
12+
- name: ratelimiting
13+
value:
14+
e-referrals-service-api-{{ product_name }}:
15+
quota:
16+
enabled: false
17+
spikeArrest:
18+
enabled: false
19+
app:
20+
quota:
21+
enabled: true
22+
interval: 1
23+
limit: 600
24+
timeunit: minute
25+
spikeArrest:
26+
enabled: true
27+
ratelimit: 720pm
28+
description: {{ MODE.description }}
29+
displayName: {{ TITLE }} - {{ MODE.displayName }} ( {{ display_name }} )
30+
environments: [ {{ ENV.name }} ]
31+
proxies:
32+
- e-referrals-service-api-{{ product_name }}
33+
- identity-service-{{ ENV.name }}
34+
{% if ENV.additional_proxies is defined %}
35+
{% for proxy in ENV.additional_proxies %}
36+
- {{ proxy }}
37+
{% endfor %}
38+
{% endif %}
39+
scopes: {{ MODE.scopes }}
40+
quota: 600
41+
quotaInterval: 1
42+
quotaTimeUnit: minute
43+
{% endmacro %}
44+
45+
{%- macro specs(product_name) -%}
46+
- name: e-referrals-service-api-{{ product_name }}
47+
path: e-referrals-service-api.json
48+
{%- endmacro %}
49+
50+
{%- macro api_catalog(MODE, TITLE, product_name, display_name) -%}
51+
- edgeAPIProductName: e-referrals-service-api-{{ product_name }}{{ MODE.nameSuffix }}
52+
anonAllowed: true
53+
description: {{ TITLE }} FHIR API - {{ MODE.displayName|lower }} access mode - {{ display_name|lower }} environment
54+
requireCallbackUrl: {{ MODE.requireCallbackUrl | default(true) }}
55+
title: {{ TITLE }} - {{ MODE.displayName }} ( {{ display_name }} )
56+
visibility: true
57+
specId: e-referrals-service-api-{{ product_name }}
58+
{% endmacro %}
59+
60+

manifest_template.yml

Lines changed: 86 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,76 @@
44
# $ cd /path/to/local/api-management-utils/ansible
55
# $ DIST_DIR=/path/to/this/repo make template-manifest
66
#
7+
# The only way to test changes in here is to run the deployment and regression test each environment.
8+
# If making changes to this file,
9+
# generate and save the full maninfest.yml file before making any changes
10+
# to compare against your changed file.
711
#
812
APIGEE_ENVIRONMENTS:
9-
- display_name: Internal Development
10-
name: internal-dev
13+
- name: internal-dev
14+
additional_proxies:
15+
- identity-service-mock-internal-dev
1116
variants:
12-
- name: alpha
13-
- name: rc
14-
- name: fix
15-
- name: ft01
16-
service: fti
17-
- name: ft04
18-
service: ftiv
19-
- name: ft05
20-
service: ftv
21-
- name: ft09
22-
service: ftix
23-
- name: ft22
24-
service: ftxxii
25-
- display_name: Internal Development Sandbox
26-
name: internal-dev-sandbox
27-
- display_name: Integration Testing
28-
name: int
29-
- display_name: Internal QA
30-
name: internal-qa
31-
- display_name: Internal QA Sandbox
32-
name: internal-qa-sandbox
33-
- display_name: Sandbox
34-
name: sandbox
35-
- display_name: Dev
36-
name: dev
17+
- name: alpha-internal-dev
18+
display_name: Internal Development - alpha
19+
- name: rc-internal-dev
20+
display_name: Internal Development - rc
21+
- name: fix-internal-dev
22+
display_name: Internal Development - fix
23+
- name: fti-internal-dev
24+
display_name: Internal Development - ft01
25+
- name: ftiv-internal-dev
26+
display_name: Internal Development - ft04
27+
- name: ftv-internal-dev
28+
display_name: Internal Development - ft05
29+
- name: ftix-internal-dev
30+
display_name: Internal Development - ft09
31+
- name: ftxxii-internal-dev
32+
display_name: Internal Development - ft22
33+
34+
- name: internal-dev-sandbox
35+
variants:
36+
- name: internal-dev-sandbox
37+
display_name: Internal Development Sandbox
38+
39+
- name: int
40+
additional_proxies:
41+
- identity-service-int-no-smartcard
42+
- identity-service-mock-int
43+
variants:
44+
- name: int
45+
display_name: Integration Testing
46+
47+
- name: internal-qa
48+
additional_proxies:
49+
- identity-service-internal-qa-int
50+
- identity-service-mock-internal-qa
51+
variants:
52+
- name: internal-qa
53+
display_name: Internal QA
54+
55+
- name: internal-qa-sandbox
3756
variants:
38-
- name: dep
57+
- name: internal-qa-sandbox
58+
display_name: Internal QA Sandbox
59+
60+
- name: sandbox
61+
variants:
62+
- name: sandbox
63+
display_name: Sandbox
64+
65+
- name: dev
66+
additional_proxies:
67+
- identity-service-dep-dev
68+
variants:
69+
- name: dep-dev
70+
display_name: Dev - dep
71+
3972
- name: prod
4073
approval_type: manual
41-
display_name: Production
74+
variants:
75+
- name: prod
76+
display_name: Production
4277

4378
ACCESS_MODES:
4479
- name: healthcare-worker
@@ -47,13 +82,17 @@ ACCESS_MODES:
4782
scopes: ['urn:nhsd:apim:user-nhs-id:aal3:e-referrals-service-api']
4883
requireCallbackUrl: true
4984
description: User restricted
85+
5086
- name: application-restricted
5187
nameSuffix: -application-restricted
5288
displayName: Application Restricted
5389
scopes: ['urn:nhsd:apim:app:level3:e-referrals-service-api']
5490
requireCallbackUrl: false
5591
description: Application Restricted
5692
---
93+
{% import 'macros/manifest_macros.yml' as macros %}
94+
{% set TITLE = 'e-Referral Service' %}
95+
5796
meta:
5897
api:
5998
name: e-referrals-service-api
@@ -62,128 +101,25 @@ meta:
62101
schema_version: 1
63102
apigee:
64103
environments:
65-
66104
{% for ENV in APIGEE_ENVIRONMENTS %}
67-
{% set portal_visibility = ENV.portal_visibility | default(true) %}
68-
{% set TITLE = 'e-Referral Service' %}
69-
{% set NAME = 'e-referrals-service-api-' + ENV.name %}
70-
{% if ENV.name == 'internal-dev' or ENV.name == 'dev' %}
71-
- name: {{ ENV.name }}
72-
products:
73-
{% for VARIANT in ENV.variants %}
74-
{% for MODE in ACCESS_MODES %}
75-
- name: e-referrals-service-api-{{ VARIANT.service | default(VARIANT.name) }}-{{ ENV.name }}{{ MODE.nameSuffix }}
76-
approvalType: {{ ENV.approval_type | default('auto') }}
77-
attributes:
78-
- name: access
79-
value: public
80-
- name: ratelimiting
81-
value:
82-
e-referrals-service-api-{{ VARIANT.service | default(VARIANT.name) }}-{{ ENV.name }}:
83-
quota:
84-
enabled: false
85-
spikeArrest:
86-
enabled: false
87-
app:
88-
quota:
89-
enabled: true
90-
interval: 1
91-
limit: 600
92-
timeunit: minute
93-
spikeArrest:
94-
enabled: true
95-
ratelimit: 720pm
96-
description: {{ MODE.description }}
97-
displayName: {{ TITLE }} - {{ MODE.displayName }} ( {{ ENV.display_name}} - {{ VARIANT.name }} )
98-
environments: [ {{ ENV.name }} ]
99-
proxies:
100-
- e-referrals-service-api-{{ VARIANT.service | default(VARIANT.name) }}-{{ ENV.name }}
101-
- identity-service-{{ ENV.name }}
102-
{% if ENV.name == 'dev' %}
103-
- identity-service-dep-{{ ENV.name }}
104-
{% endif %}
105-
{% if ENV.name == 'internal-dev' %}
106-
- identity-service-mock-{{ ENV.name }}
107-
{% endif %}
108-
scopes: {{ MODE.scopes }}
109-
quota: 600
110-
quotaInterval: 1
111-
quotaTimeUnit: minute
112-
{% endfor %}
113-
{% endfor %}
114-
specs:
115-
{% for VARIANT in ENV.variants %}
116-
- name: e-referrals-service-api-{{ VARIANT.service | default(VARIANT.name) }}-{{ ENV.name }}
117-
path: e-referrals-service-api.json
118-
{% endfor %}
119-
api_catalog:
120-
{% for VARIANT in ENV.variants %}
121-
{% for MODE in ACCESS_MODES %}
122-
- edgeAPIProductName: e-referrals-service-api-{{ VARIANT.service | default(VARIANT.name) }}-{{ ENV.name }}{{ MODE.nameSuffix }}
123-
anonAllowed: true
124-
description: {{ TITLE }} FHIR API - {{ MODE.displayName|lower }} access mode - {{ ENV.display_name|lower }} - {{ VARIANT.name }} environment
125-
requireCallbackUrl: {{ MODE.requireCallbackUrl | default(true) }}
126-
title: {{ TITLE }} - {{ MODE.displayName }} ( {{ ENV.display_name}} - {{ VARIANT.name }} )
127-
visibility: {{ portal_visibility }}
128-
specId: e-referrals-service-api-{{ VARIANT.service | default(VARIANT.name) }}-{{ ENV.name }}
129-
{% endfor %}
130-
{% endfor %}
131-
{% else %}
132-
- name: {{ ENV.name }}
133-
products:
134-
{% for MODE in ACCESS_MODES %}
135-
- name: e-referrals-service-api-{{ ENV.name }}{{ MODE.nameSuffix }}
136-
approvalType: {{ ENV.approval_type | default('auto') }}
137-
attributes:
138-
- name: access
139-
value: public
140-
- name: ratelimiting
141-
value:
142-
e-referrals-service-api-{{ ENV.name }}:
143-
quota:
144-
enabled: false
145-
spikeArrest:
146-
enabled: false
147-
app:
148-
quota:
149-
enabled: true
150-
interval: 1
151-
limit: 600
152-
timeunit: minute
153-
spikeArrest:
154-
enabled: true
155-
ratelimit: 720pm
156-
description: {{ MODE.description }}
157-
displayName: {{ TITLE }} - {{ MODE.displayName }} ( {{ ENV.display_name}} )
158-
environments: [ {{ ENV.name }} ]
159-
proxies:
160-
- e-referrals-service-api-{{ ENV.name }}
161-
- identity-service-{{ ENV.name }}
162-
{% if ENV.name == 'int' %}
163-
- identity-service-int-no-smartcard
164-
- identity-service-mock-{{ ENV.name }}
165-
{% endif %}
166-
{% if ENV.name == 'internal-qa' %}
167-
- identity-service-{{ ENV.name }}-int
168-
- identity-service-mock-{{ ENV.name }}
169-
{% endif %}
170-
scopes: {{ MODE.scopes }}
171-
quota: 600
172-
quotaInterval: 1
173-
quotaTimeUnit: minute
174-
{% endfor %}
105+
{{ macros.environment(ENV) }}
106+
107+
{% for VARIANT in ENV.variants %}
108+
{% for MODE in ACCESS_MODES %}
109+
{{ macros.product(ENV, MODE, TITLE, VARIANT.name, VARIANT.display_name) }}
110+
{% endfor %}
111+
{% endfor %}
112+
175113
specs:
176-
- name: {{ NAME }}
177-
path: e-referrals-service-api.json
114+
{% for VARIANT in ENV.variants %}
115+
{{ macros.specs(VARIANT.name) }}
116+
{% endfor %}
117+
178118
api_catalog:
179-
{% for MODE in ACCESS_MODES %}
180-
- edgeAPIProductName: e-referrals-service-api-{{ ENV.name }}{{ MODE.nameSuffix }}
181-
anonAllowed: true
182-
description: {{ TITLE }} FHIR API - {{ MODE.displayName|lower }} access mode - {{ ENV.display_name|lower }} environment
183-
requireCallbackUrl: {{ MODE.requireCallbackUrl | default(true) }}
184-
title: {{ TITLE }} - {{ MODE.displayName }} ( {{ ENV.display_name}} )
185-
visibility: {{ portal_visibility }}
186-
specId: {{ NAME }}
187-
{% endfor %}
188-
{% endif %}
119+
{% for VARIANT in ENV.variants %}
120+
{% for MODE in ACCESS_MODES %}
121+
{{ macros.api_catalog(MODE, TITLE, VARIANT.name, VARIANT.display_name) }}
122+
{% endfor %}
123+
{% endfor %}
124+
189125
{% endfor %}

0 commit comments

Comments
 (0)