From d93ddf1743e55abf1cebfb6a05abab4d2d57cc71 Mon Sep 17 00:00:00 2001 From: Mike Jang <3287976+mjang@users.noreply.github.com> Date: Tue, 20 May 2025 11:00:56 -0700 Subject: [PATCH 1/2] fix: remove endpoints not ready for release --- static/nginx-one/api/one.json | 2127 ++++++++------------------------- 1 file changed, 474 insertions(+), 1653 deletions(-) diff --git a/static/nginx-one/api/one.json b/static/nginx-one/api/one.json index ba89c7505..ac9a2a663 100644 --- a/static/nginx-one/api/one.json +++ b/static/nginx-one/api/one.json @@ -18,17 +18,6 @@ "default": "tenant-example" } } - }, - { - "url": "/api/v1/marketplace" - }, - { - "url": "/api/v1/namespaces/{namespace}", - "variables": { - "namespace": { - "default": "default" - } - } } ], "tags": [ @@ -74,26 +63,6 @@ "name": "Settings", "description": "Configuration option for different aspect of NGINX One service.\nYou can set NGINX Instance cleanup preferences.\n", "x-displayName": "Settings" - }, - { - "name": "Authorization", - "description": "Facilitate user authentication and authorization.", - "x-displayName": "Authorization" - }, - { - "name": "Signup", - "description": "Manage account activation and first user creation.", - "x-displayName": "Signup" - }, - { - "name": "User", - "description": "Manage cloud users.", - "x-displayName": "User" - }, - { - "name": "Deployments", - "description": "Manage NAAS deployments.", - "x-displayName": "Deployments" } ], "paths": { @@ -3254,59 +3223,6 @@ } } }, - "patch": { - "x-nginx-one-action": "bulk", - "x-nginx-one-entity": "NGINX staged configs", - "x-feature-flag": "staged-configs-phase-2", - "tags": [ - "Staged Configs" - ], - "summary": "Bulk operation on multiple staged configs", - "operationId": "bulkStagedConfigs", - "description": "Performs bulk operation on one or more staged configs, only delete is supported.", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StagedConfigBulkRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Batch request completed.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StagedConfigBulkResponse" - } - } - } - }, - "401": { - "description": "Access denied.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - }, "post": { "x-feature-flag": "staged-configs", "x-nginx-one-action": "create", @@ -3813,153 +3729,6 @@ } } }, - "/staged-configs/{stagedConfigObjectID}/export": { - "get": { - "parameters": [ - { - "$ref": "#/components/parameters/StagedConfigParamObjectID" - } - ], - "tags": [ - "Staged Configs" - ], - "x-feature-flag": "staged-configs-phase-2", - "x-nginx-one-action": "export", - "x-nginx-one-entity": "NGINX staged config", - "summary": "Export staged configuration", - "description": "Exports staged configuration as a gzipped tar archive. Does not include sensitive data such as SSL certificates. [Learn more](https://docs.nginx.com/nginx-one/how-to/staged-configs/import-export-staged-config/).\n", - "operationId": "exportStagedConfig", - "responses": { - "200": { - "description": "Successfully exported the staged configuration.", - "content": { - "application/gzip": { - "schema": { - "type": "string", - "format": "binary", - "example": "my-staged-config-2025-01-01T20_25_03.tar.gz" - } - } - } - }, - "401": { - "description": "Access denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "404": { - "description": "The NGINX staged config with the specified object_id was not found. Check that the object_id provided is correct and corresponds to an existing resource.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, - "/staged-configs/import": { - "post": { - "tags": [ - "Staged Configs" - ], - "x-feature-flag": "staged-configs-phase-2", - "x-nginx-one-action": "import", - "x-nginx-one-entity": "NGINX staged config", - "summary": "Import staged configuration\n", - "description": "Imports a gzipped tar archive (.tar.gz) containing configuration and aux files into NGINX One. \nOnly non-hidden files are included in the import.\n\nMaximum compressed archive size: **5 MB**\nMaximum uncompressed individual file size: **10 MB**\n\nIf `parse_only` is set to `true`, the configuration is only validated and not staged.\nBy default, validation is performed and a staged configuration is created upon success.\n", - "parameters": [ - { - "$ref": "#/components/parameters/StagedConfigImportParseOnly" - } - ], - "operationId": "importStagedConfig", - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/StagedConfigImportRequest" - }, - "encoding": { - "file": { - "contentType": "application/gzip" - } - } - } - } - }, - "responses": { - "200": { - "description": "Return if `parse_only` is `true`: Returns data matching `StagedConfigCreateRequest` that can be used to create the staged config later. \n", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StagedConfigCreateRequest" - } - } - } - }, - "201": { - "description": "Return if `parse_only` is `false` or omitted: Confirms the import parsed successfully and the staged config was created.\n", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/StagedConfigCreateResponse" - } - } - } - }, - "400": { - "description": "Request cannot be processed due to invalid input or parameters. Verify the request format and provided data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "401": { - "description": "Access denied", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, "/monitor/metrics_query_topx": { "post": { "tags": [ @@ -4096,475 +3865,47 @@ } } } - }, - "/auth/google/authorize": { - "get": { - "tags": [ - "Authorization" - ], - "summary": "Returns a redirect to authenticate with Google.", - "operationId": "googleAuthorize", - "responses": { - "302": { - "description": "Redirect to authenticate with Google." - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, - "/auth/google/callback": { - "get": { - "tags": [ - "Authorization" - ], - "summary": "Callback after the Google login page.", - "description": "The Google callback endpoint is where the user will be redirected after logging in and authorizing our service. This callback carries the Google code we exchange for an authorization token.\n", - "operationId": "googleCallback", - "parameters": [ - { - "name": "code", - "in": "query", - "required": true, - "description": "The authorization code returned by the Google authorization server.", - "schema": { - "type": "string" - } - }, - { - "name": "state", - "in": "query", - "required": true, - "description": "A signed state parameter used to mitigate CSRF attacks. In some cases, this may additionally be used to carry needed state from the redirect back to the callback.\n", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Authorization has been granted and an access token is generated. Use the returned access token to\nauthenticate future API requests.\n", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuthGoogleCallbackResponse" - } - } - } - }, - "401": { - "description": "The request is either missing or provided invalid input.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "403": { - "description": "The request contains valid input, but authorization cannot be granted." - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, - "/auth/google/signup": { - "post": { - "tags": [ - "Signup" - ], - "summary": "Creates an account and first user.", - "operationId": "googleSignup", - "requestBody": { - "description": "Completed sign up form with Google account and user identity from the\nmarketplace token.\n", - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SignupWithGoogleRequest" - } - } - } - }, - "responses": { - "200": { - "description": "The new account has been activated and first user created.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SignupWithGoogleResponse" - } - } - } - }, - "400": { - "description": "Request cannot be processed due to invalid input or parameters. Verify the request format and provided data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, - "/users": { - "post": { - "tags": [ - "User" - ], - "x-nginx-one-action": "create", - "x-nginx-one-entity": "user", - "summary": "Create a user", - "description": "Creates a cloud user.", - "operationId": "createUser", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CloudUserCreateRequest" - }, - "examples": { - "CloudUserCreateRequest": { - "$ref": "#/components/examples/CloudUserResponse" - } - } - } - } - }, - "responses": { - "200": { - "description": "Successfully created the cloud user.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CloudUser" - } - } - } - }, - "400": { - "description": "Request cannot be processed due to invalid input or parameters. Verify the request format and provided data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "500": { - "description": "An unexpected error occurred on the server. Please try the request again later.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } - }, - "/deployments": { - "get": { - "tags": [ - "Deployments" - ], - "summary": "List deployments", - "description": "Returns a list of deployments.", - "operationId": "listDeployments", - "responses": { - "200": { - "description": "Successfully returned the list of deployments.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeploymentListResponse" - }, - "examples": { - "DeploymentListResponse": { - "$ref": "#/components/examples/DeploymentListResponse" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/InvalidRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalServerErr" - } - } - }, - "post": { - "tags": [ - "Deployments" - ], - "summary": "Create deployment", - "description": "Creates a new deployment.", - "operationId": "createDeployment", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeploymentCreateRequest" - }, - "examples": { - "DeploymentCreateRequest": { - "$ref": "#/components/examples/DeploymentCreateRequest" - } - } - } - } - }, - "responses": { - "202": { - "description": "Successfully created the deployment.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Deployment" - }, - "examples": { - "DeploymentCreateResponse": { - "$ref": "#/components/examples/DeploymentCreateResponse" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/InvalidRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalServerErr" - } - } - } - }, - "/deployments/{deployment_id}": { - "delete": { - "tags": [ - "Deployments" - ], - "summary": "Delete deployment", - "description": "Deletes the specified deployment.", - "operationId": "deleteDeployment", - "parameters": [ - { - "$ref": "#/components/parameters/DeploymentObjectID" - } - ], - "responses": { - "202": { - "description": "Successfully deleted the deployment.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Deployment" - }, - "examples": { - "DeploymentDeleteResponse": { - "$ref": "#/components/examples/DeploymentDeleteResponse" - } - } - } - } - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalServerErr" - } - } - }, - "get": { - "tags": [ - "Deployments" - ], - "summary": "Get deployment", - "description": "Returns deployment details.", - "operationId": "getDeployment", - "parameters": [ - { - "$ref": "#/components/parameters/DeploymentObjectID" - } - ], - "responses": { - "200": { - "description": "Successfully returned the deployment details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Deployment" - }, - "examples": { - "DeploymentGetResponse": { - "$ref": "#/components/examples/DeploymentGetResponse" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/InvalidRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalServerErr" - } - } - }, - "patch": { - "tags": [ - "Deployments" - ], - "summary": "Update deployment", - "description": "Updates the specified deployment.", - "operationId": "updateDeployment", - "parameters": [ - { - "$ref": "#/components/parameters/DeploymentObjectID" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeploymentUpdateRequest" - }, - "examples": { - "DeploymentUpdateRequest": { - "$ref": "#/components/examples/DeploymentUpdateRequest" - } - } - } - } - }, - "responses": { - "200": { - "description": "Successfully updated the deployment.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Deployment" - }, - "examples": { - "DeploymentUpdateResponse": { - "$ref": "#/components/examples/DeploymentUpdateResponse" - } - } - } - } - }, - "400": { - "$ref": "#/components/responses/InvalidRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - }, - "500": { - "$ref": "#/components/responses/InternalServerErr" - } - } - } - } - }, - "components": { - "parameters": { - "Paginated": { - "name": "paginated", - "in": "query", - "schema": { - "type": "boolean", - "default": true - }, - "description": "A boolean indicating if the results should be presented as a paginated list. Defaults to `true`. \nWhen set to `false` a maximum of 3000 results are returned.\n", - "required": false - }, - "Limit": { - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "minimum": 0 - }, - "description": "An integer that specifies the maximum number of items to be returned. \nSetting this to `0` will result in no items being returned, but a total count will still be provided. \nThis parameter is not applicable if `paginated` is `false`.\n", - "required": false - }, - "Offset": { - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "minimum": 1 - }, - "description": "An integer that specifies the starting position of the results, starting at `1`.\nThis parameter is not applicable if `paginated` is `false`.\n" - }, - "FilterFieldDataPlaneKeys": { - "name": "filter_fields", - "in": "query", - "description": "Filter options for data plane keys; used in conjunction with other filter parameters having the same array length.\n\nWhen filtering on `status`, only the following `filter_values` are supported:\n * revoked\n * expired\n * valid\n", - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FilterNameDataPlaneKeys" + } + }, + "components": { + "parameters": { + "Paginated": { + "name": "paginated", + "in": "query", + "schema": { + "type": "boolean", + "default": true + }, + "description": "A boolean indicating if the results should be presented as a paginated list. Defaults to `true`. \nWhen set to `false` a maximum of 3000 results are returned.\n", + "required": false + }, + "Limit": { + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "minimum": 0 + }, + "description": "An integer that specifies the maximum number of items to be returned. \nSetting this to `0` will result in no items being returned, but a total count will still be provided. \nThis parameter is not applicable if `paginated` is `false`.\n", + "required": false + }, + "Offset": { + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "minimum": 1 + }, + "description": "An integer that specifies the starting position of the results, starting at `1`.\nThis parameter is not applicable if `paginated` is `false`.\n" + }, + "FilterFieldDataPlaneKeys": { + "name": "filter_fields", + "in": "query", + "description": "Filter options for data plane keys; used in conjunction with other filter parameters having the same array length.\n\nWhen filtering on `status`, only the following `filter_values` are supported:\n * revoked\n * expired\n * valid\n", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterNameDataPlaneKeys" } } }, @@ -4907,25 +4248,6 @@ }, "description": "A globally unique identifier for the NGINX staged config.\n", "required": true - }, - "StagedConfigImportParseOnly": { - "name": "parseOnly", - "in": "query", - "schema": { - "type": "boolean", - "default": false - }, - "description": "Optional flag to control how the request is processed.\n - When `false` or omitted (by default), the request creates a Staged Config directly. (`StagedConfigCreateResponse`)\n - When `true`, the request parses the import and returns metadata you can use to create a Staged Config through a POST. ( `StagedConfigCreateRequest`)\n", - "required": false - }, - "DeploymentObjectID": { - "name": "deployment_id", - "in": "path", - "schema": { - "$ref": "#/components/schemas/DeploymentObjectID" - }, - "description": "A globally unique identifier for the deployment.", - "required": true } }, "schemas": { @@ -5811,18 +5133,22 @@ "filter_name_certificate_deployments_deployment_status" ] }, - "CertificateAssociationType": { + "DeploymentAssociatedType": { "type": "string", - "description": "Certificate association type:\n * `instance` - This certificate deployment is for an instance.\n * `config_sync_group` - This certificate deployment is for a config sync group.\n", + "description": "The type of the deployment association, with the following values:\n * `instance`\n * `config_sync_group`\n", "enum": [ "instance", "config_sync_group" ], "x-enum-varnames": [ - "certificate_association_type_instance", - "certificate_association_type_config_sync_group" + "deployment_associated_type_instance", + "deployment_associated_type_config_sync_group" ] }, + "DeploymentAssociatedName": { + "type": "string", + "description": "Based on deployment type:\n * `instance`\n * `config_sync_group`\n" + }, "CertificateDeploymentStatus": { "type": "string", "description": "Certificate deployment status:\n * `latest` - This certificate deployment is up to date with the latest certificates and key.\n * `stale` - This certificate deployment is outdated and needs to deploy the latest certificates and key.\n * `unmanaged` - This certificate deployment is unmanaged by NGINX One Console.\n", @@ -5848,14 +5174,13 @@ ], "properties": { "association_type": { - "$ref": "#/components/schemas/CertificateAssociationType" + "$ref": "#/components/schemas/DeploymentAssociatedType" }, "object_id": { "$ref": "#/components/schemas/ObjectID" }, "name": { - "type": "string", - "description": "The host name of an instance or the name of a config sync group." + "$ref": "#/components/schemas/DeploymentAssociatedName" }, "deployment_status": { "$ref": "#/components/schemas/CertificateDeploymentStatus" @@ -6160,77 +5485,256 @@ } ] }, - "ConfigSyncGroupBulkResponse": { - "description": "The config sync group bulk outcome.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BulkRequestObjectStatus" - } - }, - "ConfigSyncGroupMeta": { - "type": "object", - "description": "Meta information of the NGINX config sync group including:\n* NGINX config sync group object ID\n* unique name of the config sync group in the tenant namespace\n* last publication timestamp\n", + "ConfigSyncGroupBulkResponse": { + "description": "The config sync group bulk outcome.", + "type": "array", + "items": { + "$ref": "#/components/schemas/BulkRequestObjectStatus" + } + }, + "ConfigSyncGroupMeta": { + "type": "object", + "description": "Meta information of the NGINX config sync group including:\n* NGINX config sync group object ID\n* unique name of the config sync group in the tenant namespace\n* last publication timestamp\n", + "required": [ + "object_id", + "name" + ], + "properties": { + "object_id": { + "$ref": "#/components/schemas/ConfigSyncGroupObjectID" + }, + "name": { + "description": "Name of the Nginx config sync group.", + "type": "string" + }, + "last_publication": { + "description": "The date and time of the most recent config sync group publication.", + "type": "string", + "format": "date-time" + } + }, + "example": { + "object_id": "csg_-uvR3F2TQGm18jnl7bpaGw", + "name": "test-config-sync-group", + "last_publication": "2023-12-06T22:37:24.120114Z" + } + }, + "InstanceObjectID": { + "description": "A globally unique identifier for the NGINX instance.", + "type": "string", + "format": "object_id", + "pattern": "^inst_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, + "NginxBuild": { + "description": "The build details for the NGINX binary, including its configuration parameters.\n", + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "description": "The version number of the base open-source NGINX.", + "type": "string" + }, + "plus_release": { + "description": "The NGINX Plus release version, if applicable.", + "type": "string" + }, + "conf_path": { + "description": "The absolute path to the NGINX configuration, as set by the `--conf-path` option during build time.", + "type": "string" + } + } + }, + "NapPolicyObjectID": { + "description": "A globally unique identifier for the App Protect policy.", + "type": "string", + "format": "object_id", + "pattern": "^pol_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, + "NapPolicyVersionObjectID": { + "description": "A globally unique identifier for the App Protect policy version.", + "type": "string", + "format": "object_id", + "pattern": "^pv_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, + "PublicationObjectID": { + "description": "A globally unique identifier for the publication.", + "type": "string", + "format": "object_id", + "example": "pub_72pGHoGsSICL_THZrs964g", + "pattern": "^pub_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, + "NapPolicyEnforcementMode": { + "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `blocking` - Any illegal or suspicious requests are logged and blocked.\n* `transparent` - Any illegal or suspicious requests are logged but not blocked.\n", + "type": "string", + "enum": [ + "blocking", + "transparent" + ], + "x-enum-varnames": [ + "nap_enforcement_mode_blocking", + "nap_enforcement_mode_transparent" + ] + }, + "NapDeploymentStatus": { + "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `deployed` - The NGINX App Protect policy has been deployed.\n* `not_deployed` - The NGINX App Protect policy has not been deployed.\n* `deploying` - The NGINX App Protect policy is currently being deployed.\n* `failed` - The NGINX App Protect policy failed deploying.\n", + "type": "string", + "enum": [ + "deployed", + "not_deployed", + "deploying", + "failed" + ], + "x-enum-varnames": [ + "nap_deployment_status_deployed", + "nap_deployment_status_not_deployed", + "nap_deployment_status_deploying", + "nap_deployment_status_failed" + ] + }, + "NapAssociation": { + "description": "Details for a NGINX App Protect policy version that's associated with an instance or a config sync group.", "required": [ - "object_id", - "name" + "name", + "version", + "policy_object_id", + "policy_version_object_id", + "paths", + "deployment_status", + "publication_object_id", + "deployed_on", + "enforcement_mode" ], "properties": { - "object_id": { - "$ref": "#/components/schemas/ConfigSyncGroupObjectID" - }, "name": { - "description": "Name of the Nginx config sync group.", - "type": "string" + "type": "string", + "description": "Name of the policy at the time of the deployment." }, - "last_publication": { - "description": "The date and time of the most recent config sync group publication.", + "version": { + "type": "string", + "description": "Version of the policy at the time of the deployment." + }, + "policy_object_id": { + "$ref": "#/components/schemas/NapPolicyObjectID" + }, + "policy_version_object_id": { + "$ref": "#/components/schemas/NapPolicyVersionObjectID" + }, + "publication_object_id": { + "$ref": "#/components/schemas/PublicationObjectID" + }, + "enforcement_mode": { + "$ref": "#/components/schemas/NapPolicyEnforcementMode" + }, + "paths": { + "type": "array", + "description": "The list of file system paths where the compiled NAP policy version bundle file is installed. \nSince a single compiled NAP policy version bundle file may be applied in multiple contexts, all relevant paths are included.\n", + "example": [ + "/etc/nginx/default_policy.tgz", + "/etc/nginx/default_policy_server_2.tgz" + ], + "items": { + "type": "string" + } + }, + "deployment_status": { + "$ref": "#/components/schemas/NapDeploymentStatus" + }, + "deployed_on": { + "description": "Date and time of the deployment.", "type": "string", "format": "date-time" } }, "example": { - "object_id": "csg_-uvR3F2TQGm18jnl7bpaGw", - "name": "test-config-sync-group", - "last_publication": "2023-12-06T22:37:24.120114Z" + "name": "default_policy", + "version": "2025.05.01", + "policy_object_id": "pol_panEdeY-Sh2rWm365y7wsw", + "policy_version_object_id": "pv_kem7SCosTTOL9mMlNyY2GQ", + "publication_object_id": "pub_72pGHoGsSICL_THZrs964g", + "paths": [ + "/etc/nginx/default_policy.tgz" + ], + "deployment_status": "deployed", + "enforcement_mode": "transparent", + "deployed_on": "2023-12-06T22:37:24.120114Z" } }, - "InstanceObjectID": { - "description": "A globally unique identifier for the NGINX instance.", + "NapVersion": { + "description": "The version of the NGINX App Protect resource.", "type": "string", - "format": "object_id", - "pattern": "^inst_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } + "example": "2023.12.06" }, - "NginxBuild": { - "description": "The build details for the NGINX binary, including its configuration parameters.\n", - "type": "object", - "required": [ - "version" - ], - "properties": { - "version": { - "description": "The version number of the base open-source NGINX.", - "type": "string" - }, - "plus_release": { - "description": "The NGINX Plus release version, if applicable.", - "type": "string" + "NapInstanceAssociation": { + "description": "Details for a NGINX App Protect policy version that's associated with an instance.", + "allOf": [ + { + "$ref": "#/components/schemas/NapAssociation" }, - "conf_path": { - "description": "The absolute path to the NGINX configuration, as set by the `--conf-path` option during build time.", - "type": "string" + { + "type": "object", + "required": [ + "threat_campaign_version", + "attack_signature_version", + "bot_signature_version" + ], + "properties": { + "threat_campaign_version": { + "$ref": "#/components/schemas/NapVersion" + }, + "attack_signature_version": { + "$ref": "#/components/schemas/NapVersion" + }, + "bot_signature_version": { + "$ref": "#/components/schemas/NapVersion" + } + } } + ], + "example": { + "name": "default_policy", + "version": "2025.05.01", + "policy_object_id": "pol_panEdeY-Sh2rWm365y7wsw", + "policy_version_object_id": "pv_kem7SCosTTOL9mMlNyY2GQ", + "publication_object_id": "pub_72pGHoGsSICL_THZrs964g", + "paths": [ + "/etc/nginx/default_policy.tgz" + ], + "deployment_status": "deployed", + "enforcement_mode": "transparent", + "deployed_on": "2023-12-06T22:37:24.120114Z", + "threat_campaign_version": "2025.01.23", + "attack_signature_version": "2025.01.19", + "bot_signature_version": "2025.01.19" } }, "NginxAppProtectDetails": { "description": "Information regarding NGINX App Protect.\n", "type": "object", "required": [ - "engine_version" + "engine_version", + "deployments" ], "properties": { "release_version": { @@ -6240,6 +5744,9 @@ "engine_version": { "description": "The version of the App Protect enforcement engine.", "type": "string" + }, + "deployments": { + "$ref": "#/components/schemas/NapInstanceAssociation" } } }, @@ -6536,6 +6043,20 @@ "items": { "$ref": "#/components/schemas/CertAssociation" } + }, + "nginx_app_protect": { + "type": "object", + "required": [ + "deployments" + ], + "properties": { + "deployments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NapAssociation" + } + } + } } } } @@ -6941,18 +6462,6 @@ } ] }, - "PublicationObjectID": { - "description": "A globally unique identifier for the publication.", - "type": "string", - "format": "object_id", - "example": "pub_72pGHoGsSICL_THZrs964g", - "pattern": "^pub_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, "PublicationStatusCause": { "description": "Cause of the failure, provided only if the status is `failed`.", "type": "object", @@ -8154,51 +7663,6 @@ "object_id": "sc_Tet21AeYTHCj7taOwVfzyw" } }, - "StagedConfigBulkRequestData": { - "type": "object", - "description": "Part of bulk operation on a staged config, only `delete` is supported.", - "required": [ - "action", - "object_id" - ], - "properties": { - "object_id": { - "$ref": "#/components/schemas/StagedConfigObjectID" - }, - "action": { - "$ref": "#/components/schemas/BulkRequestAction" - } - }, - "example": { - "object_id": "sc_-uvR3F2TQGm18jnl7bpaGw", - "action": "delete" - } - }, - "StagedConfigBulkRequest": { - "type": "array", - "items": { - "$ref": "#/components/schemas/StagedConfigBulkRequestData" - }, - "minItems": 1, - "maxItems": 50, - "example": [ - { - "object_id": "sc_-uvR3F2TQGm18jnl7bpaGw", - "action": "delete" - }, - { - "object_id": "sc_PL0c1XodRemmzVEjiXSsTg", - "action": "delete" - } - ] - }, - "StagedConfigBulkResponse": { - "description": "The staged config bulk outcome.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BulkRequestObjectStatus" - } - }, "StagedConfigResponse": { "description": "Get an NGINX staged config.", "required": [ @@ -8277,35 +7741,6 @@ } } }, - "StagedConfigImportRequest": { - "type": "object", - "description": "Body to import a NGINX staged config", - "required": [ - "name", - "file", - "conf_path" - ], - "properties": { - "name": { - "$ref": "#/components/schemas/StagedConfigName" - }, - "file": { - "type": "string", - "format": "binary", - "example": "my-staged-config.tar.gz", - "maxLength": 5242880 - }, - "conf_path": { - "$ref": "#/components/schemas/ConfigPath" - } - }, - "example": { - "name": "my-nginx-config", - "file": "my-staged-config.tar.gz", - "conf_path": "/etc/nginx/nginx.conf", - "parse_only": true - } - }, "MetricQueryResultEx": { "type": "object", "required": [ @@ -9091,51 +8526,6 @@ "k8s.cluster.nodes" ] }, - "NapPolicyEnforcementMode": { - "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `blocking` - Any illegal or suspicious requests are logged and blocked.\n* `transparent` - Any illegal or suspicious requests are logged but not blocked.\n", - "type": "string", - "enum": [ - "blocking", - "transparent" - ], - "x-enum-varnames": [ - "nap_enforcement_mode_blocking", - "nap_enforcement_mode_transparent" - ] - }, - "NapDeploymentStatus": { - "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `deployed` - The NGINX App Protect policy has been deployed.\n* `not_deployed` - The NGINX App Protect policy has not been deployed.\n* `deploying` - The NGINX App Protect policy is currently being deployed.\n* `failed` - The NGINX App Protect policy failed deploying.\n", - "type": "string", - "enum": [ - "deployed", - "not_deployed", - "deploying", - "failed" - ], - "x-enum-varnames": [ - "nap_deployment_status_deployed", - "nap_deployment_status_not_deployed", - "nap_deployment_status_deploying", - "nap_deployment_status_failed" - ] - }, - "NapDeploymentType": { - "description": "The type of the deployment, with the following possible values:\n * `instance` - The deployment is of type instance.\n * `config_sync_group` - The deployment is of type config sync group.\n", - "type": "string", - "enum": [ - "instance", - "config_sync_group" - ], - "x-enum-varnames": [ - "nap_policy_deployment_type_instance", - "nap_policy_deployment_type_csg" - ] - }, - "Version": { - "description": "The version of the NGINX App Protect resource.", - "type": "string", - "example": "2023.12.06" - }, "VersionsList": { "type": "object", "required": [ @@ -9146,21 +8536,18 @@ "description": "An array of versions.", "type": "array", "items": { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/NapVersion" } } } }, "ThreatCampaignVersionsListResponse": { - "description": "List of Threat Campaign versions.", "$ref": "#/components/schemas/VersionsList" }, "AttackSignatureVersionsListResponse": { - "description": "List of Attack Signature versions.", "$ref": "#/components/schemas/VersionsList" }, "BotSignatureVersionsListResponse": { - "description": "List of Bot Signature versions.", "$ref": "#/components/schemas/VersionsList" }, "NapPolicy": { @@ -9178,7 +8565,6 @@ } }, "NapPolicyObject": { - "type": "object", "allOf": [ { "$ref": "#/components/schemas/NapPolicyMetadata" @@ -9213,28 +8599,6 @@ } } }, - "NapPolicyListItem": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/NapPolicyMetadata" - }, - { - "type": "object", - "required": [ - "deployments" - ], - "properties": { - "deployments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NapPolicyDeployment" - } - } - } - } - ] - }, "NapPolicyListResponse": { "description": "List of all NGINX App Protect policies.", "allOf": [ @@ -9252,7 +8616,7 @@ "description": "An array of NGINX App Protect policy objects.", "type": "array", "items": { - "$ref": "#/components/schemas/NapPolicyListItem" + "$ref": "#/components/schemas/NapPolicyObject" } } }, @@ -9265,9 +8629,9 @@ "deployments": [ { "publication_object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "target_name": "test-instance", - "target_type": "instance", - "target_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", + "associated_name": "test-instance", + "associated_type": "instance", + "associated_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", "status": "deployed", "enforcement_mode": "blocking", "policy_version": "2023-12-06 22:37:24", @@ -9299,51 +8663,67 @@ } } }, - "NapPolicyVersionDeployment": { - "description": "detailed information about a NGINX App Protect policy version deployment.", + "NapDeploymentAssociation": { "type": "object", "required": [ - "publication_object_id", - "target_object_id", - "target_name", - "target_type", - "status", - "deployed_on" + "associated_type", + "associated_object_id", + "associated_name" ], "properties": { - "publication_object_id": { - "$ref": "#/components/schemas/PublicationObjectID" - }, - "target_object_id": { - "$ref": "#/components/schemas/ObjectID" - }, - "target_name": { - "description": "The name of the NGINX One instance or config sync group.", - "type": "string" - }, - "target_type": { - "$ref": "#/components/schemas/NapDeploymentType" - }, - "status": { - "$ref": "#/components/schemas/NapDeploymentStatus" + "associated_type": { + "$ref": "#/components/schemas/DeploymentAssociatedType" }, - "deployed_on": { - "description": "The date and time when the NGINX App Protect policy was deployed.", - "type": "string", - "format": "date-time" + "associated_object_id": { + "$ref": "#/components/schemas/ObjectID" + }, + "associated_name": { + "$ref": "#/components/schemas/DeploymentAssociatedName" } - }, - "example": { - "publication_object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "target_name": "test-instance", - "target_type": "instance", - "target_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", - "status": "deployed", - "deployed_on": "2023-12-06T22:37:24.120114Z" } }, + "NapPolicyVersionDeployment": { + "allOf": [ + { + "$ref": "#/components/schemas/NapDeploymentAssociation" + }, + { + "type": "object", + "description": "Information about a NGINX App Protect policy deployment.\n", + "required": [ + "publication_object_id", + "status", + "deployed_on" + ], + "properties": { + "publication_object_id": { + "$ref": "#/components/schemas/PublicationObjectID" + }, + "status": { + "$ref": "#/components/schemas/NapDeploymentStatus" + }, + "deployed_on": { + "description": "Date and time of the deployment.", + "type": "string", + "format": "date-time" + } + }, + "example": { + "publication_object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", + "associated_name": "test-instance", + "associated_type": "instance", + "associated_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", + "status": "deployed", + "deployed_on": "2023-12-06T22:37:24.120114Z" + } + } + ] + }, "NapPolicyDeployments": { "type": "object", + "required": [ + "deployments" + ], "properties": { "deployments": { "type": "array", @@ -9358,9 +8738,9 @@ "type": "object", "required": [ "publication_object_id", - "target_object_id", - "target_name", - "target_type", + "associated_object_id", + "associated_name", + "associated_type", "enforcement_mode", "status", "policy_version", @@ -9394,9 +8774,9 @@ ], "example": { "publication_object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "target_name": "test-instance", - "target_type": "instance", - "target_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", + "associated_name": "test-instance", + "associated_type": "instance", + "associated_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", "status": "deployed", "deployed_on": "2023-12-06T22:37:24.120114Z", "enforcement_mode": "blocking", @@ -9408,9 +8788,9 @@ "type": "object", "required": [ "publication_object_id", - "target_object_id", - "target_name", - "target_type", + "associated_object_id", + "associated_name", + "associated_type", "enforcement_mode", "status", "policy_version", @@ -9428,22 +8808,22 @@ "type": "object", "properties": { "threat_campaign_version": { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/NapVersion" }, "attack_signature_version": { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/NapVersion" }, "bot_signature_version": { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/NapVersion" } } } ], "example": { "publication_object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "target_name": "test-instance", - "target_type": "instance", - "target_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", + "associated_name": "test-instance", + "associated_type": "instance", + "associated_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", "status": "deployed", "policy_version": "2023-12-06 22:37:24", "policy_version_object_id": "pv_-abc3F2TQGm18jnl7bpaGw", @@ -9478,9 +8858,9 @@ "items": [ { "publication_object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "target_name": "test-instance", - "target_type": "instance", - "target_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", + "associated_name": "test-instance", + "associated_type": "instance", + "associated_object_id": "inst_-uvR3F2TQGm18jnl7bpaGw", "status": "deployed", "policy_version": "2023-12-06 22:37:24", "policy_version_object_id": "pv_-abc3F2TQGm18jnl7bpaGw", @@ -9509,7 +8889,7 @@ "$ref": "#/components/schemas/NapPolicyVersionObjectID" }, "version": { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/NapVersion" }, "enforcement_mode": { "$ref": "#/components/schemas/NapPolicyEnforcementMode" @@ -9605,496 +8985,148 @@ "allOf": [ { "$ref": "#/components/schemas/PaginationResponse" - }, - { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "description": "An array of NGINX App Protect log profiles.", - "type": "array", - "items": { - "$ref": "#/components/schemas/NapLogProfileMetadata" - } - } - } - } - ] - }, - "NapLogProfileResponse": { - "$ref": "#/components/schemas/NapLogProfileMetadata" - }, - "NapLogProfileMetadata": { - "type": "object", - "required": [ - "name", - "object_id" - ], - "properties": { - "name": { - "type": "string", - "description": "The name of the NGINX App Protect log profile." - }, - "object_id": { - "$ref": "#/components/schemas/NapLogProfileObjectID" - }, - "description": { - "description": "Optional field to describe the NGINX App Protect log profile.", - "type": "string", - "minLength": 5, - "maxLength": 256 - } - } - }, - "NapGlobalSettingsListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/PaginationResponse" - }, - { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "description": "An array of NGINX App Protect global settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/NapGlobalSettingsMetadata" - } - } - } - } - ] - }, - "NapGlobalSettingsResponse": { - "$ref": "#/components/schemas/NapGlobalSettingsMetadata" - }, - "NapGlobalSettingsMetadata": { - "type": "object", - "required": [ - "name", - "object_id" - ], - "properties": { - "name": { - "type": "string", - "description": "The name of the NGINX App Protect global settings object." - }, - "description": { - "description": "Optional field to describe the NGINX App Protect global setting object.", - "type": "string", - "minLength": 5, - "maxLength": 256 - }, - "object_id": { - "$ref": "#/components/schemas/NapGlobalSettingsObjectID" - } - } - }, - "NapPolicyObjectID": { - "description": "A globally unique identifier for the App Protect policy.", - "type": "string", - "format": "object_id", - "pattern": "^pol_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "NapPolicyVersionObjectID": { - "description": "A globally unique identifier for the App Protect policy version.", - "type": "string", - "format": "object_id", - "pattern": "^pv_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "NapLogProfileObjectID": { - "description": "A globally unique identifier for the App Protect log profile.", - "type": "string", - "format": "object_id", - "pattern": "^lp_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "NapGlobalSettingsObjectID": { - "description": "A globally unique identifier for the App Protect global settings object.", - "type": "string", - "format": "object_id", - "pattern": "^gs_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "CloudIdentity": { - "type": "object", - "required": [ - "google_identity" - ], - "minProperties": 1, - "maxProperties": 1, - "properties": { - "google_identity": { - "$ref": "#/components/schemas/GoogleIdentity" - } - } - }, - "GoogleIdentity": { - "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "type": "string", - "minLength": 1, - "maxLength": 256, - "example": "253092013665251357076" - } - } - }, - "CloudUserCreateRequest": { - "type": "object", - "description": "Request structure for creating a new cloud user.", - "required": [ - "cloud_identity" - ], - "properties": { - "cloud_identity": { - "$ref": "#/components/schemas/CloudIdentity" - } - } - }, - "CloudAccountObjectID": { - "description": "A globally unique identifier for the cloud account.", - "type": "string", - "format": "object_id", - "pattern": "^acc_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "CloudUserObjectID": { - "description": "A globally unique identifier for the cloud user.", - "type": "string", - "format": "object_id", - "pattern": "^usr_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "CloudUser": { - "type": "object", - "required": [ - "object_id", - "cloud_identity" - ], - "properties": { - "object_id": { - "$ref": "#/components/schemas/CloudUserObjectID" - }, - "cloud_identity": { - "$ref": "#/components/schemas/CloudIdentity" - } - } - }, - "AuthGoogleCallbackResponse": { - "type": "object", - "required": [ - "access_token" - ], - "properties": { - "access_token": { - "type": "string", - "description": "The signed access token to be used to authenticate API requests. This token should be treated as a \"secret\".\n" - } - } - }, - "SignupWithGoogleRequest": { - "required": [ - "account_id", - "google_user_id" - ], - "properties": { - "account_id": { - "type": "string", - "description": "Google marketplace account id" - }, - "google_user_id": { - "type": "string", - "description": "Google user identity of the user completing signup." - } - } - }, - "SignupWithGoogleResponse": { - "type": "object", - "required": [ - "account_id", - "user_id" - ], - "properties": { - "account_id": { - "$ref": "#/components/schemas/CloudAccountObjectID" - }, - "user_id": { - "$ref": "#/components/schemas/CloudUserObjectID" - } - } - }, - "DeploymentObjectID": { - "type": "string", - "description": "A globally unique identifier for the deployment.", - "format": "object_id", - "pattern": "^depl_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "DeploymentAccountID": { - "type": "string", - "description": "Account ID of deployment.", - "format": "object_id", - "pattern": "^acc_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "DeploymentName": { - "type": "string", - "description": "Name of deployment.", - "minLength": 3, - "maxLength": 30, - "pattern": "^[a-z][a-z0-9-]*[a-z0-9]$" - }, - "DeploymentDescription": { - "type": "string", - "description": "Description of deployment.", - "maxLength": 256 - }, - "DeploymentCloudName": { - "type": "string", - "description": "Name of the cloud where deployment resources are provisioned.", - "enum": [ - "google" - ] - }, - "DeploymentCloudInfo": { - "type": "object", - "description": "Cloud-specific deployment info.", - "oneOf": [ + }, { - "$ref": "#/components/schemas/GoogleDeploymentInfo" + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "An array of NGINX App Protect log profiles.", + "type": "array", + "items": { + "$ref": "#/components/schemas/NapLogProfileMetadata" + } + } + } } ] }, - "GoogleDeploymentInfo": { - "type": "object", - "description": "Google deployment info.", - "required": [ - "region", - "network_attachment" - ], - "properties": { - "region": { - "$ref": "#/components/schemas/GoogleRegion" - }, - "network_attachment": { - "$ref": "#/components/schemas/GoogleNetworkAttachment" + "NapLogProfileGetResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/NapLogProfileMetadata" }, - "service_attachment": { - "$ref": "#/components/schemas/GoogleServiceAttachment" + { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "The NGINX App Protect log profile configuration.", + "type": "string" + } + } } - } - }, - "GoogleResourceName": { - "type": "string", - "minLength": 1, - "maxLength": 63, - "pattern": "^[a-z]([-a-z0-9]*[a-z0-9])?" - }, - "GoogleRegion": { - "description": "Google region.", - "$ref": "#/components/schemas/GoogleResourceName" - }, - "GoogleNetworkAttachment": { - "type": "string", - "description": "Google network attachment.", - "pattern": "projects/[a-z]([-a-z0-9]*[a-z0-9])?/regions/[a-z]([-a-z0-9]*[a-z0-9])?/networkAttachments/[a-z]([-a-z0-9]*[a-z0-9])?" - }, - "GoogleServiceAttachment": { - "type": "string", - "description": "Google service attachment.", - "pattern": "projects/[a-z]([-a-z0-9]*[a-z0-9])?/regions/[a-z]([-a-z0-9]*[a-z0-9])?/serviceAttachments/[a-z]([-a-z0-9]*[a-z0-9])?" + ] }, - "Deployment": { + "NapLogProfileMetadata": { "type": "object", - "description": "Deployment specification.", "required": [ - "id", - "account_id", "name", - "description", - "cloud", - "cloud_info", - "status", - "created_at", - "modified_at" + "object_id" ], "properties": { - "id": { - "$ref": "#/components/schemas/DeploymentObjectID" - }, - "account_id": { - "$ref": "#/components/schemas/DeploymentAccountID" - }, "name": { - "$ref": "#/components/schemas/DeploymentName" - }, - "description": { - "$ref": "#/components/schemas/DeploymentDescription" - }, - "cloud": { - "$ref": "#/components/schemas/DeploymentCloudName" - }, - "cloud_info": { - "$ref": "#/components/schemas/DeploymentCloudInfo" - }, - "status": { - "$ref": "#/components/schemas/DeploymentStatus" - }, - "created_at": { "type": "string", - "description": "Datetime when request to create deployment was received.", - "format": "date-time" + "description": "The name of the NGINX App Protect log profile." }, - "modified_at": { - "type": "string", - "description": "Datetime when deployment was last modified.", - "format": "date-time" + "object_id": { + "$ref": "#/components/schemas/NapLogProfileObjectID" }, - "deleted_at": { + "description": { + "description": "Optional field to describe the NGINX App Protect log profile.", "type": "string", - "description": "Datetime when request to delete deployment was received.", - "format": "date-time" - } - } - }, - "DeploymentStatus": { - "type": "object", - "description": "Deployment status info.", - "required": [ - "provisioning_state" - ], - "properties": { - "provisioning_state": { - "$ref": "#/components/schemas/DeploymentProvisioningState" + "minLength": 5, + "maxLength": 256 } } }, - "DeploymentProvisioningState": { - "type": "object", - "description": "Deployment provisioning state info.", - "required": [ - "state", - "modified_at" - ], - "properties": { - "state": { - "type": "string", - "description": "Provisioning state name/value.", - "enum": [ - "deleting", - "failed", - "pending", - "ready" - ] - }, - "details": { - "type": "string", - "description": "Provisioning state details.", - "maxLength": 256 + "NapGlobalSettingsListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/PaginationResponse" }, - "modified_at": { - "type": "string", - "description": "Datetime of last state change.", - "format": "date-time" + { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "An array of NGINX App Protect global settings.", + "type": "array", + "items": { + "$ref": "#/components/schemas/NapGlobalSettingMetadata" + } + } + } } - } + ] }, - "DeploymentListResponse": { - "type": "object", - "description": "List of deployments.", - "required": [ - "count", - "items" - ], - "properties": { - "count": { - "description": "The total number of deployments returned.", - "type": "integer" + "NapGlobalSettingGetResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/NapGlobalSettingMetadata" }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Deployment" + { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "The NGINX App Protect global setting configuration.", + "type": "string" + } } } - } + ] }, - "DeploymentCreateRequest": { + "NapGlobalSettingMetadata": { "type": "object", - "description": "Request spec for creating a deployment.", "required": [ "name", - "cloud", - "cloud_info" + "object_id" ], "properties": { "name": { - "$ref": "#/components/schemas/DeploymentName" + "type": "string", + "description": "The name of the NGINX App Protect global setting object." }, "description": { - "$ref": "#/components/schemas/DeploymentDescription" - }, - "cloud": { - "$ref": "#/components/schemas/DeploymentCloudName" + "description": "Optional field to describe the NGINX App Protect global setting object.", + "type": "string", + "minLength": 5, + "maxLength": 256 }, - "cloud_info": { - "$ref": "#/components/schemas/DeploymentCloudInfo" + "object_id": { + "$ref": "#/components/schemas/NapGlobalSettingObjectID" } } }, - "DeploymentUpdateRequest": { - "type": "object", - "description": "Request spec for updating a deployment.", - "properties": { - "name": { - "$ref": "#/components/schemas/DeploymentName" - }, - "description": { - "$ref": "#/components/schemas/DeploymentDescription" - } + "NapLogProfileObjectID": { + "description": "A globally unique identifier for the App Protect log profile.", + "type": "string", + "format": "object_id", + "pattern": "^lp_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, + "NapGlobalSettingObjectID": { + "description": "A globally unique identifier for the App Protect global settings object.", + "type": "string", + "format": "object_id", + "pattern": "^gs_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" } } }, @@ -10151,173 +9183,6 @@ "object_id": "key_wN3IhLCmR3qmwybG_6ptEg", "instances_count": 3 } - }, - "CloudUserResponse": { - "value": { - "cloud_identity": { - "google_identity": { - "id": "253092013665251357076" - } - } - } - }, - "DeploymentListResponse": { - "value": { - "count": 2, - "items": [ - { - "id": "depl_6zYc64JKR0uxnoEcLH1gGA", - "account_id": "acc_FsFgfeDtScOjGbQJDaVNiQ", - "name": "tst-foo", - "description": "", - "cloud": "google", - "cloud_info": { - "region": "us-east1", - "network_attachment": "projects/foo/regions/us-east1/networkAttachments/foo", - "service_attachment": "projects/foo/regions/us-east1/serviceAttachments/foo" - }, - "status": { - "provisioning_state": { - "state": "ready", - "details": "", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "created_at": "2025-03-31T10:00:00Z", - "modified_at": "2025-03-31T10:05:00Z" - }, - { - "id": "depl_DrRnpntTRpGOxaroQ6aOFg", - "account_id": "acc_FsFgfeDtScOjGbQJDaVNiQ", - "name": "tst-bar", - "description": "test w/ network attachment from project bar", - "cloud": "google", - "cloud_info": { - "region": "eu-west-1", - "network_attachment": "projects/bar/regions/us-east1/networkAttachments/bar" - }, - "status": { - "provisioning_state": { - "state": "failed", - "details": "network attachment 'bar' not found", - "modified_at": "2025-03-31T11:03:00Z" - } - }, - "created_at": "2025-03-31T11:00:00Z", - "modified_at": "2025-03-31T11:03:00Z" - } - ] - } - }, - "DeploymentCreateRequest": { - "value": { - "name": "tst-foo", - "description": "", - "cloud": "google", - "cloud_info": { - "region": "us-east1", - "network_attachment": "projects/foo/regions/us-east1/networkAttachments/foo" - } - } - }, - "DeploymentCreateResponse": { - "value": { - "id": "depl_6zYc64JKR0uxnoEcLH1gGA", - "account_id": "acc_FsFgfeDtScOjGbQJDaVNiQ", - "name": "tst-foo", - "description": "", - "cloud": "google", - "cloud_info": { - "region": "us-east1", - "network_attachment": "projects/foo/regions/us-east1/networkAttachments/foo", - "service_attachment": "projects/foo/regions/us-east1/serviceAttachments/foo" - }, - "status": { - "provisioning_state": { - "state": "pending", - "details": "", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "created_at": "2025-03-31T10:00:00Z", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "DeploymentGetResponse": { - "value": { - "id": "depl_6zYc64JKR0uxnoEcLH1gGA", - "account_id": "acc_FsFgfeDtScOjGbQJDaVNiQ", - "name": "tst-foo", - "description": "", - "cloud": "google", - "cloud_info": { - "region": "us-east1", - "network_attachment": "projects/foo/regions/us-east1/networkAttachments/foo", - "service_attachment": "projects/foo/regions/us-east1/serviceAttachments/foo" - }, - "status": { - "provisioning_state": { - "state": "ready", - "details": "", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "created_at": "2025-03-31T10:00:00Z", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "DeploymentUpdateRequest": { - "value": { - "name": "poc-foo", - "description": "test deployment for project foo" - } - }, - "DeploymentUpdateResponse": { - "value": { - "id": "depl_6zYc64JKR0uxnoEcLH1gGA", - "account_id": "acc_FsFgfeDtScOjGbQJDaVNiQ", - "name": "poc-foo", - "description": "test deployment for project foo", - "cloud": "google", - "cloud_info": { - "region": "us-east1", - "network_attachment": "projects/foo/regions/us-east1/networkAttachments/foo", - "service_attachment": "projects/foo/regions/us-east1/serviceAttachments/foo" - }, - "status": { - "provisioning_state": { - "state": "ready", - "details": "", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "created_at": "2025-03-31T10:00:00Z", - "modified_at": "2025-03-31T10:05:00Z" - } - }, - "DeploymentDeleteResponse": { - "value": { - "id": "depl_6zYc64JKR0uxnoEcLH1gGA", - "account_id": "acc_FsFgfeDtScOjGbQJDaVNiQ", - "name": "poc-foo", - "description": "test deployment for project foo", - "cloud": "google", - "cloud_info": { - "region": "us-east1", - "network_attachment": "projects/foo/regions/us-east1/networkAttachments/foo", - "service_attachment": "projects/foo/regions/us-east1/serviceAttachments/foo" - }, - "status": { - "provisioning_state": { - "state": "deleting", - "details": "", - "modified_at": "2025-03-31T10:15:00Z" - } - }, - "created_at": "2025-03-31T10:00:00Z", - "modified_at": "2025-03-31T10:05:00Z", - "deleted_at": "2025-03-31T10:15:00Z" - } } }, "responses": { @@ -10340,36 +9205,6 @@ } } } - }, - "Unauthorized": { - "description": "Client is not authorized to perform the requested operation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "NotFound": { - "description": "Requested resource was not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "Conflict": { - "description": "Requested operation cannot be performed at this time.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } } }, "securitySchemes": { @@ -10409,20 +9244,6 @@ "tags": [ "Settings" ] - }, - { - "name": "NAAS Marketplace", - "tags": [ - "Authorization", - "Signup", - "User" - ] - }, - { - "name": "Manage NAAS deployments", - "tags": [ - "Deployments" - ] } ] } \ No newline at end of file From 668fcf5010895b8bb33e34a789574bf82378088c Mon Sep 17 00:00:00 2001 From: Mike Jang <3287976+mjang@users.noreply.github.com> Date: Tue, 20 May 2025 12:29:52 -0700 Subject: [PATCH 2/2] Update --- static/nginx-one/api/one.json | 564 ++++++++++++++++++++++------------ 1 file changed, 361 insertions(+), 203 deletions(-) diff --git a/static/nginx-one/api/one.json b/static/nginx-one/api/one.json index ac9a2a663..3dcfbf8f4 100644 --- a/static/nginx-one/api/one.json +++ b/static/nginx-one/api/one.json @@ -3223,6 +3223,59 @@ } } }, + "patch": { + "x-nginx-one-action": "bulk", + "x-nginx-one-entity": "NGINX staged configs", + "x-feature-flag": "staged-configs-phase-2", + "tags": [ + "Staged Configs" + ], + "summary": "Bulk operation on multiple staged configs", + "operationId": "bulkStagedConfigs", + "description": "Performs bulk operation on one or more staged configs, only delete is supported.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StagedConfigBulkRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Batch request completed.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StagedConfigBulkResponse" + } + } + } + }, + "401": { + "description": "Access denied.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "An unexpected error occurred on the server. Please try the request again later.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + }, "post": { "x-feature-flag": "staged-configs", "x-nginx-one-action": "create", @@ -3729,6 +3782,153 @@ } } }, + "/staged-configs/{stagedConfigObjectID}/export": { + "get": { + "parameters": [ + { + "$ref": "#/components/parameters/StagedConfigParamObjectID" + } + ], + "tags": [ + "Staged Configs" + ], + "x-feature-flag": "staged-configs-phase-2", + "x-nginx-one-action": "export", + "x-nginx-one-entity": "NGINX staged config", + "summary": "Export staged configuration", + "description": "Exports staged configuration as a gzipped tar archive. Does not include sensitive data such as SSL certificates. [Learn more](https://docs.nginx.com/nginx-one/how-to/staged-configs/import-export-staged-config/).\n", + "operationId": "exportStagedConfig", + "responses": { + "200": { + "description": "Successfully exported the staged configuration.", + "content": { + "application/gzip": { + "schema": { + "type": "string", + "format": "binary", + "example": "my-staged-config-2025-01-01T20_25_03.tar.gz" + } + } + } + }, + "401": { + "description": "Access denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "The NGINX staged config with the specified object_id was not found. Check that the object_id provided is correct and corresponds to an existing resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "An unexpected error occurred on the server. Please try the request again later.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/staged-configs/import": { + "post": { + "tags": [ + "Staged Configs" + ], + "x-feature-flag": "staged-configs-phase-2", + "x-nginx-one-action": "import", + "x-nginx-one-entity": "NGINX staged config", + "summary": "Import staged configuration\n", + "description": "Imports a gzipped tar archive (.tar.gz) containing configuration and aux files into NGINX One. \nOnly non-hidden files are included in the import.\n\nMaximum compressed archive size: **5 MB**\nMaximum uncompressed individual file size: **10 MB**\n\nIf `parse_only` is set to `true`, the configuration is only validated and not staged.\nBy default, validation is performed and a staged configuration is created upon success.\n", + "parameters": [ + { + "$ref": "#/components/parameters/StagedConfigImportParseOnly" + } + ], + "operationId": "importStagedConfig", + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/StagedConfigImportRequest" + }, + "encoding": { + "file": { + "contentType": "application/gzip, application/x-gzip" + } + } + } + } + }, + "responses": { + "200": { + "description": "Return if `parse_only` is `true`: Returns data matching `StagedConfigCreateRequest` that can be used to create the staged config later. \n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StagedConfigCreateRequest" + } + } + } + }, + "201": { + "description": "Return if `parse_only` is `false` or omitted: Confirms the import parsed successfully and the staged config was created.\n", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StagedConfigCreateResponse" + } + } + } + }, + "400": { + "description": "Request cannot be processed due to invalid input or parameters. Verify the request format and provided data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "401": { + "description": "Access denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "500": { + "description": "An unexpected error occurred on the server. Please try the request again later.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, "/monitor/metrics_query_topx": { "post": { "tags": [ @@ -4248,6 +4448,16 @@ }, "description": "A globally unique identifier for the NGINX staged config.\n", "required": true + }, + "StagedConfigImportParseOnly": { + "name": "parseOnly", + "in": "query", + "schema": { + "type": "boolean", + "default": false + }, + "description": "Optional flag to control how the request is processed.\n - When `false` or omitted (by default), the request creates a Staged Config directly. (`StagedConfigCreateResponse`)\n - When `true`, the request parses the import and returns metadata you can use to create a Staged Config through a POST. ( `StagedConfigCreateRequest`)\n", + "required": false } }, "schemas": { @@ -5551,190 +5761,11 @@ } } }, - "NapPolicyObjectID": { - "description": "A globally unique identifier for the App Protect policy.", - "type": "string", - "format": "object_id", - "pattern": "^pol_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "NapPolicyVersionObjectID": { - "description": "A globally unique identifier for the App Protect policy version.", - "type": "string", - "format": "object_id", - "pattern": "^pv_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "PublicationObjectID": { - "description": "A globally unique identifier for the publication.", - "type": "string", - "format": "object_id", - "example": "pub_72pGHoGsSICL_THZrs964g", - "pattern": "^pub_.*", - "x-go-type": "objects.ID", - "x-go-type-import": { - "name": "objects", - "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" - } - }, - "NapPolicyEnforcementMode": { - "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `blocking` - Any illegal or suspicious requests are logged and blocked.\n* `transparent` - Any illegal or suspicious requests are logged but not blocked.\n", - "type": "string", - "enum": [ - "blocking", - "transparent" - ], - "x-enum-varnames": [ - "nap_enforcement_mode_blocking", - "nap_enforcement_mode_transparent" - ] - }, - "NapDeploymentStatus": { - "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `deployed` - The NGINX App Protect policy has been deployed.\n* `not_deployed` - The NGINX App Protect policy has not been deployed.\n* `deploying` - The NGINX App Protect policy is currently being deployed.\n* `failed` - The NGINX App Protect policy failed deploying.\n", - "type": "string", - "enum": [ - "deployed", - "not_deployed", - "deploying", - "failed" - ], - "x-enum-varnames": [ - "nap_deployment_status_deployed", - "nap_deployment_status_not_deployed", - "nap_deployment_status_deploying", - "nap_deployment_status_failed" - ] - }, - "NapAssociation": { - "description": "Details for a NGINX App Protect policy version that's associated with an instance or a config sync group.", - "required": [ - "name", - "version", - "policy_object_id", - "policy_version_object_id", - "paths", - "deployment_status", - "publication_object_id", - "deployed_on", - "enforcement_mode" - ], - "properties": { - "name": { - "type": "string", - "description": "Name of the policy at the time of the deployment." - }, - "version": { - "type": "string", - "description": "Version of the policy at the time of the deployment." - }, - "policy_object_id": { - "$ref": "#/components/schemas/NapPolicyObjectID" - }, - "policy_version_object_id": { - "$ref": "#/components/schemas/NapPolicyVersionObjectID" - }, - "publication_object_id": { - "$ref": "#/components/schemas/PublicationObjectID" - }, - "enforcement_mode": { - "$ref": "#/components/schemas/NapPolicyEnforcementMode" - }, - "paths": { - "type": "array", - "description": "The list of file system paths where the compiled NAP policy version bundle file is installed. \nSince a single compiled NAP policy version bundle file may be applied in multiple contexts, all relevant paths are included.\n", - "example": [ - "/etc/nginx/default_policy.tgz", - "/etc/nginx/default_policy_server_2.tgz" - ], - "items": { - "type": "string" - } - }, - "deployment_status": { - "$ref": "#/components/schemas/NapDeploymentStatus" - }, - "deployed_on": { - "description": "Date and time of the deployment.", - "type": "string", - "format": "date-time" - } - }, - "example": { - "name": "default_policy", - "version": "2025.05.01", - "policy_object_id": "pol_panEdeY-Sh2rWm365y7wsw", - "policy_version_object_id": "pv_kem7SCosTTOL9mMlNyY2GQ", - "publication_object_id": "pub_72pGHoGsSICL_THZrs964g", - "paths": [ - "/etc/nginx/default_policy.tgz" - ], - "deployment_status": "deployed", - "enforcement_mode": "transparent", - "deployed_on": "2023-12-06T22:37:24.120114Z" - } - }, - "NapVersion": { - "description": "The version of the NGINX App Protect resource.", - "type": "string", - "example": "2023.12.06" - }, - "NapInstanceAssociation": { - "description": "Details for a NGINX App Protect policy version that's associated with an instance.", - "allOf": [ - { - "$ref": "#/components/schemas/NapAssociation" - }, - { - "type": "object", - "required": [ - "threat_campaign_version", - "attack_signature_version", - "bot_signature_version" - ], - "properties": { - "threat_campaign_version": { - "$ref": "#/components/schemas/NapVersion" - }, - "attack_signature_version": { - "$ref": "#/components/schemas/NapVersion" - }, - "bot_signature_version": { - "$ref": "#/components/schemas/NapVersion" - } - } - } - ], - "example": { - "name": "default_policy", - "version": "2025.05.01", - "policy_object_id": "pol_panEdeY-Sh2rWm365y7wsw", - "policy_version_object_id": "pv_kem7SCosTTOL9mMlNyY2GQ", - "publication_object_id": "pub_72pGHoGsSICL_THZrs964g", - "paths": [ - "/etc/nginx/default_policy.tgz" - ], - "deployment_status": "deployed", - "enforcement_mode": "transparent", - "deployed_on": "2023-12-06T22:37:24.120114Z", - "threat_campaign_version": "2025.01.23", - "attack_signature_version": "2025.01.19", - "bot_signature_version": "2025.01.19" - } - }, "NginxAppProtectDetails": { "description": "Information regarding NGINX App Protect.\n", "type": "object", "required": [ - "engine_version", - "deployments" + "engine_version" ], "properties": { "release_version": { @@ -5744,9 +5775,6 @@ "engine_version": { "description": "The version of the App Protect enforcement engine.", "type": "string" - }, - "deployments": { - "$ref": "#/components/schemas/NapInstanceAssociation" } } }, @@ -6043,20 +6071,6 @@ "items": { "$ref": "#/components/schemas/CertAssociation" } - }, - "nginx_app_protect": { - "type": "object", - "required": [ - "deployments" - ], - "properties": { - "deployments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NapAssociation" - } - } - } } } } @@ -6462,6 +6476,18 @@ } ] }, + "PublicationObjectID": { + "description": "A globally unique identifier for the publication.", + "type": "string", + "format": "object_id", + "example": "pub_72pGHoGsSICL_THZrs964g", + "pattern": "^pub_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, "PublicationStatusCause": { "description": "Cause of the failure, provided only if the status is `failed`.", "type": "object", @@ -7663,6 +7689,51 @@ "object_id": "sc_Tet21AeYTHCj7taOwVfzyw" } }, + "StagedConfigBulkRequestData": { + "type": "object", + "description": "Part of bulk operation on a staged config, only `delete` is supported.", + "required": [ + "action", + "object_id" + ], + "properties": { + "object_id": { + "$ref": "#/components/schemas/StagedConfigObjectID" + }, + "action": { + "$ref": "#/components/schemas/BulkRequestAction" + } + }, + "example": { + "object_id": "sc_-uvR3F2TQGm18jnl7bpaGw", + "action": "delete" + } + }, + "StagedConfigBulkRequest": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StagedConfigBulkRequestData" + }, + "minItems": 1, + "maxItems": 50, + "example": [ + { + "object_id": "sc_-uvR3F2TQGm18jnl7bpaGw", + "action": "delete" + }, + { + "object_id": "sc_PL0c1XodRemmzVEjiXSsTg", + "action": "delete" + } + ] + }, + "StagedConfigBulkResponse": { + "description": "The staged config bulk outcome.", + "type": "array", + "items": { + "$ref": "#/components/schemas/BulkRequestObjectStatus" + } + }, "StagedConfigResponse": { "description": "Get an NGINX staged config.", "required": [ @@ -7741,6 +7812,35 @@ } } }, + "StagedConfigImportRequest": { + "type": "object", + "description": "Body to import a NGINX staged config", + "required": [ + "name", + "file", + "conf_path" + ], + "properties": { + "name": { + "$ref": "#/components/schemas/StagedConfigName" + }, + "file": { + "type": "string", + "format": "binary", + "example": "my-staged-config.tar.gz", + "maxLength": 5242880 + }, + "conf_path": { + "$ref": "#/components/schemas/ConfigPath" + } + }, + "example": { + "name": "my-nginx-config", + "file": "my-staged-config.tar.gz", + "conf_path": "/etc/nginx/nginx.conf", + "parse_only": true + } + }, "MetricQueryResultEx": { "type": "object", "required": [ @@ -8526,6 +8626,39 @@ "k8s.cluster.nodes" ] }, + "NapPolicyEnforcementMode": { + "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `blocking` - Any illegal or suspicious requests are logged and blocked.\n* `transparent` - Any illegal or suspicious requests are logged but not blocked.\n", + "type": "string", + "enum": [ + "blocking", + "transparent" + ], + "x-enum-varnames": [ + "nap_enforcement_mode_blocking", + "nap_enforcement_mode_transparent" + ] + }, + "NapDeploymentStatus": { + "description": "The current enforcement mode of the NGINX App Protect policy, with the following possible values:\n* `deployed` - The NGINX App Protect policy has been deployed.\n* `not_deployed` - The NGINX App Protect policy has not been deployed.\n* `deploying` - The NGINX App Protect policy is currently being deployed.\n* `failed` - The NGINX App Protect policy failed deploying.\n", + "type": "string", + "enum": [ + "deployed", + "not_deployed", + "deploying", + "failed" + ], + "x-enum-varnames": [ + "nap_deployment_status_deployed", + "nap_deployment_status_not_deployed", + "nap_deployment_status_deploying", + "nap_deployment_status_failed" + ] + }, + "Version": { + "description": "The version of the NGINX App Protect resource.", + "type": "string", + "example": "2023.12.06" + }, "VersionsList": { "type": "object", "required": [ @@ -8536,18 +8669,21 @@ "description": "An array of versions.", "type": "array", "items": { - "$ref": "#/components/schemas/NapVersion" + "$ref": "#/components/schemas/Version" } } } }, "ThreatCampaignVersionsListResponse": { + "description": "List of Threat Campaign versions.", "$ref": "#/components/schemas/VersionsList" }, "AttackSignatureVersionsListResponse": { + "description": "List of Attack Signature versions.", "$ref": "#/components/schemas/VersionsList" }, "BotSignatureVersionsListResponse": { + "description": "List of Bot Signature versions.", "$ref": "#/components/schemas/VersionsList" }, "NapPolicy": { @@ -8703,7 +8839,7 @@ "$ref": "#/components/schemas/NapDeploymentStatus" }, "deployed_on": { - "description": "Date and time of the deployment.", + "description": "Date and time.", "type": "string", "format": "date-time" } @@ -8808,13 +8944,13 @@ "type": "object", "properties": { "threat_campaign_version": { - "$ref": "#/components/schemas/NapVersion" + "$ref": "#/components/schemas/Version" }, "attack_signature_version": { - "$ref": "#/components/schemas/NapVersion" + "$ref": "#/components/schemas/Version" }, "bot_signature_version": { - "$ref": "#/components/schemas/NapVersion" + "$ref": "#/components/schemas/Version" } } } @@ -8889,7 +9025,7 @@ "$ref": "#/components/schemas/NapPolicyVersionObjectID" }, "version": { - "$ref": "#/components/schemas/NapVersion" + "$ref": "#/components/schemas/Version" }, "enforcement_mode": { "$ref": "#/components/schemas/NapPolicyEnforcementMode" @@ -9107,6 +9243,28 @@ } } }, + "NapPolicyObjectID": { + "description": "A globally unique identifier for the App Protect policy.", + "type": "string", + "format": "object_id", + "pattern": "^pol_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, + "NapPolicyVersionObjectID": { + "description": "A globally unique identifier for the App Protect policy version.", + "type": "string", + "format": "object_id", + "pattern": "^pv_.*", + "x-go-type": "objects.ID", + "x-go-type-import": { + "name": "objects", + "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" + } + }, "NapLogProfileObjectID": { "description": "A globally unique identifier for the App Protect log profile.", "type": "string",