273b87534348be8f8ef7f938ec2d16b2d570b82d
[policy/parent.git] / docs / api / api.rst
1 .. This work is licensed under a
2 .. Creative Commons Attribution 4.0 International License.
3 .. http://creativecommons.org/licenses/by/4.0
4
5 .. THIS IS USED INTERNALLY IN POLICY ONLY
6 .. _api-label:
7
8 1. Policy Life Cycle API
9 ########################
10
11 1.1 Overview
12 ------------
13
14 .. contents::
15     :depth: 2
16
17 The purpose of this API is to support CRUD of TOSCA *PolicyType* and *Policy* entities. This API is provided by the
18 *PolicyDevelopment* component of the Policy Framework, see the :ref:`The ONAP Policy Framework Architecture
19 <architecture-label>` page. The Policy design API backend is running in an independent building block component of the
20 policy framework that provides REST services for the aforementioned CRUD behaviors. The Policy design API component interacts
21 with a policy database for storing and fetching new policies or policy types as needed. Apart from CRUD, an API is also
22 exposed for clients to retrieve healthcheck status of the API REST service and statistics report including a variety of
23 counters that reflect the history of API invocation.
24
25 We strictly follow `TOSCA Specification <http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.1/TOSCA-Simple-Profile-YAML-v1.1.pdf>`_
26 to define policy types and policies. A policy type defines the schema for a policy, expressing the properties, targets, and triggers
27 that a policy may have. The type (string, int etc) and constraints (such as the range of legal values) of each property is defined
28 in the Policy Type. Both Policy Type and policy are included in a TOSCA Service Template, which is used as the entity passed into an API
29 POST call and the entity returned by API GET and DELETE calls. More details are presented in following sections. Policy Types and Policies
30 can be composed for any given domain of application.  All Policy Types and Policies must be composed as well-formed TOSCA Service Templates.
31 One Service Template can contain multiple policies and policy types.
32
33 Child policy types can inherit from parent policy types, so a hierarchy of policy types can be built up. For example, the HpaPolicy Policy
34 Type in the table below is a child of a Resource Policy Type, which is a child of an Optimization policy.
35 See also `the examples in Github <https://github.com/onap/policy-models/tree/master/models-examples/src/main/resources/policytypes>`_.
36
37 ::
38
39  onap.policies.Optimization.yaml
40   onap.policies.optimization.Resource.yaml
41    onap.policies.optimization.resource.AffinityPolicy.yaml
42    onap.policies.optimization.resource.DistancePolicy.yaml
43    onap.policies.optimization.resource.HpaPolicy.yaml
44    onap.policies.optimization.resource.OptimizationPolicy.yaml
45    onap.policies.optimization.resource.PciPolicy.yaml
46    onap.policies.optimization.resource.Vim_fit.yaml
47    onap.policies.optimization.resource.VnfPolicy.yaml
48  onap.policies.optimization.Service.yaml
49    onap.policies.optimization.service.QueryPolicy.yaml
50    onap.policies.optimization.service.SubscriberPolicy.yaml
51
52 Custom data types can be defined in TOSCA for properties specified in Policy Types. Data types can also inherit from parents, so a hierarchy of data types can also be built up.
53
54 .. warning::
55  When creating a Policy Type, the ancestors of the Policy Type and all its custom Data Type definitions and ancestors MUST either already
56  exist in the database or MUST also be defined in the incoming TOSCA Service Template. Requests with missing or bad references are rejected
57  by the API.
58
59 Each Policy Type can have multiple Policy instances created from it. Therefore, many Policy instances of the HpaPolicy Policy Type above can be created. When a policy is created, its Policy Type is specified in the *type* and *type_version* fields of the policy.
60
61 .. warning::
62  The Policy Type specified for a Policy MUST exist in the database before the policy can be created. Requests with missing or bad
63  Policy Type references are rejected by the API.
64
65 The API allows applications to create, update, delete, and query *PolicyType* entities so that they become available for
66 use in ONAP by applications such as CLAMP. Some Policy Type entities are preloaded in the Policy Framework.
67
68 .. warning::
69  If a TOSCA entity (Data Type, Policy Type, or Policy with a certain version) already exists in the database and an attempt is made
70  to re-create the entity with different fields, the API will reject the request with the error message "entity in incoming fragment
71  does not equal existing entity". In such cases, delete the Policy or Policy Type and re-create it using the API.
72
73
74 The TOSCA fields below are valid on API calls:
75
76 ============ ======= ======== ========== ===============================================================================
77 **Field**    **GET** **POST** **DELETE** **Comment**
78 ============ ======= ======== ========== ===============================================================================
79 (name)       M       M        M          The definition of the reference to the Policy Type, GET allows ranges to be
80                                          specified
81 version      O       M        C          GET allows ranges to be specified, must be specified if more than one version
82                                          of the Policy Type exists and a specific version is required
83 description  R       O        N/A        Desciption of the Policy Type
84 derived_from R       C        N/A        Must be specified when a Policy Type is derived from another Policy Type such
85                                          as in the case of derived Monitoring Policy Types. The referenced Policy Type
86                                          must either already exist in the database or be defined as another policy type
87                                          in the incoming TOSCA service template
88 metadata     R       O        N/A        Metadata for the Policy Type
89 properties   R       M        N/A        This field holds the specification of the specific Policy Type in ONAP. Any user
90                                          defined data types specified on properties must either already exist in the
91                                          database or be defined in the incoming TOSCA service template
92 targets      R       O        N/A        A list of node types and/or group types to which the Policy Type can be applied
93 triggers     R       O        N/A        Specification of policy triggers, not currently supported in ONAP
94 ============ ======= ======== ========== ===============================================================================
95
96 .. note::
97   On this and subsequent tables, use the following legend:   M-Mandatory, O-Optional, R-Read-only, C-Conditional.
98   Conditional means the field is mandatory when some other field is present.
99
100 .. note::
101   Preloaded policy types may only be queried over this API, modification or deletion of preloaded policy type
102   implementations is disabled.
103
104 .. note::
105   Policy types that are in use (referenced by defined Policies and/or child policy types) may not be deleted.
106
107 .. note::
108   The group types of targets in TOSCA are groups of TOSCA nodes, not PDP groups; the *target* concept in TOSCA is
109   equivalent to the Policy Enforcement Point (PEP) concept
110
111 1.2 Preloaded policy types and policies
112 ---------------------------------------
113
114 To ease policy creation, we preload several widely used policy types in policy database. Below is a table listing the preloaded policy types.
115
116 .. _policy-preload-label:
117
118 .. csv-table::
119    :header: "Policy Type Name", "Payload"
120    :widths: 15,10
121
122    "Monitoring.TCA", `onap.policies.monitoring.tcagen2.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.monitoring.tcagen2.yaml>`_
123    "Monitoring.Collectors", `onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml>`_
124    "Optimization", `onap.policies.Optimization.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.Optimization.yaml>`_
125    "Optimization.Resource", `onap.policies.optimization.Resource.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.Resource.yaml>`_
126    "Optimization.Resource.AffinityPolicy", `onap.policies.optimization.resource.AffinityPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml>`_
127    "Optimization.Resource.DistancePolicy", `onap.policies.optimization.resource.DistancePolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.DistancePolicy.yaml>`_
128    "Optimization.Resource.HpaPolicy", `onap.policies.optimization.resource.HpaPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.HpaPolicy.yaml>`_
129    "Optimization.Resource.OptimizationPolicy", `onap.policies.optimization.resource.OptimizationPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml>`_
130    "Optimization.Resource.PciPolicy", `onap.policies.optimization.resource.PciPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.PciPolicy.yaml>`_
131    "Optimization.Resource.Vim_fit", `onap.policies.optimization.resource.Vim_fit.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.Vim_fit.yaml>`_
132    "Optimization.Resource.VnfPolicy", `onap.policies.optimization.resource.VnfPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.VnfPolicy.yaml>`_
133    "Optimization.Service", `onap.policies.optimization.Service.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.Service.yaml>`_
134    "Optimization.Service.QueryPolicy", `onap.policies.optimization.service.QueryPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.service.QueryPolicy.yaml>`_
135    "Optimization.Service.SubscriberPolicy", `onap.policies.optimization.service.SubscriberPolicy.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml>`_
136    "Controlloop.Guard.Common", `onap.policies.controlloop.guard.Common.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.guard.Common.yaml>`_
137    "Controlloop.Guard.Common.Blacklist", `onap.policies.controlloop.guard.common.Blacklist.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml>`_
138    "Controlloop.Guard.Common.FrequencyLimiter", `onap.policies.controlloop.guard.common.FrequencyLimiter.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml>`_
139    "Controlloop.Guard.Common.MinMax", `onap.policies.controlloop.guard.common.MinMax.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.guard.common.MinMax.yaml>`_
140    "Controlloop.Guard.Common.Filter", `onap.policies.controlloop.guard.common.Filter.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.guard.common.Filter.yaml>`_
141    "Controlloop.Guard.Coordination.FirstBlocksSecond", `onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml>`_
142    "Controlloop.Operational.Common", `onap.policies.controlloop.operational.Common.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.Common.yaml>`_
143    "Controlloop.Operational.Common.Apex", `onap.policies.controlloop.operational.common.Apex.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.common.Apex.yaml>`_
144    "Controlloop.Operational.Common.Drools", `onap.policies.controlloop.operational.common.Drools.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.controlloop.operational.common.Drools.yaml>`_
145    "Naming", `onap.policies.Naming.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.Naming.yaml>`_
146    "Native.Drools", `onap.policies.native.Drools.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.native.Drools.yaml>`_
147    "Native.Xacml", `onap.policies.native.Xacml.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.native.Xacml.yaml>`_
148    "Native.Apex", `onap.policies.native.Apex.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policytypes/onap.policies.native.Apex.yaml>`_
149
150 We also preload a policy in the policy database. Below is a table listing the preloaded polic(ies).
151
152 .. csv-table::
153    :header: "Policy Type Name", "Payload"
154    :widths: 15,10
155
156    "SDNC.Naming", `sdnc.policy.naming.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/sdnc.policy.naming.input.tosca.yaml>`_
157
158 Below is a table containing sample well-formed TOSCA compliant policies.
159
160 .. csv-table::
161    :header: "Policy Name", "Payload"
162    :widths: 15,10
163
164    "vCPE.Monitoring.Tosca", `vCPE.policy.monitoring.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.yaml>`_  `vCPE.policy.monitoring.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vCPE.policy.monitoring.input.tosca.json>`_
165    "vCPE.Optimization.Tosca", `vCPE.policies.optimization.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vCPE.policies.optimization.input.tosca.yaml>`_  `vCPE.policies.optimization.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vCPE.policies.optimization.input.tosca.json>`_
166    "vCPE.Operational.Tosca", `vCPE.policy.operational.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vCPE.policy.operational.input.tosca.yaml>`_  `vCPE.policy.operational.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vCPE.policy.operational.input.tosca.json>`_
167    "vDNS.Guard.FrequencyLimiting.Tosca", `vDNS.policy.guard.frequencylimiter.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.guard.frequencylimiter.input.tosca.yaml>`_
168    "vDNS.Guard.MinMax.Tosca", `vDNS.policy.guard.minmaxvnfs.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.guard.minmaxvnfs.input.tosca.yaml>`_
169    "vDNS.Guard.Blacklist.Tosca", `vDNS.policy.guard.blacklist.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.guard.blacklist.input.tosca.yaml>`_
170    "vDNS.Monitoring.Tosca", `vDNS.policy.monitoring.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.yaml>`_  `vDNS.policy.monitoring.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.monitoring.input.tosca.json>`_
171    "vDNS.Operational.Tosca", `vDNS.policy.operational.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.operational.input.tosca.yaml>`_  `vDNS.policy.operational.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vDNS.policy.operational.input.tosca.json>`_
172    "vFirewall.Monitoring.Tosca", `vFirewall.policy.monitoring.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.yaml>`_  `vFirewall.policy.monitoring.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vFirewall.policy.monitoring.input.tosca.json>`_
173    "vFirewall.Operational.Tosca", `vFirewall.policy.operational.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vFirewall.policy.operational.input.tosca.yaml>`_  `vFirewall.policy.operational.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vFirewall.policy.operational.input.tosca.json>`_
174    "vFirewallCDS.Operational.Tosca", `vFirewallCDS.policy.operational.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/vFirewallCDS.policy.operational.input.tosca.yaml>`_
175
176
177 2. APIs exposed
178 ###############
179
180 2.1 Global API Table
181 --------------------
182
183 Below is a global API table from where swagger JSON for different types of policy design API can be downloaded.
184
185 .. csv-table::
186    :header: "API name", "Swagger JSON"
187    :widths: 10,5
188
189    "Healthcheck API", ":download:`link <swagger/healthcheck-api.json>`"
190    "Statistics API", ":download:`link <swagger/statistics-api.json>`"
191    "Tosca Policy Type API", ":download:`link <swagger/policytype-api.json>`"
192    "Tosca Policy API", ":download:`link <swagger/policy-api.json>`"
193    "Tosca NodeTemplate API", ":download:`link <swagger/nodetemplates-api.json>`"
194
195 2.2 API Swagger
196 ---------------
197
198 It is worth noting that we use basic authorization for API access with username and password set to *policyadmin* and *zb!XztG34* respectively.
199 Also, the new APIs support both *http* and *https*.
200
201 For every API call, client is encouraged to insert an uuid-type requestID as parameter.
202 It is helpful for tracking each http transaction and facilitates debugging.
203 Mostly importantly, it complies with Logging requirements v1.2.
204 If a client does not provide the requestID in API call, one will be randomly generated
205 and attached to response header *x-onap-requestid*.
206
207 In accordance with `ONAP API Common Versioning Strategy Guidelines <https://wiki.onap.org/display/DW/ONAP+API+Common+Versioning+Strategy+%28CVS%29+Guidelines>`_,
208 in the response of each API call, several custom headers are added::
209
210     x-latestversion: 1.0.0
211     x-minorversion: 0
212     x-patchversion: 0
213     x-onap-requestid: e1763e61-9eef-4911-b952-1be1edd9812b
214     x-latestversion is used only to communicate an API's latest version.
215
216 x-minorversion is used to request or communicate a MINOR version back from the client to the server, and from the server back to the client.
217
218 x-patchversion is used only to communicate a PATCH version in a response for troubleshooting purposes only, and will not be provided by the client on request.
219
220 x-onap-requestid is used to track REST transactions for logging purpose, as described above.
221
222 .. swaggerv2doc:: swagger/healthcheck-api.json
223
224 .. swaggerv2doc:: swagger/statistics-api.json
225
226 .. swaggerv2doc:: swagger/policytype-api.json
227
228 .. swaggerv2doc:: swagger/policy-api.json
229
230
231 2.3 Creating MetadataSet for policy
232 -----------------------------------
233
234 The policy type implementation in tosca policy can be independently persisted to the database as metadataSets via the Tosca node template Apis .
235 The policy type implementation data can be excluded from the policy properties section of the tosca policy and the user can specify only the "metadataSetName" and "metadataSetVersion"
236 fields under the policy "metadata" section to map a specific policy type implementation to the policy during the policy creation.
237
238 The following sample tosca service template comprises a list of tosca node templates each containing a policy type implementation data in the form of metadataSet that can be persisted to the database independently using the policy node template Api.
239
240 .. csv-table::
241    :header: "Tosca node template", "Payload"
242    :widths: 15,10
243
244    "sample.nodetemplates.metadatasets", `nodetemplates.metadatasets.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/nodetemplates/nodetemplates.metadatasets.input.tosca.yaml>`_  `nodetemplates.metadatasets.input.tosca.json <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/nodetemplates/nodetemplates.metadatasets.input.tosca.json>`_
245
246
247 The following sample tosca policy shows the policy metadata section that maps to one of the metadataSets stored in the database prior to the policy creation.
248
249 .. csv-table::
250    :header: "Tosca policy", "Payload"
251    :widths: 15,10
252
253    "apex.decisionmaker.policy", `apex.policy.decisionmaker.input.tosca.yaml <https://github.com/onap/policy-models/blob/master/models-examples/src/main/resources/policies/apex.policy.decisionmaker.input.tosca.yaml>`_
254
255 The following node template Apis are introduced to handle the policy metadataSets as independent entities that can be later mapped to a tosca policy during policy creation.
256
257 .. swaggerv2doc:: swagger/nodetemplates-api.json
258
259 When making a POST policy API call, the client must not only provide well-formed JSON/YAML,
260 but also must conform to the TOSCA specification. For example. the "type" field for a TOSCA
261 policy should strictly match the policy type name it derives.
262 Please check out the sample policies in above policy table.
263
264 Also, in the POST payload passed into each policy or policy type creation call (i.e. POST API invocation), the client needs to explicitly
265 specify the version of the policy or policy type to create. That being said, the "version" field is mandatory in the TOSCA service template
266 formatted policy or policy type payload. If the version is missing, that POST call will return "406 - Not Acceptable" and
267 the policy or policy type to create will not be stored in the database.
268
269 To avoid inconsistent versions between the database and policies deployed in the PDPs, policy API REST service employs some enforcement
270 rules that validate the version specified in the POST payload when a new version is to create or an existing version to update.
271 Policy API will not blindly override the version of the policy or policy type to create/update.
272 Instead, we encourage the client to carefully select a version for the policy or policy type to change and meanwhile policy API will check the validity
273 of the version and feed an informative warning back to the client if the specified version is not good.
274 To be specific, the following rules are implemented to enforce the version:
275
276 1. If the incoming version is not in the database, we simply insert it. For example: if policy version 1.0.0 is stored in the database and now
277    a client wants to create the same policy with updated version 3.0.0, this POST call will succeed and return "200" to the client.
278
279 2. If the incoming version is already in the database and the incoming payload is different from the same version in the database,
280    "406 - Not Acceptable" will be returned. This forces the client to update the version of the policy if the policy is changed.
281
282 3. If a client creates a version of a policy and wishes to update a property on the policy, they must delete that version of the policy and re-create it.
283
284 4. If multiple policies are included in the POST payload, policy API will also check if duplicate version exists in between
285    any two policies or policy types provided in the payload. For example, a client provides a POST payload which includes two policies with the same
286    name and version but different policy properties. This POST call will fail and return "406" error back to the calling application along with a
287    message such as "duplicate policy {name}:{version} found in the payload".
288
289 5. The same version validation is applied to policy types too.
290
291 6. To avoid unnecessary id/version inconsistency between the ones specified in the entity fields and the ones returned in the metadata field,
292    "policy-id" and "policy-version" in the metadata will only be set by policy API. Any incoming explicit specification in the POST payload will be
293    ignored. For example, A POST payload has a policy with name "sample-policy-name1" and version "1.0.0" specified. In this policy, the metadata
294    also includes "policy-id": "sample-policy-name2" and "policy-version": "2.0.0". The 200 return of this POST call will have this created policy with
295    metadata including "policy-id": "sample-policy-name1" and "policy-version": "1.0.0".
296
297 Regarding DELETE APIs for TOSCA compliant policies, we only expose API to delete one particular version of policy
298 or policy type at a time for safety purpose. If client has the need to delete multiple or a group of policies or policy types,
299 they will need to delete them one by one.
300
301 2.4 Sample API Curl Commands
302 ----------------------------
303
304 From an API client perspective, using *http* or *https* does not make much difference to the curl command.
305 Here we list some sample curl commands (using *http*) for POST, GET and DELETE monitoring and operational policies that are used in vFirewall use case.
306 JSON payload for POST calls can be downloaded from policy table above.
307
308 If you are accessing the api from the container, the default *ip* and *port* would be **https:/policy-api:6969/policy/api/v1/**.
309
310 Create vFirewall Monitoring Policy::
311   curl --user 'policyadmin:zb!XztG34' -X POST "http://{ip}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.tcagen2/versions/1.0.0/policies" -H "Accept: application/json" -H "Content-Type: application/json" -d @vFirewall.policy.monitoring.input.tosca.json
312
313 Get vFirewall Monitoring Policy::
314   curl --user 'policyadmin:zb!XztG34' -X GET "http://{ip}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.tcagen2/versions/1.0.0/policies/onap.vfirewall.tca/versions/1.0.0" -H "Accept: application/json" -H "Content-Type: application/json"
315
316 Delete vFirewall Monitoring Policy::
317   curl --user 'policyadmin:zb!XztG34' -X DELETE "http://{ip}:{port}/policy/api/v1/policytypes/onap.policies.monitoring.tcagen2/versions/1.0.0/policies/onap.vfirewall.tca/versions/1.0.0" -H "Accept: application/json" -H "Content-Type: application/json"
318
319 Create vFirewall Operational Policy::
320   curl --user 'policyadmin:zb!XztG34' -X POST "http://{ip}:{port}/policy/api/v1/policytypes/onap.policies.controlloop.operational.common.Drools/versions/1.0.0/policies" -H "Accept: application/json" -H "Content-Type: application/json" -d @vFirewall.policy.operational.input.tosca.json
321
322 Get vFirewall Operational Policy::
323   curl --user 'policyadmin:zb!XztG34' -X GET "http://{ip}:{port}/policy/api/v1/policytypes/onap.policies.controlloop.operational.common.Drools/versions/1.0.0/policies/operational.modifyconfig/versions/1.0.0" -H "Accept: application/json" -H "Content-Type: application/json"
324
325 Delete vFirewall Operational Policy::
326   curl --user 'policyadmin:zb!XztG34' -X DELETE "http://{ip}:{port}/policy/api/v1/policytypes/onap.policies.controlloop.operational.common.Drools/versions/1.0.0/policies/operational.modifyconfig/versions/1.0.0" -H "Accept: application/json" -H "Content-Type: application/json"
327
328 Get all available policies::
329   curl --user 'policyadmin:zb!XztG34' -X GET "http://{ip}:{port}/policy/api/v1/policies" -H "Accept: application/json" -H "Content-Type: application/json"
330
331 Get version 1.0.0 of vFirewall Monitoring Policy::
332   curl --user 'policyadmin:zb!XztG34' -X GET "http://{ip}:{port}/policy/api/v1/policies/onap.vfirewall.tca/versions/1.0.0" -H "Accept: application/json" -H "Content-Type: application/json"
333
334 Delete version 1.0.0 of vFirewall Monitoring Policy::
335   curl --user 'policyadmin:zb!XztG34' -X DELETE "http://{ip}:{port}/policy/api/v1/policies/onap.vfirewall.tca/versions/1.0.0" -H "Accept: application/json" -H "Content-Type: application/json"
336
337
338 3. Policy API application configuration
339 #######################################
340
341 Starting from Jakarta Release policy-api is a Springboot based microservice.
342
343 The policy-api application configuration is packaged as a K8S ConfigMap object via `Policy-API OOM charts <https://gerrit.onap.org/r/gitweb?p=oom.git;a=blob;f=kubernetes/policy/components/policy-api/resources/config/apiParameters.yaml;h=c08b035d53f299fe0e08b45bd95a760283acce66;hb=refs/heads/master>`_