diff --git a/.jenkins.sh b/.jenkins.sh new file mode 100644 index 0000000000000000000000000000000000000000..2a971ec49cf841a61473f8ae8f519ba43fc1fc97 --- /dev/null +++ b/.jenkins.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Copyright ETSI 2017 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +cd "$(dirname "$0")" + +run_dir="$(pwd)" + +rm build/*-API.yaml +rm build/*-API.json + +cd docker + +./build-container.sh + +./run-container.sh "${run_dir}" +OUTCOME=$? + +exit $OUTCOME diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..9b3d8380bbce4da5163ba8292cbefad5963ab448 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,33 @@ +# Copyright ETSI 2017 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +FROM alpine:3.10.0 + +RUN env +RUN apk update +RUN apk add bash +RUN apk add nodejs +RUN apk add nodejs-npm +RUN apk add asciidoctor +RUN apk add openjdk8 +RUN apk add ca-certificates wget && update-ca-certificates +RUN apk add openssl +RUN gem install rdoc --pre || gem install rdoc --pre +RUN gem install asciidoctor-pdf-cjk +RUN wget https://forge.etsi.org/swagger2markup-cli-1.3.2.jar +RUN npm config set proxy $http_proxy +RUN npm install -g swagger-cli +RUN npm install -g json-refs +RUN npm install -g yamljs + +ADD validate-in-docker.sh /validate-in-docker.sh +RUN chmod +x /validate-in-docker.sh + +ADD swg2mrkup /bin/swg2mrkup +RUN chmod +x /bin/swg2mrkup + +ADD oas2pdf /bin/oas2pdf +RUN chmod +x /bin/oas2pdf + +ENTRYPOINT ["/validate-in-docker.sh"] + diff --git a/docker/build-container.sh b/docker/build-container.sh new file mode 100755 index 0000000000000000000000000000000000000000..d633cde896eada7e75a494ffb03489923136620e --- /dev/null +++ b/docker/build-container.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Copyright ETSI 2017 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +#set -x + +proxy = "" +if [[ ! -v http_proxy ]]; then + echo "http_proxy is not set" +elif [[ -z "$http_proxy" ]]; then + echo "http_proxy is empty" +else + echo "http_proxy is set to $http_proxy" + if [[ $http_proxy =~ ^http:\/\/[0-9] ]]; then + echo "starts with http" + proxy=$http_proxy + elif [[ $http_proxy =~ ^[0-9] ]]; then + echo "starts with number" + proxy=http://$http_proxy + fi +fi + +echo "Proxy set to $proxy" + +docker build --build-arg http_proxy=$proxy --build-arg https_proxy=$proxy -t openapivalidator . \ No newline at end of file diff --git a/docker/oas2pdf b/docker/oas2pdf new file mode 100644 index 0000000000000000000000000000000000000000..70a36a053882d362a729fefc32bc6d25dcedc1de --- /dev/null +++ b/docker/oas2pdf @@ -0,0 +1,61 @@ +#!/bin/bash +#Copyright (c) ETSI 2017. + +# This software is subject to copyrights owned by ETSI. Non-exclusive permission +# is hereby granted, free of charge, to copy, reproduce and amend this file +# under the following conditions: It is provided "as is", without warranty of any +# kind, expressed or implied. + +# ETSI shall never be liable for any claim, damages, or other liability arising +# from its use or inability of use.This permission does not apply to any documentation +# associated with this file for which ETSI keeps all rights reserved. The present +# copyright notice shall be included in all copies of whole or part of this +# software and shall not imply any sub-license right. +# +# Author: michele.carignani@etsi.org +# +# This script takes an OpenAPI file in input and creates +# a PDF file with the content. +# +# Prerequisites: +# - https://github.com/Swagger2Markup/swagger2markup-cli +# - Asciidoctor (sudo apt-get install asciidoctor) +# - Asciidoctor-pdf (sudo gem install asciidoctor-pdf) +# +# Usage: +# oas2pdf (e.g. myapi.json) +# +# Result: +# A new pdf file is created in the working directory (e.g. myapi.pdf) +# +# +# +# + +# Configuration + +# Change this if needed +SWG2MRKUP=swg2mrkup +ASCIIDOCPDF=asciidoctor-pdf + +# Setup +WD=$(pwd) +TWD=$(mktemp -d) + +INFILE=$(basename ${1?"Error: missing input file name"} ) +OUTFILE="${INFILE%.*}" + +echo "$INFILE, $OUTFILE" + +echo "Converting to asciidoc.." +${SWG2MRKUP} convert -i "$1" -f "$TWD/$OUTFILE" +echo + +echo "Converting to PDF.." +"${ASCIIDOCPDF}" "$TWD/${OUTFILE}.adoc" -o "$WD/${OUTFILE}.pdf" +echo + +echo "Done." +# Clean up +rm -r $TWD + diff --git a/docker/run-container.sh b/docker/run-container.sh new file mode 100755 index 0000000000000000000000000000000000000000..7118514c62aaf545d2f8c43512e96a02a98464ba --- /dev/null +++ b/docker/run-container.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# Copyright ETSI 2017 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +# Change this variable to true if you want +# to copy the created yaml files to a web served directory +# +# +WEB_PUBLISH=true + +f="${1:-`pwd`}" +filter="$2" + +echo "Mounting dir $f as /work" + +if [ -n "$JOB_BASE_NAME" -a "$WEB_PUBLISH" = true ] ; then + s="/var/www/html/api/nfv/$JOB_BASE_NAME/$BUILD_NUMBER" + mkdir -v -p "$s" + echo "Mounting dir $s as /storage" + docker run -v "$f":/work -v "$s":/storage openapivalidator "/work" "/storage" "$filter" +else + docker run -v "$f":/work openapivalidator "/work" "/storage" "$filter" +fi + + + + diff --git a/docker/swg2mrkup b/docker/swg2mrkup new file mode 100644 index 0000000000000000000000000000000000000000..b54937197b6952d521163c1c802e3f924408f3df --- /dev/null +++ b/docker/swg2mrkup @@ -0,0 +1,17 @@ +#!/bin/bash +#Copyright (c) ETSI 2017. + +# This software is subject to copyrights owned by ETSI. Non-exclusive permission +# is hereby granted, free of charge, to copy, reproduce and amend this file +# under the following conditions: It is provided "as is", without warranty of any +# kind, expressed or implied. + +# ETSI shall never be liable for any claim, damages, or other liability arising +# from its use or inability of use.This permission does not apply to any documentation +# associated with this file for which ETSI keeps all rights reserved. The present +# copyright notice shall be included in all copies of whole or part of this +# software and shall not imply any sub-license right. +# +# Author: michele.carignani@etsi.org + +java -jar /swagger2markup-cli-1.3.2.jar $@ diff --git a/docker/validate-in-docker.sh b/docker/validate-in-docker.sh new file mode 100644 index 0000000000000000000000000000000000000000..765269d5003e6ae38f6a66490966f6834907426e --- /dev/null +++ b/docker/validate-in-docker.sh @@ -0,0 +1,100 @@ +#!/bin/bash +# Copyright ETSI 2017 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +# Merges OpenAPIs interfaces in the working directory +# and validates them individually. +# Exit status is 0 if all validation passed, 1 otherwise + +# Usage: +# $0 + +#set -x + +function store_api () { + f="$1" + cp -v "$1" "${storage_dir}/" +} + +function validate_api () { + file="$1" + api="$2" + deliverable="$3" + echo "--- Merging file." + merged_file="../build/${deliverable}-${api}-API.yaml" + json_file="../build/${deliverable}-${api}-API.json" + json-refs resolve "${file}" > "${merged_file}" + yaml2json "${merged_file}" > "${json_file}" + + # Create the PDF version + echo "--- Create PDF..." + oas2pdf "${json_file}" 2>/dev/null 1>/dev/null + mv "${deliverable}-${api}-API.pdf" "../build/" + + echo "--- Validating ${merged_file}" + swagger-cli validate "${merged_file}" + vres=$? + echo "--- Validation done ($vres)." + + # If validation succedes, store the generated file + [ $vres -a -d "/storage" ] && store_api "${merged_file}" + [ $vres -a -d "/storage" ] && store_api "${json_file}" + [ $vres -a -d "/storage" ] && store_api "../build/${deliverable}-${api}-API.pdf" + + + return $vres +} + +# usage get_api_from_fn +# e.g. get_api_from_fn /path/to/SOL003/Api1/Api1.yaml returns Api1 +function get_api_from_fn () { + echo "$(basename $(dirname $1))" +} + +# usage get_api_from_fn +# e.g. get_api_from_fn /path/to/SOL003/Api1/Api1.yaml returns Api1 +function get_deliverable_from_fn () { + echo "$(basename $(dirname $(dirname $1 )))" +} + +## Main ## + +wd="${1?"Usage: $0 []"}" +storage_dir="${2?"Usage: $0 []"}" + +filter="$3" +echo "Using filter '$filter'" +echo + +mkdir -p "$wd/build" + +echo "Entering dir $wd/src" +cd "$wd/src" + +# Stores the overall validation result +# (single results in OR) +fres=0 + + +for f in $(find -name "*.yaml") ; do + # echo "Found yaml file: $f" + file=$(basename "$f") + api=$(get_api_from_fn $f) + deliverable=$(get_deliverable_from_fn $f) + if [ "$file" = "$api.yaml" ]; then + if [[ -n "$filter" && ! "$f" =~ ^[a-zA-Z0-9\.\/\-]*$filter[a-zA-Z\.\/0-9\-]*$ ]] ; then + echo "Filtered out: $f (api: $api) (deliverable:$deliverable)." + else + echo "-- Will validate: $f (api: $api) (deliverable:$deliverable)" + validate_api "$f" "$api" "$deliverable" + res=$? + fres=$(($fres||$res)) + fi + fi +done + +chmod -R o+w "$wd/build" + +# Exit code needed for jenkins to know the verdict of the build +echo "-- Final validator returns $fres." +exit $fres diff --git a/src/SOL011/APIVersion/APIVersion.yaml b/src/SOL011/APIVersion/APIVersion.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5bdb07f7b36b57f78807b45defe148ee9d0fdf23 --- /dev/null +++ b/src/SOL011/APIVersion/APIVersion.yaml @@ -0,0 +1,41 @@ +openapi: 3.0.2 + +info: + version: 1.0.0-impl:etsi.org:ETSI_NFV_OpenAPI:1 + + title: SOL011 - API version interface + + description: > + SOL011 - API version Interface + + IMPORTANT: Please note that this file might + be not aligned to the current version of the ETSI Group Specification it + refers to and has not been approved by the ETSI NFV ISG. In case of + discrepancies the published ETSI Group Specification takes precedence. + Please report bugs to + https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + + license: + name: ETSI Forge copyright notice + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + + contact: + name: NFV-SOL WG + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +paths: + /nsd/api_versions: + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + /nslcog/api_versions: + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + /nslcm/api_versions: + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + /nsiun/api_versions: + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + /nspm/api_versions: + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + /nsfm/api_versions: + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' \ No newline at end of file diff --git a/src/SOL011/NSDManagement/NSDManagement.yaml b/src/SOL011/NSDManagement/NSDManagement.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3f00d710a17b80c335a2a4e47aaaec7d67acdf3a --- /dev/null +++ b/src/SOL011/NSDManagement/NSDManagement.yaml @@ -0,0 +1,80 @@ +swagger: "2.0" + +info: + version: "1.1.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NSD Management Interface" + description: > + SOL011 - NSD Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +basePath: /nsd/v1 + +schemes: + - http + - https + +consumes: + - application/json + +produces: + - application/json + +paths: + "/api_versions": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1api-versions' + + "/ns_descriptors": + parameters: + - name: Authorization + description: > + The authorization token for the request. + Reference: IETF RFC 7235. + in: header + required: false + type: string + - name: Version + description: > + Version of the API requested to use when responding to this request. + in: header + required: true + type: string + get: + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSDManagement/NSDManagement.yaml#/paths/~1ns_descriptors/get' + + '/ns_descriptors/{nsdInfoId}': + parameters: + - name: nsdInfoId + description: > + Identifier of the individual NS descriptor resource. + in: path + required: true + type: string + - name: Authorization + description: > + The authorization token for the request. + Reference: IETF RFC 7235. + in: header + required: false + type: string + - name: Version + description: > + Version of the API requested to use when responding to this request. + in: header + required: true + type: string + get: + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSDManagement/NSDManagement.yaml#/paths/~1ns_descriptors~1{nsdInfoId}/get' + diff --git a/src/SOL011/NSFaultManagement/NSFaultManagement.yaml b/src/SOL011/NSFaultManagement/NSFaultManagement.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0e529d402f84a3c5d68ed5d158809c54c704904b --- /dev/null +++ b/src/SOL011/NSFaultManagement/NSFaultManagement.yaml @@ -0,0 +1,45 @@ +swagger: "2.0" + +info: + version: "1.1.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NS Fault Management Interface" + description: > + SOL011 - NS Fault Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +basePath: /nsfm/v1 + +schemes: + - http + - https + +consumes: + - application/json + +produces: + - application/json + +paths: + "/api_versions": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagement/NSFaultManagement.yaml#/paths/~1api-versions' + "/alarms": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagement/NSFaultManagement.yaml#/paths/~1alarms' + "/alarms/{alarmId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagement/NSFaultManagement.yaml#/paths/~1alarms~1{alarmId}' + "/subscriptions": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagement/NSFaultManagement.yaml#/paths/~1subscriptions' + "/subscriptions/{subscriptionId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagement/NSFaultManagement.yaml#/paths/~1subscriptions~1{subscriptionId}' diff --git a/src/SOL011/NSFaultManagementNotification/NSFaultManagementNotification.yaml b/src/SOL011/NSFaultManagementNotification/NSFaultManagementNotification.yaml new file mode 100644 index 0000000000000000000000000000000000000000..52b13ce6601d7babd8ec71e7899c942ec3321745 --- /dev/null +++ b/src/SOL011/NSFaultManagementNotification/NSFaultManagementNotification.yaml @@ -0,0 +1,41 @@ +swagger: "2.0" + +info: + version: "1.1.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NS Fault Management Interface" + description: > + SOL011 - NS Fault Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +basePath: /callback/v1 + +schemes: + - http + - https + +consumes: + - application/json + +produces: + - application/json + +paths: + '/URI_is_provided_by_the_client_when_creating_the_subscription-AlarmNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagementNotification/NSFaultManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription-AlarmNotification' + '/URI_is_provided_by_the_client_when_creating_the_subscription-AlarmClearedNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagementNotification/NSFaultManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription-AlarmClearedNotification' + '/URI_is_provided_by_the_client_when_creating_the_subscription-AlarmListRebuiltNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSFaultManagementNotification/NSFaultManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription-AlarmListRebuiltNotification' diff --git a/src/SOL011/NSInstanceUsageNotification/NSInstanceUsageNotification.yaml b/src/SOL011/NSInstanceUsageNotification/NSInstanceUsageNotification.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cc830138b8c150de2f76908cec5d3b8e38d6a8c4 --- /dev/null +++ b/src/SOL011/NSInstanceUsageNotification/NSInstanceUsageNotification.yaml @@ -0,0 +1,592 @@ +openapi: 3.0.2 +info: + version: 1.0.0-impl:etsi.org:ETSI_NFV_OpenAPI:1 + title: SOL011 - NS Instance Usage Notification Interface + description: > + SOL011 - NS Instance Usage Notification Interface + + IMPORTANT: Please note that this file might be not aligned to the current version of the ETSI Group Specification + it refers to. In case of discrepancies the published ETSI Group Specification takes precedence. + + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis&list_id=61&product=NFV&resolution= + license: + name: ETSI Forge copyright notice + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://docbox.etsi.org/ISG/NFV/Open/Drafts/SOL011ed331_Or-Or_Stage_3/NFV-SOL011ed331v020.zip + +security: + - OauthSecurity: + - all +servers: + - url: http://0.0.0.0/nsiun/v1 + - url: https://0.0.0.0/nsiun/v1 + +paths: + "/api_versions": + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + + "/subscriptions": + description: >- + This resource represents subscriptions. The client can use this resource to subscribe to notifications + related to NS instance usage, and to query its subscriptions. + post: + description: >- + The POST method creates a new subscription. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/ContentType" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + requestBody: + $ref: "#/components/requestBodies/NsInstanceUsageSubscriptionRequest" + responses: + 201: + $ref: '#/components/responses/Subscriptions.Post.201' + 303: + $ref: '#/components/responses/Subscriptions.Post.303' + 400: + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + 401: + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + 403: + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + 404: + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + 405: + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + 406: + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + 422: + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + 500: + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + 503: + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + 504: + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + get: + description: >- + The GET method queries the list of active subscriptions of the functional block that invokes the method. + It can be used e.g. for resynchronization after error situations. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + - $ref: "../components/SOL011_params.yaml#/components/parameters/filter" + - $ref: "../components/SOL011_params.yaml#/components/parameters/nextpage_opaque_marker" + responses: + 201: + $ref: "#/components/responses/Subscriptions.Get.200" + 400: + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + 401: + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + 403: + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + 404: + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + 405: + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + 406: + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + 422: + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + 500: + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + 503: + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + 504: + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + + "/subscriptions/{subscriptionId}": + description: >- + This resource represents an individual subscription. The client can use this resource to read and to + terminate a subscription to notifications related to NS instance usage. + parameters: + - $ref: "#/components/parameters/subscriptionId" + get: + description: >- + The GET method retrieves information about a subscription by reading an "individual subscription" resource. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/ContentType" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + responses: + 200: + $ref: '#/components/responses/Subscription.Get.200' + 400: + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + 401: + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + 403: + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + 404: + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + 405: + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + 406: + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + 422: + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + 500: + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + 503: + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + 504: + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + delete: + description: >- + The DELETE method terminates an individual subscription. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/ContentType" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + responses: + 204: + $ref: '#/components/responses/Subscription.Delete.204' + 400: + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + 401: + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + 403: + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + 404: + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + 405: + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + 406: + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + 422: + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + 500: + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + 503: + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + 504: + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + + "/URI-is-provided-by-the-client-when-creating-the-subscription-NSInstanceUsageNotification": + description: > + This resource represents a notification endpoint. The NFVO-C can use this resource to send + notifications related to NS instance usage to a subscribed NFVO-N, which has provided the + URI of this resource during the subscription process + post: + description: > + The POST method delivers a notification from the NFVO-C to the NFVO-N. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/ContentType" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + requestBody: + $ref: "#/components/requestBodies/NsInstanceUsageNotification" + responses: + 204: + $ref: "#/components/responses/Notification.Post.204" + 400: + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + 401: + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + 403: + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + 404: + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + 405: + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + 406: + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + 422: + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + 500: + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + 503: + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + 504: + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + get: + description: > + The GET method allows the server to test the notification endpoint that is provided + by the client, e.g., during the subscription process. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + responses: + 204: + $ref: "#/components/responses/Notification.Get.204" + 400: + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + 401: + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + 403: + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + 404: + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + 405: + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + 406: + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + 422: + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + 500: + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + 503: + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + 504: + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + +components: + parameters: + subscriptionId: + name: subscriptionId + in: path + description: >- + Identifier of the subscription + required: true + schema: + $ref: '../components/SOL011_schemas.yaml#/components/schemas/Identifier' + + requestBodies: + NsInstanceUsageSubscriptionRequest: + description: + Details of the subscription to be created, as defined in clause 8.6.2.2. + content: + application/json: + schema: + $ref: "#/components/schemas/NsInstanceUsageSubscriptionRequest" + + NsInstanceUsageNotification: + description: + A notification about the change of usage of an NS instance as part of + a composite NS managed by the server. + content: + application/json: + schema: + $ref: "#/components/schemas/NsInstanceUsageNotification" + + responses: + Subscriptions.Post.201: + description: >- + Shall be returned when the subscription has been created successfully. + The response body shall contain a representation of the created + "individual subscription" resource. + The HTTP response shall include a "Location" HTTP header that points to + the created "individual subscription" resource. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + Location: + description: > + URI of the "Individual subscription" resource just created. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/NsInstanceUsageSubscription' + + Subscriptions.Post.303: + description: >- + Shall be returned if a subscription with the same callbackURI and the + same filter already exists and the policy of the NFVO-C is to not create + redundant subscriptions. + The HTTP response shall include a "Location" HTTP header that contains + the resource URI of the existing "individual subscription" resource. + The response body shall be empty. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + Location: + description: > + URI of the "Individual subscription" resource just created. + schema: + type: string + + Subscriptions.Get.200: + description: >- + Shall be returned when the list of subscriptions has been queried successfully. + The response body shall contain in an array the representations of all active + subscriptions of the functional block that invokes the method, i.e. zero or more + representations of NS instance usage notification subscriptions as defined in + clause 8.6.2.3. + If the "filter" URI parameter was supplied in the request, the data in the response + body shall have been transformed according to the rules specified in clause 5.2.2 + of ETSI GS NFV-SOL 013. + If the NFVO-C supports alternative 2 (paging) according to clause 5.4.2.1 of + ETSI GS NFV-SOL 013 for this resource, inclusion of the Link HTTP header in this + response shall follow the provisions in clause 5.4.2.3 of ETSI GS NFV-SOL 013. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/NsInstanceUsageSubscription" + + Subscription.Get.200: + description: >- + Shall be returned when information about an individual subscription has been + read successfully. + The response body shall contain a representation of the "individual subscription" + resource. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/NsInstanceUsageSubscription' + + Subscription.Delete.204: + description: >- + Shall be returned when the "individual subscription" resource has been + deleted successfully. + The response body shall be empty. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + + Notification.Post.204: + description: >- + Shall be returned when the notification was delivered successfully. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + + Notification.Get.204: + description: >- + Shall be returned when the notification was tested successfully. + The response body shall be empty. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + + schemas: + NsInstanceUsageSubscriptionRequest: + description: >- + This type represents a subscription request related to notifications about NS + instance usage. It shall comply with the provisions defined in table 8.6.2.2-1. + type: object + required: + - callbackUri + properties: + filter: + description: >- + Filter settings for this subscription, to define the subset of all notifications + this subscription relates to. A particular notification is sent to the subscriber + if the filter matches, or if there is no filter. + $ref: "#/components/schemas/NsInstanceUsageNotificationsFilter" + callbackUri: + description: >- + The URI of the endpoint to send the notification to. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Uri" + authentication: + description: >- + Authentication parameters to configure the use of Authorization when sending + notifications corresponding to this subscription, as defined in clause 8.3.4 + of ETSI GS NFV-SOL 013. + + This attribute shall only be present if the subscriber requires authorization + of notifications. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/SubscriptionAuthentication" + + NsInstanceUsageSubscription: + description: >- + This type represents a subscription related to notifications about NS instance usage. + It shall comply with the provisions defined in table 8.6.2.3-1. + type: object + required: + - id + - callbackUri + - _links + properties: + id: + description: >- + Identifier that identifies the subscription. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + filter: + description: >- + Filter settings for this subscription, to define the subset of all notifications + this subscription relates to. A particular notification is sent to the subscriber + if the filter matches, or if there is no filter. + $ref: "#/components/schemas/NsInstanceUsageNotificationsFilter" + callbackUri: + description: >- + The URI of the endpoint to send the notification to. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Uri" + _links: + description: >- + Links to resources related to this resource. + type: object + required: + - self + properties: + self: + description: >- + URI of this resource. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Link" + + NsInstanceUsageNotification: + description: >- + This type represents an NS instance usage notification, which indicates the start + or end of usage of an NS instance as a part of a composite NS managed by the NFVO-C. + It shall comply with the provisions defined in table 8.6.2.4-1. + type: object + required: + - id + - notificationType + - subscriptionId + - timeStamp + - nsInstanceId + - status + - _links + properties: + id: + description: >- + Identifier of this notification. If a notification is sent multiple times due + to multiple subscriptions, the "id" attribute of all these notifications shall + have the same value. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + notificationType: + description: >- + Discriminator for the different notification types. Shall be set to + "NsInstanceUsageNotification" for this notification type. + type: string + subscriptionId: + description: >- + Identifier of the subscription that this notification relates to. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + timeStamp: + description: >- + Date and time of the generation of the notification. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/DateTime" + nsInstanceId: + description: >- + Identifier of the NS instance affected. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + status: + description: >- + Indicates whether this notification reports about the start of the usage of + an NS instance or about the end of the usage of an NS instance. + $ref: "#/components/schemas/NsInstanceUsageStatusType" + _links: + description: >- + Links to resources related to this notification. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/NotificationLink" + + NsInstanceUsageNotificationsFilter: + description: >- + This type represents a subscription filter related to notifications about NS + instance usage. It shall comply with the provisions defined in table 8.6.3.1-1. + type: object + properties: + notificationTypes: + description: >- + Match particular notification types. + + Permitted values: + - NsInstanceUsageNotification + + NOTE: The permitted values of the "notificationTypes" attribute are spelled + exactly as the names of the notification types to facilitate automated code + generation systems. + type: array + items: + type: string + enum: + - NsInstanceUsageNotification + nsInstanceId: + description: >- + If present, match NS instances with an instance identifier listed in this attribute. + type: array + items: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + status: + description: >- + If present, match a particular status of usage of an NS instance. + $ref: "#/components/schemas/NsInstanceUsageStatusType" + + NsInstanceUsageStatusType: + description: >- + The enumeration NsInstanceUsageStatusType shall comply with the provisions defined + in table 8.6.4.3-1. + type: string + enum: + - START + - END diff --git a/src/SOL011/NSLifecycleManagement/NSLifecycleManagement.yaml b/src/SOL011/NSLifecycleManagement/NSLifecycleManagement.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bf190385aafb09d8a8986bbf88f27007cd6bf212 --- /dev/null +++ b/src/SOL011/NSLifecycleManagement/NSLifecycleManagement.yaml @@ -0,0 +1,57 @@ +swagger: "2.0" + +info: + version: "1.2.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NS Lifecycle Management Interface" + description: > + SOL011 - NS Lifecycle Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +basePath: /nslcm/v1 + +schemes: + - http + - https + +consumes: + - application/json + +produces: + - application/json + +paths: + "/api_versions": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1api-versions' + "/ns_instances": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_instances' + "/ns_instances/{nsInstanceId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_instances~1{nsInstanceId}' + "/ns_instances/{nsInstanceId}/instantiate": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_instances~1{nsInstanceId}~1instantiate' + "/ns_instances/{nsInstanceId}/terminate": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_instances~1{nsInstanceId}~1terminate' + "/ns_instances/{nsInstanceId}/scale": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_instances~1{nsInstanceId}~1scale' + "/ns_instances/{nsInstanceId}/heal": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_instances~1{nsInstanceId}~1heal' + "/ns_lcm_op_occs": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_lcm_op_occs' + "/ns_lcm_op_occs/{nsLcmOpOccId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1ns_lcm_op_occs~1{nsLcmOpOccId}' + "/subscriptions": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1subscriptions' + "/subscriptions/{subscriptionId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagement/NSLifecycleManagement.yaml#/paths/~1subscriptions~1{subscriptionId}' diff --git a/src/SOL011/NSLifecycleManagementNotification/NSLifecycleManagementNotification.yaml b/src/SOL011/NSLifecycleManagementNotification/NSLifecycleManagementNotification.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4266cbfd7c7385d83cc7f7303f979f23cb1a2c19 --- /dev/null +++ b/src/SOL011/NSLifecycleManagementNotification/NSLifecycleManagementNotification.yaml @@ -0,0 +1,41 @@ +swagger: "2.0" + +info: + version: "1.2.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NS Lifecycle Management Interface" + description: > + SOL011 - NS Lifecycle Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + + +basePath: /callback/v1 + +schemes: + - http + - https + +consumes: + - application/json +produces: + - application/json + +paths: + '/URI_is_provided_by_the_client_when_creating_the_subscription-NsLcmOperationOccurrenceNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagementNotification/NSLifecycleManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription-NsLcmOperationOccurrenceNotification' + '/URI_is_provided_by_the_client_when_creating_the_subscription-NsIdentifierCreationNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagementNotification/NSLifecycleManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription-NsIdentifierCreationNotification' + '/URI_is_provided_by_the_client_when_creating_the_subscription-NsIdentifierDeletionNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSLifecycleManagementNotification/NSLifecycleManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription-NsIdentifierDeletionNotification' \ No newline at end of file diff --git a/src/SOL011/NSLifecycleOperationGranting/NSLifecycleOperationGranting.yaml b/src/SOL011/NSLifecycleOperationGranting/NSLifecycleOperationGranting.yaml new file mode 100644 index 0000000000000000000000000000000000000000..76912a37cdc741b7e2dac76e72d2a22ba2daa641 --- /dev/null +++ b/src/SOL011/NSLifecycleOperationGranting/NSLifecycleOperationGranting.yaml @@ -0,0 +1,297 @@ +openapi: 3.0.2 +info: + version: 1.0.0-impl:etsi.org:ETSI_NFV_OpenAPI:1 + title: SOL011 - NS Lifecycle Operation Granting Interface + description: > + SOL011 - NS Lifecycle Operation Granting Interface + + IMPORTANT: Please note that this file might be not aligned to the current version of the ETSI Group Specification + it refers to. In case of discrepancies the published ETSI Group Specification takes precedence. + + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis&list_id=61&product=NFV&resolution= + license: + name: ETSI Forge copyright notice + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +security: + - OauthSecurity: + - all +servers: + - url: http://127.0.0.1/nslcog/v1 + - url: https://127.0.0.1/nslcog/v1 + +paths: + "/api_versions": + $ref: '../endpoints/SOL011_endpoints.yaml#/endpoints/api_versions' + + "/grants": + description: >- + This resource represents grant. The NFVO-N can use this resource to request a grant. + post: + description: >- + The POST method requests a grant for a particular NS lifecycle operation. + This method shall follow the provisions specified in the tables 7.5.3.3.1-1 and 7.5.3.3.1-2 + for URI query parameters, request and response data structures, and response codes. + parameters: + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/ContentType" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + requestBody: + $ref: "#/components/requestBodies/GrantNsLifecycleOperationRequest" + responses: + "201": + $ref: '#/components/responses/Grants.Post.201' + "400": + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + "401": + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + "403": + $ref: '#/components/responses/Grants.Post.403' + "404": + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + "405": + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + "406": + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + "422": + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + "500": + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + "503": + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + "504": + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + + "/grants/{grantId}": + description: >- + This resource represents an individual grant.. + get: + description: >- + The GET method reads a grant. + This method shall follow the provisions specified in the tables 7.5.4.3.2-1 and 7.5.4.3.2-2 + for URI query parameters, request and response data structures, and response codes. + parameters: + - $ref: "#/components/parameters/grantId" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Version" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Accept" + - $ref: "../components/SOL011_params.yaml#/components/parameters/Authorization" + responses: + "200": + $ref: '#/components/responses/Grant.Get.200' + "400": + $ref: ../components/SOL011_resp.yaml#/components/responses/400 + "401": + $ref: ../components/SOL011_resp.yaml#/components/responses/401 + "403": + $ref: ../components/SOL011_resp.yaml#/components/responses/403 + "404": + $ref: ../components/SOL011_resp.yaml#/components/responses/404 + "405": + $ref: ../components/SOL011_resp.yaml#/components/responses/405 + "406": + $ref: ../components/SOL011_resp.yaml#/components/responses/406 + "422": + $ref: ../components/SOL011_resp.yaml#/components/responses/422 + "500": + $ref: ../components/SOL011_resp.yaml#/components/responses/500 + "503": + $ref: ../components/SOL011_resp.yaml#/components/responses/503 + "504": + $ref: ../components/SOL011_resp.yaml#/components/responses/504 + + +components: + parameters: + grantId: + name: grantId + in: path + description: >- + Identifier of the grant + required: true + schema: + $ref: '../components/SOL011_schemas.yaml#/components/schemas/Identifier' + requestBodies: + GrantNsLifecycleOperationRequest: + description: >- + The NS lifecycle operation grant request parameters, as defined in clause 7.6.2.2. + content: + application/json: + schema: + $ref: "#/components/schemas/GrantNsLifecycleOperationRequest" + responses: + Grants.Post.201: + description: >- + Shall be returned when the grant has been created successfully. + A representation of the created "Individual grant" resource shall be returned in the response body. + The HTTP response shall include a "Location" HTTP header that indicates the URI of the + "Individual grant" resource just created. + + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + Location: + description: > + URI of the "Individual grant" resource just created + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/Grant' + + Grants.Post.403: + description: >- + Shall be returned upon the following error: the grant request was rejected. + A ProblemDetails structure shall be included in the response to provide more + details about the rejection in the "details" attribute. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + content: + application/json: + schema: + $ref: '../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails' + + Grant.Get.200: + description: >- + Shall be returned when the grant has been read successfully. + A representation of the "Individual grant" resource shall be returned in the response body. + headers: + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + Version: + description: > + Version of the API used in the response. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/Grant' + + schemas: + GrantNsLifecycleOperationRequest: + description: >- + This type represents request parameters for the "grant NS lifecycle" operation. + It shall comply with the provisions defined in table 7.6.2.2-1. + type: object + required: + - nsInstanceId + - nsdId + - nsLcmOpOccId + - lifecycleOperation + properties: + nsInstanceId: + description: >- + Identifier of the NS instance which this grant request relates to. + Each NFVO-N instance manages its own namespace for NS instance identifiers. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + nsdId: + description: >- + Identifier of the NSD that defines the NS for which the lifecycle management operation is to be granted. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + nsLcmOpOccId: + description: >- + The identifier of the NS lifecycle management operation occurrence associated to the GrantRequest.. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + lifecycleOperation: + description: >- + Type of the lifecycle management operation for which the granting is requested. + The NS LCM operations InstantiateNS, CreateNsIdentifier, DeleteNsIdentifier and + QueryNs can be executed by NFVO-N without requesting granting. + $ref: "#/components/schemas/NsLcmOperation" + additionalParams: + description: >- + Additional parameters passed by NFVO-N, specific to the NS and the lifecycle management operation. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/KeyValuePairs" + + NsLcmOperation: + description: >- + The enumeration NsLcmOperation shall comply with the provisions defined in table 7.6.4.3-1. + It indicates the type of the NS lifecycle management operation for which the granting is requested. + type: string + enum: + - SCALE + - TERMINATE + - HEAL + + Grant: + description: >- + This type represents a grant. It shall comply with the provisions defined in table 7.6.2.3-1. + type: object + required: + - id + - nsInstanceId + - nsLcmOpOccId + - _links + properties: + id: + description: >- + Identifier of the grant. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + nsInstanceId: + description: >- + Identifier of the NS instance which this grant request relates to. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + nsLcmOpOccId: + description: >- + Identifier of the NS lifecycle management operation occurrence associated to the GrantRequest. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Identifier" + additionalParams: + description: >- + Additional parameters passed by NFVO-N, specific to the NS and the lifecycle management operation. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/KeyValuePairs" + _links: + description: >- + Links to resources related to this resource. + type: object + required: + - self + - nsLcmOpOcc + - nsInstance + properties: + self: + description: >- + URI of this resource + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Link" + nsLcmOpOcc: + description: >- + Related NS lifecycle management operation occurrence + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Link" + nsInstance: + description: >- + Related NS instance. + $ref: "../components/SOL011_schemas.yaml#/components/schemas/Link" diff --git a/src/SOL011/NSPerformanceManagement/NSPerformanceManagement.yaml b/src/SOL011/NSPerformanceManagement/NSPerformanceManagement.yaml new file mode 100644 index 0000000000000000000000000000000000000000..00121bc74467ad476f032165bc814db292da22a9 --- /dev/null +++ b/src/SOL011/NSPerformanceManagement/NSPerformanceManagement.yaml @@ -0,0 +1,45 @@ +swagger: "2.0" + +info: + version: "1.1.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NS Performance Management Interface" + description: > + SOL011 - NS Performance Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +basePath: /nspm/v1 + +schemes: + - http + - https + +consumes: + - application/json + +produces: + - application/json + +paths: + "/api_versions": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagement/NSPerformanceManagement.yaml#/paths/~1api-versions' + "/pm_jobs": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagement/NSPerformanceManagement.yaml#/paths/~1pm_jobs' + "/pm_jobs/{pmJobId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagement/NSPerformanceManagement.yaml#/paths/~1pm_jobs~1{pmJobId}' + "/thresholds": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagement/NSPerformanceManagement.yaml#/paths/~1thresholds' + "/thresholds/{thresholdId}": + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagement/NSPerformanceManagement.yaml#/paths/~1thresholds~1{thresholdId}' \ No newline at end of file diff --git a/src/SOL011/NSPerformanceManagementNotification/NSPerformanceManagementNotification.yaml b/src/SOL011/NSPerformanceManagementNotification/NSPerformanceManagementNotification.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bdc71a807aa5deb4cdac5f2559a35d71de263897 --- /dev/null +++ b/src/SOL011/NSPerformanceManagementNotification/NSPerformanceManagementNotification.yaml @@ -0,0 +1,39 @@ +swagger: "2.0" + +info: + version: "1.1.0-impl:etsi.org:ETSI_NFV_OpenAPI:1" + title: "SOL011 - NS Performance Management Interface" + description: > + SOL011 - NS Performance Management Interface + IMPORTANT: Please note that this file might be not aligned to the current + version of the ETSI Group Specification it refers to and has not been + approved by the ETSI NFV ISG. In case of discrepancies the published ETSI + Group Specification takes precedence. + Please report bugs to https://forge.etsi.org/bugzilla/buglist.cgi?component=Nfv-Openapis + license: + name: "ETSI Forge copyright notice" + url: https://forge.etsi.org/etsi-forge-copyright-notice.txt + contact: + name: "NFV-SOL WG" + +externalDocs: + description: ETSI GS NFV-SOL 011 V3.3.1 + url: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_NFV-SOL011v030301p.pdf + +basePath: /callback/v1 + +schemes: + - http + - https + +consumes: + - application/json + +produces: + - application/json + +paths: + '/URI_is_provided_by_the_client_when_creating_the_subscription_PerformanceInformationAvailableNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagementNotification/NSPerformanceManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription_PerformanceInformationAvailableNotificatio' + '/URI_is_provided_by_the_client_when_creating_the_subscription_ThresholdCrossedNotification': + $ref: 'https://forge.etsi.org/rep/nfv/SOL005/raw/v2.6.1/src/SOL005/NSPerformanceManagementNotification/NSPerformanceManagementNotification.yaml#/paths/~1URI_is_provided_by_the_client_when_creating_the_subscription_ThresholdCrossedNotification' \ No newline at end of file diff --git a/src/SOL011/components/SOL011_params.yaml b/src/SOL011/components/SOL011_params.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dbb92ea0e1a113539ffd18957e971e4b095e7c75 --- /dev/null +++ b/src/SOL011/components/SOL011_params.yaml @@ -0,0 +1,106 @@ +components: + parameters: + Version: + name: Version + description: > + Version of the API requested to use when responding to this request. + in: header + required: true + schema: + type: string + + Accept: + name: Accept + description: > + Content-Types that are acceptable for the response. Reference: IETF RFC 7231. + in: header + required: true + schema: + type: string + + Authorization: + name: Authorization + description: > + The authorization token for the request. Reference: IETF RFC 7235. + in: header + required: false + schema: + type: string + + ContentType: + name: Content-Type + description: | + The MIME type of the body of the request. Reference: IETF RFC 7231 + in: header + required: true + schema: + type: string + + filter: + name: filter + description: > + Attribute-based filtering expression according to clause 5.2 of ETSI + GS NFV-SOL 013. The NFV-MANO functional entity shall support + receiving this parameter as part of the URI query string. The API + consumer may supply this parameter. All attribute names that appear + in the FmSubscription and in data types referenced from it shall be + supported by the NFV-MANO functional entity in the filter + expression. + in: query + required: false + schema: + type: string + + all_fields: + name: all_fields + description: > + Include all complex attributes in the response. See clause + 5.3 of ETSI GS NFV-SOL 013. The NFV-MANO functional entity + shall support this parameter. + in: query + required: false + schema: + type: string + + fields: + name: fields + description: > + Complex attributes to be included into the response. See clause + 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional + entity should support this parameter. + in: query + required: false + schema: + type: string + + exclude_fields: + name: exclude_fields + description: > + Complex attributes to be excluded from the response. See clause + 5.3 of ETSI GS NFV-SOL 013 for details. The NFV-MANO functional + entity should support this parameter. + in: query + required: false + schema: + type: string + + exclude_default: + name: exclude_default + in: query + description: >- + Indicates to exclude the following complex attributes from the response. See clause 5.3 of ETSI GS NFV-SOL 013 + for details. The NFV-MANO functional entity shall support this parameter. + required: false + schema: + type: string + + nextpage_opaque_marker: + name: nextpage_opaque_marker + description: > + Marker to obtain the next page of a paged response. Shall be supported by + the NFV-MANO functional entity if the entity supports alternative 2 (paging) + according to clause 5.4.2.1 of ETSI GS NFV-SOL 013 for this resource. + in: query + required: false + schema: + type: string diff --git a/src/SOL011/components/SOL011_resp.yaml b/src/SOL011/components/SOL011_resp.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6c28def5f134e10a432f1fd4feeb31df489b82f7 --- /dev/null +++ b/src/SOL011/components/SOL011_resp.yaml @@ -0,0 +1,658 @@ +components: + responses: + 206: + description: > + 206 PARTIAL CONTENT + headers: + Content-Type: + description: > + The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + Content-Range: + description: > + The Content-Range response HTTP header indicates where in a full body message a partial message belongs. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 303: + description: > + 303 See Other + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + + 400: + description: > + 400 BAD REQUEST + + 400 code can be returned in the following specified cases, the specific cause has to be proper specified in the + "ProblemDetails" structure to be returned. + + If the request is malformed or syntactically incorrect (e.g. if the request URI contains incorrect + query parameters or the payload body contains a syntactically incorrect data structure), + the API producer shall respond with this response code. The "ProblemDetails" structure shall be provided, + and should include in the "detail" attribute more information about the source of the problem. + + If the response to a GET request which queries a container resource would be so big that the performance + of the API producer is adversely affected, and the API producer does not support paging for the affected resource, + it shall respond with this response code. The "ProblemDetails" structure shall be provided, and should include + in the "detail" attribute more information about the source of the problem. + + If there is an application error related to the client's input that cannot be easily mapped to any other + HTTP response code ("catch all error"), the API producer shall respond with this response code. + The "ProblemDetails" structure shall be provided, and shall include in the "detail" attribute more information + about the source of the problem. + + If the request contains a malformed access token, the API producer should respond with this response. + The details of the error shall be returned in the WWW Authenticate HTTP header, as defined in IETF RFC 6750 + and IETF RFC 7235. The ProblemDetails structure may be provided. + + The use of this HTTP error response code described above is applicable to the use of the OAuth 2.0 + for the authorization of API requests and notifications, as defined in clauses 4.5.3.3 and 4.5.3.4. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 401: + description: > + 401 UNAUTHORIZED + + If the request contains no access token even though one is required, or if the request contains an authorization + token that is invalid (e.g. expired or revoked), the API producer should respond with this response. + The details of the error shall be returned in the WWW-Authenticate HTTP header, as defined in IETF RFC 6750 + and IETF RFC 7235. The ProblemDetails structure may be provided. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 403: + description: > + 403 FORBIDDEN + + If the API consumer is not allowed to perform a particular request to a particular resource, + the API producer shall respond with this response code. The "ProblemDetails" structure shall be provided. + It should include in the "detail" attribute information about the source of the problem, + and may indicate how to solve it. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 404: + description: > + 404 NOT FOUND + + If the API producer did not find a current representation for the resource addressed by the URI passed + in the request or is not willing to disclose that one exists, it shall respond with this response code. + The "ProblemDetails" structure may be provided, including in the "detail" attribute information about + the source of the problem, e.g. a wrong resource URI variable. + + This response code is not appropriate in case the resource addressed by the URI is a container resource + which is designed to contain child resources, but does not contain any child resource at the time + the request is received. For a GET request to an existing empty container resource, a typical response + contains a 200 OK response code and a payload body with an empty array. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 405: + description: > + 405 METHOD NOT ALLOWED + + If a particular HTTP method is not supported for a particular resource, the API producer shall respond + with this response code. The "ProblemDetails" structure may be omitted. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 406: + description: > + 406 NOT ACCEPTABLE + + If the "Accept" HTTP header does not contain at least one name of a content type + that is acceptable to the API producer, the API producer shall respond with this + response code. The "ProblemDetails" structure may be omitted. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 409: + description: > + 409 CONFLICT + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 412: + description: > + 412 PRECONDITION FAILED + + Error: A precondition given in an HTTP request header is not fulfilled. + Typically, this is due to an ETag mismatch, indicating that the resource was modified by another entity. + The response body should contain a ProblemDetails structure, in which the "detail" attribute should convey + more information about the error. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 413: + description: > + 413 PAYLOAD TOO LARGE + + If the payload body of a request is larger than the amount of data the API producer is willing or able to process, + it shall respond with this response code, following the provisions in IETF RFC 7231 for the use + of the "Retry-After" HTTP header and for closing the connection. The "ProblemDetails" structure may be omitted. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 414: + description: > + 414 URI TOO LONG + + If the request URI of a request is longer than the API producer is willing or able to process, + it shall respond with this response code. This condition can e.g. be caused by passing long queries + in the request URI of a GET request. The "ProblemDetails" structure may be omitted. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 416: + description: > + 416 Range Not Satisfiable + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 422: + description: > + 422 UNPROCESSABLE ENTITY + + If the payload body of a request contains syntactically correct data (e.g. well-formed JSON) but the data + cannot be processed (e.g. because it fails validation against a schema), the API producer shall respond + with this response code. The "ProblemDetails" structure shall be provided, and should include in the "detail" + attribute more information about the source of the problem. + + This error response code is only applicable for methods that have a request body. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 429: + description: > + 429 TOO MANY REQUESTS + + If the API consumer has sent too many requests in a defined period of time and the API producer is able + to detect that condition ("rate limiting"), the API producer shall respond with this response code, + following the provisions in IETF RFC 6585 [17] for the use of the "Retry-After" HTTP header. + The "ProblemDetails" structure shall be provided and shall include in the "detail" attribute more information + about the source of the problem. + + The period of time and allowed number of requests are configured within the API producer by means + outside the scope of the present document. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 500: + description: > + 500 INTERNAL SERVER ERROR + + If there is an application error not related to the client's input that cannot be easily mapped to any other + HTTP response code ("catch all error"), the API producer shall respond with this response code. + The "ProblemDetails" structure shall be provided, and shall include in the "detail" attribute more information + about the source of the problem. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 503: + description: > + 503 SERVICE UNAVAILABLE + + If the API producer encounters an internal overload situation of itself or of a system it relies on, + it should respond with this response code, following the provisions in IETF RFC 7231 for the use of + the "Retry-After" HTTP header and for the alternative to refuse the connection. The "ProblemDetails" + structure may be omitted. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" + + 504: + description: > + 504 GATEWAY TIMEOUT + + If the API producer encounters a timeout while waiting for a response from an upstream server + (i.e. a server that the API producer communicates with when fulfilling a request), it should respond + with this response code. + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: > + Version of the API used in the response. + schema: + type: string + maximum: 1 + minimum: 1 + content: + application/json: + schema: + $ref: "../components/SOL011_schemas.yaml#/components/schemas/ProblemDetails" \ No newline at end of file diff --git a/src/SOL011/components/SOL011_schemas.yaml b/src/SOL011/components/SOL011_schemas.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1718b900fa03f4c1f9f09269ba8e02da0a380a25 --- /dev/null +++ b/src/SOL011/components/SOL011_schemas.yaml @@ -0,0 +1,289 @@ +components: + schemas: + Link: + description: > + This type represents a link to a resource using an absolute URI. + type: object + required: + - href + properties: + href: + description: > + URI of another resource referenced from a resource. + Shall be an absolute URI (i.e. a UTI that contains {apiRoot}). + $ref: "#/components/schemas/Uri" + + NotificationLink: + description: > + This type represents a link to a resource in a notification, using an absolute or relative URI. + type: object + required: + - href + properties: + href: + description: > + URI of a resource referenced from a notification. + Should be an absolute URI (i.e. a URI that contains + {apiRoot}), however, may be a relative URI (i.e. a URI + where the {apiRoot} part is omitted) if the {apiRoot} + information is not available. + $ref: "#/components/schemas/Uri" + + IpAddress: + description: > + An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal + integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that + consists of groups of zero to four hexadecimal digits, separated by colons. + type: string + format: IP + + KeyValuePairs: + description: > + This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, + a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 + of IETF RFC 8259. In the following example, a list of key-value pairs with four keys ("aString", "aNumber", + "anArray" and "anObject") is provided to illustrate that the values associated with different keys can be of + different type. + type: object + + ApiVersionInformation: + description: > + This type represents API version information. + type: object + required: + - uriPrefix + - apiVersions + properties: + uriPrefix: + description: > + Specifies the URI prefix for the API, in the following + form {apiRoot}/{apiName}/{apiMajorVersion}/. + type: string + apiVersions: + description: > + Version(s) supported for the API signaled by the + uriPrefix attribute. + type: array + items: + type: object + required: + - version + properties: + version: + description: > + Identifies a supported version. The value of the + version attribute shall be a version identifier as + specified in clause 9.1 (SOL013). + type: string + isDeprecated: + description: > + If such information is available, this attribute indicates + whether use of the version signaled by the version + attribute is deprecated (true) or not (false). + + A deprecated version is still supported by the API producer but is recommended + not to be used any longer. + When a version is no longer supported, it does not appear in the response body. + type: boolean + retirementDate: + description: > + The date and time after which the API version will no + longer be supported. + This attribute may be included if the value of the + isDeprecated attribute is set to true and shall be + absent otherwise. + $ref: "#/components/schemas/DateTime" + + Identifier: + description: > + An identifier with the intention of being globally unique. + type: string + + IdentifierInManoEntity: + description: > + An identifier that is unique for the respective type within a NFV-MANO functional entity, + but that need not be globally unique. Representation: string of variable length.. + type: string + + IdentifierLocal: + description: > + An identifier that is unique within a limited local scope other than above listed identifiers, + such as within a complex data structure or within a request-response pair. + Representation: string of variable length. + type: string + + DateTime: + description: > + Date-time stamp. + Representation: String formatted according to IETF RFC 3339. + type: string + format: date-time + + Uri: + description: > + String formatted according to IETF RFC 3986. + type: string + + Boolean: + description: > + The Boolean is a data type having two values (true and false). + type: boolean + + Version: + description: > + A version. + type: string + + String: + description: > + A string defined in IETF RFC 8259. + type: string + + Number: + description: > + A number defined in IETF RFC 8259. + type: number + + UnsignedInt: + description: > + Unsigned integer + type: number + + SubscriptionAuthentication: + type: object + required: + - authType + properties: + authType: + description: > + Defines the types of Authentication / Authorization which the API + consumer is willing to accept when receiving a notification. + Permitted values: + * BASIC: In every HTTP request to the notification endpoint, use + HTTP Basic authentication with the client credentials. + * OAUTH2_CLIENT_CREDENTIALS: In every HTTP request to the + notification endpoint, use an OAuth 2.0 Bearer token, obtained + using the client credentials grant type. + * TLS_CERT: Every HTTP request to the notification endpoint is sent + over a mutually authenticated TLS session, i.e. not only the + server is authenticated, but also the client is authenticated + during the TLS tunnel setup. + type: array + items: + type: string + enum: + - BASIC + - OAUTH2_CLIENT_CREDENTIALS + - TLS_CERT + paramsBasic: + description: > + Parameters for authentication/authorization using BASIC. + Shall be present if authType is "BASIC" and the contained + information has not been provisioned out of band. + Shall be absent otherwise. + type: object + properties: + userName: + description: > + Username to be used in HTTP Basic authentication. Shall be + present if it has not been provisioned out of band. + type: string + password: + description: > + Password to be used in HTTP Basic authentication. Shall be + present if it has not been provisioned out of band. + type: string + paramsOauth2ClientCredentials: + description: > + Parameters for authentication/authorization using + OAUTH2_CLIENT_CREDENTIALS. + Shall be present if authType is "OAUTH2_CLIENT_CREDENTIALS" and the + contained information has not been provisioned out of band. + Shall be absent otherwise. + type: object + properties: + clientId: + description: > + Client identifier to be used in the access token request of the + OAuth 2.0 client credentials grant type. + Shall be present if it has not been provisioned out of band. + The clientId and clientPassword passed in a subscription shall + not be the same as the clientId and clientPassword that are used + to obtain authorization for API requests. Client credentials may + differ between subscriptions. The value of clientPassword should + be generated by a random process. + type: string + clientPassword: + description: > + Client password to be used in the access token request of the + OAuth 2.0 client credentials grant type. + Shall be present if it has not been provisioned out of band. + The clientId and clientPassword passed in a subscription shall + not be the same as the clientId and clientPassword that are used + to obtain authorization for API requests. Client credentials may + differ between subscriptions. The value of clientPassword should + be generated by a random process. + type: string + tokenEndpoint: + description: > + The token endpoint from which the access token can be obtained. + Shall be present if it has not been provisioned out of band. + $ref: "#/components/schemas/Uri" + + ProblemDetails: + description: > + The definition of the general "ProblemDetails" data structure from + IETF RFC 7807 [19] is reproduced inthis structure. Compared to the + general framework defined in IETF RFC 7807 [19], the "status" and + "detail" attributes are mandated to be included by the present document, + to ensure that the response contains additional textual information about + an error. IETF RFC 7807 [19] foresees extensibility of the + "ProblemDetails" type. It is possible that particular APIs in the present + document, or particular implementations, define extensions to define + additional attributes that provide more information about the error. + The description column only provides some explanation of the meaning to + Facilitate understanding of the design. For a full description, see + IETF RFC 7807 [19]. + type: object + required: + - status + - detail + properties: + type: + description: > + A URI reference according to IETF RFC 3986 [5] that identifies the + problem type. It is encouraged that the URI provides human-readable + documentation for the problem (e.g. using HTML) when dereferenced. + When this member is not present, its value is assumed to be + "about:blank". + type: string + format: URI + title: + description: > + A short, human-readable summary of the problem type. It should not + change from occurrence to occurrence of the problem, except for + purposes of localization. If type is given and other than + "about:blank", this attribute shall also be provided. + A short, human-readable summary of the problem + type. It SHOULD NOT change from occurrence to occurrence of the + problem, except for purposes of localization (e.g., using + proactive content negotiation; see [RFC7231], Section 3.4). + type: string + status: + description: > + The HTTP status code for this occurrence of the problem. + The HTTP status code ([RFC7231], Section 6) generated by the origin + server for this occurrence of the problem. + type: integer + detail: + description: > + A human-readable explanation specific to this occurrence of the + problem. + type: string + instance: + description: > + A URI reference that identifies the specific occurrence of the + problem. It may yield further information if dereferenced. + type: string + format: URI + #TODO: How to express "any additional attributes"? diff --git a/src/SOL011/endpoints/SOL011_endpoints.yaml b/src/SOL011/endpoints/SOL011_endpoints.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8d49184a50fa5c669efdbbcff4c7f4b3e00f5ef8 --- /dev/null +++ b/src/SOL011/endpoints/SOL011_endpoints.yaml @@ -0,0 +1,87 @@ +# Copyright (c) ETSI 2019. +# https://forge.etsi.org/etsi-forge-copyright-notice.txt +endpoints: + api_versions: + parameters: + - name: Version + description: > + Version of the API requested to use when responding to this request. + in: header + required: false + schema: + type: string + - name: Authorization + description: >- + The authorization token for the request. Reference: IETF RFC 7235 + in: header + required: false + schema: + type: string + get: + summary: Retrieve API version information + description: > + The GET method reads API version information. This method shall follow the provisions specified in + table 4.6.3.3.3.2-1 for request and response data structures, and response codes. URI query parameters are not + supported. + responses: + 200: + description: > + 200 OK + + API version information was read successfully. + The response body shall contain 4.4 API version + information, as defined in clause 4.4.1.13. + content: + application/json: + schema: + $ref: '../components/SOL011_schemas.yaml#/components/schemas/ApiVersionInformation' + headers: + Content-Type: + description: The MIME type of the body of the response. + schema: + type: string + maximum: 1 + minimum: 1 + WWW-Authenticate: + description: > + Challenge if the corresponding HTTP request has not provided + authorization, or error details if the corresponding HTTP + request has provided an invalid authorization token. + schema: + type: string + maximum: 1 + minimum: 0 + Version: + description: The used API version. + schema: + type: string + maximum: 1 + minimum: 1 + 400: + $ref: '../components/SOL011_resp.yaml#/components/responses/400' + 401: + $ref: '../components/SOL011_resp.yaml#/components/responses/401' + 403: + $ref: '../components/SOL011_resp.yaml#/components/responses/403' + 404: + $ref: '../components/SOL011_resp.yaml#/components/responses/404' + 405: + $ref: '../components/SOL011_resp.yaml#/components/responses/405' + 406: + $ref: '../components/SOL011_resp.yaml#/components/responses/406' + 413: + $ref: '../components/SOL011_resp.yaml#/components/responses/413' + 414: + $ref: '../components/SOL011_resp.yaml#/components/responses/414' + 416: + $ref: '../components/SOL011_resp.yaml#/components/responses/416' + 422: + $ref: '../components/SOL011_resp.yaml#/components/responses/422' + 429: + $ref: '../components/SOL011_resp.yaml#/components/responses/429' + 500: + $ref: '../components/SOL011_resp.yaml#/components/responses/500' + 503: + $ref: '../components/SOL011_resp.yaml#/components/responses/503' + 504: + $ref: '../components/SOL011_resp.yaml#/components/responses/504' \ No newline at end of file