diff --git a/static/nginx-one/api/one.json b/static/nginx-one/api/one.json index 500ad58aa..ac9a2a663 100644 --- a/static/nginx-one/api/one.json +++ b/static/nginx-one/api/one.json @@ -2563,7 +2563,7 @@ "x-nginx-one-action": "create", "x-nginx-one-entity": "NGINX instance configuration", "summary": "Publish a configuration to an instance", - "description": "Publishes a new or updated NGINX configuration to the specified instance. \nIf no existing configuration is found, a new one is created; otherwise, the current configuration is overwritten. \nBefore publishing, use the `PUT /instances/{instanceObjectID}/config-report` endpoint to generate an analysis report for the provided configuration.\nYou can specify `payloads` in the request to deploy managed certificates and keys to the dataplane. Include file paths\nfor each payload component.\n", + "description": "Publishes a new or updated NGINX configuration to the specified instance.\nIn the specified `configs`, empty files are not allowed in the directory.\nIf no existing configuration is found, a new one is created; otherwise, the current configuration is overwritten. \nBefore publishing, use the `PUT /instances/{instanceObjectID}/config-report` endpoint to generate an analysis report for the provided configuration.\nYou can specify `payloads` in the request to deploy managed certificates and keys to the dataplane. Include file paths\nfor each payload component.\n", "operationId": "publishInstanceConfig", "requestBody": { "required": true, @@ -3750,7 +3750,7 @@ "metrics": [ { "aggregate": "sum", - "name": "nginx.http.requests" + "name": "nginx.http.request.count" } ], "series_limit": 1, @@ -3876,7 +3876,7 @@ "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`, the results are returned as a condensed, non-paginated list.\n", + "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": { @@ -4067,7 +4067,7 @@ "name": "configSyncGroupObjectID", "in": "path", "schema": { - "$ref": "#/components/schemas/configSyncGroupObjectID" + "$ref": "#/components/schemas/ConfigSyncGroupObjectID" }, "description": "A globally unique identifier for the NGINX config sync group.\n", "required": true @@ -4290,11 +4290,11 @@ "properties": { "total": { "type": "integer", - "description": "The absolute total number of the resource in the NGINX One Console.\n" + "description": "The absolute total number of the resource in the NGINX One Console, ignoring any filter(s).\n" }, "count": { "type": "integer", - "description": "The total number of results generated by the list or query operation. \nThis number might be greater than the number of displayed resources, such as when pagination is in effect.\n" + "description": "The total number of results generated by the list or query operation, accounting for any filter(s).\nThis number can be greater than the number of returned resources when pagination is in effect and a page size limit (or maximum allowed) is reached.\n" }, "start_index": { "type": "integer", @@ -5133,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", @@ -5170,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" @@ -5281,7 +5284,7 @@ "filter_name_config_sync_group_object_id" ] }, - "configSyncGroupObjectID": { + "ConfigSyncGroupObjectID": { "description": "A globally unique identifier for the NGINX config sync group.", "type": "string", "format": "object_id", @@ -5352,7 +5355,7 @@ ], "properties": { "object_id": { - "$ref": "#/components/schemas/configSyncGroupObjectID" + "$ref": "#/components/schemas/ConfigSyncGroupObjectID" }, "name": { "description": "Name of the Nginx config sync group.", @@ -5432,7 +5435,7 @@ ], "properties": { "object_id": { - "$ref": "#/components/schemas/configSyncGroupObjectID" + "$ref": "#/components/schemas/ConfigSyncGroupObjectID" }, "name": { "description": "Name of the Nginx config sync group.", @@ -5453,7 +5456,7 @@ ], "properties": { "object_id": { - "$ref": "#/components/schemas/configSyncGroupObjectID" + "$ref": "#/components/schemas/ConfigSyncGroupObjectID" }, "action": { "$ref": "#/components/schemas/BulkRequestAction" @@ -5498,7 +5501,7 @@ ], "properties": { "object_id": { - "$ref": "#/components/schemas/configSyncGroupObjectID" + "$ref": "#/components/schemas/ConfigSyncGroupObjectID" }, "name": { "description": "Name of the Nginx config sync group.", @@ -5548,6 +5551,205 @@ } } }, + "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" + ], + "properties": { + "release_version": { + "description": "The release version of NGINX App Protect.", + "type": "string" + }, + "engine_version": { + "description": "The version of the App Protect enforcement engine.", + "type": "string" + }, + "deployments": { + "$ref": "#/components/schemas/NapInstanceAssociation" + } + } + }, "CveSeverityType": { "type": "string", "description": "Severity ratings:\n * `high` - High severity.\n * `medium` - Moderate severity.\n * `low` - Least severe.\n * `none` - Not severe.\n * `other` - Severity that does not fit the other categories.\n", @@ -5659,6 +5861,9 @@ "type": "string", "example": "ubuntu_jammy" }, + "nginx_app_protect": { + "$ref": "#/components/schemas/NginxAppProtectDetails" + }, "registered_at": { "description": "The date and time when the NGINX instance first registered with NGINX One.", "type": "string", @@ -5838,6 +6043,20 @@ "items": { "$ref": "#/components/schemas/CertAssociation" } + }, + "nginx_app_protect": { + "type": "object", + "required": [ + "deployments" + ], + "properties": { + "deployments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NapAssociation" + } + } + } } } } @@ -5893,6 +6112,13 @@ } ] }, + "ConfigPath": { + "type": "string", + "minLength": 1, + "maxLength": 4096, + "description": "The full path to the main NGINX configuration file. This corresponds to the `--conf-path` parameter used in the NGINX binary.\n", + "example": "/etc/nginx/nginx.conf." + }, "FileData": { "type": "object", "description": "Details about a file, including its path, content, size, and last modified time.", @@ -5969,11 +6195,7 @@ "description": "A hash that uniquely identifies the contents of the config object. Can be used to detect change when updating the NginxConfig.\n" }, "conf_path": { - "type": "string", - "minLength": 1, - "maxLength": 4096, - "description": "The full path to the main NGINX configuration file. This corresponds to the `--conf-path` parameter used in the NGINX binary.\n", - "example": "/etc/nginx/nginx.conf." + "$ref": "#/components/schemas/ConfigPath" }, "configs": { "type": "array", @@ -6207,11 +6429,7 @@ "description": "A hash that uniquely identifies the contents of the config object. Can be used to detect change when updating the NginxConfig.\n" }, "conf_path": { - "type": "string", - "minLength": 1, - "maxLength": 4096, - "description": "The full path to the main NGINX configuration file. This corresponds to the `--conf-path` parameter used in the NGINX binary.\n", - "example": "/etc/nginx/nginx.conf." + "$ref": "#/components/schemas/ConfigPath" }, "configs": { "type": "array", @@ -6244,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", @@ -7423,7 +7629,6 @@ "config": { "aux": [], "conf_path": "/etc/nginx/nginx.conf", - "config_version": "c039fbbd5d7f73d894390fb446bd3690da099ed8862b2527299bc2ba", "configs": [ { "files": [ @@ -7734,7 +7939,7 @@ "MetricDimension": { "type": "string", "default": "display_name", - "description": "Static list of all metric dimensions.\n * `display_name` - The display name of the NGINX instance.\n * `file_path` - Path to a desired file.\n * `parent_hostname` - The hostname of the NGINX Plus instance.\n * `instance_object_id` - Instance Object ID is the unique identifier for an Instance registered with NGINX One Console.\n * `location_zone` - The name of an HTTP location zone.\n * `mount_point` - A filesystem mount point.\n * `namespace` - The Namespace associated with the metric data.\n * `network_interface` - A server network interface.\n * `nginx_id` - The unique identifier of an nginx instance running on the data plane.\n * `server_zone` - The name of an HTTP or Stream server zone.\n * `system_id` - The unique identifier of the the operating system where nginx-agent is running.\n * `tenant` - The Tenant associated with the metric data.\n * `csg_object_id` - Config Sync Group Object ID is the unique identifier for a Config Sync Group registered with NGINX One Console.\n * `mode` - Variant value associated with metric `system.cpu.time`.\n * `state` - Variant value associated with metrics `system.filesystem.usage`, `system.memory.usage`.\n * `io_direction` - Variant value associated with metric `system.network.io`.\n * `status_range` - Variant value associated with metric `nginx.http.response.status`.\n", + "description": "Static list of all metric dimensions.\n * `display_name` - The display name of the NGINX instance.\n * `file_path` - Path to a desired file.\n * `parent_hostname` - The hostname of the NGINX Plus instance.\n * `instance_object_id` - Instance Object ID is the unique identifier for an Instance registered with NGINX One Console.\n * `location_zone` - The name of an HTTP location zone.\n * `mount_point` - A filesystem mount point.\n * `namespace` - The Namespace associated with the metric data.\n * `network_interface` - A server network interface.\n * `nginx_id` - The unique identifier of an nginx instance running on the data plane.\n * `server_zone` - The name of an HTTP or Stream server zone.\n * `system_id` - The unique identifier of the the operating system where nginx-agent is running.\n * `tenant` - The Tenant associated with the metric data.\n * `csg_object_id` - Config Sync Group Object ID is the unique identifier for a Config Sync Group registered with NGINX One Console.\n * `mode` - Variant value associated with metric `system.cpu.utilization`.\n * `state` - Variant value associated with metrics `system.filesystem.usage`, `system.memory.usage`.\n * `io_direction` - Variant value associated with metric `system.network.io`.\n * `status_range` - Variant value associated with metric `nginx.http.response.count`.\n", "enum": [ "display_name", "file_path", @@ -7864,7 +8069,7 @@ }, "example": [ { - "name": "system.cpu.time", + "name": "system.cpu.utilization", "aggregate": "avg", "filter": [ { @@ -8053,10 +8258,10 @@ "MetricName": { "type": "string", "description": "Metric names available for querying.\n", - "example": "nginx.http.requests", + "example": "nginx.http.request.count", "oneOf": [ { - "$ref": "#/components/schemas/MetricSystemCpuTime" + "$ref": "#/components/schemas/MetricSystemCpuUtilization" }, { "$ref": "#/components/schemas/MetricSystemFilesystemUsage" @@ -8071,18 +8276,18 @@ "$ref": "#/components/schemas/MetricSystemNetworkIo" }, { - "$ref": "#/components/schemas/MetricNginxHttpRequests" + "$ref": "#/components/schemas/MetricNginxHttpRequestCount" }, { - "$ref": "#/components/schemas/MetricNginxHttpResponseStatus" + "$ref": "#/components/schemas/MetricNginxHttpResponseCount" } ] }, - "MetricSystemCpuTime": { + "MetricSystemCpuUtilization": { "type": "string", "description": "Total system CPU utilization for 'system' or 'user', percentage. A filter differentiator is needed for specific mode(s).\n\nReplacement for depreciated variant(s):\n * system.cpu.system\n * system.cpu.user\n\nAggregation(s) supported:\n * min\n * max\n * sum\n * avg\n * rate\n\nCatalog dimension filter differentiator:\n * mode (applicable filter values: 'system', 'user')\n\nCatalog dimension(s) supported:\n * instance_object_id\n * csg_object_id\n * system_id\n * parent_hostname\n * display_name\n * nginx_id\n", "enum": [ - "system.cpu.time" + "system.cpu.utilization" ] }, "MetricSystemFilesystemUsage": { @@ -8113,18 +8318,18 @@ "system.network.io" ] }, - "MetricNginxHttpRequests": { + "MetricNginxHttpRequestCount": { "type": "string", - "description": "Total number of client requests received from clients.\n\nReplacement for depreciated variant(s):\n * nginx.http.request.count\n * plus.http.request.count\n\nAggregation(s) supported:\n * min\n * max\n * sum\n * avg\n * rate\n\nCatalog dimension(s) supported:\n * instance_object_id\n * csg_object_id\n * system_id\n * parent_hostname\n * display_name\n * nginx_id\n * server_zone\n * location_zone\n", + "description": "The current number of client requests received from clients.\n\nReplacement for depreciated variant(s):\n * nginx.http.request.count\n * plus.http.request.count\n\nAggregation(s) supported:\n * min\n * max\n * sum\n * avg\n * rate\n\nCatalog dimension(s) supported:\n * instance_object_id\n * csg_object_id\n * system_id\n * parent_hostname\n * display_name\n * nginx_id\n * server_zone\n * location_zone\n", "enum": [ - "nginx.http.requests" + "nginx.http.request.count" ] }, - "MetricNginxHttpResponseStatus": { + "MetricNginxHttpResponseCount": { "type": "string", - "description": "Number of responses for by status code range. A filter differentiator is needed for specific status range(s).\n\nReplacement for depreciated variant(s):\n * nginx.http.status.4xx\n * plus.http.status.4xx\n\nAggregation(s) supported:\n * min\n * max\n * sum\n * avg\n * rate\n\nCatalog dimension filter differentiator:\n * status_range (applicable filter values: '4xx', '5xx')\n\nCatalog dimension(s) supported:\n * instance_object_id\n * csg_object_id\n * system_id\n * parent_hostname\n * display_name\n * nginx_id \n * server_zone\n * location_zone\n", + "description": "The current number of responses, grouped by status code range. A filter differentiator is needed for specific status range(s).\n\nReplacement for depreciated variant(s):\n * nginx.http.status.4xx\n * plus.http.status.4xx\n\nAggregation(s) supported:\n * min\n * max\n * sum\n * avg\n * rate\n\nCatalog dimension filter differentiator:\n * status_range (applicable filter values: '4xx', '5xx')\n\nCatalog dimension(s) supported:\n * instance_object_id\n * csg_object_id\n * system_id\n * parent_hostname\n * display_name\n * nginx_id \n * server_zone\n * location_zone\n", "enum": [ - "nginx.http.response.status" + "nginx.http.response.count" ] }, "SettingsInstanceCleanup": { @@ -8321,52 +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* `monitoring` - Any illegal or suspicious requests are logged but not blocked.\n", - "type": "string", - "enum": [ - "blocking", - "monitoring" - ], - "x-enum-varnames": [ - "nap_enforcement_mode_blocking", - "nap_enforcement_mode_monitoring" - ] - }, - "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", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$", - "example": "2023.12.06" - }, "VersionsList": { "type": "object", "required": [ @@ -8377,50 +8536,50 @@ "description": "An array of versions.", "type": "array", "items": { - "$ref": "#/components/schemas/Version" + "$ref": "#/components/schemas/NapVersion" } } - }, - "example": { - "items": [ - "2023.12.06" - ] } }, "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": { - "description": "The JSON contents of the NGINX App Protect policy.", + "description": "The base64-encoded contents of the NGINX App Protect policy.", "type": "object", "required": [ "policy" ], "properties": { "policy": { - "description": "The NGINX App Protect policy configuration.", - "type": "object", - "minProperties": 1 + "type": "string", + "format": "base64", + "maxLength": 3145728 } } }, + "NapPolicyObject": { + "allOf": [ + { + "$ref": "#/components/schemas/NapPolicyMetadata" + }, + { + "$ref": "#/components/schemas/NapPolicyDeployments" + } + ] + }, "NapPolicyMetadata": { "description": "Summary information about NGINX App Protect policy.", "type": "object", "required": [ "object_id", "name", - "deployment_count", - "last_updated_by", "latest" ], "properties": { @@ -8431,74 +8590,16 @@ "description": "The name of the NGINX App Protect policy.", "type": "string" }, - "deployment_count": { - "description": "The number of NGINX One instances or config sync groups associated with the NGINX App Protect policy.", - "type": "integer" - }, - "last_updated_by": { - "description": "The NGINX One user who last modified the NGINX App Protect policy.", - "type": "string" - }, - "latest": { - "type": "object", - "required": [ - "enforcement_mode", - "deployed_on", - "version", - "created_on", - "last_updated_by" - ], - "properties": { - "enforcement_mode": { - "$ref": "#/components/schemas/NapPolicyEnforcementMode" - }, - "deployed_on": { - "description": "The date and time when the NGINX App Protect policy was last deployed.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "The latest version of the NGINX App Protect policy.", - "type": "string" - }, - "created_on": { - "description": "The date and time when the NGINX App Protect policy was created.", - "type": "string", - "format": "date-time" - } - } - }, "description": { "type": "string", "description": "Some detail on the NGINX App Protect policy." - } - }, - "example": { - "object_id": "pol_-uvR3F2TQGm18jnl7bpaGw", - "name": "test-policy", - "last_updated_by": "john.doe@example.com", - "deployment_count": 5, - "decription": "test policy", + }, "latest": { - "enforcement_mode": "blocking", - "deployed_on": "2023-12-06T22:37:24.120114Z", - "version": "2023-12-06 22:37:24", - "created_on": "2023-12-06T22:37:24.120114Z" + "$ref": "#/components/schemas/NapPolicyVersionMetadata" } } }, - "NapPolicyResponse": { - "description": "Summary information about NGINX App Protect policy.", - "allOf": [ - { - "$ref": "#/components/schemas/NapPolicyMetadata" - }, - { - "$ref": "#/components/schemas/NapPolicy" - } - ] - }, - "NapPoliciesListResponse": { + "NapPolicyListResponse": { "description": "List of all NGINX App Protect policies.", "allOf": [ { @@ -8515,7 +8616,7 @@ "description": "An array of NGINX App Protect policy objects.", "type": "array", "items": { - "$ref": "#/components/schemas/NapPolicyMetadata" + "$ref": "#/components/schemas/NapPolicyObject" } } }, @@ -8524,78 +8625,213 @@ { "object_id": "pol_-uvR3F2TQGm18jnl7bpaGw", "name": "test-policy", - "decription": "test policy", - "created_on": "2023-12-06T22:37:24.120114Z", - "latest_version": "2023.12.06", - "last_updated_by": "john.doe@example.com", - "enforcement_mode": "blocking", - "last_deployed": "2023-12-06T22:37:24.120114Z" + "description": "test policy", + "deployments": [ + { + "publication_object_id": "pub_-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", + "policy_version_object_id": "pv_-abc3F2TQGm18jnl7bpaGw", + "deployed_on": "2023-12-06T22:37:24.120114Z" + } + ], + "latest": { + "object_id": "pv_-uvR3F2TQGm18jnl7bpaGw", + "version": "2023-12-06 22:37:24", + "created_on": "2023-12-06T22:37:24.120114Z", + "deployment_status": "deployed", + "enforcement_mode": "blocking" + } } ] } } ] }, - "NapPolicyDeploymentMetadata": { + "NapPolicyVersionDeployments": { + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NapPolicyVersionDeployment" + } + } + } + }, + "NapDeploymentAssociation": { "type": "object", "required": [ - "object_id", + "associated_type", + "associated_object_id", + "associated_name" + ], + "properties": { + "associated_type": { + "$ref": "#/components/schemas/DeploymentAssociatedType" + }, + "associated_object_id": { + "$ref": "#/components/schemas/ObjectID" + }, + "associated_name": { + "$ref": "#/components/schemas/DeploymentAssociatedName" + } + } + }, + "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", + "items": { + "$ref": "#/components/schemas/NapPolicyDeployment" + } + } + } + }, + "NapPolicyDeployment": { + "description": "detailed information about a NGINX App Protect policy deployment.", + "type": "object", + "required": [ + "publication_object_id", + "associated_object_id", + "associated_name", + "associated_type", "enforcement_mode", - "name", - "type", "status", "policy_version", + "policy_version_object_id", + "deployed_on" + ], + "allOf": [ + { + "$ref": "#/components/schemas/NapPolicyVersionDeployment" + }, + { + "type": "object", + "required": [ + "enforcement_mode", + "policy_version", + "policy_version_object_id" + ], + "properties": { + "enforcement_mode": { + "$ref": "#/components/schemas/NapPolicyEnforcementMode" + }, + "policy_version": { + "description": "The version associated with the NGINX App Protect policy.", + "type": "string" + }, + "policy_version_object_id": { + "$ref": "#/components/schemas/NapPolicyVersionObjectID" + } + } + } + ], + "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", + "enforcement_mode": "blocking", + "policy_version": "2023-12-06 22:37:24", + "policy_version_object_id": "pv_-abc3F2TQGm18jnl7bpaGw" + } + }, + "NapPolicyDeploymentDetails": { + "type": "object", + "required": [ + "publication_object_id", + "associated_object_id", + "associated_name", + "associated_type", + "enforcement_mode", + "status", + "policy_version", + "policy_version_object_id", + "deployed_on", "threat_campaign_version", "attack_signature_version", "bot_signature_version" ], - "properties": { - "object_id": { - "$ref": "#/components/schemas/PublicationObjectID" - }, - "enforcement_mode": { - "$ref": "#/components/schemas/NapPolicyEnforcementMode" - }, - "name": { - "description": "The name of the NGINX One instance or config sync group.", - "type": "string" - }, - "type": { - "$ref": "#/components/schemas/NapDeploymentType" - }, - "status": { - "$ref": "#/components/schemas/NapDeploymentStatus" - }, - "policy_version": { - "description": "The version associated with the NGINX App Protect policy.", - "type": "string" - }, - "deployed_on": { - "description": "The date and time when the NGINX App Protect policy was deployed.", - "type": "string", - "format": "date-time" - }, - "threat_campaign_version": { - "$ref": "#/components/schemas/Version" - }, - "attack_signature_version": { - "$ref": "#/components/schemas/Version" + "allOf": [ + { + "$ref": "#/components/schemas/NapPolicyDeployment" }, - "bot_sigature_version": { - "$ref": "#/components/schemas/Version" + { + "type": "object", + "properties": { + "threat_campaign_version": { + "$ref": "#/components/schemas/NapVersion" + }, + "attack_signature_version": { + "$ref": "#/components/schemas/NapVersion" + }, + "bot_signature_version": { + "$ref": "#/components/schemas/NapVersion" + } + } } - }, + ], "example": { - "object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "name": "test-instance", - "type": "instance", + "publication_object_id": "pub_-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", "deployed_on": "2023-12-06T22:37:24.120114Z", "enforcement_mode": "blocking", "threat_campaign_version": "2023.12.06", "attack_signature_version": "2023.12.06", - "bot_sigature_version": "2023.12.06" + "bot_signature_version": "2023.12.06" } }, "NapPolicyDeploymentsListResponse": { @@ -8614,23 +8850,25 @@ "description": "An array of NGINX App Protect deployments.", "type": "array", "items": { - "$ref": "#/components/schemas/NapPolicyDeploymentMetadata" + "$ref": "#/components/schemas/NapPolicyDeploymentDetails" } } }, "example": { "items": [ { - "object_id": "pub_-uvR3F2TQGm18jnl7bpaGw", - "name": "test-instance", - "type": "instance", + "publication_object_id": "pub_-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", "deployed_on": "2023-12-06T22:37:24.120114Z", "enforcement_mode": "blocking", "threat_campaign_version": "2023.12.06", "attack_signature_version": "2023.12.06", - "bot_sigature_version": "2023.12.06" + "bot_signature_version": "2023.12.06" } ] } @@ -8639,68 +8877,73 @@ }, "NapPolicyVersionMetadata": { "type": "object", + "description": "Summary information about the specific NGINX App Protect policy version.", "required": [ "object_id", + "version", "enforcement_mode", - "deployment_status", - "instance_count", - "config_sync_group_count", - "created_on", - "created_by", - "latest" + "created_on" ], "properties": { "object_id": { "$ref": "#/components/schemas/NapPolicyVersionObjectID" }, + "version": { + "$ref": "#/components/schemas/NapVersion" + }, "enforcement_mode": { "$ref": "#/components/schemas/NapPolicyEnforcementMode" }, - "deployment_status": { - "$ref": "#/components/schemas/NapDeploymentStatus" - }, - "instance_count": { - "description": "The number of NGINX One instances associated with the NGINX App Protect policy version", - "type": "integer" - }, - "config_sync_group_count": { - "description": "The number of NGINX One config sync groups associated with the NGINX App Protect policy version", - "type": "integer" - }, "created_on": { "description": "The date and time when the NGINX App Protect policy version was created.", "type": "string", "format": "date-time" + } + } + }, + "NapPolicyVersionDetails": { + "description": "Detailed information about NGINX App Protect policy version.", + "type": "object", + "required": [ + "policy", + "object_id", + "version", + "enforcement_mode", + "created_on" + ], + "allOf": [ + { + "$ref": "#/components/schemas/NapPolicyVersionMetadata" }, - "created_by": { - "description": "The NGINX One user who created the NGINX App Protect policy.", - "type": "string" + { + "$ref": "#/components/schemas/NapPolicy" }, - "latest": { - "description": "Indicates whether the NGINX App Protect policy version is latest. Default (`false`) returns the current policy. \nWhen set to `true`, returns the latest policy.\n", - "type": "boolean", - "default": false + { + "$ref": "#/components/schemas/NapPolicyVersionDeployments" } - }, - "example": { - "object_id": "pv_-uvR3F2TQGm18jnl7bpaGw", - "created_on": "2023-12-06T22:37:24.120114Z", - "created_by": "john.doe@example.com", - "deployment_status": "deployed", - "enforcement_mode": "blocking", - "instance_count": 10, - "config_sync_group_count": 15, - "latest": false - } + ] }, - "NapPolicyVersionResponse": { + "NapPolicyVersionObject": { "description": "Summary information about NGINX App Protect policy version.", "allOf": [ { "$ref": "#/components/schemas/NapPolicyVersionMetadata" }, { - "$ref": "#/components/schemas/NapPolicy" + "$ref": "#/components/schemas/NapPolicyVersionDeployments" + }, + { + "type": "object", + "required": [ + "latest" + ], + "properties": { + "latest": { + "description": "Indicates whether the NGINX App Protect policy version is latest. Default (`false`) returns the current policy. \nWhen set to `true`, returns the latest policy.\n", + "type": "boolean", + "default": false + } + } } ] }, @@ -8720,20 +8963,17 @@ "description": "An array of NGINX App Protect version objects.", "type": "array", "items": { - "$ref": "#/components/schemas/NapPolicyVersionMetadata" + "$ref": "#/components/schemas/NapPolicyVersionObject" } } }, "example": { "items": [ { - "object_id": "appv_-uvR3F2TQGm18jnl7bpaGw", + "version": "2023-12-06 22:37:24", + "object_id": "pv_-uvR3F2TQGm18jnl7bpaGw", "created_on": "2023-12-06T22:37:24.120114Z", - "created_by": "john.doe@example.com", - "deployment_status": "deployed", "enforcement_mode": "blocking", - "instance_count": 10, - "config_sync_group_count": 15, "latest": false } ] @@ -8759,22 +8999,28 @@ "$ref": "#/components/schemas/NapLogProfileMetadata" } } - }, - "example": { - "items": [ - { - "name": "test-log-profile" - }, - { - "object_id": "lp_-uvR3F2TQGm18jnl7bpaGw" - } - ] } } ] }, - "NapLogProfileResponse": { - "$ref": "#/components/schemas/NapLogProfileMetadata" + "NapLogProfileGetResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/NapLogProfileMetadata" + }, + { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "The NGINX App Protect log profile configuration.", + "type": "string" + } + } + } + ] }, "NapLogProfileMetadata": { "type": "object", @@ -8813,27 +9059,33 @@ "description": "An array of NGINX App Protect global settings.", "type": "array", "items": { - "$ref": "#/components/schemas/NapGlobalSettingsMetadata" + "$ref": "#/components/schemas/NapGlobalSettingMetadata" } } - }, - "example": { - "items": [ - { - "name": "test-global-settings" - }, - { - "object_id": "gs_-uvR3F2TQGm18jnl7bpaGw" - } - ] } } ] }, - "NapGlobalSettingsResponse": { - "$ref": "#/components/schemas/NapGlobalSettingsMetadata" + "NapGlobalSettingGetResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/NapGlobalSettingMetadata" + }, + { + "type": "object", + "required": [ + "config" + ], + "properties": { + "config": { + "description": "The NGINX App Protect global setting configuration.", + "type": "string" + } + } + } + ] }, - "NapGlobalSettingsMetadata": { + "NapGlobalSettingMetadata": { "type": "object", "required": [ "name", @@ -8842,7 +9094,7 @@ "properties": { "name": { "type": "string", - "description": "The name of the NGINX App Protect global settings object." + "description": "The name of the NGINX App Protect global setting object." }, "description": { "description": "Optional field to describe the NGINX App Protect global setting object.", @@ -8851,32 +9103,10 @@ "maxLength": 256 }, "object_id": { - "$ref": "#/components/schemas/NapGlobalSettingsObjectID" + "$ref": "#/components/schemas/NapGlobalSettingObjectID" } } }, - "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", @@ -8888,7 +9118,7 @@ "path": "gitlab.com/f5/nginx/one/saas/control-plane/pkg/collections/objects" } }, - "NapGlobalSettingsObjectID": { + "NapGlobalSettingObjectID": { "description": "A globally unique identifier for the App Protect global settings object.", "type": "string", "format": "object_id",