diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 9240a15e5..c89b32b84 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -6,14 +6,14 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v2 with: - python-version: '3.7.x' + python-version: '3.9' architecture: 'x64' - name: Cache pip - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ~/.cache/pip # Look to see if there is a cache hit for the corresponding requirements file @@ -27,4 +27,4 @@ jobs: pip install openapi3 - name: openapi linter run: | - python -m openapi3 openapi.yaml \ No newline at end of file + python -m openapi3 openapi.yaml diff --git a/openapi.json b/openapi.json index d961d9cf9..98d15f874 100644 --- a/openapi.json +++ b/openapi.json @@ -717,6 +717,21 @@ "type": "boolean", "x-linode-cli-display": 4 }, + "interfaces_for_new_linodes": { + "description": "__Beta__ Defines if new Linodes can use legacy configuration interfaces:\n- `legacy_config_only`. All new Linodes need to use legacy configuration interfaces. Prevously created Linodes with Linode Interfaces can still exist. Linodes using legacy configuration interfaces can't be upgraded to use Linode Interfaces.\n- `legacy_config_default_but_linode_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use legacy configuration interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode Interfaces. This is the default setting for existing accounts.\n- `linode_default_but_legacy_config_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use Linode Interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode interfaces. This is the default setting for new accounts.\n- `linode_only`. All new Linodes need to use Linode Interfaces. Prevously created Linodes with legacy configuration profile interfaces can still exist if they were created under a previous setting. Linodes using legacy configuration interfaces can be upgraded to Linode Interfaces.", + "enum": [ + "legacy_config_only", + "legacy_config_default_but_linode_allowed", + "linode_default_but_legacy_config_allowed", + "linode_only" + ], + "example": "linode_only", + "type": "string", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 6 + }, "longview_subscription": { "description": "__Read-only__ The Longview Pro tier you are currently subscribed to. The value must be a [Longview subscription](https://techdocs.akamai.com/linode-api/reference/get-longview-subscriptions) ID or `null` for Longview Free.", "example": "longview-3", @@ -1607,6 +1622,9 @@ "image_delete", "image_update", "image_upload", + "interface_create", + "interface_delete", + "interface_update", "ipaddress_update", "lassie_reboot", "lish_boot", @@ -4353,6 +4371,9 @@ "image_delete", "image_update", "image_upload", + "interface_create", + "interface_delete", + "interface_update", "ipaddress_update", "lassie_reboot", "lish_boot", @@ -6590,7 +6611,7 @@ "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, "title": "Akamai: Linode API", - "version": "4.198.0" + "version": "4.199.0" }, "openapi": "3.0.1", "paths": { @@ -11146,6 +11167,9 @@ "image_delete", "image_update", "image_upload", + "interface_create", + "interface_delete", + "interface_update", "ipaddress_update", "lassie_reboot", "lish_boot", @@ -11662,6 +11686,9 @@ "image_delete", "image_update", "image_upload", + "interface_create", + "interface_delete", + "interface_update", "ipaddress_update", "lassie_reboot", "lish_boot", @@ -17716,7 +17743,7 @@ }, "/{apiVersion}/account/service-transfers": { "post": { - "description": "Creates a transfer request for the specified services. A request can contain any of the specified service types and any number of each service type. At this time, only Linodes can be transferred.\n\nWhen created successfully, a confirmation email is sent to the account that created this transfer containing a transfer token and instructions on completing the transfer.\n\nWhen a transfer is [accepted](https://techdocs.akamai.com/linode-api/reference/post-accept-service-transfer), the requested services are moved to the receiving account. Linode services will not experience interruptions due to the transfer process. Backups for Linodes are transferred as well.\n\nDNS records that are associated with requested services will not be transferred or updated. Please ensure that associated DNS records have been updated or communicated to the recipient prior to the transfer.\n\nA transfer can take up to three hours to complete once accepted. When a transfer is completed, billing for transferred services ends for the sending account and begins for the receiving account.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\nThere are several conditions that you need to meet to successfully create a transfer request:\n\n1. The account creating the transfer can't have a past due balance or active Terms of Service violation.\n\n1. The service needs to be owned by the account that is creating the transfer.\n\n1. The service can't be assigned to another Service Transfer that is pending or that's been accepted and is incomplete.\n\n1. Linodes can't:\n\n - be assigned to a NodeBalancer, Firewall, VLAN, VPC, or Managed Service.\n\n - have any attached Block Storage Volumes.\n\n - have any shared IP addresses.\n\n - have any assigned /56, /64, or /116 IPv6 ranges.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli service-transfers \\\n create \\\n --entities.linodes 111 \\\n --entities.linodes 222\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Creates a transfer request for the specified services. A request can contain any of the specified service types and any number of each service type. At this time, only Linodes can be transferred.\n\nWhen created successfully, a confirmation email is sent to the account that created this transfer containing a transfer token and instructions on completing the transfer.\n\nWhen a transfer is [accepted](https://techdocs.akamai.com/linode-api/reference/post-accept-service-transfer), the requested services are moved to the receiving account. Linode services will not experience interruptions due to the transfer process. Backups for Linodes are transferred as well.\n\nDNS records that are associated with requested services will not be transferred or updated. Please ensure that associated DNS records have been updated or communicated to the recipient prior to the transfer.\n\nA transfer can take up to three hours to complete once accepted. When a transfer is completed, billing for transferred services ends for the sending account and begins for the receiving account.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\nThere are several conditions that you need to meet to successfully create a transfer request:\n\n1. The account creating the transfer can't have a past due balance or active Terms of Service violation.\n\n1. The service needs to be owned by the account that is creating the transfer.\n\n1. The service can't be assigned to another Service Transfer that is pending or that's been accepted and is incomplete.\n\n1. Linodes can't:\n\n - be assigned to a NodeBalancer, Firewall, VLAN, VPC, or Managed Service.\n\n - have any attached Block Storage Volumes.\n\n - have any shared IP addresses.\n\n - have any assigned /32, /56, /64, or /116 IPv6 ranges.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli service-transfers \\\n create \\\n --entities.linodes 111 \\\n --entities.linodes 222\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-service-transfer" @@ -18664,7 +18691,7 @@ }, "/{apiVersion}/account/settings": { "get": { - "description": "Returns information related to your Account settings: Managed service subscription, Longview subscription, and network helper.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli account settings\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Returns information related to your Account settings: Managed service subscription, interface settings for new Linodes, Longview subscription, and Network Helper.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli account settings\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/get-account-settings" @@ -18684,6 +18711,21 @@ "type": "boolean", "x-linode-cli-display": 4 }, + "interfaces_for_new_linodes": { + "description": "__Beta__ Defines if new Linodes can use legacy configuration interfaces:\n- `legacy_config_only`. All new Linodes need to use legacy configuration interfaces. Prevously created Linodes with Linode Interfaces can still exist. Linodes using legacy configuration interfaces can't be upgraded to use Linode Interfaces.\n- `legacy_config_default_but_linode_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use legacy configuration interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode Interfaces. This is the default setting for existing accounts.\n- `linode_default_but_legacy_config_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use Linode Interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode interfaces. This is the default setting for new accounts.\n- `linode_only`. All new Linodes need to use Linode Interfaces. Prevously created Linodes with legacy configuration profile interfaces can still exist if they were created under a previous setting. Linodes using legacy configuration interfaces can be upgraded to Linode Interfaces.", + "enum": [ + "legacy_config_only", + "legacy_config_default_but_linode_allowed", + "linode_default_but_legacy_config_allowed", + "linode_only" + ], + "example": "linode_only", + "type": "string", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 6 + }, "longview_subscription": { "description": "__Read-only__ The Longview Pro tier you are currently subscribed to. The value must be a [Longview subscription](https://techdocs.akamai.com/linode-api/reference/get-longview-subscriptions) ID or `null` for Longview Free.", "example": "longview-3", @@ -18818,6 +18860,21 @@ "type": "boolean", "x-linode-cli-display": 4 }, + "interfaces_for_new_linodes": { + "description": "__Beta__ Defines if new Linodes can use legacy configuration interfaces:\n- `legacy_config_only`. All new Linodes need to use legacy configuration interfaces. Prevously created Linodes with Linode Interfaces can still exist. Linodes using legacy configuration interfaces can't be upgraded to use Linode Interfaces.\n- `legacy_config_default_but_linode_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use legacy configuration interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode Interfaces. This is the default setting for existing accounts.\n- `linode_default_but_legacy_config_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use Linode Interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode interfaces. This is the default setting for new accounts.\n- `linode_only`. All new Linodes need to use Linode Interfaces. Prevously created Linodes with legacy configuration profile interfaces can still exist if they were created under a previous setting. Linodes using legacy configuration interfaces can be upgraded to Linode Interfaces.", + "enum": [ + "legacy_config_only", + "legacy_config_default_but_linode_allowed", + "linode_default_but_legacy_config_allowed", + "linode_only" + ], + "example": "{{interfaces_for_new_linodes}}", + "type": "string", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 6 + }, "longview_subscription": { "description": "__Read-only__ The Longview Pro tier you are currently subscribed to. The value must be a [Longview subscription](https://techdocs.akamai.com/linode-api/reference/get-longview-subscriptions) ID or `null` for Longview Free.", "example": "{{longview_subscription}}", @@ -18879,6 +18936,21 @@ "type": "boolean", "x-linode-cli-display": 4 }, + "interfaces_for_new_linodes": { + "description": "__Beta__ Defines if new Linodes can use legacy configuration interfaces:\n- `legacy_config_only`. All new Linodes need to use legacy configuration interfaces. Prevously created Linodes with Linode Interfaces can still exist. Linodes using legacy configuration interfaces can't be upgraded to use Linode Interfaces.\n- `legacy_config_default_but_linode_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use legacy configuration interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode Interfaces. This is the default setting for existing accounts.\n- `linode_default_but_legacy_config_allowed`. New Linodes can use legacy configuration interfaces or Linode Interfaces, depending on the `interface_generation` setting specified when creating the Linode. By default, new Linodes use Linode Interfaces unless otherwise specified. Linodes that use legacy configuration interfaces can upgrade to Linode interfaces. This is the default setting for new accounts.\n- `linode_only`. All new Linodes need to use Linode Interfaces. Prevously created Linodes with legacy configuration profile interfaces can still exist if they were created under a previous setting. Linodes using legacy configuration interfaces can be upgraded to Linode Interfaces.", + "enum": [ + "legacy_config_only", + "legacy_config_default_but_linode_allowed", + "linode_default_but_legacy_config_allowed", + "linode_only" + ], + "example": "linode_only", + "type": "string", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 6 + }, "longview_subscription": { "description": "__Read-only__ The Longview Pro tier you are currently subscribed to. The value must be a [Longview subscription](https://techdocs.akamai.com/linode-api/reference/get-longview-subscriptions) ID or `null` for Longview Free.", "example": "longview-3", @@ -36239,7 +36311,7 @@ }, "/{apiVersion}/images/{imageId}/regions": { "post": { - "description": "__Limited availability__ Target an existing image and replicate it to another compute region.\n\n> \ud83d\udcd8\n>\n> This operation is in Limited Availability. Talk to your account team to get access.\n\n- This is only available in a `region` that supports Object Storage, which stores the replicated image. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to review a region's `capabilities`.\n\n- To replicate an image, it needs to have a `status` of `available`. Run the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation to view an image's `status`.\n\n- To also keep the target image in its original compute region, you need to include that `region` in the request's data. If you leave it out, the API removes the image from that region. Run the [Get an image](https://techdocs.akamai.com/linode-api/reference/get-image) operation to see the `regions` where an image currently exists.\n\n- You can't include an empty array to delete all images. You need to provide at least one compute `region` where the image is `available`. Use the [Delete an image](https://techdocs.akamai.com/linode-api/reference/delete-image) operation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli images replicate private/12345 \\\n --regions \"us-mia\" \\\n --regions \"us-east\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n images:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Target an existing image and replicate it to another compute region.\n\n> \ud83d\udcd8\n>\n> As part of our limited promotional period, image replicas are free of charge until November 1, 2025. After this date, replicas will be subject to our standard monthly rate of $0.10/GB. When replicas become billable, your monthly charge will be calculated using the value returned in `total_size`, divided by 100. [Learn more](https://www.linode.com/blog/compute/image-service-improvements-akamai-cdn/).\n\n- This is only available in a `region` that supports Object Storage, which stores the replicated image. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to review a region's `capabilities`.\n\n- To replicate an image, it needs to have a `status` of `available`. Run the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation to view an image's `status`.\n\n- To also keep the target image in its original compute region, you need to include that `region` in the request's data. If you leave it out, the API removes the image from that region. Run the [Get an image](https://techdocs.akamai.com/linode-api/reference/get-image) operation to see the `regions` where an image currently exists.\n\n- You can't include an empty array to delete all images. You need to provide at least one compute `region` where the image is `available`. Use the [Delete an image](https://techdocs.akamai.com/linode-api/reference/delete-image) operation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli images replicate private/12345 \\\n --regions \"us-mia\" \\\n --regions \"us-east\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n images:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-replicate-image" @@ -36579,7 +36651,6 @@ "Images" ], "x-akamai": { - "status": "LA", "tabs": [ { "syntax": "linode-cli images replicate private/12345 \\\n --regions \"us-mia\" \\\n --regions \"us-east\"", @@ -36637,7 +36708,7 @@ }, "/{apiVersion}/linode/instances": { "post": { - "description": "Creates a Linode Instance on your Account. In order for this request to complete successfully, your User must have the `add_linodes` grant. Creating a new Linode will incur a charge on your Account.\n\nLinodes can be created using one of the available Types. Run [List Linode types](https://techdocs.akamai.com/linode-api/reference/get-linode-types) to get more information about each Type's specs and cost.\n\nLinodes can be created in any one of our available Regions, which are accessible from the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation.\n\nIn an effort to fight spam, Linode restricts outbound connections on ports 25, 465, and 587 on all Linodes for new accounts created after November 5th, 2019. For more information, see our guide on [Running a Mail Server](https://www.linode.com/docs/guides/running-a-mail-server/).\n\n__Important__. You must be an unrestricted User in order to add or modify tags on Linodes.\n\nLinodes can be created in a number of ways:\n\n- Using a Linode Public Image distribution or a Private Image you created based on another Linode.\n\n - Run the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation with authentication to view all available Images.\n\n - The Linode will be `running` after it completes `provisioning`.\n - A default config with two Disks, one being a 512 swap disk, is created.\n - `swap_size` can be used to customize the swap disk size.\n - Requires a `root_pass` be supplied to use for the root User's Account.\n - It is recommended to supply SSH keys for the root User using the `authorized_keys` field.\n - You may also supply a list of usernames via the `authorized_users` field.\n - These users must have an SSH Key associated with your Profile first. See the [Add an SSH key](https://techdocs.akamai.com/linode-api/reference/post-add-ssh-key)) operation for more information.\n\n- Using cloud-init with [Metadata](https://www.linode.com/docs/products/compute/compute-instances/guides/metadata/).\n - Automate system configuration and software installation by providing a base-64 encoded [cloud-config](https://www.linode.com/docs/products/compute/compute-instances/guides/metadata-cloud-config/) file.\n - Requires a compatible Image. You can determine compatible Images by checking for `cloud-init` under `capabilities` when running [List images](https://techdocs.akamai.com/linode-api/reference/get-images).\n - Requires a compatible Region. You can determine compatible Regions by checking for `Metadata` under `capabilities` when running [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions).\n\n- Using a StackScript.\n\n - Run [List StackScripts](https://techdocs.akamai.com/linode-api/reference/get-stack-scripts) for a list of available StackScripts.\n - The Linode will be `running` after it completes `provisioning`.\n - Requires a compatible Image to be supplied.\n - Run [Get a StackScript](https://techdocs.akamai.com/linode-api/reference/get-stack-script) for compatible Images.\n - Requires a `root_pass` be supplied to use for the root User's Account.\n - It is recommended to supply SSH keys for the root User using the `authorized_keys` field.\n - You may also supply a list of usernames via the `authorized_users` field.\n - These users must have an SSH Key associated with your Profile first. See [Add an SSH key](https://techdocs.akamai.com/linode-api/reference/post-add-ssh-key) for more information.\n\n- Using one of your other Linode's backups.\n - You must create a Linode large enough to accommodate the Backup's size.\n - The Disks and Config will match that of the Linode that was backed up.\n - The `root_pass` will match that of the Linode that was backed up.\n\n- Attached to a private VLAN.\n - Review the `interfaces` property of the [Request Body Schema](https://techdocs.akamai.com/linode-api/reference/post-linode-instance) for details.\n - For more information, see our guide on [Getting Started with VLANs](https://www.linode.com/docs/products/networking/vlans/get-started/).\n\n- Create an empty Linode.\n - The Linode will remain `offline` and must be manually started.\n - Run [Boot a Linode](https://techdocs.akamai.com/linode-api/reference/post-boot-linode-instance).\n - Disks and Configs must be created manually.\n - This is only recommended for advanced use cases.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes create \\\n --label linode123 \\\n --root_pass aComplex@Password \\\n --booted true \\\n --stackscript_id 10079 \\\n --stackscript_data '{\"gh_username\": \"linode\"}' \\\n --region us-east \\\n --disk_encryption enabled\\\n --placement_group.id 528 \\\n --type g6-standard-2 \\\n --authorized_keys \"ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer\" \\\n --authorized_users \"myUser\" \\\n --authorized_users \"secondaryUser\" \\\n --metadata.user_data \"I2Nsb3VkLWNvbmZpZw==\" \\\n --firewall_id 9000\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Creates a Linode Instance on your Account. In order for this request to complete successfully, your User must have the `add_linodes` grant. Creating a new Linode will incur a charge on your Account.\n\nLinodes can be created using one of the available Types. Run [List Linode types](https://techdocs.akamai.com/linode-api/reference/get-linode-types) to get more information about each Type's specs and cost.\n\nLinodes can be created in any one of our available Regions, which are accessible from the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation.\n\nIn an effort to fight spam, Linode restricts outbound connections on ports 25, 465, and 587 on all Linodes for new accounts created after November 5th, 2019. For more information, see our guide on [Running a Mail Server](https://www.linode.com/docs/guides/running-a-mail-server/).\n\n__Important__. You must be an unrestricted User in order to add or modify tags on Linodes.\n\nLinodes can be created in a number of ways:\n\n- Using a Linode Public Image distribution or a Private Image you created based on another Linode.\n\n - Run the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation with authentication to view all available Images.\n\n - The Linode will be `running` after it completes `provisioning`.\n - A default config with two Disks, one being a 512 swap disk, is created.\n - `swap_size` can be used to customize the swap disk size.\n - Requires a `root_pass` be supplied to use for the root User's Account.\n - It is recommended to supply SSH keys for the root User using the `authorized_keys` field.\n - You may also supply a list of usernames via the `authorized_users` field.\n - These users must have an SSH Key associated with your Profile first. See the [Add an SSH key](https://techdocs.akamai.com/linode-api/reference/post-add-ssh-key)) operation for more information.\n\n- Using cloud-init with [Metadata](https://www.linode.com/docs/products/compute/compute-instances/guides/metadata/).\n - Automate system configuration and software installation by providing a base-64 encoded [cloud-config](https://www.linode.com/docs/products/compute/compute-instances/guides/metadata-cloud-config/) file.\n - Requires a compatible Image. You can determine compatible Images by checking for `cloud-init` under `capabilities` when running [List images](https://techdocs.akamai.com/linode-api/reference/get-images).\n - Requires a compatible Region. You can determine compatible Regions by checking for `Metadata` under `capabilities` when running [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions).\n\n- Using a StackScript.\n\n - Run [List StackScripts](https://techdocs.akamai.com/linode-api/reference/get-stack-scripts) for a list of available StackScripts.\n - The Linode will be `running` after it completes `provisioning`.\n - Requires a compatible Image to be supplied.\n - Run [Get a StackScript](https://techdocs.akamai.com/linode-api/reference/get-stack-script) for compatible Images.\n - Requires a `root_pass` be supplied to use for the root User's Account.\n - It is recommended to supply SSH keys for the root User using the `authorized_keys` field.\n - You may also supply a list of usernames via the `authorized_users` field.\n - These users must have an SSH Key associated with your Profile first. See [Add an SSH key](https://techdocs.akamai.com/linode-api/reference/post-add-ssh-key) for more information.\n\n- Using one of your other Linode's backups.\n - You must create a Linode large enough to accommodate the Backup's size.\n - The Disks and Config will match that of the Linode that was backed up.\n - The `root_pass` will match that of the Linode that was backed up.\n\n- Attached to a private VLAN.\n - Review the `interfaces` property of the [Request Body Schema](https://techdocs.akamai.com/linode-api/reference/post-linode-instance) for details.\n - For more information, see our guide on [Getting Started with VLANs](https://www.linode.com/docs/products/networking/vlans/get-started/).\n\n- Create an empty Linode.\n - The Linode will remain `offline` and must be manually started.\n - Run [Boot a Linode](https://techdocs.akamai.com/linode-api/reference/post-boot-linode-instance).\n - Disks and Configs must be created manually.\n - This is only recommended for advanced use cases.\n\nDepending on your [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings), you can choose between legacy configuration interfaces or Linode interfaces when creating a Linode. Only one type of interface is allowed per Linode. The `interface_generation` field lets you select one interface type for new Linodes when both legacy and Linode interfaces options are available on your account. If a Linode is configured with a Linode interface, legacy configuration interfaces can no longer be used on that Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes create \\\n --label linode123 \\\n --root_pass aComplex@Password \\\n --booted true \\\n --stackscript_id 10079 \\\n --stackscript_data '{\"gh_username\": \"linode\"}' \\\n --region us-east \\\n --disk_encryption enabled\\\n --placement_group.id 528 \\\n --type g6-standard-2 \\\n --authorized_keys \"ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer\" \\\n --authorized_users \"myUser\" \\\n --authorized_users \"secondaryUser\" \\\n --metadata.user_data \"I2Nsb3VkLWNvbmZpZw==\" \\\n --firewall_id 9000\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-linode-instance" @@ -36752,7 +36823,7 @@ "type": "boolean" }, "firewall_id": { - "description": "The `id` of the Firewall to attach this Linode to upon creation.", + "description": "The `id` of the Firewall to attach this Linode to upon creation. This `firewall_id` field is for Linodes using VLAN and legacy configuration interfaces only.", "type": "integer" }, "group": { @@ -36768,180 +36839,516 @@ }, "x-linode-filterable": true }, - "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", - "example": [ - { - "id": 101, - "ipam_address": null, - "ipv4": null, - "label": null, - "primary": false, - "purpose": "public", - "subnet_id": null, - "vpc_id": null - }, - { - "id": 102, - "ipam_address": "10.0.0.1/24", - "ipv4": { - "nat_1_1": null, - "vpc": "10.0.0.2" - }, - "label": "vlan-1", - "primary": false, - "purpose": "vlan", - "subnet_id": null, - "vpc_id": null - }, - { - "id": 103, - "ipam_address": null, - "ipv4": { - "nat_1_1": "203.0.113.2", - "vpc": "10.0.1.2" - }, - "label": null, - "primary": true, - "purpose": "vpc", - "subnet_id": 101, - "vpc_id": 111 - } + "interface_generation": { + "description": "__Beta__ Specifies the interface type for the Linode. The value can be either `legacy_config` or `linode`. The default value is determined by the `interfaces_for_new_linodes` setting in the [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings). If the `interface_generation` option is set to `linode`, legacy configuration interfaces can no longer be used on the Linode.\n- If `interfaces_for_new_linodes` is set to `linode_only`, set `interface_generation` to `linode` or omit it for Linode interfaces.\n- If `interfaces_for_new_linodes` is set to `legacy_config_only`, set `interface_generation` to `legacy_config` or omit it for legacy configuration interfaces.\n- If `interfaces_for_new_linodes` is set to `linode_default_but_legacy_config_allowed`, set `interface_generation` to `linode` or omit it for Linode interfaces, and to `legacy_config` if the Linode uses legacy configuration interfaces.\n- If `interfaces_for_new_linodes` is set to `legacy_config_default_but_linode_allowed`, set `interface_generation` to `legacy_config` or omit it for legacy configuration interfaces, and to `linode` if the Linode uses Linode interfaces.", + "enum": [ + "legacy_config", + "linode" ], + "nullable": true, + "type": "string", + "x-akamai": { + "status": "BETA" + } + }, + "interfaces": { + "default": [], + "description": "Interfaces for the Linode. This can be a Linode interface or legacy configuration interface.", "items": { - "additionalProperties": false, - "description": "The network interface to apply to this Linode's configuration profile.", - "properties": { - "active": { - "description": "__Read-only__ Returns `true` if the interface is in use, meaning that the Linode has been booted using the configuration profile to which the interface belongs.", - "example": true, - "readOnly": true, - "type": "boolean" - }, - "id": { - "description": "__Read-only__ The unique ID representing this interface.", - "example": 101, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 + "oneOf": [ + { + "description": "Defines Linode interfaces. You can configure interfaces for one of the following types: `vpc`, `public`, or `vlan`. Any other type must either be omitted or set to `null`.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Defines a Linode public interface. Any other type must either be omitted or set to `null`.", + "properties": { + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface serves as the default route when multiple interfaces are eligible for this role. A public interface can have both an IPv4 `default_route` and an IPv6 `default_route`, provided it has at least one IP address of the corresponding type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "If set to `true`, the interface is used for the IPv4 `default_route`. Only one interface per Linode can be set as the IPv4 default route.", + "example": true, + "nullable": true, + "type": "boolean" + }, + "ipv6": { + "additionalProperties": false, + "description": "If set to `true`, the interface is used for the IPv6 `default_route`. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "firewall_id": { + "additionalProperties": false, + "description": "The enabled firewall to secure a VPC or public interface. Not allowed for VLAN interfaces. If a `firewall_id` is not provided for a VPC or a public interface, then its [default interface firewall](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-firewalls) is used. If a default firewall is not available, and `null` is not specified, the request fails. Setting the `firewall_id` as `null` indicates that no firewall device will be attached to the interface.", + "example": [ + 123, + null + ], + "nullable": true, + "type": "integer" + }, + "public": { + "additionalProperties": false, + "description": "Public interface settings. A Linode can have only one public interface. A public interface can have both IPv4 and IPv6 configurations.", + "nullable": true, + "properties": { + "ipv4": { + "description": "IPv4 address settings for this public interface. If omitted, a public IPv4 address is automatically allocated.", + "properties": { + "addresses": { + "description": "List of IPv4 addresses to assign to this interface. Setting any to `auto` allocates a public IPv4 address. To create a public interface that uses IPv6 and no IPv4, set the IPv4 address as an empty list `[]`.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "anyOf": [ + { + "example": "192.0.2.141", + "format": "ip", + "minLength": 1, + "title": "User assigned IPv4", + "type": "string" + }, + { + "enum": [ + "auto" + ], + "title": "Automatically assigned IPv4", + "type": "string" + }, + { + "example": [], + "title": "No IPv4 [empty list]", + "type": "string" + } + ], + "default": "auto", + "description": "The interface's public IPv4 address. You can specify which public IPv4 address to configure for the interface. Setting this to `auto` automatically allocates a public address. To create a public interface that uses IPv6 and no IPv4, set the IPv4 address as an empty list `[]`. If the address is a reserved or automatically assigned, it needs to be reserved or already assigned to a single Linode, and it can\u2019t be assigned to any other interface.", + "type": "string" + }, + "primary": { + "default": false, + "description": "The IPv4 primary address configures the source address for routes within the Linode on the corresponding network interface.\n- Don't set this to `false` if there's only one address in the `addresses` array.\n- If more than one address is provided, primary can be set to `true` for one address.\n- If only one address is present in the `addresses` array, this address is automatically set as the primary address.", + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ipv6": { + "description": "IPv6 address settings for the public interface.", + "properties": { + "ranges": { + "additionalProperties": false, + "description": "IPv6 address ranges to assign to this interface. If omitted, no ranges are assigned.", + "items": { + "properties": { + "range": { + "default": null, + "description": "Your assigned IPv6 range in CIDR notation (`2001:0db8::1/64`) or prefix (`/64`).\n- The prefix of `/64` or `/56` block of IPv6 addresses.\n- If provided in CIDR notation, the prefix must be within the assigned ranges for the Linode.", + "example": [ + "2001:0a0a::1/64", + "/64" + ], + "type": "string" + } + }, + "required": [ + "range" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + } + }, + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-public.yaml" + } + }, + { + "additionalProperties": false, + "description": "Defines a Linode VLAN interface. Any other type must either be omitted or set to `null`.", + "properties": { + "vlan": { + "additionalProperties": false, + "description": "VLAN interface settings. A Linode can have up to three VLAN interfaces, with a unique `vlan_label` for each.", + "nullable": true, + "properties": { + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "type": "string", + "x-linode-cli-display": 4 + }, + "vlan_label": { + "description": "The VLAN's unique label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + } + }, + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-vlan.yaml" + } + }, + { + "additionalProperties": false, + "description": "Defines a Linode VPC interface. Any other type must either be omitted or set to `null`.", + "properties": { + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as the default route when multiple interfaces are eligible for this role. A VPC interface can have an IPv4 `default_route`.", + "properties": { + "ipv4": { + "description": "If set to `true`, the interface is used for the IPv4 `default_route`. Only one interface per Linode can be set as the IPv4 default route.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "firewall_id": { + "additionalProperties": false, + "description": "The enabled firewall to secure a VPC or public interface. Not allowed for VLAN interfaces. If a `firewall_id` is not provided for a VPC or a public interface, then its default interface firewall is used. If a default firewall is not available, and `null` is not specified, the request fails. Setting the `firewall_id` as `null` indicates that no firewall device will be attached to the interface.", + "example": [ + 123, + null + ], + "nullable": true, + "type": "integer" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface settings. A Linode can have one VPC interface. The maximum number of interfaces allowed on a Linode is three.", + "nullable": true, + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "Interfaces can be configured with IPv4 addresses or ranges.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "properties": { + "address": { + "anyOf": [ + { + "example": "10.0.0.1", + "format": "ip", + "minLength": 1, + "title": "User assigned IPv4 from the VPC subnet", + "type": "string" + }, + { + "enum": [ + "auto" + ], + "title": "Automatically assigned IPv4", + "type": "string" + } + ], + "default": "auto", + "description": "Specifies which IPv4 address to use in the VPC subnet. You can specify which VPC Ipv4 address in the subnet to configure for the interface. You can't use an IPv4 address taken from another Linode or interface, or the first two or last two addresses in the VPC subnet. When `address` is set to `auto`, an IP address from the subnet is automatically assigned.", + "type": "string" + }, + "nat_1_1_address": { + "anyOf": [ + { + "example": "203.0.113.2", + "format": "ip", + "minLength": 1, + "title": "User assigned public IPv4", + "type": "string" + }, + { + "enum": [ + "auto" + ], + "title": "Automatically assigned public IPv4", + "type": "string" + } + ], + "default": null, + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.\n- You can set this to a specific public IPv4 address that's available on the Linode.\n- If set to `auto`, a public IPv4 address is automatically selected.\n- If a public IPv4 address or `auto` is specified, primary must be set to `true`.\n- The address can't be used on another Linode.\n- If the address is a reserved or an automatically assigned IP, the IP must be reserved or already assigned to a single Linode, and not assigned to an interface.\n- If this property is omitted or set to `null`, no 1:1 NAT configuration will be applied to the VPC interface.", + "nullable": true, + "type": "string" + }, + "primary": { + "default": false, + "description": "The IPv4 primary address is used to configure the source address for routes within the Linode on the corresponding network interface.\nShould not be set to `false` if there is only one address present in the `addresses` array.\nIf more than one address is provided, primary must be set to `true` for one address.\nIf only one address is present in the `addresses` array, this address is automatically set as the primary address.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "default": null, + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).\n- When only the prefix is provided, then an available range of that size within the VPC's subnet is automatically selected.\n- If specified as CIDR notation, it must belong to the VPC subnet. All addresses in the range must not be taken by any other Linode or interfaces in the VPC subnet and must not include any of the first two or last two addresses of the VPC subnet.", + "example": [ + "192.168.100.100/28", + "192.168.100.110/28", + "/28", + "10.11.12.0/24", + "auto" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "address" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "subnet_id": { + "description": "The VPC subnet identifier for this interface. Your subnet\u2019s VPC must be in the same data center (region) as the Linode.", + "example": 321, + "type": "integer" + } + }, + "required": [ + "subnet_id" + ], + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-vpc.yaml" + } + } + ], + "title": "Linode interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface.yaml" + } }, - "ip_ranges": { - "description": "IPv4 CIDR VPC subnet ranges that are routed to this interface.\n\nWhen included in a request:\n\n- A range can't include any addresses that are assigned to an active Linode or another VPC subnet.\n\n- When updating, you need to include any existing ranges to maintain them. If a range is left out, it will be removed.\n\n- Submit this as an empty array removes all existing values.\n\n- Omit this object to leave existing values as is.\n\n<>\n\n> \ud83d\udcd8\n>\n> This is only supported for interfaces with a `purpose` of `vpc`.", + { + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ - "10.0.0.64/26", - "fd04:495a:691c:971c::1:0/112" + { + "id": 101, + "ipam_address": null, + "ipv4": null, + "label": null, + "primary": false, + "purpose": "public", + "subnet_id": null, + "vpc_id": null + }, + { + "id": 102, + "ipam_address": "10.0.0.1/24", + "ipv4": { + "nat_1_1": null, + "vpc": "10.0.0.2" + }, + "label": "vlan-1", + "primary": false, + "purpose": "vlan", + "subnet_id": null, + "vpc_id": null + }, + { + "id": 103, + "ipam_address": null, + "ipv4": { + "nat_1_1": "203.0.113.2", + "vpc": "10.0.1.2" + }, + "label": null, + "primary": true, + "purpose": "vpc", + "subnet_id": 101, + "vpc_id": 111 + } ], "items": { - "format": "ip", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "ipam_address": { - "description": "This interface's private IP address in classless inter-domain routing (CIDR) notation.\n\nFor interfaces with a `purpose` of `public`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.\n\nFor interfaces with a `purpose` of `vlan`:\n\n- To avoid conflicting addresses, make sure this value is unique for each `vlan` interface.\n\n- This should be unique among devices attached to the VLAN to avoid conflict.\n\n- If Network Helper is enabled, the Linode's interface will be automatically configured to use this address after the Linode is rebooted. If Network Helper is disabled, enable the address using [manual static IP configuration](https://www.linode.com/docs/guides/manual-network-configuration/).\n\nFor interfaces with a `purpose` of `vpc`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.", - "example": "10.0.0.1/24", - "format": "ip/netmask", - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "ipv4": { - "additionalProperties": false, - "description": "IPv4 addresses configured for this interface. This only applies to interfaces with a `purpose` of `vpc`. Returned as `null` if no `vpc` interface is assigned.", - "properties": { - "nat_1_1": { - "anyOf": [ - { + "additionalProperties": false, + "description": "The network interface to apply to this Linode's configuration profile.", + "properties": { + "active": { + "description": "__Read-only__ Returns `true` if the interface is in use, meaning that the Linode has been booted using the configuration profile to which the interface belongs.", + "example": true, + "readOnly": true, + "type": "boolean" + }, + "id": { + "description": "__Read-only__ The unique ID representing this interface.", + "example": 101, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "ip_ranges": { + "description": "IPv4 CIDR VPC subnet ranges that are routed to this interface.\n\nWhen included in a request:\n\n- A range can't include any addresses that are assigned to an active Linode or another VPC subnet.\n\n- When updating, you need to include any existing ranges to maintain them. If a range is left out, it will be removed.\n\n- Submit this as an empty array removes all existing values.\n\n- Omit this object to leave existing values as is.\n\n<>\n\n> \ud83d\udcd8\n>\n> This is only supported for interfaces with a `purpose` of `vpc`.", + "example": [ + "10.0.0.64/26", + "fd04:495a:691c:971c::1:0/112" + ], + "items": { "format": "ip", - "minLength": 1, - "title": "An available public IPv4 address", "type": "string" }, - { - "enum": [ - "any" - ], - "title": "The assigned public IPv4 address", - "type": "string" - } - ], - "description": "The 1:1 NAT IPv4 address, used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.\n\n- Only supported for interfaces with a `purpose` of `vpc`.\n\n- Returned as `null` if no 1:1 NAT is set for a `vpc` type interface.\n\n- Returned as an empty string (`\"\"`) for non-`vpc` type interfaces.\n\nWhen included in a request:\n\n- You can set this to a specific, public IPv4 address that's available on the Linode. You can also use the `any` keyword to enable the Linode's assigned public IPv4 address.\n\n- A specified address can't be shared with another Linode.\n\n- Omit this object or include it and set it to `null` or an empty string (`\"\"`) to block creation of a 1:1 NAT.\n\n<>\n\n> \ud83d\udcd8\n>\n> You can't set this to a specific IPv4 address when creating a new Linode. During the creation process, the network automatically establishes a public IPv4 address for the Linode. Since this address doesn't exist yet, you can't include a custom IPv4 address to change it. After your Linode is created, you can [update your configuration profile interface](https://www.linode.com/docs/api/linode-instances/#configuration-profile-interface-update) to change the `nat_1_1` address.", - "example": "203.0.113.2", - "nullable": true, - "type": "string" + "nullable": true, + "type": "array" + }, + "ipam_address": { + "description": "This interface's private IP address in classless inter-domain routing (CIDR) notation.\n\nFor interfaces with a `purpose` of `public`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.\n\nFor interfaces with a `purpose` of `vlan`:\n\n- To avoid conflicting addresses, make sure this value is unique for each `vlan` interface.\n\n- This should be unique among devices attached to the VLAN to avoid conflict.\n\n- If Network Helper is enabled, the Linode's interface will be automatically configured to use this address after the Linode is rebooted. If Network Helper is disabled, enable the address using [manual static IP configuration](https://www.linode.com/docs/guides/manual-network-configuration/).\n\nFor interfaces with a `purpose` of `vpc`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "ipv4": { + "additionalProperties": false, + "description": "IPv4 addresses configured for this interface. This only applies to interfaces with a `purpose` of `vpc`. Returned as `null` if no `vpc` interface is assigned.", + "properties": { + "nat_1_1": { + "anyOf": [ + { + "format": "ip", + "minLength": 1, + "title": "An available public IPv4 address", + "type": "string" + }, + { + "enum": [ + "any" + ], + "title": "The assigned public IPv4 address", + "type": "string" + } + ], + "description": "The 1:1 NAT IPv4 address, used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.\n\n- Only supported for interfaces with a `purpose` of `vpc`.\n\n- Returned as `null` if no 1:1 NAT is set for a `vpc` type interface.\n\n- Returned as an empty string (`\"\"`) for non-`vpc` type interfaces.\n\nWhen included in a request:\n\n- You can set this to a specific, public IPv4 address that's available on the Linode. You can also use the `any` keyword to enable the Linode's assigned public IPv4 address.\n\n- A specified address can't be shared with another Linode.\n\n- Omit this object or include it and set it to `null` or an empty string (`\"\"`) to block creation of a 1:1 NAT.\n\n<>\n\n> \ud83d\udcd8\n>\n> You can't set this to a specific IPv4 address when creating a new Linode. During the creation process, the network automatically establishes a public IPv4 address for the Linode. Since this address doesn't exist yet, you can't include a custom IPv4 address to change it. After your Linode is created, you can [update your configuration profile interface](https://www.linode.com/docs/api/linode-instances/#configuration-profile-interface-update) to change the `nat_1_1` address.", + "example": "203.0.113.2", + "nullable": true, + "type": "string" + }, + "vpc": { + "description": "The VPC subnet IPv4 address for this interface.\n\n- This only applies to interfaces with a `purpose` of `vpc`.\n\n- Returned as an empty string (`\"\"`) for non-`vpc` type interfaces.\n\nWhen included in a request:\n\n- The `vpc` can't be assigned to an existing Linode as an address or in a range.\n\n- The target address can't be the first two or last two addresses in the subnet IPv4 range.\n\n- If omitted, a valid address within the Subnet IPv4 range is automatically assigned.", + "example": "10.0.0.2", + "format": "ip", + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "label": { + "description": "__Filterable__ The name of this interface.\n\nFor interfaces with a `purpose` of `vlan`:\n\n- Required.\n\n- This needs to be unique among a Linode's interfaces. A Linode can't be attached to the same VLAN multiple times.\n\n- This can only contain ASCII letters, numbers, and dashes (`-`). You can't use two consecutive dashes (`--`).\n\n- If the VLAN label is new, a VLAN is created. Up to 10 VLANs can be created in each data center `region`. To view your active VLANs, run the [List VLANs](https://techdocs.akamai.com/linode-api/reference/get-vlans) operation.\n\nFor interfaces with a `purpose` of `public`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.\n\nFor interfaces with a `purpose` of `vpc`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.", + "example": "example-interface", + "maxLength": 64, + "minLength": 1, + "nullable": true, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "primary": { + "description": "The default route to the Linode. Each Linode can have one interface set as its `primary`. If you haven't specifically set a `primary`, the first non-`vlan` type interface is automatically treated as the primary.\n\n> \ud83d\udcd8\n>\n> This needs to be set to `false` for any interface that uses `vlan` as its `purpose`.", + "example": true, + "type": "boolean" + }, + "purpose": { + "description": "The type of interface. This can be `public`, `vlan`, or `vpc`.\n\nFor interfaces with a `purpose` of `public`:\n\n- You can only define one `public` interface per Linode.\n\n- The Linode's default public IPv4 address is assigned to the `public` interface.\n\n- A Linode needs a `public` interface in the first or `eth0` position to be reachable via the public internet, after it boots. If no `public` interface is configured, you can only access the Linode through [LISH](https://www.linode.com/docs/products/compute/compute-instances/guides/lish/), or through another Linode that's connected to the same VLAN or VPC.\n\nFor interfaces with a `purpose` of `vlan`:\n\n- Configuring this `purpose` of interface attaches a Linode to the VLAN with the specified `label`.\n\n- If an `ipam_address` is configured, the Linode uses this address.\n\nFor interfaces with a `purpose` of `vpc`:\n\n- Configuring this `purpose` of interface attaches a Linode to an existing VPC subnet with the specified `subnet_id`.\n\n- When the interface is activated, the Linode is configured to use an IP address from the range in the assigned VPC subnet. See `ipv4.vpc` for more information.", + "enum": [ + "public", + "vlan", + "vpc" + ], + "example": "vlan", + "type": "string", + "x-linode-cli-display": 3 + }, + "subnet_id": { + "description": "The `id` of the VPC subnet for this interface. Use this value in a request to assign a Linode to a VPC subnet.\n\n- Required for `vpc` type interfaces.\n\n- Returned as `null` for non-`vpc` type interfaces.\n\n- Once you've assigned a VPC subnet to an interface, you can't update it.\n\n- You need to reboot a Linode using the interface's configuration profile to assign the Linode to a VPC subnet.", + "example": 101, + "nullable": true, + "type": "integer" + }, + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface. Returned as `null` for non-`vpc` type interfaces.", + "example": 111, + "nullable": true, + "readOnly": true, + "type": "integer" + } }, - "vpc": { - "description": "The VPC subnet IPv4 address for this interface.\n\n- This only applies to interfaces with a `purpose` of `vpc`.\n\n- Returned as an empty string (`\"\"`) for non-`vpc` type interfaces.\n\nWhen included in a request:\n\n- The `vpc` can't be assigned to an existing Linode as an address or in a range.\n\n- The target address can't be the first two or last two addresses in the subnet IPv4 range.\n\n- If omitted, a valid address within the Subnet IPv4 range is automatically assigned.", - "example": "10.0.0.2", - "format": "ip", - "nullable": true, - "type": "string" + "required": [ + "purpose" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-config-interface.yaml" } }, - "type": "object" - }, - "label": { - "description": "__Filterable__ The name of this interface.\n\nFor interfaces with a `purpose` of `vlan`:\n\n- Required.\n\n- This needs to be unique among a Linode's interfaces. A Linode can't be attached to the same VLAN multiple times.\n\n- This can only contain ASCII letters, numbers, and dashes (`-`). You can't use two consecutive dashes (`--`).\n\n- If the VLAN label is new, a VLAN is created. Up to 10 VLANs can be created in each data center `region`. To view your active VLANs, run the [List VLANs](https://techdocs.akamai.com/linode-api/reference/get-vlans) operation.\n\nFor interfaces with a `purpose` of `public`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.\n\nFor interfaces with a `purpose` of `vpc`:\n\n- If you include this in a request, set it to an empty string (`\"\"`) or `null`.\n\n- Returned as `null` in a response.", - "example": "example-interface", - "maxLength": 64, - "minLength": 1, - "nullable": true, - "pattern": "[a-zA-Z0-9-]+", - "type": "string", + "maxItems": 3, + "minItems": 1, + "title": "Legacy configuration interface", + "type": "array", + "uniqueItems": true, "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 2, - "x-linode-filterable": true - }, - "primary": { - "description": "The default route to the Linode. Each Linode can have one interface set as its `primary`. If you haven't specifically set a `primary`, the first non-`vlan` type interface is automatically treated as the primary.\n\n> \ud83d\udcd8\n>\n> This needs to be set to `false` for any interface that uses `vlan` as its `purpose`.", - "example": true, - "type": "boolean" - }, - "purpose": { - "description": "The type of interface. This can be `public`, `vlan`, or `vpc`.\n\nFor interfaces with a `purpose` of `public`:\n\n- You can only define one `public` interface per Linode.\n\n- The Linode's default public IPv4 address is assigned to the `public` interface.\n\n- A Linode needs a `public` interface in the first or `eth0` position to be reachable via the public internet, after it boots. If no `public` interface is configured, you can only access the Linode through [LISH](https://www.linode.com/docs/products/compute/compute-instances/guides/lish/), or through another Linode that's connected to the same VLAN or VPC.\n\nFor interfaces with a `purpose` of `vlan`:\n\n- Configuring this `purpose` of interface attaches a Linode to the VLAN with the specified `label`.\n\n- If an `ipam_address` is configured, the Linode uses this address.\n\nFor interfaces with a `purpose` of `vpc`:\n\n- Configuring this `purpose` of interface attaches a Linode to an existing VPC subnet with the specified `subnet_id`.\n\n- When the interface is activated, the Linode is configured to use an IP address from the range in the assigned VPC subnet. See `ipv4.vpc` for more information.", - "enum": [ - "public", - "vlan", - "vpc" - ], - "example": "vlan", - "type": "string", - "x-linode-cli-display": 3 - }, - "subnet_id": { - "description": "The `id` of the VPC subnet for this interface. Use this value in a request to assign a Linode to a VPC subnet.\n\n- Required for `vpc` type interfaces.\n\n- Returned as `null` for non-`vpc` type interfaces.\n\n- Once you've assigned a VPC subnet to an interface, you can't update it.\n\n- You need to reboot a Linode using the interface's configuration profile to assign the Linode to a VPC subnet.", - "example": 101, - "nullable": true, - "type": "integer" - }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface. Returned as `null` for non-`vpc` type interfaces.", - "example": 111, - "nullable": true, - "readOnly": true, - "type": "integer" + "file-path": "schemas/linode-config-interfaces.yaml" + } } - }, - "required": [ - "purpose" ], - "type": "object", - "x-akamai": { - "file-path": "schemas/linode-config-interface.yaml" - } + "type": "object" }, - "maxItems": 3, - "minItems": 1, - "type": "array", - "uniqueItems": true, - "x-akamai": { - "file-path": "schemas/linode-config-interfaces.yaml" - } + "type": "array" }, "label": { "description": "__Filterable__ Provides a name for the Linode. If not provided, the API generates one for it.\n\nLinode labels have the following constraints:\n\n- It needs to begin and end with an alphanumeric character.\n- It can only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n- Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.", @@ -36958,6 +37365,11 @@ "x-linode-cli-display": 2, "x-linode-filterable": true }, + "network_helper": { + "description": "Enables the Network Helper feature. The default value is determined by the `network_helper` setting in the [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings). This `network_helper` field is for Linodes using Linode interfaces only.", + "nullable": true, + "type": "boolean" + }, "placement_group": { "additionalProperties": false, "description": "Include this to assign this Linode to an existing [placement group](https://www.linode.com/docs/products/compute/compute-instances/guides/placement-groups/). These constraints apply:\n\n- The target placement group needs to be in the same `region` set for this Linode.\n- The placement group needs to have capacity. Run the [Get a region](https://techdocs.akamai.com/linode-api/reference/get-region) operation and store the `maximum_linodes_per_pg` value to know the Linode limit per placement group. You can then run the [Get a placement group](https://techdocs.akamai.com/linode-api/reference/get-placement-group) operation to review the Linodes in that group.", @@ -37243,6 +37655,22 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Filterable__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 9, + "x-linode-filterable": true + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -37897,6 +38325,18 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Beta__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "status": "BETA" + } + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -37975,8 +38415,9 @@ "migrating_to": { "description": "__Read-only__ The unique identifier for the [placement group](https://techdocs.akamai.com/cloud-computing/docs/work-with-placement-groups) to which this Linode is being migrated. Displayed as `null` if the Linode is not being migrated to a new placement group.", "example": 2468, + "nullable": true, "readOnly": true, - "type": "string" + "type": "integer" }, "placement_group_policy": { "description": "How requests to add future compute instances to your placement group are handled, and whether it remains compliant:\n\n- `strict`. Don't assign a new compute instance if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. Use this to ensure the placement group stays compliant (`is_compliant: true`).\n- `flexible`. Assign a new compute instance, even if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. This makes the group non-compliant (`is_compliant: false`). You need to wait for Akamai to move the offending compute instance to make it compliant again, once the necessary capacity is available in the region. Offers flexibility to add future compute instances if compliance isn't an immediate concern.\n\n<>\n\n> \ud83d\udcd8\n>\n> In rare cases, non-compliance can occur with a `strict` placement group if Akamai needs to failover or migrate your compute instances for maintenance. Fixing non-compliance for a `strict` placement group is prioritized over a `flexible` group.", @@ -38479,6 +38920,18 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Beta__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "status": "BETA" + } + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -38557,8 +39010,9 @@ "migrating_to": { "description": "__Read-only__ The unique identifier for the [placement group](https://techdocs.akamai.com/cloud-computing/docs/work-with-placement-groups) to which this Linode is being migrated. Displayed as `null` if the Linode is not being migrated to a new placement group.", "example": 2468, + "nullable": true, "readOnly": true, - "type": "string" + "type": "integer" }, "placement_group_policy": { "description": "How requests to add future compute instances to your placement group are handled, and whether it remains compliant:\n\n- `strict`. Don't assign a new compute instance if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. Use this to ensure the placement group stays compliant (`is_compliant: true`).\n- `flexible`. Assign a new compute instance, even if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. This makes the group non-compliant (`is_compliant: false`). You need to wait for Akamai to move the offending compute instance to make it compliant again, once the necessary capacity is available in the region. Offers flexibility to add future compute instances if compliance isn't an immediate concern.\n\n<>\n\n> \ud83d\udcd8\n>\n> In rare cases, non-compliance can occur with a `strict` placement group if Akamai needs to failover or migrate your compute instances for maintenance. Fixing non-compliance for a `strict` placement group is prioritized over a `flexible` group.", @@ -39063,6 +39517,22 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Filterable__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "{{interface_generation}}", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 9, + "x-linode-filterable": true + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -39506,6 +39976,22 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Filterable__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 9, + "x-linode-filterable": true + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -41574,7 +42060,7 @@ }, "/{apiVersion}/linode/instances/{linodeId}/boot": { "post": { - "description": "Boots a Linode you have permission to modify. If no parameters are given, a Config profile will be chosen for this boot based on the following criteria:\n\n- If there is only one Config profile for this Linode, it will be used.\n- If there is more than one Config profile, the last booted config will be used.\n- If there is more than one Config profile and none were the last to be booted (because the Linode was never booted or the last booted config was deleted) an error will be returned.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes boot 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Boots a Linode you have permission to modify.\n\nIf the Linode is using config profiles, and no parameters are given, a config profile is chosen for this boot based on the following criteria:\n- If there is only one config profile for this Linode, it will be used.\n- If there is more than one config profile, the last booted config will be used.\n- If there is more than one config profile and none were the last to be booted (because the Linode was never booted or the last booted config was deleted) an error will be returned.\n\nIf the Linode is using Linode interfaces, where `interface_generation` is set as `linode`, an error is returned if the Linode has to boot without any interface defined.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes boot 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-boot-linode-instance" @@ -41734,7 +42220,7 @@ }, "/{apiVersion}/linode/instances/{linodeId}/clone": { "post": { - "description": "You can clone your Linode's existing Disks or Configuration profiles to another Linode on your Account. In order for this request to complete successfully, your User must have the `add_linodes` grant. Cloning to a new Linode will incur a charge on your Account.\n\nIf cloning to an existing Linode, any actions currently running or queued must be completed first before you can clone to it.\n\nUp to five clone operations from any given source Linode can be run concurrently. If more concurrent clones are attempted, an HTTP 400 error will be returned by this operation.\n\nAny [tags](https://techdocs.akamai.com/linode-api/reference/get-tags) existing on the source Linode will be cloned to the target Linode.\n\nLinodes utilizing Metadata (`\"has_user_data\": true`) must be cloned to a new Linode with `metadata.user_data` included with the clone request.\n\n`vpc` details\n\n- If the Linode you are cloning has a `vpc` purpose Interface on its active Configuration Profile that includes a 1:1 NAT, the resulting clone is configured with an `any` 1:1 NAT.\n- See the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. If a VLAN is attached to your Linode and you attempt clone it to a non-NGN data center, the cloning will not initiate. If a Linode cannot be cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes clone 123 \\\n --linode_id 124 \\\n --region us-east \\\n --type g6-standard-2 \\\n --label cloned-linode \\\n --backups_enabled true \\\n --placement_group.id 528 \\\n --disks 25674 \\\n --configs 23456 \\\n --private_ip true \\\n --metadata.user_data I2Nsb3VkLWNvbmZpZw==\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "You can clone your Linode's existing disks, configuration profiles and interfaces to another Linode on your account. In order for this request to complete successfully, you need the `add_linodes` grant.\n\nFor Linodes using Linode interfaces, the clone needs to be located in a region that supports Linode interfaces (see [GET a region](https://techdocs.akamai.com/linode-api/reference/get-region)). The [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings) need to allow creation of Linodes with Linode interfaces.\n\nCloning to a new Linode incurs a charge on your account.\n\nIf cloning to an existing Linode, any actions currently running or queued must be completed first before you can clone to it.\n\nUp to five clone operations from any given source Linode can be run concurrently. If more concurrent clones are attempted, an HTTP 400 error will be returned by this operation.\n\nAny [tags](https://techdocs.akamai.com/linode-api/reference/get-tags) existing on the source Linode will be cloned to the target Linode.\n\nLinodes utilizing Metadata (`\"has_user_data\": true`) must be cloned to a new Linode with `metadata.user_data` included with the clone request.\n\n`vpc` details\n\n- If the Linode you're cloning has a `vpc` interface on its active legacy configuration profile that includes a 1:1 NAT, the resulting clone is configured with an `any` 1:1 NAT.\n- See the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. If a VLAN is attached to your Linode and you attempt clone it to a non-NGN data center, the cloning will not initiate. If a Linode cannot be cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes clone 123 \\\n --linode_id 124 \\\n --region us-east \\\n --type g6-standard-2 \\\n --label cloned-linode \\\n --backups_enabled true \\\n --placement_group.id 528 \\\n --disks 25674 \\\n --configs 23456 \\\n --private_ip true \\\n --metadata.user_data I2Nsb3VkLWNvbmZpZw==\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-clone-linode-instance" @@ -42056,6 +42542,22 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Filterable__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 9, + "x-linode-filterable": true + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -42401,7 +42903,7 @@ }, "/{apiVersion}/linode/instances/{linodeId}/configs": { "post": { - "description": "Adds a new configuration profile to a Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes config-create 7590910 \\\n --label \"My Config\" \\\n --devices.sda.disk_id 123456 \\\n --devices.sdb.disk_id 123457\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Adds a new configuration profile to a Linode.\n\n> \ud83d\udcd8\n>\n> This operation is for legacy configuration profiles only, and not [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes config-create 7590910 \\\n --label \"My Config\" \\\n --devices.sda.disk_id 123456 \\\n --devices.sdb.disk_id 123457\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-add-linode-config" @@ -42620,8 +43122,9 @@ "type": "boolean" }, "network": { - "description": "Set to `true` to automatically configure static networking.", + "description": "Set to `true` to automatically configure static networking. The `network` option applies only to legacy configuration profile interfaces and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).", "example": true, + "nullable": true, "type": "boolean" }, "updatedb_disabled": { @@ -42640,7 +43143,7 @@ "x-linode-cli-display": 1 }, "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -43100,8 +43603,9 @@ "type": "boolean" }, "network": { - "description": "Set to `true` to automatically configure static networking.", + "description": "Set to `true` to automatically configure static networking. The `network` option applies only to legacy configuration profile interfaces and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).", "example": true, + "nullable": true, "type": "boolean" }, "updatedb_disabled": { @@ -43120,7 +43624,7 @@ "x-linode-cli-display": 1 }, "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -43682,8 +44186,9 @@ "type": "boolean" }, "network": { - "description": "Set to `true` to automatically configure static networking.", + "description": "Set to `true` to automatically configure static networking. The `network` option applies only to legacy configuration profile interfaces and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).", "example": true, + "nullable": true, "type": "boolean" }, "updatedb_disabled": { @@ -43702,7 +44207,7 @@ "x-linode-cli-display": 1 }, "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -44256,8 +44761,9 @@ "type": "boolean" }, "network": { - "description": "Set to `true` to automatically configure static networking.", + "description": "Set to `true` to automatically configure static networking. The `network` option applies only to legacy configuration profile interfaces and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).", "example": true, + "nullable": true, "type": "boolean" }, "updatedb_disabled": { @@ -44276,7 +44782,7 @@ "x-linode-cli-display": 1 }, "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -44800,8 +45306,9 @@ "type": "boolean" }, "network": { - "description": "Set to `true` to automatically configure static networking.", + "description": "Set to `true` to automatically configure static networking. The `network` option applies only to legacy configuration profile interfaces and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).", "example": true, + "nullable": true, "type": "boolean" }, "updatedb_disabled": { @@ -44820,7 +45327,7 @@ "x-linode-cli-display": 1 }, "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -45270,8 +45777,9 @@ "type": "boolean" }, "network": { - "description": "Set to `true` to automatically configure static networking.", + "description": "Set to `true` to automatically configure static networking. The `network` option applies only to legacy configuration profile interfaces and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).", "example": true, + "nullable": true, "type": "boolean" }, "updatedb_disabled": { @@ -45290,7 +45798,7 @@ "x-linode-cli-display": 1 }, "interfaces": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -46118,7 +46626,7 @@ "content": { "application/json": { "schema": { - "description": "An array of Network interfaces to add to this Linode's Configuration Profile. At least one and up to three Interface objects can exist in this array. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: eth0\n- Second [1]: eth1\n- Third [2]: eth2\n\nWhen updating a Linode's interfaces, _each Interface must be redefined_. An empty `interfaces` array results in a default `public` type Interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", + "description": "`interfaces` is applicable only to legacy configuration profiles and does not apply to [Linode interfaces](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\nFrom one to three network interfaces to add to this Linode's configuration profile. The position in the array determines which of the Linode's network interfaces is configured:\n\n- First [0]: `eth0`\n- Second [1]: `eth1`\n- Third [2]: `eth2`\n\nWhen updating a Linode's legacy interfaces, _each interface must be redefined_. An empty `interfaces` array results in a default `public` type interface configuration only.\n\nIf no public Interface is configured, public IP addresses are still assigned to the Linode but will not be usable without manual configuration.\n\n> \ud83d\udcd8\n>\n> Changes to Linode Interface configurations can be enabled by rebooting the Linode.\n\n`vpc` details\n\nSee the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.", "example": [ { "id": 101, @@ -49109,7 +49617,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -49201,7 +49709,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -49435,71 +49943,417 @@ "x-linode-cli-action": "firewalls-list", "x-linode-grant": "read_only" }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } + "put": { + "description": "Replace the current list of assigned firewalls with a new list, or provide an empty list to remove all firewalls from this Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes firewalls-update 123 \\\n --firewall_ids '[1234]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/put-linode-firewalls" }, - { - "description": "ID of the Linode to access.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" + "operationId": "put-linode-firewalls", + "parameters": [ + { + "description": "The page of a collection to return.", + "example": "{{page}}", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "example": 6, + "minimum": 1, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-offset.yaml" + } }, - "x-akamai": { - "file-path": "parameters/linode-id-path-177e235a.yaml" + { + "description": "The number of items to return per page.", + "example": "{{page_size}}", + "in": "query", + "name": "page_size", + "schema": { + "default": 100, + "example": 50, + "maximum": 500, + "minimum": 25, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-size.yaml" + } } - } - ], - "x-akamai": { - "file-path": "paths/linode-firewalls.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/firewalls" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/firewalls/apply": { - "post": { - "description": "Reapply assigned firewalls to a Linode in case they were not applied successfully.\n\nThe `firewall_apply` event indicates if the firewalls were applied.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes apply-firewalls 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-apply-firewalls" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "Replace or remove firewalls IDs assigned to a Linode or NodeBalancer.", + "properties": { + "firewall_ids": { + "description": "A complete list of firewall IDs to assign to this Linode or NodeBalancer. This operation replaces any existing assignments. To remove all firewalls, pass an empty list, `[]`.", + "example": 1234, + "items": { + "type": "integer" + }, + "minItems": 0, + "type": "array" + } + }, + "required": [ + "firewall_ids" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-ids-request.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-firewalls-200.json" + } + } + }, + "required": true }, - "operationId": "post-apply-firewalls", "responses": { "200": { "content": { "application/json": { "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": false, + "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", + "properties": { + "created": { + "description": "__Filterable__, __Read-only__ When this Firewall was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true + }, + "id": { + "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true + }, + "label": { + "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", + "example": "firewall123", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "rules": { + "additionalProperties": false, + "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "properties": { + "fingerprint": { + "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", + "example": "997dd135", + "readOnly": true, + "type": "string" + }, + "inbound": { + "description": "The inbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "inbound_policy": { + "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "version": { + "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + }, + "status": { + "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "enum": [ + "enabled", + "disabled", + "deleted" + ], + "example": "enabled", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "tags": { + "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "updated": { + "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", + "example": "2018-01-02T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall.yaml" + } + }, + "type": "array" + }, + "page": { + "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, + "readOnly": true, + "type": "integer" + }, + "pages": { + "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, + "readOnly": true, + "type": "integer" + }, + "results": { + "description": "__Read-only__ The total number of results.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, "type": "object", "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" + "file-path": "schemas/added-get-linode-firewalls-200.yaml" } }, "x-example": { - "x-ref": "../examples/post-apply-firewalls-linode-instance-200.json" + "x-ref": "../examples/get-linode-firewalls-200.json" } } }, - "description": "Applying firewalls started." + "description": "Returns a paginated list of Firewalls assigned to this Linode." }, "default": { "content": { @@ -49548,14 +50402,14 @@ ] } ], - "summary": "Apply a Linode's firewalls", + "summary": "Update a Linode's firewalls", "tags": [ "Firewalls" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli linodes apply-firewalls 123", + "syntax": "linode-cli linodes firewalls-update 123 \\\n --firewall_ids '[1234]'", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -49565,7 +50419,9 @@ "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] - } + }, + "x-linode-cli-action": "firewalls-update", + "x-linode-grant": "read_write" }, "parameters": [ { @@ -49596,177 +50452,42 @@ "type": "integer" }, "x-akamai": { - "file-path": "parameters/linode-id-path-820d9f86.yaml" + "file-path": "parameters/linode-id-path-177e235a.yaml" } } ], "x-akamai": { - "file-path": "paths/apply-firewalls.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/firewalls/apply" + "file-path": "paths/linode-firewalls.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/firewalls" }, "x-linode-cli-command": "linodes" }, - "/{apiVersion}/linode/instances/{linodeId}/ips": { + "/{apiVersion}/linode/instances/{linodeId}/firewalls/apply": { "post": { - "description": "Allocates a public or private IPv4 address to a Linode. Public IP Addresses, after the one included with each Linode, incur an additional monthly charge. If you need an additional public IP Address you must request one - please [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket). You may not add more than one private IPv4 address to a single Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-add 123 \\\n --type ipv4 \\\n --public true\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Reapply assigned firewalls to a Linode in case they were not applied successfully.\n\nThe `firewall_apply` event indicates if the firewalls were applied.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes apply-firewalls 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-add-linode-ip" - }, - "operationId": "post-add-linode-ip", - "requestBody": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "public": { - "description": "Whether to create a public or private IPv4 address.", - "example": "{{public}}", - "type": "boolean" - }, - "type": { - "description": "The type of address you are allocating. Only IPv4 addresses may be allocated through this operation.", - "enum": [ - "ipv4" - ], - "example": "{{type}}", - "type": "string" - } - }, - "required": [ - "type", - "public" - ], - "type": "object", - "x-akamai": { - "file-path": "schemas/added-post-add-linode-ip.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-add-linode-ip.json" - } - } - }, - "description": "Information about the address you are creating.", - "required": true + "url": "https://techdocs.akamai.com/linode-api/reference/post-apply-firewalls" }, + "operationId": "post-apply-firewalls", "responses": { "200": { "content": { "application/json": { "schema": { - "additionalProperties": false, - "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", - "properties": { - "address": { - "description": "__Read-only__ The IP address.", - "example": "97.107.143.141", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "97.107.143.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 24, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "test.example.org", - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this IP address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.255.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "type": { - "description": "__Read-only__ The type of address this is.", - "enum": [ - "ipv4", - "ipv6", - "ipv6/pool", - "ipv6/range" - ], - "example": "ipv4", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 - }, - "vpc_nat_1_1": { - "additionalProperties": false, - "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", - "properties": { - "address": { - "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", - "example": "192.168.0.42", - "format": "ipv4", - "type": "string" - }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer" - }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface.", - "example": 111, - "nullable": false, - "readOnly": true, - "type": "integer" - } - }, - "type": "object" - } - }, + "description": "The API responds with an empty object.", + "maxProperties": 0, "type": "object", "x-akamai": { - "file-path": "schemas/ip-address.yaml" + "file-path": "schemas/added-empty-obj.yaml" } }, "x-example": { - "x-ref": "../examples/post-add-linode-ip-200.json" + "x-ref": "../examples/post-apply-firewalls-linode-instance-200.json" } } }, - "description": "IP address was successfully allocated." + "description": "Applying firewalls started." }, "default": { "content": { @@ -49815,14 +50536,14 @@ ] } ], - "summary": "Allocate an IPv4 address", + "summary": "Apply a Linode's firewalls", "tags": [ - "IP addresses" + "Firewalls" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli linodes ip-add 123 \\\n --type ipv4 \\\n --public true", + "syntax": "linode-cli linodes apply-firewalls 123", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -49832,804 +50553,942 @@ "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] + } + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } }, - "x-linode-cli-action": "ip-add", - "x-linode-grant": "read_write" + { + "description": "The ID of the Linode.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-820d9f86.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/apply-firewalls.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/firewalls/apply" }, - "get": { - "description": "Returns networking information for a single Linode.\n\n> \ud83d\udcd8\n>\n> If the target Linode has several configuration profiles that include a Virtual Private Cloud (VPC) interface, the response lists address information for all of the VPCs.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ips-list 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/interfaces": { + "post": { + "description": "__Beta__ Creates an interface for the Linode. This interface links to the Linode, rather than to a configuration profile. You can create, delete, or update interfaces when the Linode is either powered off or in the process of being created.\n\nFirewalls are applied to the Linode interface, not directly to the Linode itself. You can add, delete, or update these firewalls at any time.\n\nThis operation requires the `read_write` [grant](https://techdocs.akamai.com/linode-api/reference/get-user-grants) for the Linode.\n\nA successful request triggers an `interface_create` [event](https://techdocs.akamai.com/linode-api/reference/get-events).\n\nYou need to set one interface type: `vpc`, `public`, or `vlan`. Omit the others or set them to `null`.\n\nA Linode can have up to three interfaces:\n\n- Only one `public` interface is allowed on a Linode.\n\n- Multiple `vlan` interfaces are allowed, provided that they belong to distinct VLANs, which have unique `vlan_labels`.\n\n- One `vpc` interface is allowed.\n\nThe Linode must be located in a region that supports Linode interfaces. Run [Get a region](https://techdocs.akamai.com/linode-api/reference/get-region) to see if interfaces are supported in that region.\n\n\n<>\n\n---\n\n\n- __CLI: Public interface__.\n\n ```\n linode-cli linodes interface-add $linodeId \\\n --firewall_id 123 \\\n --default_route.ipv4 true \\\n --default_route.ipv6 true \\\n --public.ipv4.addresses '[{\"address\": \"192.0.2.141\", \"primary\": true}, {\"address\": \"auto\", \"primary\": false}]' \\\n --public.ipv6.ranges '[{\"range\": \"2001:0db8::1/64\"}, {\"range\": \"/64\"}]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __CLI: VLAN interface__.\n\n ```\n linode-cli linodes interface-add $linodeId \\\n --vlan.vlan_label my-vlan \\\n --vlan.ipam_address 192.168.2.2/24\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __CLI: VPC interface__.\n\n ```\n linode-cli linodes interface-add $linodeId \\\n --firewall_id 123 \\\n --default_route.ipv4 true \\\n --vpc.subnet_id 321 \\\n --vpc.ipv4.addresses '[{\"address\": \"10.0.0.1\", \"primary\": true, \"nat_1_1_address\": \"auto\"}, {\"address\": \"auto\", \"primary\": false, \"nat_1_1_address\": null}]' \\\n --vpc.ipv4.ranges '[{\"range\": \"/28\"}, {\"range\": \"10.11.12.0/24\"}]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-ips" + "url": "https://techdocs.akamai.com/linode-api/reference/post-linode-interface" }, - "operationId": "get-linode-ips", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "ipv4": { - "additionalProperties": false, - "description": "__Read-only__ Information about this Linode's IPv4 addresses.", - "properties": { - "private": { - "description": "__Read-only__ A list of private IP Address objects belonging to this Linode.", - "items": { + "operationId": "post-linode-interface", + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "Defines Linode interfaces. You can configure interfaces for one of the following types: `vpc`, `public`, or `vlan`. Any other type must either be omitted or set to `null`.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Defines a Linode public interface. Any other type must either be omitted or set to `null`.", + "properties": { + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface serves as the default route when multiple interfaces are eligible for this role. A public interface can have both an IPv4 `default_route` and an IPv6 `default_route`, provided it has at least one IP address of the corresponding type.", + "properties": { + "ipv4": { "additionalProperties": false, - "description": "A private IPv4 address that exists in Linode's system.", + "description": "If set to `true`, the interface is used for the IPv4 `default_route`. Only one interface per Linode can be set as the IPv4 default route.", + "example": true, + "nullable": true, + "type": "boolean" + }, + "ipv6": { + "additionalProperties": false, + "description": "If set to `true`, the interface is used for the IPv6 `default_route`. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "firewall_id": { + "additionalProperties": false, + "description": "The enabled firewall to secure a VPC or public interface. Not allowed for VLAN interfaces. If a `firewall_id` is not provided for a VPC or a public interface, then its [default interface firewall](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-firewalls) is used. If a default firewall is not available, and `null` is not specified, the request fails. Setting the `firewall_id` as `null` indicates that no firewall device will be attached to the interface.", + "example": [ + 123, + null + ], + "nullable": true, + "type": "integer" + }, + "public": { + "additionalProperties": false, + "description": "Public interface settings. A Linode can have only one public interface. A public interface can have both IPv4 and IPv6 configurations.", + "nullable": true, + "properties": { + "ipv4": { + "description": "IPv4 address settings for this public interface. If omitted, a public IPv4 address is automatically allocated.", "properties": { - "address": { - "description": "__Read-only__ The private IPv4 address.", - "example": "192.168.133.234", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": null, - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 17, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": false, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address.", - "example": null, - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.128.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "type": { - "description": "__Read-only__ The type of address this is.", - "example": "ipv4", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 + "addresses": { + "description": "List of IPv4 addresses to assign to this interface. Setting any to `auto` allocates a public IPv4 address. To create a public interface that uses IPv6 and no IPv4, set the IPv4 address as an empty list `[]`.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "anyOf": [ + { + "example": "192.0.2.141", + "format": "ip", + "minLength": 1, + "title": "User assigned IPv4", + "type": "string" + }, + { + "enum": [ + "auto" + ], + "title": "Automatically assigned IPv4", + "type": "string" + }, + { + "example": [], + "title": "No IPv4 [empty list]", + "type": "string" + } + ], + "default": "auto", + "description": "The interface's public IPv4 address. You can specify which public IPv4 address to configure for the interface. Setting this to `auto` automatically allocates a public address. To create a public interface that uses IPv6 and no IPv4, set the IPv4 address as an empty list `[]`. If the address is a reserved or automatically assigned, it needs to be reserved or already assigned to a single Linode, and it can\u2019t be assigned to any other interface.", + "type": "string" + }, + "primary": { + "default": false, + "description": "The IPv4 primary address configures the source address for routes within the Linode on the corresponding network interface.\n- Don't set this to `false` if there's only one address in the `addresses` array.\n- If more than one address is provided, primary can be set to `true` for one address.\n- If only one address is present in the `addresses` array, this address is automatically set as the primary address.", + "example": true, + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address-private.yaml" - } + "type": "object" }, - "readOnly": true, - "type": "array" - }, - "public": { - "description": "__Read-only__ A list of public IP Address objects belonging to this Linode.", - "items": { - "additionalProperties": false, - "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "ipv6": { + "description": "IPv6 address settings for the public interface.", "properties": { - "address": { - "description": "__Read-only__ The IP address.", - "example": "97.107.143.141", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "97.107.143.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 24, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "test.example.org", - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this IP address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.255.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "type": { - "description": "__Read-only__ The type of address this is.", - "enum": [ - "ipv4", - "ipv6", - "ipv6/pool", - "ipv6/range" - ], - "example": "ipv4", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 - }, - "vpc_nat_1_1": { + "ranges": { "additionalProperties": false, - "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", - "properties": { - "address": { - "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", - "example": "192.168.0.42", - "format": "ipv4", - "type": "string" - }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer" + "description": "IPv6 address ranges to assign to this interface. If omitted, no ranges are assigned.", + "items": { + "properties": { + "range": { + "default": null, + "description": "Your assigned IPv6 range in CIDR notation (`2001:0db8::1/64`) or prefix (`/64`).\n- The prefix of `/64` or `/56` block of IPv6 addresses.\n- If provided in CIDR notation, the prefix must be within the assigned ranges for the Linode.", + "example": [ + "2001:0a0a::1/64", + "/64" + ], + "type": "string" + } }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface.", - "example": 111, - "nullable": false, - "readOnly": true, - "type": "integer" - } + "required": [ + "range" + ], + "type": "object" }, - "type": "object" + "type": "array" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address.yaml" - } + "type": "object" + } + }, + "type": "object" + } + }, + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-public.yaml" + } + }, + { + "additionalProperties": false, + "description": "Defines a Linode VLAN interface. Any other type must either be omitted or set to `null`.", + "properties": { + "vlan": { + "additionalProperties": false, + "description": "VLAN interface settings. A Linode can have up to three VLAN interfaces, with a unique `vlan_label` for each.", + "nullable": true, + "properties": { + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "type": "string", + "x-linode-cli-display": 4 }, - "readOnly": true, - "type": "array" + "vlan_label": { + "description": "The VLAN's unique label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + } }, - "reserved": { - "description": "__Read-only__ A list of reserved IP Address objects belonging to this Linode.", - "items": { - "additionalProperties": false, - "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", - "properties": { - "address": { - "description": "__Read-only__ The IP address.", - "example": "97.107.143.141", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "97.107.143.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 24, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "test.example.org", - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this IP address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.255.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "type": { - "description": "__Read-only__ The type of address this is.", - "enum": [ - "ipv4", - "ipv6", - "ipv6/pool", - "ipv6/range" - ], - "example": "ipv4", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 - }, - "vpc_nat_1_1": { - "additionalProperties": false, - "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", - "properties": { - "address": { - "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", - "example": "192.168.0.42", - "format": "ipv4", - "type": "string" + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-vlan.yaml" + } + }, + { + "additionalProperties": false, + "description": "Defines a Linode VPC interface. Any other type must either be omitted or set to `null`.", + "properties": { + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as the default route when multiple interfaces are eligible for this role. A VPC interface can have an IPv4 `default_route`.", + "properties": { + "ipv4": { + "description": "If set to `true`, the interface is used for the IPv4 `default_route`. Only one interface per Linode can be set as the IPv4 default route.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "firewall_id": { + "additionalProperties": false, + "description": "The enabled firewall to secure a VPC or public interface. Not allowed for VLAN interfaces. If a `firewall_id` is not provided for a VPC or a public interface, then its default interface firewall is used. If a default firewall is not available, and `null` is not specified, the request fails. Setting the `firewall_id` as `null` indicates that no firewall device will be attached to the interface.", + "example": [ + 123, + null + ], + "nullable": true, + "type": "integer" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface settings. A Linode can have one VPC interface. The maximum number of interfaces allowed on a Linode is three.", + "nullable": true, + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "Interfaces can be configured with IPv4 addresses or ranges.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "properties": { + "address": { + "anyOf": [ + { + "example": "10.0.0.1", + "format": "ip", + "minLength": 1, + "title": "User assigned IPv4 from the VPC subnet", + "type": "string" + }, + { + "enum": [ + "auto" + ], + "title": "Automatically assigned IPv4", + "type": "string" + } + ], + "default": "auto", + "description": "Specifies which IPv4 address to use in the VPC subnet. You can specify which VPC Ipv4 address in the subnet to configure for the interface. You can't use an IPv4 address taken from another Linode or interface, or the first two or last two addresses in the VPC subnet. When `address` is set to `auto`, an IP address from the subnet is automatically assigned.", + "type": "string" + }, + "nat_1_1_address": { + "anyOf": [ + { + "example": "203.0.113.2", + "format": "ip", + "minLength": 1, + "title": "User assigned public IPv4", + "type": "string" + }, + { + "enum": [ + "auto" + ], + "title": "Automatically assigned public IPv4", + "type": "string" + } + ], + "default": null, + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.\n- You can set this to a specific public IPv4 address that's available on the Linode.\n- If set to `auto`, a public IPv4 address is automatically selected.\n- If a public IPv4 address or `auto` is specified, primary must be set to `true`.\n- The address can't be used on another Linode.\n- If the address is a reserved or an automatically assigned IP, the IP must be reserved or already assigned to a single Linode, and not assigned to an interface.\n- If this property is omitted or set to `null`, no 1:1 NAT configuration will be applied to the VPC interface.", + "nullable": true, + "type": "string" + }, + "primary": { + "default": false, + "description": "The IPv4 primary address is used to configure the source address for routes within the Linode on the corresponding network interface.\nShould not be set to `false` if there is only one address present in the `addresses` array.\nIf more than one address is provided, primary must be set to `true` for one address.\nIf only one address is present in the `addresses` array, this address is automatically set as the primary address.", + "example": true, + "nullable": true, + "type": "boolean" + } }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer" + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "default": null, + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).\n- When only the prefix is provided, then an available range of that size within the VPC's subnet is automatically selected.\n- If specified as CIDR notation, it must belong to the VPC subnet. All addresses in the range must not be taken by any other Linode or interfaces in the VPC subnet and must not include any of the first two or last two addresses of the VPC subnet.", + "example": [ + "192.168.100.100/28", + "192.168.100.110/28", + "/28", + "10.11.12.0/24", + "auto" + ], + "nullable": true, + "type": "string" + } }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface.", - "example": 111, - "nullable": false, - "readOnly": true, - "type": "integer" - } + "required": [ + "address" + ], + "type": "object" }, - "type": "object" + "type": "array" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address.yaml" + "type": "object" + }, + "subnet_id": { + "description": "The VPC subnet identifier for this interface. Your subnet\u2019s VPC must be in the same data center (region) as the Linode.", + "example": 321, + "type": "integer" + } + }, + "required": [ + "subnet_id" + ], + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-vpc.yaml" + } + } + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface.yaml" + } + }, + "x-example": { + "x-ref": "../examples/linode-interface.json" + } + } + }, + "description": "Create an interface for an existing Linode." + }, + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "ex-public": { + "summary": "Public interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true, + "ipv6": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": { + "ipv4": { + "addresses": [ + { + "address": "172.30.0.50", + "primary": true + } + ], + "shared": [ + { + "address": "172.30.0.51", + "linode_id": 12345 + } + ] + }, + "ipv6": { + "ranges": [ + { + "range": "2600:3c09:e001:59::/64", + "route_target": "2600:3c09::ff:feab:cdef" + }, + { + "range": "2600:3c09:e001:5a::/64", + "route_target": "2600:3c09::ff:feab:cdef" + } + ], + "shared": [ + { + "range": "2600:3c09:e001:2a::/64", + "route_target": null + } + ], + "slaac": [ + { + "address": "2600:3c09::ff:feab:cdef", + "prefix": 64 + } + ] + } + }, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": null + } + }, + "ex-vlan": { + "summary": "VLAN interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": {}, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": { + "ipam_address": "10.0.0.1/24", + "vlan_label": "my-vlan" + }, + "vpc": null + } + }, + "ex-vpc": { + "summary": "VPC interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:02:01", + "version": 1, + "vlan": null, + "vpc": { + "ipv4": { + "addresses": [ + { + "address": "192.168.22.3", + "primary": true + } + ], + "ranges": [ + { + "range": "192.168.22.16/28" + }, + { + "range": "192.168.22.32/28" + } + ] + }, + "subnet_id": 1234, + "vpc_id": 1234 + } + } + } + }, + "schema": { + "description": "One of the following interface types: VPC, public, or VLAN.", + "oneOf": [ + { + "additionalProperties": false, + "description": "A public interface configuration defines the properties and settings for a specific public interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as a default route.", + "nullable": true, + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface is used for the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + }, + "ipv6": { + "default": false, + "description": "Indicates if the interface is used for the IPv6 default route. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 } }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, "readOnly": true, - "type": "array" + "type": "integer", + "x-linode-cli-display": 1 }, - "shared": { - "description": "__Read-only__ A list of shared IP Address objects assigned to this Linode.", - "items": { - "additionalProperties": false, - "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", - "properties": { - "address": { - "description": "__Read-only__ The IP address.", - "example": "97.107.143.141", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "97.107.143.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 24, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "test.example.org", - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this IP address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.255.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "type": { - "description": "__Read-only__ The type of address this is.", - "enum": [ - "ipv4", - "ipv6", - "ipv6/pool", - "ipv6/range" - ], - "example": "ipv4", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. A public interface's `mac_address` does not change, even if the public interface is deleted and then recreated.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "Public interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's public IPv4 `addresses`.", + "properties": { + "addresses": { + "description": "The public IPv4 addresses and primary settings for this public interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The public IPv4 address assigned to this interface.", + "example": "172.232.100.100", + "type": "string", + "x-linode-cli-display": 8 + }, + "primary": { + "description": "Indicates if the public IPv4 address serves as the source address for traffic routing within the Linode and other corresponding network interfaces and services.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 9 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv4 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Shared IPv4 address.", + "example": "172.222.33.4", + "type": "string", + "x-linode-cli-display": 10 + }, + "linode_id": { + "description": "The ID of the Linode this address currently belongs to. For IPv4 addresses, by default this is the Linode this address was assigned when created.", + "example": 12345, + "type": "string", + "x-linode-cli-display": 11 + } + }, + "type": "object" + }, + "type": "array" + } }, - "vpc_nat_1_1": { - "additionalProperties": false, - "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", - "properties": { - "address": { - "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", - "example": "192.168.0.42", - "format": "ipv4", - "type": "string" + "type": "object" + }, + "ipv6": { + "additionalProperties": false, + "description": "The interface's public IPv6 configuration.", + "properties": { + "ranges": { + "description": "List of IPv6 ranges assigned to this interface.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "IPv6 range in CIDR notation (`2600:0db8::1/64`) or prefix-only (`/64`).", + "example": "2600:3c09:e001:59::/64", + "type": "string", + "x-linode-cli-display": 16 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 17 + } + }, + "type": "object" }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer" + "type": "array" + }, + "shared": { + "description": "The IPv6 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "The IPv6 address range.", + "example": "2600:3c09:e001:2a::/64", + "type": "string", + "x-linode-cli-display": 14 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": null, + "type": "string", + "x-linode-cli-display": 15 + } + }, + "type": "object" }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface.", - "example": 111, - "nullable": false, - "readOnly": true, - "type": "integer" - } + "type": "array" }, - "type": "object" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address.yaml" + "slaac": { + "description": "The public `slaac` and subnet prefix settings for this public interface that is used to communicate over the public internet, and with other services in the same data center.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Public IPv6 addresses assigned to this interface.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 12 + }, + "prefix": { + "description": "The prefix length advertised for SLAAC to use. Only the specific (`/128`) EUI-64 address derived from the interface's MAC address is supported. To ensure the MAC-based EUI-64 address is used, privacy addressing needs to be disabled. Network Helper automatically configures the MAC-derived EUI-64 address. If you disable Network Helper or use an unsupported operating system, follow the specific instructions for your OS.", + "example": 64, + "type": "integer", + "x-linode-cli-display": 13 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" } }, - "readOnly": true, - "type": "array" + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that increments when the interface updates.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 7 + }, + "vlan": { + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" }, "vpc": { - "description": "__Read-only__ A list of Virtual Private Cloud (VPC)-specific addresses or ranges for the Linode.", - "items": { - "additionalProperties": false, - "description": "A VPC IP address that exists in Linode's system, specific to the response for the [List VPC IP addresses](https://techdocs.akamai.com/linode-api/reference/get-vpcs-ips) operation. Returned as an empty set for Linodes that are not part of a VPC.", - "properties": { - "active": { - "description": "__Filterable__, __Read-only__ Returns `true` if the VPC interface is in use, meaning that the Linode was powered on using the `config_id` to which the interface belongs. Otherwise returns `false`.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "address": { - "description": "__Read-only__ An IPv4 address configured for this VPC interface. These follow the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address format. Displayed as `null` if an `address_range`.", - "example": "192.0.2.141", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "address_range": { - "description": "__Read-only__ A range of IPv4 addresses configured for this VPC interface. Displayed as `null` if a single `address`.", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "config_id": { - "description": "__Filterable__, __Read-only__ The globally general entity identifier for the Linode configuration profile where the VPC is included.", - "example": 4567, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "gateway": { - "description": "__Read-only__ The default gateway for the VPC subnet that the IP or IP range belongs to.", - "example": "192.0.2.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "interface_id": { - "description": "__Read-only__ The globally general API entity identifier for the Linode interface.", - "example": 2435, - "readOnly": true, - "type": "integer" - }, - "linode_id": { - "description": "__Filterable__, __Read-only__ The identifier for the Linode the VPC interface currently belongs to.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 6, - "x-linode-filterable": true - }, - "nat_1_1": { - "description": "__Read-only__ The public IP address used for NAT 1:1 with the VPC. This is empty if NAT 1:1 isn't used.", - "example": "192.168.0.42", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the `subnet_mask`.", - "example": 24, - "nullable": true, - "readOnly": true, - "type": "integer" - }, - "region": { - "description": "__Filterable__, __Read-only__ The region of the VPC.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 5, - "x-linode-filterable": true - }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer", - "x-linode-cli-display": 7 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for the `address` or `address_range`.", - "example": "255.255.255.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "vpc_id": { - "description": "__Filterable__, __Read-only__ The unique globally general API entity identifier for the VPC.", - "example": 7654, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 8, - "x-linode-filterable": true - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-addresses-vpc.yaml" - } - }, - "readOnly": true, - "type": "array" + "additionalProperties": false, + "description": "The value is `null` if this is not a VPC interface.", + "example": null, + "nullable": true, + "type": "object" } }, - "readOnly": true, - "type": "object" + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-public.yaml" + } }, - "ipv6": { + { "additionalProperties": false, - "description": "__Read-only__ Information about this Linode's IPv6 addresses.", + "description": "A VLAN interface configuration defines the properties and settings for a specific VLAN interface in the Linode network.", "properties": { - "global": { - "description": "A list of IPv6 range objects assigned to this Linode.", - "items": { - "additionalProperties": false, - "description": "An object representing an IPv6 range.", - "properties": { - "prefix": { - "description": "The prefix length of the address. The total number of addresses that can be assigned from this range is calculated as 2(128 - prefix length).", - "example": 64, - "type": "integer", - "x-linode-cli-display": 2 - }, - "range": { - "description": "__Read-only__ The IPv6 address of this range.", - "example": "2600:3c01::", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "region": { - "description": "__Read-only__ The region for this range of IPv6 addresses.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 3 - }, - "route_target": { - "description": "The IPv6 SLAAC address.", - "example": "2600:3c01::ffff:ffff:ffff:ffff", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ipv6-range.yaml" - } - }, - "type": "array" + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 }, - "link_local": { + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "description": "The value is `null` if this isn't a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that is incremented when the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 5 + }, + "vlan": { "additionalProperties": false, - "description": "A link-local IPv6 address that exists in Linode's system.", + "description": "VLAN interface type.", "properties": { - "address": { - "description": "__Read-only__ The IPv6 link-local address.", - "example": "fe80::f03c:91ff:fe24:3a2f", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "fe80::1", - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The network prefix.", - "example": 64, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": false, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address.", - "example": null, + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", "nullable": true, "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Filterable__, __Read-only__ The Region this address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 5, - "x-linode-filterable": true - }, - "subnet_mask": { - "description": "__Read-only__ The subnet mask.", - "example": "ffff:ffff:ffff:ffff::", - "format": "ip", - "readOnly": true, - "type": "string" + "x-linode-cli-display": 7 }, - "type": { - "description": "__Read-only__ The type of address this is.", - "example": "ipv6", - "readOnly": true, + "vlan_label": { + "description": "The VLAN's label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", "type": "string", - "x-linode-cli-display": 2 + "x-linode-cli-display": 6 } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address-v6-link-local.yaml" - } + "type": "object" }, - "slaac": { + "vpc": { + "description": "The value is `null` if this isn't a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vlan.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VPC interface configuration defines settings for a specific VPC interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { "additionalProperties": false, - "description": "A SLAAC IPv6 address that exists in Linode's system.", + "description": "Indicates if the interface serves as a default route.", "properties": { - "address": { - "description": "__Read-only__ The address.", - "example": "2600:3c03::f03c:91ff:fe24:3a2f", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "fe80::1", - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The network prefix.", - "example": 64, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", + "ipv4": { + "default": false, + "description": "Indicates if the interface serves as the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", "example": true, - "readOnly": true, "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address.", - "example": null, - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Filterable__, __Read-only__ The Region this address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] + "x-linode-cli-display": 5 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "The value is `null` if this is not a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface last updated.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "The version number of the interface configuration, incremented each time the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 6 + }, + "vlan": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's IPv4 `addresses` and `ranges` configuration.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The VPC subnet IPv4 address.", + "example": "192.168.22.3", + "type": "string", + "x-linode-cli-display": 9 + }, + "nat_1_1_address": { + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 11 + }, + "primary": { + "description": "Indicates if the IPv4 address is used to set up a source address for routes inside the Linode for the corresponding network interface.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 10 + } + }, + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).", + "example": "192.168.22.16/28", + "type": "string", + "x-linode-cli-display": 12 + } + }, + "type": "object" + }, + "type": "array" + } }, - "x-linode-cli-display": 5, - "x-linode-filterable": true + "type": "object" }, - "subnet_mask": { - "description": "__Read-only__ The subnet mask.", - "example": "ffff:ffff:ffff:ffff::", - "format": "ip", - "readOnly": true, - "type": "string" + "subnet_id": { + "description": "VPC subnet's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 8 }, - "type": { - "description": "__Read-only__ The type of address this is.", - "example": "ipv6", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 + "vpc_id": { + "description": "VPC's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 7 } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address-v6-slaac.yaml" - } + "type": "object" } }, - "readOnly": true, - "type": "object" + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vpc.yaml" + } } - }, + ], "type": "object", "x-akamai": { - "file-path": "schemas/added-get-linode-ips-200.yaml" + "file-path": "schemas/linode-interface.yaml" } - }, - "x-example": { - "x-ref": "../examples/get-linode-ips-200.json" - }, - "x-linode-cli-subtables": [ - "ipv4.public", - "ipv4.private", - "ipv4.shared", - "ipv4.reserved", - "ipv4.vpc", - "ipv6.link_local", - "ipv6.slaac", - "ipv6.global" - ] + } } }, - "description": "Requested Linode's networking configuration." + "description": "The Linode interface was successfully added." }, "default": { "content": { @@ -50674,194 +51533,682 @@ }, { "oauth": [ - "linodes:read_only" + "linodes:read_write" ] } ], - "summary": "Get networking information", + "summary": "Add a Linode interface", "tags": [ - "IP addresses" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes ips-list 123", - "title": "CLI", + "syntax": "linode-cli linodes interface-add $linodeId \\\n --firewall_id 123 \\\n --default_route.ipv4 true \\\n --default_route.ipv6 true \\\n --public.ipv4.addresses '[{\"address\": \"192.0.2.141\", \"primary\": true}, {\"address\": \"auto\", \"primary\": false}]' \\\n --public.ipv6.ranges '[{\"range\": \"2001:0db8::1/64\"}, {\"range\": \"/64\"}]'", + "title": "CLI: Public interface", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "linodes:read_only", + "syntax": "linode-cli linodes interface-add $linodeId \\\n --vlan.vlan_label my-vlan \\\n --vlan.ipam_address 192.168.2.2/24", + "title": "CLI: VLAN interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linode-cli linodes interface-add $linodeId \\\n --firewall_id 123 \\\n --default_route.ipv4 true \\\n --vpc.subnet_id 321 \\\n --vpc.ipv4.addresses '[{\"address\": \"10.0.0.1\", \"primary\": true, \"nat_1_1_address\": \"auto\"}, {\"address\": \"auto\", \"primary\": false, \"nat_1_1_address\": null}]' \\\n --vpc.ipv4.ranges '[{\"range\": \"/28\"}, {\"range\": \"10.11.12.0/24\"}]'", + "title": "CLI: VPC interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "ips-list", - "x-linode-grant": "read_only" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode to look up.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/linode-ips.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/ips" + "x-linode-cli-action": "interface-add", + "x-linode-grant": "read_write" }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/ips/{address}": { "get": { - "description": "View information about the specified IP address associated with the specified Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-view 123 97.107.143.141\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "__Beta__ This operation returns all interfaces assigned to a specific Linode. They list in the order they were created. On the Linode, interfaces also list in this order, and are typically named `eth0`, `eth1`, `eth2`, and so on. The MAC address is the most reliable method to identify an interface. This operation requires the `read_only` [grant](https://techdocs.akamai.com/linode-api/reference/get-user-grants) for the Linode. The Linode needs to use `interfaces` and not configuration profile interfaces. Run [Get account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings) to see if Linode interfaces are supported.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes interfaces-list $linodeId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-ip" + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-interfaces" }, - "operationId": "get-linode-ip", + "operationId": "get-linode-interfaces", "responses": { "200": { "content": { "application/json": { - "schema": { - "additionalProperties": false, - "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", - "properties": { - "address": { - "description": "__Read-only__ The IP address.", - "example": "97.107.143.141", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "97.107.143.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 + "examples": { + "ex-public": { + "summary": "Public interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true, + "ipv6": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": { + "ipv4": { + "addresses": [ + { + "address": "172.30.0.50", + "primary": true + } + ], + "shared": [ + { + "address": "172.30.0.51", + "linode_id": 12345 + } + ] + }, + "ipv6": { + "ranges": [ + { + "range": "2600:3c09:e001:59::/64", + "route_target": "2600:3c09::ff:feab:cdef" + }, + { + "range": "2600:3c09:e001:5a::/64", + "route_target": "2600:3c09::ff:feab:cdef" + } + ], + "shared": [ + { + "range": "2600:3c09:e001:2a::/64", + "route_target": null + } + ], + "slaac": [ + { + "address": "2600:3c09::ff:feab:cdef", + "prefix": 64 + } + ] + } + }, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": null + } + }, + "ex-vlan": { + "summary": "VLAN interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": {}, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": { + "ipam_address": "10.0.0.1/24", + "vlan_label": "my-vlan" + }, + "vpc": null + } + }, + "ex-vpc": { + "summary": "VPC interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:02:01", + "version": 1, + "vlan": null, + "vpc": { + "ipv4": { + "addresses": [ + { + "address": "192.168.22.3", + "primary": true + } + ], + "ranges": [ + { + "range": "192.168.22.16/28" + }, + { + "range": "192.168.22.32/28" + } + ] + }, + "subnet_id": 1234, + "vpc_id": 1234 + } + } + } + }, + "schema": { + "description": "One of the following interface types: VPC, public, or VLAN.", + "oneOf": [ + { + "additionalProperties": false, + "description": "A public interface configuration defines the properties and settings for a specific public interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as a default route.", + "nullable": true, + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface is used for the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + }, + "ipv6": { + "default": false, + "description": "Indicates if the interface is used for the IPv6 default route. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. A public interface's `mac_address` does not change, even if the public interface is deleted and then recreated.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "Public interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's public IPv4 `addresses`.", + "properties": { + "addresses": { + "description": "The public IPv4 addresses and primary settings for this public interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The public IPv4 address assigned to this interface.", + "example": "172.232.100.100", + "type": "string", + "x-linode-cli-display": 8 + }, + "primary": { + "description": "Indicates if the public IPv4 address serves as the source address for traffic routing within the Linode and other corresponding network interfaces and services.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 9 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv4 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Shared IPv4 address.", + "example": "172.222.33.4", + "type": "string", + "x-linode-cli-display": 10 + }, + "linode_id": { + "description": "The ID of the Linode this address currently belongs to. For IPv4 addresses, by default this is the Linode this address was assigned when created.", + "example": 12345, + "type": "string", + "x-linode-cli-display": 11 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ipv6": { + "additionalProperties": false, + "description": "The interface's public IPv6 configuration.", + "properties": { + "ranges": { + "description": "List of IPv6 ranges assigned to this interface.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "IPv6 range in CIDR notation (`2600:0db8::1/64`) or prefix-only (`/64`).", + "example": "2600:3c09:e001:59::/64", + "type": "string", + "x-linode-cli-display": 16 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 17 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv6 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "The IPv6 address range.", + "example": "2600:3c09:e001:2a::/64", + "type": "string", + "x-linode-cli-display": 14 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": null, + "type": "string", + "x-linode-cli-display": 15 + } + }, + "type": "object" + }, + "type": "array" + }, + "slaac": { + "description": "The public `slaac` and subnet prefix settings for this public interface that is used to communicate over the public internet, and with other services in the same data center.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Public IPv6 addresses assigned to this interface.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 12 + }, + "prefix": { + "description": "The prefix length advertised for SLAAC to use. Only the specific (`/128`) EUI-64 address derived from the interface's MAC address is supported. To ensure the MAC-based EUI-64 address is used, privacy addressing needs to be disabled. Network Helper automatically configures the MAC-derived EUI-64 address. If you disable Network Helper or use an unsupported operating system, follow the specific instructions for your OS.", + "example": 64, + "type": "integer", + "x-linode-cli-display": 13 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that increments when the interface updates.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 7 + }, + "vlan": { + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-public.yaml" + } }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 24, - "readOnly": true, - "type": "integer" + { + "additionalProperties": false, + "description": "A VLAN interface configuration defines the properties and settings for a specific VLAN interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "description": "The value is `null` if this isn't a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that is incremented when the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 5 + }, + "vlan": { + "additionalProperties": false, + "description": "VLAN interface type.", + "properties": { + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "nullable": true, + "type": "string", + "x-linode-cli-display": 7 + }, + "vlan_label": { + "description": "The VLAN's label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", + "type": "string", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "vpc": { + "description": "The value is `null` if this isn't a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vlan.yaml" + } }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": true, - "readOnly": true, - "type": "boolean", + { + "additionalProperties": false, + "description": "A VPC interface configuration defines settings for a specific VPC interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface serves as a default route.", + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface serves as the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "The value is `null` if this is not a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface last updated.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "The version number of the interface configuration, incremented each time the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 6 + }, + "vlan": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's IPv4 `addresses` and `ranges` configuration.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The VPC subnet IPv4 address.", + "example": "192.168.22.3", + "type": "string", + "x-linode-cli-display": 9 + }, + "nat_1_1_address": { + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 11 + }, + "primary": { + "description": "Indicates if the IPv4 address is used to set up a source address for routes inside the Linode for the corresponding network interface.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 10 + } + }, + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).", + "example": "192.168.22.16/28", + "type": "string", + "x-linode-cli-display": 12 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "subnet_id": { + "description": "VPC subnet's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 8 + }, + "vpc_id": { + "description": "VPC's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 7 + } + }, + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vpc.yaml" + } + } + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface.yaml" + } + }, + "x-linode-cli-nested-list": "interfaces", + "x-linode-cli-use-schema": { + "additionalProperties": false, + "properties": { + "interfaces.created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", "x-linode-cli-display": 3 }, - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "test.example.org", + "interfaces.default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as a default route.", "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this IP address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface is used for the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + }, + "ipv6": { + "default": false, + "description": "Indicates if the interface is used for the IPv6 default route. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + } + }, + "type": "object" }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.255.0", - "format": "ip", + "interfaces.id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, "readOnly": true, - "type": "string" + "type": "integer", + "x-linode-cli-display": 1 }, - "type": { - "description": "__Read-only__ The type of address this is.", - "enum": [ - "ipv4", - "ipv6", - "ipv6/pool", - "ipv6/range" - ], - "example": "ipv4", - "readOnly": true, + "interfaces.mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. A public interface's `mac_address` does not change, even if the public interface is deleted and then recreated.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", "type": "string", "x-linode-cli-display": 2 }, - "vpc_nat_1_1": { - "additionalProperties": false, - "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", - "properties": { - "address": { - "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", - "example": "192.168.0.42", - "format": "ipv4", - "type": "string" - }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer" - }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface.", - "example": 111, - "nullable": false, - "readOnly": true, - "type": "integer" - } - }, - "type": "object" + "interfaces.updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "interfaces.version": { + "description": "Interface version number that increments when the interface updates.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 7 } }, "type": "object", "x-akamai": { - "file-path": "schemas/ip-address.yaml" + "file-path": "schemas/linode-interface-cli.yaml" } - }, - "x-example": { - "x-ref": "../examples/get-linode-ip-200.json" } } }, - "description": "A single IP address." + "description": "A list of all the interfaces available for a Linode." }, "default": { "content": { @@ -50906,18 +52253,19 @@ }, { "oauth": [ - "linodes:read_only" + "linodes:read_write" ] } ], - "summary": "Get a Linode's IP address", + "summary": "List Linode interfaces", "tags": [ - "IP addresses" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes ip-view 123 97.107.143.141", + "syntax": "linode-cli linodes interfaces-list $linodeId", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -50928,254 +52276,134 @@ } ] }, - "x-linode-cli-action": "ip-view", - "x-linode-grant": "read_only" + "x-linode-cli-action": "interfaces-list", + "x-linode-grant": "read_write" }, - "put": { - "description": "Updates the reverse DNS (RDNS) for a Linode's IP Address. This may be done for both IPv4 and IPv6 addresses.\n\nSetting the RDNS to `null` for a public IPv4 address, resets it to the default `ip.linodeusercontent.com` RDNS value.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-update 123 \\\n 203.0.113.1 \\\n --rdns test.example.org\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The `id` of the Linode.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-interfaces.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/interfaces", + "status": "BETA" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/interfaces/settings": { + "get": { + "description": "Lists a Linode's interface settings, including Network Helper and default route settings. This operation is for Linode interfaces, not for legacy configuration profile interfaces.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes interfaces-settings-list $linodeId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes: read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/put-linode-ip" - }, - "operationId": "put-linode-ip", - "requestBody": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "{{rdns}}", - "nullable": true, - "type": "string" - } - }, - "required": [ - "rdns" - ], - "type": "object", - "x-akamai": { - "file-path": "schemas/added-put-linode-ip.yaml" - } - }, - "x-example": { - "x-ref": "../examples/put-linode-ip.json" - } - } - }, - "description": "The information to update for the IP address." + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings" }, + "operationId": "get-linode-interface-settings", "responses": { "200": { "content": { "application/json": { "schema": { "additionalProperties": false, - "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "description": "Linode interface settings.", "properties": { - "address": { - "description": "__Read-only__ The IP address.", - "example": "97.107.143.141", - "format": "ip", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "gateway": { - "description": "__Read-only__ The default gateway for this address.", - "example": "97.107.143.1", - "format": "ip", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 6 - }, - "prefix": { - "description": "__Read-only__ The number of bits set in the subnet mask.", - "example": 24, - "readOnly": true, - "type": "integer" - }, - "public": { - "description": "__Read-only__ Whether this is a public or private IP address.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-linode-cli-display": 3 - }, - "rdns": { - "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", - "example": "test.example.org", - "nullable": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "region": { - "description": "__Read-only__ The Region this IP address resides in.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "subnet_mask": { - "description": "__Read-only__ The mask that separates host bits from network bits for this address.", - "example": "255.255.255.0", - "format": "ip", - "readOnly": true, - "type": "string" - }, - "type": { - "description": "__Read-only__ The type of address this is.", - "enum": [ - "ipv4", - "ipv6", - "ipv6/pool", - "ipv6/range" - ], - "example": "ipv4", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 2 - }, - "vpc_nat_1_1": { + "default_route": { "additionalProperties": false, - "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "description": "Interfaces used for the IPv4 `default_route` and IPv6 `default_route` when multiple interfaces are eligible for the role.", "properties": { - "address": { - "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", - "example": "192.168.0.42", - "format": "ipv4", - "type": "string" + "ipv4_eligible_interface_ids": { + "description": "The VPC or public interface IDs that are eligible to be the IPv4 `default_route` for this Linode. If the `ipv4_eligible_interface_ids` array is empty, this means there are no eligible interfaces eligible for the IPv4 default route role.", + "items": { + "description": "__Read-only__ Eligible IDs, or an empty array if there are none.", + "example": [ + 1, + 2 + ], + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 3 + }, + "type": "array" }, - "subnet_id": { - "description": "The `id` of the VPC Subnet for this interface.", - "example": 101, - "nullable": false, - "type": "integer" + "ipv4_interface_id": { + "default": null, + "description": "The VPC or public interface ID assigned as the IPv4 `default_route`. The [List Linode interface settings](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings) operation provides eligible IPv4 interface IDs.", + "example": 1, + "nullable": true, + "type": "integer", + "x-linode-cli-display": 2 }, - "vpc_id": { - "description": "__Read-only__ The `id` of the VPC configured for this interface.", - "example": 111, - "nullable": false, - "readOnly": true, - "type": "integer" - } - }, - "type": "object" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/ip-address.yaml" - } - }, - "x-example": { - "x-ref": "../examples/get-linode-ip-200.json" - } - } - }, - "description": "The updated IP address record." - }, - "default": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "errors": { - "items": { - "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", - "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", - "type": "string" + "ipv6_eligible_interface_ids": { + "description": "The public interface IDs that are eligible to be the IPv6 `default_route` for this Linode. If the `ipv6_eligible_interface_ids` array is empty, this means there are no eligible interfaces eligible for the IPv6 default route role.", + "items": { + "description": "__Read-only__ Eligible IDs, or an empty array if there are none.", + "example": [ + 2, + 3 + ], + "readOnly": true, + "type": "integer" }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", - "type": "string" - } + "type": "array", + "x-linode-cli-display": 5 }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" + "ipv6_interface_id": { + "default": null, + "description": "The public interface ID assigned as the IPv6 `default_route`. The [List Linode interface settings](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings) operation provides eligible IPv6 interface IDs.", + "example": 1, + "nullable": true, + "type": "integer", + "x-linode-cli-display": 4 } }, - "type": "array" + "type": "object" + }, + "network_helper": { + "description": "Enables the Network Helper feature. The default value is determined by the `network_helper` setting in the [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings). [Power off the Linode](https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance) before disabling or enabling Network Helper.", + "example": false, + "type": "boolean", + "x-linode-cli-display": 1 } }, - "type": "object" - } - } - }, - "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." - } - }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "linodes:read_write" - ] - } - ], - "summary": "Update an IP address's RDNS for a Linode", - "tags": [ - "IP addresses" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linode-cli linodes ip-update 123 \\\n 203.0.113.1 \\\n --rdns test.example.org", - "title": "CLI", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "linodes:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" - } - ] - }, - "x-linode-cli-action": "ip-update", - "x-linode-grant": "read_write" - }, - "delete": { - "description": "Deletes a public or private IPv4 address associated with this Linode. This will fail if it is the Linode's last remaining public IPv4 address, or if the address has a 1:1 NAT with an active VPC Subnet address.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-delete 97.107.143.141\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/delete-linode-ip" - }, - "operationId": "delete-linode-ip", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, "type": "object", "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" + "file-path": "schemas/linode-interface-settings.yaml" } }, "x-example": { - "x-ref": "../examples/delete-linode-ip-200.json" + "x-ref": "../examples/linode-interface-settings-200.json" } } }, - "description": "IP address successfully removed." + "description": "Returns a single Linode interface settings object." }, "default": { "content": { @@ -51220,166 +52448,193 @@ }, { "oauth": [ - "linodes:read_write" + "linode:read_only" ] } ], - "summary": "Delete an IPv4 address", + "summary": "List Linode interface settings", "tags": [ - "IP addresses" + "Linode interfaces" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli linodes ip-delete 97.107.143.141", + "syntax": "linode-cli linodes interfaces-settings-list $linodeId", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "linodes:read_write", + "syntax": "linodes: read_only", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "ip-delete", - "x-linode-grant": "read_write" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "The ID of the Linode.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-820d9f86.yaml" - } - }, - { - "description": "The IP address.", - "example": "{{address}}", - "in": "path", - "name": "address", - "required": true, - "schema": { - "format": "ip", - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/address-path-59ea51e6.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/linode-ip-address.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/ips/{address}" + "x-linode-cli-action": "interfaces-settings-list", + "x-linode-grant": "read_only" }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/migrate": { - "post": { - "description": "Initiate a pending host migration that has been scheduled by Linode or initiate a cross data center (DC) migration. A list of pending migrations, if any, can be accessed from [List notifications](https://techdocs.akamai.com/linode-api/reference/get-notifications). When the migration begins, your Linode will be shutdown if not already off. If the migration initiated the shutdown, it will reboot the Linode when completed.\n\nTo initiate a cross DC migration, you must pass a `region` parameter to the request body specifying the target data center region. You can view a list of all available regions and their feature capabilities from [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions). See our [Pricing Page](https://www.linode.com/pricing/) for Region-specific pricing, which applies after migration is complete. If your Linode has a DC migration already queued or you have initiated a previously scheduled migration, you will not be able to initiate a DC migration until it has completed.\n\n`vpc` details\n\n- Cross DC migrations are not allowed for Linodes that have a `vpc` purpose Configuration Profile Interface. Host migrations within the same DC are permitted.\n- See the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- Next Generation Network (NGN) data centers do not support IPv6 `/116` pools or IP Failover. If you have these features enabled on your Linode and attempt to migrate to an NGN data center, the migration will not initiate. If a Linode cannot be migrated because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes migrate 123 \\\n --region us-central \\\n --placement_group.id 528\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "put": { + "description": "__Beta__ Updates Network Helper and default route settings on the Linode.\n\n\n<>\n\n---\n\n\n- __CLI: Public interface__.\n\n ```\n linode-cli linodes interface-settings-update $linodeId \\\n --network_helper true \\\n --default_route.ipv4_interface_id 4527 \\\n --default_route.ipv6_interface_id 4541 \\\n --default_route.ipv4_eligible_interface_ids 4527 \\\n --default_route.ipv4_eligible_interface_ids 4541 \\\n --default_route.ipv6_eligible_interface_ids 4527 \\\n --default_route.ipv6_eligible_interface_ids 4541\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __CLI: VLAN interface__.\n\n ```\n linode-cli linodes interface-settings-update $linodeId \\\n --network_helper true\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __CLI: VPC interface__.\n\n ```\n linode-cli linodes interface-settings-update $linodeId \\\n --network_helper true \\\n --default_route.ipv4_interface_id 5527 \\\n --default_route.ipv4_eligible_interface_ids 5527 \\\n --default_route.ipv4_eligible_interface_ids 5541\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-migrate-linode-instance" + "url": "https://techdocs.akamai.com/linode-api/reference/put-linode-interface-settings" }, - "operationId": "post-migrate-linode-instance", + "operationId": "put-linode-interface-settings", "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, + "description": "Linode interface settings.", "properties": { - "placement_group": { + "default_route": { "additionalProperties": false, - "description": "Include this to assign this Linode to an existing [placement group](https://www.linode.com/docs/products/compute/compute-instances/guides/placement-groups/) in the data center you're migrating to. These constraints apply:\n\n- If the target Linode is in a placement group, it will be removed from it when migrating.\n- The target placement group needs to be in the same `region` you're migrating to.\n- The target placement group needs to have capacity. Run the [Get a region](https://techdocs.akamai.com/linode-api/reference/get-region) operation for the region you want to migrate to, and store the `maximum_linodes_per_pg` value. Run the [Get a placement group](https://techdocs.akamai.com/linode-api/reference/get-placement-group) operation for that same region to review how many Linodes are in that group.", + "description": "Interfaces used for the IPv4 `default_route` and IPv6 `default_route` when multiple interfaces are eligible for the role.", "properties": { - "id": { - "description": "The placement group's ID. You need to provide it for all operations that affect it.", - "example": 528, - "nullable": false, + "ipv4_eligible_interface_ids": { + "description": "The VPC or public interface IDs that are eligible to be the IPv4 `default_route` for this Linode. If the `ipv4_eligible_interface_ids` array is empty, this means there are no eligible interfaces eligible for the IPv4 default route role.", + "items": { + "description": "__Read-only__ Eligible IDs, or an empty array if there are none.", + "example": [ + 1, + 2 + ], + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 3 + }, + "type": "array" + }, + "ipv4_interface_id": { + "default": null, + "description": "The VPC or public interface ID assigned as the IPv4 `default_route`. The [List Linode interface settings](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings) operation provides eligible IPv4 interface IDs.", + "example": 1, + "nullable": true, "type": "integer", - "x-linode-cli-display": 1 + "x-linode-cli-display": 2 + }, + "ipv6_eligible_interface_ids": { + "description": "The public interface IDs that are eligible to be the IPv6 `default_route` for this Linode. If the `ipv6_eligible_interface_ids` array is empty, this means there are no eligible interfaces eligible for the IPv6 default route role.", + "items": { + "description": "__Read-only__ Eligible IDs, or an empty array if there are none.", + "example": [ + 2, + 3 + ], + "readOnly": true, + "type": "integer" + }, + "type": "array", + "x-linode-cli-display": 5 + }, + "ipv6_interface_id": { + "default": null, + "description": "The public interface ID assigned as the IPv6 `default_route`. The [List Linode interface settings](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings) operation provides eligible IPv6 interface IDs.", + "example": 1, + "nullable": true, + "type": "integer", + "x-linode-cli-display": 4 } }, - "required": [ - "id" - ], "type": "object" }, - "region": { - "description": "The region to which the Linode will be migrated. Must be a valid region slug. A list of regions can be viewed by running the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation. A cross data center migration will cancel a pending migration that has not yet been initiated. A cross data center migration will initiate a `linode_migrate_datacenter_create` event.", - "example": "{{region}}", - "type": "string" - }, - "type": { - "default": "cold", - "description": "Type of migration used in moving to a new host or Linode type.\n\n`warm`: the Linode will not power down until the migration is complete.\nWarm migrations are not available for DC migrations.\n\n`cold`: the Linode will be powered down and migrated. When the migration\nis complete, the Linode will be powered on.", - "enum": [ - "warm", - "cold" - ], - "example": "{{type}}", - "type": "string" - }, - "upgrade": { - "default": false, - "description": "When initiating a cross DC migration, setting this value to `true` will also ensure that the Linode is upgraded to the latest generation of hardware that corresponds to your Linode's Type, if any free upgrades are available for it. If no free upgrades are available, and this value is set to `true`, then the endpoint will return a 400 error code and the migration will not be performed. If the data center set in the `region` field does not allow upgrades, then the endpoint will return a 400 error code and the migration will not be performed.", - "example": "{{upgrade}}", - "type": "boolean" + "network_helper": { + "description": "Enables the Network Helper feature. The default value is determined by the `network_helper` setting in the [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings). [Power off the Linode](https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance) before disabling or enabling Network Helper.", + "example": "{{network_helper}}", + "type": "boolean", + "x-linode-cli-display": 1 } }, "type": "object", "x-akamai": { - "file-path": "schemas/added-post-migrate-linode-instance.yaml" + "file-path": "schemas/linode-interface-settings.yaml" } }, "x-example": { - "x-ref": "../examples/post-migrate-linode-instance.json" + "x-ref": "../examples/linode-interface.json" } } - } + }, + "description": "Update Linode interface settings. Before enabling or disabling Network Helper, you need to power off the Linode.", + "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, + "additionalProperties": false, + "description": "Linode interface settings.", + "properties": { + "default_route": { + "additionalProperties": false, + "description": "Interfaces used for the IPv4 `default_route` and IPv6 `default_route` when multiple interfaces are eligible for the role.", + "properties": { + "ipv4_eligible_interface_ids": { + "description": "The VPC or public interface IDs that are eligible to be the IPv4 `default_route` for this Linode. If the `ipv4_eligible_interface_ids` array is empty, this means there are no eligible interfaces eligible for the IPv4 default route role.", + "items": { + "description": "__Read-only__ Eligible IDs, or an empty array if there are none.", + "example": [ + 1, + 2 + ], + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 3 + }, + "type": "array" + }, + "ipv4_interface_id": { + "default": null, + "description": "The VPC or public interface ID assigned as the IPv4 `default_route`. The [List Linode interface settings](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings) operation provides eligible IPv4 interface IDs.", + "example": 1, + "nullable": true, + "type": "integer", + "x-linode-cli-display": 2 + }, + "ipv6_eligible_interface_ids": { + "description": "The public interface IDs that are eligible to be the IPv6 `default_route` for this Linode. If the `ipv6_eligible_interface_ids` array is empty, this means there are no eligible interfaces eligible for the IPv6 default route role.", + "items": { + "description": "__Read-only__ Eligible IDs, or an empty array if there are none.", + "example": [ + 2, + 3 + ], + "readOnly": true, + "type": "integer" + }, + "type": "array", + "x-linode-cli-display": 5 + }, + "ipv6_interface_id": { + "default": null, + "description": "The public interface ID assigned as the IPv6 `default_route`. The [List Linode interface settings](https://techdocs.akamai.com/linode-api/reference/get-linode-interface-settings) operation provides eligible IPv6 interface IDs.", + "example": 1, + "nullable": true, + "type": "integer", + "x-linode-cli-display": 4 + } + }, + "type": "object" + }, + "network_helper": { + "description": "Enables the Network Helper feature. The default value is determined by the `network_helper` setting in the [account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings). [Power off the Linode](https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance) before disabling or enabling Network Helper.", + "example": false, + "type": "boolean", + "x-linode-cli-display": 1 + } + }, "type": "object", "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" + "file-path": "schemas/linode-interface-settings.yaml" } }, "x-example": { - "x-ref": "../examples/post-migrate-linode-instance-200.json" + "x-ref": "../examples/linode-interface-settings-200.json" } } }, - "description": "Scheduled migration started." + "description": "The updated Linode interface settings." }, "default": { "content": { @@ -51428,15 +52683,26 @@ ] } ], - "summary": "Initiate a DC migration/pending host migration", + "summary": "Update Linode interface settings", "tags": [ - "Linode instances" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes migrate 123 \\\n --region us-central \\\n --placement_group.id 528", - "title": "CLI", + "syntax": "linode-cli linodes interface-settings-update $linodeId \\\n --network_helper true \\\n --default_route.ipv4_interface_id 4527 \\\n --default_route.ipv6_interface_id 4541 \\\n --default_route.ipv4_eligible_interface_ids 4527 \\\n --default_route.ipv4_eligible_interface_ids 4541 \\\n --default_route.ipv6_eligible_interface_ids 4527 \\\n --default_route.ipv6_eligible_interface_ids 4541", + "title": "CLI: Public interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linode-cli linodes interface-settings-update $linodeId \\\n --network_helper true", + "title": "CLI: VLAN interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linode-cli linodes interface-settings-update $linodeId \\\n --network_helper true \\\n --default_route.ipv4_interface_id 5527 \\\n --default_route.ipv4_eligible_interface_ids 5527 \\\n --default_route.ipv4_eligible_interface_ids 5541 ", + "title": "CLI: VPC interface", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { @@ -51446,7 +52712,7 @@ } ] }, - "x-linode-cli-action": "migrate", + "x-linode-cli-action": "interface-settings-update", "x-linode-grant": "read_write" }, "parameters": [ @@ -51468,7 +52734,7 @@ } }, { - "description": "ID of the Linode to migrate.", + "description": "The `id` of the Linode.", "example": "{{linodeId}}", "in": "path", "name": "linodeId", @@ -51478,95 +52744,617 @@ "type": "integer" }, "x-akamai": { - "file-path": "parameters/linode-id-path-1510d8f8.yaml" + "file-path": "parameters/linode-id.yaml" } } ], "x-akamai": { - "file-path": "paths/migrate.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/migrate" + "file-path": "paths/linode-interface-settings.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/interfaces/settings", + "status": "BETA" }, "x-linode-cli-command": "linodes" }, - "/{apiVersion}/linode/instances/{linodeId}/mutate": { - "post": { - "description": "Linodes created with now-deprecated Types are entitled to a free upgrade to the next generation. A mutating Linode will be allocated any new resources the upgraded Type provides, and will be subsequently restarted if it was currently running. If any actions are currently running or queued, those actions must be completed first before you can initiate a mutate.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes upgrade 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "/{apiVersion}/linode/instances/{linodeId}/interfaces/{interfaceId}": { + "get": { + "description": "__Beta__ Returns an interface assigned to a specific Linode. This operation requires the `read_only` [grant](https://techdocs.akamai.com/linode-api/reference/get-user-grants) for the Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes interface-view $linodeId $interfaceId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-mutate-linode-instance" - }, - "operationId": "post-mutate-linode-instance", - "requestBody": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "allow_auto_disk_resize": { - "default": true, - "description": "Automatically resize disks when resizing a Linode. When resizing down to a smaller plan your Linode's data must fit within the smaller disk size.", - "example": "{{allow_auto_disk_resize}}", - "type": "boolean" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-post-mutate-linode-instance.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-mutate-linode-instance.json" - } - } - }, - "description": "Whether to automatically resize disks or not.", - "required": false + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-interface" }, + "operationId": "get-linode-interface", "responses": { "200": { "content": { "application/json": { - "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-mutate-linode-instance-200.json" - } - } - }, - "description": "Mutate started." - }, - "default": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "errors": { - "items": { - "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", - "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", - "type": "string" - }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" - } + "examples": { + "ex-public": { + "summary": "Public interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true, + "ipv6": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": { + "ipv4": { + "addresses": [ + { + "address": "172.30.0.50", + "primary": true + } + ], + "shared": [ + { + "address": "172.30.0.51", + "linode_id": 12345 + } + ] + }, + "ipv6": { + "ranges": [ + { + "range": "2600:3c09:e001:59::/64", + "route_target": "2600:3c09::ff:feab:cdef" + }, + { + "range": "2600:3c09:e001:5a::/64", + "route_target": "2600:3c09::ff:feab:cdef" + } + ], + "shared": [ + { + "range": "2600:3c09:e001:2a::/64", + "route_target": null + } + ], + "slaac": [ + { + "address": "2600:3c09::ff:feab:cdef", + "prefix": 64 + } + ] + } + }, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": null + } + }, + "ex-vlan": { + "summary": "VLAN interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": {}, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": { + "ipam_address": "10.0.0.1/24", + "vlan_label": "my-vlan" + }, + "vpc": null + } + }, + "ex-vpc": { + "summary": "VPC interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:02:01", + "version": 1, + "vlan": null, + "vpc": { + "ipv4": { + "addresses": [ + { + "address": "192.168.22.3", + "primary": true + } + ], + "ranges": [ + { + "range": "192.168.22.16/28" + }, + { + "range": "192.168.22.32/28" + } + ] + }, + "subnet_id": 1234, + "vpc_id": 1234 + } + } + } + }, + "schema": { + "description": "One of the following interface types: VPC, public, or VLAN.", + "oneOf": [ + { + "additionalProperties": false, + "description": "A public interface configuration defines the properties and settings for a specific public interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as a default route.", + "nullable": true, + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface is used for the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + }, + "ipv6": { + "default": false, + "description": "Indicates if the interface is used for the IPv6 default route. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. A public interface's `mac_address` does not change, even if the public interface is deleted and then recreated.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "Public interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's public IPv4 `addresses`.", + "properties": { + "addresses": { + "description": "The public IPv4 addresses and primary settings for this public interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The public IPv4 address assigned to this interface.", + "example": "172.232.100.100", + "type": "string", + "x-linode-cli-display": 8 + }, + "primary": { + "description": "Indicates if the public IPv4 address serves as the source address for traffic routing within the Linode and other corresponding network interfaces and services.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 9 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv4 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Shared IPv4 address.", + "example": "172.222.33.4", + "type": "string", + "x-linode-cli-display": 10 + }, + "linode_id": { + "description": "The ID of the Linode this address currently belongs to. For IPv4 addresses, by default this is the Linode this address was assigned when created.", + "example": 12345, + "type": "string", + "x-linode-cli-display": 11 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ipv6": { + "additionalProperties": false, + "description": "The interface's public IPv6 configuration.", + "properties": { + "ranges": { + "description": "List of IPv6 ranges assigned to this interface.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "IPv6 range in CIDR notation (`2600:0db8::1/64`) or prefix-only (`/64`).", + "example": "2600:3c09:e001:59::/64", + "type": "string", + "x-linode-cli-display": 16 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 17 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv6 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "The IPv6 address range.", + "example": "2600:3c09:e001:2a::/64", + "type": "string", + "x-linode-cli-display": 14 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": null, + "type": "string", + "x-linode-cli-display": 15 + } + }, + "type": "object" + }, + "type": "array" + }, + "slaac": { + "description": "The public `slaac` and subnet prefix settings for this public interface that is used to communicate over the public internet, and with other services in the same data center.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Public IPv6 addresses assigned to this interface.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 12 + }, + "prefix": { + "description": "The prefix length advertised for SLAAC to use. Only the specific (`/128`) EUI-64 address derived from the interface's MAC address is supported. To ensure the MAC-based EUI-64 address is used, privacy addressing needs to be disabled. Network Helper automatically configures the MAC-derived EUI-64 address. If you disable Network Helper or use an unsupported operating system, follow the specific instructions for your OS.", + "example": 64, + "type": "integer", + "x-linode-cli-display": 13 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that increments when the interface updates.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 7 + }, + "vlan": { + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-public.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VLAN interface configuration defines the properties and settings for a specific VLAN interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "description": "The value is `null` if this isn't a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that is incremented when the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 5 + }, + "vlan": { + "additionalProperties": false, + "description": "VLAN interface type.", + "properties": { + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "nullable": true, + "type": "string", + "x-linode-cli-display": 7 + }, + "vlan_label": { + "description": "The VLAN's label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", + "type": "string", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "vpc": { + "description": "The value is `null` if this isn't a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vlan.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VPC interface configuration defines settings for a specific VPC interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface serves as a default route.", + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface serves as the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "The value is `null` if this is not a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface last updated.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "The version number of the interface configuration, incremented each time the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 6 + }, + "vlan": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's IPv4 `addresses` and `ranges` configuration.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The VPC subnet IPv4 address.", + "example": "192.168.22.3", + "type": "string", + "x-linode-cli-display": 9 + }, + "nat_1_1_address": { + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 11 + }, + "primary": { + "description": "Indicates if the IPv4 address is used to set up a source address for routes inside the Linode for the corresponding network interface.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 10 + } + }, + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).", + "example": "192.168.22.16/28", + "type": "string", + "x-linode-cli-display": 12 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "subnet_id": { + "description": "VPC subnet's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 8 + }, + "vpc_id": { + "description": "VPC's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 7 + } + }, + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vpc.yaml" + } + } + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface.yaml" + } + } + } + }, + "description": "Returns a single interface available for a Linode." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } }, "type": "array" } @@ -51588,583 +53376,991 @@ ] } ], - "summary": "Upgrade a Linode", + "summary": "Get a Linode interface", "tags": [ - "Linode instances" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes upgrade 123", + "syntax": "linode-cli linodes interface-view $linodeId $interfaceId", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "linodes:read_write", + "syntax": "linodes:read_only", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "upgrade", + "x-linode-cli-action": "interface-view", "x-linode-grant": "read_write" }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode to mutate.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-ddb4b8aa.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/mutate.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/mutate" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/nodebalancers": { - "get": { - "description": "Returns a list of NodeBalancers that are assigned to this Linode and readable by the requesting User.\n\nRead permission to a NodeBalancer can be given to a User by accessing the [Update a user's grants](https://techdocs.akamai.com/linode-api/reference/put-user-grants) operation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes nodebalancers 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "put": { + "description": "__Beta__ Update the configuration of a Linode interface.\n\n\n<>\n\n---\n\n\n- __CLI: Public interface__.\n\n ```\n linode-cli linodes interface-update $linodeId $interfaceId \\\n --default_route.ipv4 true \\\n --default_route.ipv6 false \\\n --public.ipv4.addresses '[{\"address\": \"192.0.2.141\", \"primary\": true}, {\"address\": \"auto\", \"primary\": false}]' \\\n --public.ipv6.ranges '[{\"range\": \"2001:0db8\"::1/64\"}, {\"range\": \"/64\"}]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __CLI: VLAN interface__.\n\n ```\n linode-cli linodes interface-update $linodeId $interfaceId \\\n --vlan.vlan_label my-vlan \\\n --vlan.ipam_address 192.168.2.2/24\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __CLI: VPC interface__.\n\n ```\n linode-cli linodes interface-update $linodeId $interfaceId \\\n --default_route.ipv4 true \\\n --vpc.subnet_id 321 \\\n --vpc.ipv4.addresses '[{\"address\": \"10.0.0.1\", \"primary\": true, \"nat_1_1_address\": \"auto\"}, {\"address\": \"auto\", \"primary\": false, \"nat_1_1_address\": null}]' \\\n --vpc.ipv4.ranges '[{\"range\": \"/28\"}, {\"range\": \"10.11.12.0/24\"}]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-node-balancers" + "url": "https://techdocs.akamai.com/linode-api/reference/put-linode-interface" }, - "operationId": "get-linode-node-balancers", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "data": { - "items": { + "operationId": "put-linode-interface", + "requestBody": { + "content": { + "application/json": { + "schema": { + "description": "Modifies an existing Linode interface. The interface type (`vpc`, `public`, `vlan`) can't be changed.", + "oneOf": [ + { + "additionalProperties": false, + "description": "Modifies an existing Linode public interface. The public interface can't be changed to a VLAN or VPC interface type.\n\nIf Network Helper is enabled, the Linode must be shut down before updating the `address`, or `primary` setting.", + "properties": { + "default_route": { "additionalProperties": false, - "description": "Linode's load balancing solution. Can handle multiple ports, SSL termination, and any number of backends. NodeBalancer ports are configured with NodeBalancer configs, and each config is given one or more NodeBalancer nodes that accepts traffic. The traffic should be routed to the NodeBalancer's IP address, for the NodeBalancer to handle routing individual requests to backends.", + "description": "Defines whether IPv4 and IPv6 default routes are enabled for this interface. Public interfaces can have both an IPv4 and IPv6 `default_route`, provided they have at least one IP address of the corresponding type. If the `default_route` is omitted, (or set to `null`), no changes are made to the `default_route` configuration.", "properties": { - "client_conn_throttle": { - "description": "Throttle TCP connections per second for TCP, HTTP, and HTTPS configurations. Set to `0` (zero) to disable throttling.", - "example": 10, - "maximum": 20, - "minimum": 0, - "type": "integer", - "x-linode-cli-display": 9 - }, - "created": { - "description": "__Read-only__ When this NodeBalancer was created.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - }, - "hostname": { - "description": "__Read-only__ This NodeBalancer's hostname, beginning with its IP address and ending with _.ip.linodeusercontent.com_.", - "example": "192.0.2.1.ip.linodeusercontent.com", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - }, - "id": { - "description": "__Read-only__ This NodeBalancer's unique ID.", - "example": 12345, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 - }, "ipv4": { - "description": "__Filterable__, __Read-only__ This NodeBalancer's public IPv4 address.", - "example": "203.0.113.1", - "format": "ip", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 6, - "x-linode-filterable": true + "description": "If set to `true`, and if the interface has at least one IPv4 address after the PUT request, the `default_route` role is assigned to the interface. If another interface is already configured as the default route, this setting removes that configuration. If the interface has an IPv4 address, the value cannot be set as `false`.", + "example": true, + "nullable": true, + "type": "boolean" }, "ipv6": { - "description": "__Read-only__ This NodeBalancer's public IPv6 address.", - "example": null, - "format": "ip", + "description": "If set to `true`, and if the interface has at least one IPv6 address after the PUT request, the `default_route` role is assigned to the interface. If another interface is already configured as the default route, this setting removes that configuration. If the interface has an IPv6 address, the value cannot be set as `false`.", + "example": true, "nullable": true, - "readOnly": true, - "type": "string", - "x-linode-cli-display": 7 - }, - "label": { - "description": "__Filterable__ This NodeBalancer's label. These must be unique on your Account.", - "example": "balancer12345", - "maxLength": 32, - "minLength": 3, - "pattern": "[a-zA-Z0-9-_]{3,32}", - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 2, - "x-linode-filterable": true - }, - "lke_cluster": { + "type": "boolean" + } + }, + "type": "object" + }, + "public": { + "additionalProperties": false, + "description": "Public interface settings.", + "nullable": true, + "properties": { + "ipv4": { "additionalProperties": false, - "description": "__Read-only__ This NodeBalancer's related LKE cluster, if any. The value is `null` if this NodeBalancer isn't related to an LKE cluster.", - "nullable": true, + "description": "IPv4 address settings for this public interface.", "properties": { - "id": { - "description": "The ID of the related LKE cluster.", - "example": 12345, - "type": "string" - }, - "label": { - "description": "The label of the related LKE cluster.", - "example": "lkecluster12345", - "type": "string" - }, - "type": { - "description": "__Read-only__ The type for LKE clusters.", - "example": "lkecluster", - "readOnly": true, - "type": "string" - }, - "url": { - "description": "The URL where you can access the related LKE cluster.", - "example": "/v4/lke/clusters/12345", - "type": "string" + "addresses": { + "description": "List of IPv4 addresses to assign to this interface. When updating the addresses, all addresses must be explicitly listed in the array, and any addresses not included in the update are removed. If omitted or set to `null`, no changes are made to the existing IPv4 configuration.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "default": "auto", + "description": "The public IPv4 address configuration for the interface. If set to `auto`, a public IPv4 address is allocated. If the address is a reserved or an automatically assigned public IP, the IP must be reserved or already assigned to a single Linode, and it can\u2019t be already assigned to an interface.", + "example": [ + "192.0.2.141", + "auto" + ], + "type": "string" + }, + "primary": { + "description": "The IPv4 primary address for the interface that is used to set up a source address for routes inside the Linode for the corresponding network interface.\nAutomatically set to `true` and should not be set to `false` if there is only one address present in the addresses array.\nIf more than one address is provided, primary must be set to `true` for one address.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" } }, - "readOnly": true, - "type": "object", - "x-linode-cli-display": 8 - }, - "region": { - "description": "__Filterable__, __Read-only__ The Region where this NodeBalancer is located. NodeBalancers only support backends in the same Region.", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 3, - "x-linode-filterable": true - }, - "tags": { - "description": "__Filterable__ An array of Tags applied to this object. Tags are for organizational purposes only.", - "example": [ - "example tag", - "another example" - ], - "items": { - "type": "string" - }, - "type": "array", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true + "type": "object" }, - "transfer": { + "ipv6": { "additionalProperties": false, - "description": "__Read-only__ Information about the amount of transfer this NodeBalancer has had so far this month.", + "description": "IPv6 address settings for the public interface.", "properties": { - "in": { - "description": "__Read-only__ The total outbound transfer, in MB, used for this NodeBalancer this month.", - "example": 28.91200828552246, - "nullable": true, - "readOnly": true, - "type": "number" - }, - "out": { - "description": "__Read-only__ The total inbound transfer, in MB, used for this NodeBalancer this month.", - "example": 3.5487728118896484, - "nullable": true, - "readOnly": true, - "type": "number" - }, - "total": { - "description": "__Read-only__ The total transfer, in MB, used by this NodeBalancer this month.", - "example": 32.46078109741211, - "nullable": true, - "readOnly": true, - "type": "number" + "ranges": { + "description": "List of IPv6 address ranges to assign to this interface. If range is omitted, or set to `null`, no changes are made to the IPv6 ranges of the interface. If range is updated, specify all ranges in this array, otherwise, the currently assigned ranges will be removed.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "default": null, + "description": "IPv6 range in CIDR notation (`2001:0db8::1/64`) or prefix-only (`/64`).\n- The prefix of /64 or /56 block of IPv6 addresses.\n- CIDR notation ranges must be within your assigned ranges.", + "example": [ + "2001:0db8::1/64", + "/64" + ], + "type": "string" + } + }, + "required": [ + "range" + ], + "type": "object" + }, + "type": "array" } }, - "readOnly": true, "type": "object" - }, - "type": { - "description": "__Read-only__ The type of NodeBalancer.", - "enum": [ - "common" - ], - "example": "common", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "updated": { - "description": "__Read-only__ When this NodeBalancer was last updated.", - "example": "2018-03-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" } }, - "title": "NodeBalancer", - "type": "object", - "x-akamai": { - "file-path": "schemas/node-balancer.yaml" - } - }, - "type": "array" - }, - "page": { - "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", - "example": 1, - "readOnly": true, - "type": "integer" - }, - "pages": { - "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", - "example": 1, - "readOnly": true, - "type": "integer" + "type": "object" + } }, - "results": { - "description": "__Read-only__ The total number of results.", - "example": 1, - "readOnly": true, - "type": "integer" + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-put-linode-interface-public.yaml" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-get-linode-node-balancers-200.yaml" - } - }, - "x-example": { - "x-ref": "../examples/get-linode-node-balancers-200.json" - } - } - }, - "description": "Returns a paginated list of NodeBalancers." - } - }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "linodes:read_only" - ] - } - ], - "summary": "List Linode NodeBalancers", - "tags": [ - "NodeBalancers" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linode-cli linodes nodebalancers 123", - "title": "CLI", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "linodes:read_only", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" - } - ] - }, - "x-linode-cli-action": "nodebalancers", - "x-linode-grant": "read_only" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode to look up.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-32b5e821.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/linode-node-balancers.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/nodebalancers" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/password": { - "post": { - "description": "Resets the root password for this Linode.\n\n- Your Linode must be [shut down](https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance) for a password reset to complete.\n- If your Linode has more than one disk (not counting its swap disk), run the [Reset a disk root password](https://techdocs.akamai.com/linode-api/reference/post-reset-disk-password) operation to update a specific disk's root password.\n- A `password_reset` event is generated when a root password reset is successful.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes linode-reset-password 123 a$eCure4assw0rd!43v51\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-reset-linode-password" - }, - "operationId": "post-reset-linode-password", - "requestBody": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "root_pass": { - "description": "The root user's password on this Linode. Linode passwords must meet a password strength score requirement that is calculated internally by the API. If the strength requirement is not met, you will receive a Password does not meet strength requirement error.", - "example": "{{root_pass}}", - "type": "string" - } - }, - "required": [ - "root_pass" - ], - "type": "object", - "x-akamai": { - "file-path": "schemas/added-post-reset-linode-password.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-reset-linode-password.json" - } - } - }, - "description": "This Linode's new root password." - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-reset-linode-password-200.json" - } - } - }, - "description": "Password Reset." - }, - "default": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "errors": { - "items": { + { + "additionalProperties": false, + "description": "Modifies an existing Linode VLAN interface. The VLAN interface can't be changed to a VPC or public interface type.", + "properties": { + "vlan": { "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", + "description": "VLAN interface settings.", "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation. The `ipam_address` can't be updated. It needs to be the existing value, or `null`.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "nullable": true, "type": "string" }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", + "vlan_label": { + "description": "The VLAN's label. Once you specify it, you can't update it.", + "example": "my-vlan", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", "type": "string" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" - } - }, - "type": "array" + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-put-linode-interface-vlan.yaml" } }, - "type": "object" - } - } - }, - "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." - } - }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "linodes:read_write" - ] - } - ], - "summary": "Reset a Linode's root password", - "tags": [ - "Linode instances" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linode-cli linodes linode-reset-password 123 a$eCure4assw0rd!43v51", - "title": "CLI", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "linodes:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" - } - ] - }, - "x-linode-cli-action": "linode-reset-password", - "x-linode-grant": "read_write" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode for which to reset its root password.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-9dcaaf12.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/linode-password.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/password" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/reboot": { - "post": { - "description": "Reboots a Linode you have permission to modify. If any actions are currently running or queued, those actions must be completed first before you can initiate a reboot.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes reboot 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance" - }, - "operationId": "post-reboot-linode-instance", - "requestBody": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "config_id": { - "description": "The Linode Config ID to reboot into. If `null` or omitted, the last booted config will be used. If there was no last booted config and this Linode only has one config, it will be used. If a config cannot be determined, an error will be returned.", - "example": "{{config_id}}", - "nullable": true, - "type": "integer" + { + "additionalProperties": false, + "description": "Modifies an existing Linode VPC interface. The VPC interface can't be changed to a VLAN or public interface type.\nIf Network Helper is enabled, shut down the Linode before updating the `address`, or `primary` setting.", + "properties": { + "default_route": { + "description": "Indicates if the interface is used as the default route. A VPC interface can have an IPv4 `default_route`.", + "properties": { + "ipv4": { + "description": "If set to `true`, and if the interface has at least one IPv4 address after the `PUT` request, the `default_route` role is assigned to the interface. If another interface is already configured as the default route, this setting removes that configuration. If the interface has an IPv4 address, the value can't be set to `false`. If this is omitted, or set to `null`, no changes are made to the interface's IPv4 configuration.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface settings.", + "nullable": true, + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "Interfaces can be configured with IPv4 `addresses` or `ranges`. If this is omitted, or set to `null`, no changes are made to the IPv4 configuration.", + "properties": { + "addresses": { + "description": "IPv4 configuration for this VPC interface. When updating the addresses, all addresses must be explicitly listed in the array, and any addresses not included in the update are removed. If omitted or set to `null`, no changes are made to the existing IPv4 configuration. However, if the `subnet_id` is updated, new default address values are applied.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "default": "auto", + "description": "Specifies which IPv4 addresses to use in the VPC subnet. You can't use an IPv4 address taken from another Linode or interface, or the first two or last two addresses in the VPC subnet. Setting `address` to `auto` automatically assigns an IP address from the subnet.", + "example": [ + "192.168.22.3", + "auto" + ], + "type": "string" + }, + "nat_1_1_address": { + "default": null, + "description": "The 1:1 NAT IPv4 address that links a public IPv4 address with the interface's VPC subnet IPv4 address.\n\n- You can set this to a specific public IPv4 address that's available on the Linode.\n\n- If set to `auto`, a public IPv4 address is automatically selected.\n\n- If a public IPv4 address or `auto` is specified, `primary` must be set to `true`.\n\n- A specified address can't be used on another Linode.\n\n- If the address is a reserved or an automatically assigned public IP, the IP must be reserved or already assigned to a single Linode, and not assigned to an interface.\n\n- Omitting this or setting it to `null` results in no 1:1 NAT configuration for the VPC interface.", + "example": [ + null, + "auto", + "192.0.2.141" + ], + "type": "string" + }, + "primary": { + "description": "The IPv4 primary address for the interface that sets up a source address for routes inside the Linode for the corresponding network interface.\nAutomatically sets to `true` and should not be set to `false` if there is only one address present in the `addresses` array.\nIf more than one `address` is provided, `primary` must be set to `true` for one address.", + "example": true, + "nullable": true, + "type": "boolean" + } + }, + "required": [ + "address" + ], + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges. If you omit `ranges` or set it to `null`, the interface's IPv4 ranges remain unchanged. But if you update `ranges`, you need to specify all of them, otherwise currently assigned ranges are removed.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "default": null, + "description": "CIDR notation of a range (`1.2.3.4/28`) or prefix only (`/28`):\n- When only the prefix is provided, then an available range of that size within the VPC's subnet is automatically selected.\n- If specified as CIDR notation, it must belong to the VPC subnet. All addresses in the range must not be taken by any other Linode or interfaces in the VPC subnet and must not include any of the first two or last two addresses of the VPC subnet.", + "example": [ + "192.168.22.16/28", + "192.168.22.32/28", + "/28", + "auto" + ], + "nullable": true, + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "subnet_id": { + "description": "The VPC subnet identifier for this interface. Your subnet\u2019s VPC must be in the same data center (region) as the Linode. If the subnet is updated, the IP configuration should also be updated. If the subnet is updated without updating the IP configuration, defaults are applied.", + "example": 321, + "type": "integer" + } + }, + "required": [ + "subnet_id" + ], + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/added-put-linode-interface-vpc.yaml" + } } - }, + ], "type": "object", "x-akamai": { - "file-path": "schemas/added-post-reboot-linode-instance.yaml" + "file-path": "schemas/added-put-linode-interface.yaml" } }, "x-example": { - "x-ref": "../examples/post-reboot-linode-instance.json" + "x-ref": "../examples/linode-interface.json" } } }, - "description": "Optional reboot parameters." + "required": true }, "responses": { "200": { "content": { "application/json": { - "schema": { - "description": "The API responds with an empty object.", + "examples": { + "ex-public": { + "summary": "Public interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true, + "ipv6": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": { + "ipv4": { + "addresses": [ + { + "address": "172.30.0.50", + "primary": true + } + ], + "shared": [ + { + "address": "172.30.0.51", + "linode_id": 12345 + } + ] + }, + "ipv6": { + "ranges": [ + { + "range": "2600:3c09:e001:59::/64", + "route_target": "2600:3c09::ff:feab:cdef" + }, + { + "range": "2600:3c09:e001:5a::/64", + "route_target": "2600:3c09::ff:feab:cdef" + } + ], + "shared": [ + { + "range": "2600:3c09:e001:2a::/64", + "route_target": null + } + ], + "slaac": [ + { + "address": "2600:3c09::ff:feab:cdef", + "prefix": 64 + } + ] + } + }, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": null + } + }, + "ex-vlan": { + "summary": "VLAN interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": {}, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:01:01", + "version": 1, + "vlan": { + "ipam_address": "10.0.0.1/24", + "vlan_label": "my-vlan" + }, + "vpc": null + } + }, + "ex-vpc": { + "summary": "VPC interface", + "value": { + "created": "2025-01-01T00:01:01", + "default_route": { + "ipv4": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2025-01-01T00:02:01", + "version": 1, + "vlan": null, + "vpc": { + "ipv4": { + "addresses": [ + { + "address": "192.168.22.3", + "primary": true + } + ], + "ranges": [ + { + "range": "192.168.22.16/28" + }, + { + "range": "192.168.22.32/28" + } + ] + }, + "subnet_id": 1234, + "vpc_id": 1234 + } + } + } + }, + "schema": { + "description": "One of the following interface types: VPC, public, or VLAN.", + "oneOf": [ + { + "additionalProperties": false, + "description": "A public interface configuration defines the properties and settings for a specific public interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as a default route.", + "nullable": true, + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface is used for the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + }, + "ipv6": { + "default": false, + "description": "Indicates if the interface is used for the IPv6 default route. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. A public interface's `mac_address` does not change, even if the public interface is deleted and then recreated.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "Public interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's public IPv4 `addresses`.", + "properties": { + "addresses": { + "description": "The public IPv4 addresses and primary settings for this public interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The public IPv4 address assigned to this interface.", + "example": "172.232.100.100", + "type": "string", + "x-linode-cli-display": 8 + }, + "primary": { + "description": "Indicates if the public IPv4 address serves as the source address for traffic routing within the Linode and other corresponding network interfaces and services.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 9 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv4 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Shared IPv4 address.", + "example": "172.222.33.4", + "type": "string", + "x-linode-cli-display": 10 + }, + "linode_id": { + "description": "The ID of the Linode this address currently belongs to. For IPv4 addresses, by default this is the Linode this address was assigned when created.", + "example": 12345, + "type": "string", + "x-linode-cli-display": 11 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ipv6": { + "additionalProperties": false, + "description": "The interface's public IPv6 configuration.", + "properties": { + "ranges": { + "description": "List of IPv6 ranges assigned to this interface.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "IPv6 range in CIDR notation (`2600:0db8::1/64`) or prefix-only (`/64`).", + "example": "2600:3c09:e001:59::/64", + "type": "string", + "x-linode-cli-display": 16 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 17 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv6 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "The IPv6 address range.", + "example": "2600:3c09:e001:2a::/64", + "type": "string", + "x-linode-cli-display": 14 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": null, + "type": "string", + "x-linode-cli-display": 15 + } + }, + "type": "object" + }, + "type": "array" + }, + "slaac": { + "description": "The public `slaac` and subnet prefix settings for this public interface that is used to communicate over the public internet, and with other services in the same data center.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Public IPv6 addresses assigned to this interface.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 12 + }, + "prefix": { + "description": "The prefix length advertised for SLAAC to use. Only the specific (`/128`) EUI-64 address derived from the interface's MAC address is supported. To ensure the MAC-based EUI-64 address is used, privacy addressing needs to be disabled. Network Helper automatically configures the MAC-derived EUI-64 address. If you disable Network Helper or use an unsupported operating system, follow the specific instructions for your OS.", + "example": 64, + "type": "integer", + "x-linode-cli-display": 13 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that increments when the interface updates.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 7 + }, + "vlan": { + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-public.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VLAN interface configuration defines the properties and settings for a specific VLAN interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "description": "The value is `null` if this isn't a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that is incremented when the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 5 + }, + "vlan": { + "additionalProperties": false, + "description": "VLAN interface type.", + "properties": { + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "nullable": true, + "type": "string", + "x-linode-cli-display": 7 + }, + "vlan_label": { + "description": "The VLAN's label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", + "type": "string", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "vpc": { + "description": "The value is `null` if this isn't a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vlan.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VPC interface configuration defines settings for a specific VPC interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface serves as a default route.", + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface serves as the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "The value is `null` if this is not a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface last updated.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "The version number of the interface configuration, incremented each time the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 6 + }, + "vlan": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's IPv4 `addresses` and `ranges` configuration.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The VPC subnet IPv4 address.", + "example": "192.168.22.3", + "type": "string", + "x-linode-cli-display": 9 + }, + "nat_1_1_address": { + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 11 + }, + "primary": { + "description": "Indicates if the IPv4 address is used to set up a source address for routes inside the Linode for the corresponding network interface.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 10 + } + }, + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).", + "example": "192.168.22.16/28", + "type": "string", + "x-linode-cli-display": 12 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "subnet_id": { + "description": "VPC subnet's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 8 + }, + "vpc_id": { + "description": "VPC's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 7 + } + }, + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vpc.yaml" + } + } + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface.yaml" + } + } + } + }, + "description": "The Linode interface was successfully updated." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Update a Linode interface", + "tags": [ + "Linode interfaces" + ], + "x-akamai": { + "status": "BETA", + "tabs": [ + { + "syntax": "linode-cli linodes interface-update $linodeId $interfaceId \\\n --default_route.ipv4 true \\\n --default_route.ipv6 false \\\n --public.ipv4.addresses '[{\"address\": \"192.0.2.141\", \"primary\": true}, {\"address\": \"auto\", \"primary\": false}]' \\\n --public.ipv6.ranges '[{\"range\": \"2001:0db8\"::1/64\"}, {\"range\": \"/64\"}]'", + "title": "CLI: Public interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linode-cli linodes interface-update $linodeId $interfaceId \\\n --vlan.vlan_label my-vlan \\\n --vlan.ipam_address 192.168.2.2/24", + "title": "CLI: VLAN interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linode-cli linodes interface-update $linodeId $interfaceId \\\n --default_route.ipv4 true \\\n --vpc.subnet_id 321 \\\n --vpc.ipv4.addresses '[{\"address\": \"10.0.0.1\", \"primary\": true, \"nat_1_1_address\": \"auto\"}, {\"address\": \"auto\", \"primary\": false, \"nat_1_1_address\": null}]' \\\n --vpc.ipv4.ranges '[{\"range\": \"/28\"}, {\"range\": \"10.11.12.0/24\"}]'", + "title": "CLI: VPC interface", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "interface-update", + "x-linode-grant": "read_write" + }, + "delete": { + "description": "__Beta__ Deletes a Linode interface on a specific Linode. To access this operation, you need the `read_write` [grant](https://techdocs.akamai.com/linode-api/reference/get-user-grants) for the Linode. You can't delete an active interface. First, you need to shut down the associated Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes interface-delete $linodeId $interfaceId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/delete-linode-interface" + }, + "operationId": "delete-linode-interface", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "created": "2024-01-01T00:01:01", + "default_route": { + "ipv4": true + }, + "id": 1234, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2024-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": { + "ipv4": { + "addresses": [ + { + "address": "192.168.22.3", + "primary": true + } + ], + "ranges": [ + { + "range": "192.168.22.16/28" + }, + { + "range": "192.168.22.32/28" + } + ] + }, + "subnet_id": 1234, + "vpc_id": 1234 + } + }, + "schema": { + "description": "The API responds with an empty object.", "maxProperties": 0, "type": "object", "x-akamai": { "file-path": "schemas/added-empty-obj.yaml" } - }, - "x-example": { - "x-ref": "../examples/post-reboot-linode-instance-200.json" } } }, - "description": "Reboot started." + "description": "A Linode interface is successfully deleted." }, "default": { "content": { @@ -52213,14 +54409,15 @@ ] } ], - "summary": "Reboot a Linode", + "summary": "Delete a Linode interface", "tags": [ - "Linode instances" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes reboot 123", + "syntax": "linode-cli linodes interface-delete $linodeId $interfaceId", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -52231,7 +54428,7 @@ } ] }, - "x-linode-cli-action": "reboot", + "x-linode-cli-action": "interface-delete", "x-linode-grant": "read_write" }, "parameters": [ @@ -52253,7 +54450,7 @@ } }, { - "description": "ID of the linode to reboot.", + "description": "The `id` of the Linode.", "example": "{{linodeId}}", "in": "path", "name": "linodeId", @@ -52263,591 +54460,445 @@ "type": "integer" }, "x-akamai": { - "file-path": "parameters/linode-id-path-84c49e3c.yaml" + "file-path": "parameters/linode-id.yaml" + } + }, + { + "description": "The `id` of the Linode interface.", + "example": "{{interfaceId}}", + "in": "path", + "name": "interfaceId", + "required": true, + "schema": { + "example": 1234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-interface-id-path.yaml" } } ], "x-akamai": { - "file-path": "paths/reboot.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/reboot" + "file-path": "paths/linode-interface.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/interfaces/{interfaceId}", + "status": "BETA" }, "x-linode-cli-command": "linodes" }, - "/{apiVersion}/linode/instances/{linodeId}/rebuild": { - "post": { - "description": "Rebuilds a Linode you have the `read_write` permission to modify.\n\nA rebuild will first shut down the Linode, delete all disks and configs on the Linode, and then deploy a new `image` to the Linode with the given attributes. Additionally:\n\n - Requires an `image` be supplied.\n - Requires a `root_pass` be supplied to use for the root User's Account.\n - It is recommended to supply SSH keys for the root User using the `authorized_keys` field.\n - Linodes utilizing Metadata (`\"has_user_data\": true`) should include `metadata.user_data` in the rebuild request to continue using the service.\n\nDuring a rebuild, you can `enable` or `disable` local disk encryption. If disk encryption is not included in the request, the previous `disk_encryption` value is used. Disk encryption cannot be disabled if the compute instance is attached to an LKE node pool.\n\nYou also have the option to resize the Linode to a different plan by including the `type` parameter with your request. Note that resizing involves migrating the Linode to a new hardware host, while rebuilding without resizing maintains the same hardware host. Resizing also requires significantly more time for completion of this operation. The following additional conditions apply:\n\n - The Linode must not have a pending migration.\n - Your Account cannot have an outstanding balance.\n - The Linode must not have more disk allocation than the new Type allows.\n - In that situation, you must first delete or resize the disk to be smaller.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes rebuild 123 \\\n --image \"linode/debian9\" \\\n --root_pass aComplex@Password \\\n --disk_encryption disabled \\\n --authorized_keys \"ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer\" \\\n --authorized_users \"myUsername\" \\\n --authorized_users \"secondaryUsername\" \\\n --booted true \\\n --stackscript_id 10079 \\\n --stackscript_data '{\"gh_username\": \"linode\"}' \\\n --type \"g6-standard-2\" \\\n --metadata.userdata \"I2Nsb3VkLWNvbmZpZw==\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "/{apiVersion}/linode/instances/{linodeId}/interfaces/{interfaceId}/firewalls": { + "get": { + "description": "__Beta__ Lists firewalls assigned to an interface.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes interface-firewalls-list $linodeId $interfaceId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance" - }, - "operationId": "post-rebuild-linode-instance", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "additionalProperties": false, - "description": "Common properties for creating and rebuilding Linodes.", - "properties": { - "authorized_keys": { - "description": "__Write-only__ A list of public SSH keys that will be automatically appended to the root user's `~/.ssh/authorized_keys` file when deploying from an Image.", - "example": [ - "ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer" - ], - "items": { - "type": "string" - }, - "type": "array", - "writeOnly": true - }, - "authorized_users": { - "description": "__Write-only__ A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the root users `~/.ssh/authorized_keys` file automatically when deploying from an Image.", - "example": [ - "myUser", - "secondaryUser" - ], - "items": { - "type": "string" - }, - "type": "array", - "writeOnly": true - }, - "booted": { - "default": true, - "description": "__Write-only__ This field defaults to `true` if the Linode is created with an Image or from a Backup. If it is deployed from an Image or a Backup and you wish it to remain `offline` after deployment, set this to `false`.", - "type": "boolean", - "writeOnly": true - }, - "disk_encryption": { - "description": "__Limited availability__ Local disk encryption ensures that your data stored on Linodes is secured. Disk encryption protects against unauthorized data access by keeping the data encrypted if the disk is ever removed from the data center, decommissioned, or disposed of. The platform manages the encryption and decryption for you.\n\nBy default, encryption is `enabled` on all Linodes. If you opted out of encryption or if the Linode was created prior to local disk encryption support, you can encrypt your data using [Rebuild](https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance).", - "enum": [ - "enabled", - "disabled" - ], - "type": "string", - "x-akamai": { - "status": "LA" - }, - "x-linode-cli-display": 8 - }, - "image": { - "description": "An Image ID to deploy the Linode Disk from.\n\nRun the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation with authentication to view all available Images. Official Linode Images start with `linode/`, while your Account's Images start with `private/`. Creating a disk from a Private Image requires `read_only` or `read_write` permissions for that Image. Run the [Update a user's grants](https://techdocs.akamai.com/linode-api/reference/put-user-grants) operation to adjust permissions for an Account Image.", - "example": "linode/debian9", - "type": "string" - }, - "metadata": { - "additionalProperties": false, - "description": "__Write-only__ An object containing user-defined data relevant to the creation of Linodes.", - "properties": { - "user_data": { - "description": "Base64-encoded [cloud-config](https://www.linode.com/docs/products/compute/compute-instances/guides/metadata-cloud-config/) data.\n\nCannot be modified after provisioning. To update, use either the [Clone a Linode](https://techdocs.akamai.com/linode-api/reference/post-clone-linode-instance) or [Rebuild a Linode](https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance) operations.\n\nMust not be included when cloning to an existing Linode.\n\nUnencoded data must not exceed 65535 bytes, or about 16kb encoded.", - "example": "I2Nsb3VkLWNvbmZpZwpwYWNrYWdlX3VwZGF0ZTogdHJ1ZQpwYWNrYWdlX3VwZ3JhZGU6IHRydWU=", - "format": "byte", - "type": "string" - } - }, - "type": "object", - "writeOnly": true - }, - "root_pass": { - "description": "__Write-only__ This sets the root user's password on a newly created Linode Disk when deploying from an Image.\n\n- __Required__ when creating a Linode Disk from an Image, including when using a StackScript.\n\n- Must meet a password strength score requirement that is calculated internally by the API. If the strength requirement is not met, you will receive a `Password does not meet strength requirement` error.", - "example": "aComplexP@ssword", - "format": "password", - "maxLength": 128, - "minLength": 7, - "type": "string", - "writeOnly": true - }, - "stackscript_data": { - "description": "This field is required only if the StackScript being deployed requires input data from the User for successful completion. See [User Defined Fields (UDFs)](https://www.linode.com/docs/products/tools/stackscripts/guides/write-a-custom-script/#declare-user-defined-fields-udfs) for more details.\n\nThis field is required to be valid JSON.\n\nTotal length cannot exceed 65,535 characters.", - "example": { - "gh_username": "linode" - }, - "maxLength": 65535, - "type": "object" - }, - "stackscript_id": { - "description": "A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode. A compatible `image` is required to use a StackScript. To get a list of available StackScript and their permitted Images, run [List StackScripts](https://techdocs.akamai.com/linode-api/reference/get-stack-scripts). This field cannot be used when deploying from a Backup or a Private Image.", - "example": 10079, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/linode-request.yaml" - } - }, - { - "additionalProperties": false, - "properties": { - "type": { - "description": "The ID of the [Linode type](https://techdocs.akamai.com/linode-api/reference/get-linode-types) to resize to with this request.", - "example": "g6-standard-2", - "type": "string" - } - }, - "type": "object" - } - ], - "required": [ - "image", - "root_pass" - ], - "type": "object", - "x-akamai": { - "file-path": "schemas/added-post-rebuild-linode-instance.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-rebuild-linode-instance.json" - } - } - }, - "description": "The requested state your Linode will be rebuilt into.", - "required": true + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-interface-firewalls" }, + "operationId": "get-linode-interface-firewalls", "responses": { "200": { "content": { "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "alerts": { - "additionalProperties": false, - "properties": { - "cpu": { - "description": "The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. Your Linode's total CPU capacity is represented as 100%, multiplied by its number of cores.\n\nFor example, a two core Linode's CPU capacity is represented as 200%. If you want to be alerted at 90% of a two core Linode's CPU capacity, set the alert value to `180`.\n\nThe default value is 90% multiplied by the number of cores.\n\nIf the value is set to `0` (zero), the alert is disabled.", - "example": 180, - "type": "integer" - }, - "io": { - "description": "The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to `0` (zero), this alert is disabled.", - "example": 10000, - "type": "integer" - }, - "network_in": { - "description": "The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to `0` (zero), the alert is disabled.", - "example": 10, - "type": "integer" - }, - "network_out": { - "description": "The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to `0` (zero), the alert is disabled.", - "example": 10, - "type": "integer" - }, - "transfer_quota": { - "description": "The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to `0` (zero), the alert is disabled.", - "example": 80, - "type": "integer" - } - }, - "type": "object" - }, - "backups": { - "additionalProperties": false, - "description": "Information about this Linode's backups status. For information about available backups, run [List backups](https://techdocs.akamai.com/linode-api/reference/get-backups).", - "properties": { - "available": { - "description": "__Read-only__ Whether Backups for this Linode are available for restoration.\n\nBackups undergoing maintenance are not available for restoration.", - "example": true, - "readOnly": true, - "type": "boolean" - }, - "enabled": { - "description": "__Read-only__ If this Linode has the Backup service enabled. To enable backups, run [Enable backups](https://techdocs.akamai.com/linode-api/reference/post-enable-backups).", - "example": true, - "readOnly": true, - "type": "boolean" - }, - "last_successful": { - "description": "__Read-only__ The last successful backup time. Displayed as `null` if there was no previous backup.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "day": { - "description": "The day of the week that your Linode's weekly backup is taken. If not set manually, a day will be chosen for you. Backups are taken every day, but backups taken on this day are preferred when selecting backups to retain for a longer period.\n\nIf not set manually, then when backups are initially enabled, this may come back as `Scheduling` until the `day` is automatically selected.", - "enum": [ - "Scheduling", - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" + "example": { + "data": [ + { + "created": "2025-01-01T00:01:01", + "id": 123, + "label": "firewall123", + "rules": { + "inbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "192.0.2.0/24", + "192.0.2.148/24" ], - "example": "Saturday", - "nullable": true, - "type": "string" + "ipv6": [ + "2001:DB8::/128" + ] }, - "window": { - "description": "When your backups will be taken, in UTC. A backups window is a two-hour span of time in which the backup may occur.\n\nFor example, `W10` indicates that your backups should be taken between 10:00 and 12:00. If you don't choose a backup window, the API automatically assigns one.\n\nIf not set manually, when backups are initially enabled this may come back as `Scheduling` until the `window` is automatically selected.", - "enum": [ - "Scheduling", - "W0", - "W2", - "W4", - "W6", - "W8", - "W10", - "W12", - "W14", - "W16", - "W18", - "W20", - "W22" + "description": "An example firewall rule description.", + "label": "firewallrule123", + "ports": "22-24, 80, 443", + "protocol": "TCP" + } + ], + "inbound_policy": "DROP", + "outbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "192.0.2.0/24", + "192.0.2.156/24" ], - "example": "W22", - "nullable": true, - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "capabilities": { - "description": "__Limited availability__, __Read-only__ A list of capabilities this compute instance supports.", - "example": [ - "Block Storage Encryption" - ], - "items": { - "type": "string" - }, - "readOnly": true, - "type": "array", - "x-akamai": { - "status": "LA" - } - }, - "created": { - "description": "__Read-only__ When this Linode was created.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - }, - "disk_encryption": { - "default": "enabled", - "description": "__Limited availability__, __Read-only__ Indicates the local disk encryption setting for this Linode. If the Linode is part of an LKE cluster, the value is `null`.", - "example": "disabled", - "nullable": true, - "readOnly": true, - "type": "string", - "x-akamai": { - "status": "LA" - }, - "x-linode-cli-display": 8 - }, - "group": { - "deprecated": true, - "description": "__Deprecated__, __Filterable__ The group label for this Linode.", - "example": "Linode-Group", - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" + "ipv6": [ + "2001:DB8::/128" + ] + }, + "description": "An example firewall rule description.", + "label": "firewallrule123", + "ports": "22-24, 80, 443", + "protocol": "TCP" + } ], - "status": "DEPRECATED" - }, - "x-linode-filterable": true - }, - "has_user_data": { - "description": "__Read-only__ Whether this compute instance was provisioned with `user_data` provided via the Metadata service. See the [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance) description for more information on Metadata.", - "example": true, - "readOnly": true, - "type": "boolean" - }, - "host_uuid": { - "description": "__Read-only__ The Linode's host machine, as a UUID.", - "example": "3a3ddd59d9a78bb8de041391075df44de62bfec8", - "format": "uuid", - "readOnly": true, - "type": "string" - }, - "hypervisor": { - "description": "__Read-only__ The virtualization software powering this Linode.", - "enum": [ - "kvm" - ], - "example": "kvm", - "readOnly": true, - "type": "string" - }, - "id": { - "description": "__Filterable__, __Read-only__ This Linode's ID which must be provided for all operations impacting this Linode.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 1, - "x-linode-filterable": true - }, - "image": { - "allOf": [ - { - "description": "An Image ID to deploy the Linode Disk from.\n\nRun the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation with authentication to view all available Images. Official Linode Images start with `linode/`, while your Account's Images start with `private/`. Creating a disk from a Private Image requires `read_only` or `read_write` permissions for that Image. Run the [Update a user's grants](https://techdocs.akamai.com/linode-api/reference/put-user-grants) operation to adjust permissions for an Account Image.", - "example": "linode/debian9", - "type": "string" - } - ], - "example": "linode/debian10", - "nullable": true, - "readOnly": true, - "x-akamai": { - "labels": [ - "Filterable" - ] + "outbound_policy": "DROP" }, - "x-linode-cli-display": 5, - "x-linode-filterable": true - }, - "ipv4": { - "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", - "example": [ - "203.0.113.1", - "192.0.2.1" + "status": "enabled", + "tags": [ + "example tag", + "another example" ], - "format": "ipv4", - "items": { - "type": "string" - }, - "readOnly": true, - "type": "array", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 7, - "x-linode-filterable": true - }, - "ipv6": { - "description": "__Read-only__ This Linode's IPv6 SLAAC address. This address is specific to a Linode, and may not be shared. If the Linode has not been assigned an IPv6 address, the return value will be `null`.", - "example": "c001:d00d::1337/128", - "format": "ipv6/128", - "nullable": true, - "readOnly": true, - "type": "string" - }, - "label": { - "description": "__Filterable__ Provides a name for the Linode. If not provided, the API generates one for it.\n\nLinode labels have the following constraints:\n\n- It needs to begin and end with an alphanumeric character.\n- It can only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n- Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.", - "example": "linode123", - "maxLength": 64, - "minLength": 3, - "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 2, - "x-linode-filterable": true - }, - "lke_cluster_id": { - "description": "__Read-only__ The ID of the Kubernetes cluster if the Linode is part of cluster.", - "example": 1, - "nullable": true, - "readOnly": true, - "type": "integer" - }, - "placement_group": { - "additionalProperties": false, - "description": "__Read-only__ Details on the [placement group](https://www.linode.com/docs/products/compute/compute-instances/guides/placement-groups/) that this Linode belongs to. Empty if the Linode isn't in a placement group.", - "nullable": true, - "properties": { - "id": { - "description": "The placement group's ID. You need to provide it for all operations that affect it.", - "example": 528, - "nullable": false, - "type": "integer", - "x-linode-cli-display": null - }, - "label": { - "description": "__Filterable__ The unique name set for the placement group. A label has these constraints:\n\n- It needs to begin and end with an alphanumeric character.\n- It can only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).", - "example": "PG_Miami_failover", - "minLength": 1, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 10, - "x-linode-filterable": true - }, - "placement_group_policy": { - "description": "How requests to add future compute instances to your placement group are handled, and whether it remains compliant:\n\n- `strict`. Don't assign a new compute instance if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. Use this to ensure the placement group stays compliant (`is_compliant: true`).\n- `flexible`. Assign a new compute instance, even if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. This makes the group non-compliant (`is_compliant: false`). You need to wait for Akamai to move the offending compute instance to make it compliant again, once the necessary capacity is available in the region. Offers flexibility to add future compute instances if compliance isn't an immediate concern.\n\n<>\n\n> \ud83d\udcd8\n>\n> In rare cases, non-compliance can occur with a `strict` placement group if Akamai needs to failover or migrate your compute instances for maintenance. Fixing non-compliance for a `strict` placement group is prioritized over a `flexible` group.", - "enum": [ - "strict", - "flexible" - ], - "example": "strict", - "type": "string", - "x-linode-cli-display": null - }, - "placement_group_type": { - "description": "__Filterable__, __Read-only__ How compute instances are distributed in your placement group. A `placement_group_type` using anti-affinity (`anti-affinity:local`) places compute instances in separate hosts, but still in the same region. This best supports the spread-apart model for high availability. A `placement_group_type` using affinity places compute instances physically close together, possibly on the same host. This supports the grouped-together model for low-latency.\n\n> \ud83d\udcd8\n>\n> Currently, only `anti_affinity:local` is available for `placement_group_type`.", - "enum": [ - "anti_affinity:local" - ], - "example": "anti-affinity:local", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": null, - "x-linode-filterable": true - } - }, - "readOnly": true, - "type": "object" - }, - "region": { - "description": "__Filterable__, __Read-only__ The [region](https://techdocs.akamai.com/linode-api/reference/get-regions) where the Linode deployed. A Linode's region can only be changed by initiating a [cross data center migration](https://techdocs.akamai.com/linode-api/reference/post-migrate-linode-instance).", - "example": "us-east", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 3, - "x-linode-filterable": true - }, - "specs": { + "updated": "2025-01-02T00:01:01" + } + ], + "page": 1, + "pages": 1, + "results": 1 + }, + "schema": { + "allOf": [ + { "additionalProperties": false, - "description": "__Read-only__ Information about the resources available to this Linode.", + "description": "An envelope for paginated response. When accessing a collection through a GET endpoint, the results are wrapped in this envelope which includes metadata about those results. Results are presented within a `data` array. See [Pagination](https://techdocs.akamai.com/linode-api/reference/pagination) for more information.", "properties": { - "disk": { - "description": "__Read-only__ The amount of storage space, in MB, this Linode has access to. A typical Linode divides this space between a primary disk with an `image` deployed to it, and a swap disk, usually 512 MB. This is the default configuration created when deploying a Linode with an `image` through [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance). While this configuration is suitable for 99% of use cases, if you need finer control over your Linode's disks, see the [List disks](https://techdocs.akamai.com/linode-api/reference/get-linode-disks) operations.", - "example": 81920, - "readOnly": true, - "type": "integer" - }, - "gpus": { - "description": "__Read-only__ The number of GPUs this Linode has access to.", - "example": 0, - "readOnly": true, - "type": "integer" - }, - "memory": { - "description": "__Read-only__ The amount of RAM, in MB, this Linode has access to.\n\nTypically, a Linode boots with all of its available RAM, but this can be configured in a config profile. See the [List config profiles](https://techdocs.akamai.com/linode-api/reference/get-linode-configs) operation for more information.", - "example": 4096, + "page": { + "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, "readOnly": true, "type": "integer" }, - "transfer": { - "description": "__Read-only__ The amount of network transfer this Linode is allotted each month.", - "example": 4000, + "pages": { + "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, "readOnly": true, "type": "integer" }, - "vcpus": { - "description": "__Read-only__ The number of VCPUs this Linode has access to.", - "example": 2, + "results": { + "description": "__Read-only__ The total number of results.", + "example": 1, "readOnly": true, "type": "integer" } }, - "readOnly": true, - "type": "object" + "type": "object", + "x-akamai": { + "file-path": "schemas/pagination-envelope.yaml" + } }, - "status": { - "description": "__Read-only__ A brief description of this Linode's current state. This field may change without direct action from you. For example, when a compute instance goes into maintenance mode, its status is `stopped`. Status is generally self-explanatory, based on its name.\n\n- `busy` indicates you've assigned the compute instance to a [placement group](https://techdocs.akamai.com/cloud-computing/docs/work-with-placement-groups), but the compute instance is currently booting. Once the boot completes, the API completes the assignment and updates the compute instance's `status` accordingly.\n- `provisioning` indicates that the API is applying operating system or Marketplace applications on the compute instance.\n- `billing_suspension` indicates that payment is past due on the compute instance, so we've suspended its use.", - "enum": [ - "running", - "offline", - "booting", - "busy", - "rebooting", - "shutting_down", - "provisioning", - "deleting", - "migrating", - "rebuilding", - "cloning", - "restoring", - "stopped", - "billing_suspension" - ], - "example": "running", - "readOnly": true, - "type": "string", - "x-linode-cli-color": { - "billing_suspension": "red", - "default_": "yellow", - "offline": "red", - "running": "green" - }, - "x-linode-cli-display": 6 - }, - "tags": { - "description": "__Filterable__ Tags to help you organize your content.", - "example": [ - "example tag", - "another example" - ], - "items": { - "type": "string" - }, - "type": "array", - "x-akamai": { - "labels": [ - "Filterable" - ] + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", + "properties": { + "created": { + "description": "__Filterable__, __Read-only__ When this Firewall was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true + }, + "id": { + "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true + }, + "label": { + "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", + "example": "firewall123", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "rules": { + "additionalProperties": false, + "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "properties": { + "fingerprint": { + "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", + "example": "997dd135", + "readOnly": true, + "type": "string" + }, + "inbound": { + "description": "The inbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "inbound_policy": { + "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "version": { + "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + }, + "status": { + "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "enum": [ + "enabled", + "disabled", + "deleted" + ], + "example": "enabled", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "tags": { + "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "updated": { + "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", + "example": "2018-01-02T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall.yaml" + } + }, + "type": "array" + } }, - "x-linode-filterable": true - }, - "type": { - "description": "__Read-only__ This is the [Linode type](https://techdocs.akamai.com/linode-api/reference/get-linode-types) that this Linode was deployed with. To change a Linode's type, use [Resize a Linode](https://techdocs.akamai.com/linode-api/reference/post-resize-linode-instance).", - "example": "g6-standard-1", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 4 - }, - "updated": { - "description": "__Read-only__ When this Linode was last updated.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - }, - "watchdog_enabled": { - "description": "The watchdog, named Lassie, is a Shutdown Watchdog that monitors your Linode and reboots it if it powers off unexpectedly. It works by issuing a boot job when your Linode powers off without a shutdown job being responsible. To prevent a loop, Lassie gives up if there have been more than 5 boot jobs issued within 15 minutes.", - "example": true, - "type": "boolean" + "type": "object" } - }, - "title": "Linode", - "type": "object", + ], "x-akamai": { - "file-path": "schemas/linode.yaml" + "file-path": "schemas/added-get-linode-interfaces-firewalls-200.yaml" } - }, - "x-example": { - "x-ref": "../examples/post-rebuild-linode-instance-200.json" } } }, - "description": "Rebuild started." + "description": "Returns a paginated list of firewalls assigned to an interface." }, "default": { "content": { @@ -52892,30 +54943,31 @@ }, { "oauth": [ - "linodes:read_write" + "nodebalancers:read_only" ] } ], - "summary": "Rebuild a Linode", + "summary": "List Linode interface firewalls", "tags": [ - "Linode instances" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes rebuild 123 \\\n --image \"linode/debian9\" \\\n --root_pass aComplex@Password \\\n --disk_encryption disabled \\\n --authorized_keys \"ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer\" \\\n --authorized_users \"myUsername\" \\\n --authorized_users \"secondaryUsername\" \\\n --booted true \\\n --stackscript_id 10079 \\\n --stackscript_data '{\"gh_username\": \"linode\"}' \\\n --type \"g6-standard-2\" \\\n --metadata.userdata \"I2Nsb3VkLWNvbmZpZw==\"", + "syntax": "linode-cli linodes interface-firewalls-list $linodeId $interfaceId", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "linodes:read_write", + "syntax": "linodes:read_only", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "rebuild", - "x-linode-grant": "read_write" + "x-linode-cli-action": "interface-firewalls-list", + "x-linode-grant": "read_only" }, "parameters": [ { @@ -52936,7 +54988,7 @@ } }, { - "description": "ID of the Linode to rebuild.", + "description": "The `id` of the Linode.", "example": "{{linodeId}}", "in": "path", "name": "linodeId", @@ -52946,218 +54998,203 @@ "type": "integer" }, "x-akamai": { - "file-path": "parameters/linode-id-path-2816c8d8.yaml" + "file-path": "parameters/linode-id.yaml" + } + }, + { + "description": "The `id` of the Linode interface.", + "example": "{{interfaceId}}", + "in": "path", + "name": "interfaceId", + "required": true, + "schema": { + "example": 1234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-interface-id-path.yaml" } } ], "x-akamai": { - "file-path": "paths/linode-rebuild.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/rebuild" + "file-path": "paths/linode-interface-firewalls.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/interfaces/{interfaceId}/firewalls", + "status": "BETA" }, "x-linode-cli-command": "linodes" }, - "/{apiVersion}/linode/instances/{linodeId}/rescue": { + "/{apiVersion}/linode/instances/{linodeId}/ips": { "post": { - "description": "Rescue Mode is a safe environment for performing many system recovery and disk management tasks. Rescue Mode is based on the Finnix recovery distribution, a self-contained and bootable Linux distribution. You can also use Rescue Mode for tasks other than disaster recovery, such as formatting disks to use different filesystems, copying data between disks, and downloading files from a disk via SSH and SFTP.\n\n- Note that `sdh` is reserved and unavailable during rescue.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes rescue 123 \\\n --devices.sda.disk_id 124458\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Allocates a public or private IPv4 address to a Linode. Public IP Addresses, after the one included with each Linode, incur an additional monthly charge. If you need an additional public IP Address you must request one - please [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket). You may not add more than one private IPv4 address to a single Linode.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-add 123 \\\n --type ipv4 \\\n --public true\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-rescue-linode-instance" + "url": "https://techdocs.akamai.com/linode-api/reference/post-add-linode-ip" }, - "operationId": "post-rescue-linode-instance", + "operationId": "post-add-linode-ip", "requestBody": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { - "devices": { - "additionalProperties": false, - "properties": { - "sda": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" - } - }, - "sdb": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" - } + "public": { + "description": "Whether to create a public or private IPv4 address.", + "example": "{{public}}", + "type": "boolean" + }, + "type": { + "description": "The type of address you are allocating. Only IPv4 addresses may be allocated through this operation.", + "enum": [ + "ipv4" + ], + "example": "{{type}}", + "type": "string" + } + }, + "required": [ + "type", + "public" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-add-linode-ip.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-add-linode-ip.json" + } + } + }, + "description": "Information about the address you are creating.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "properties": { + "address": { + "description": "__Read-only__ The IP address.", + "example": "97.107.143.141", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "97.107.143.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" }, - "sdc": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" - } - }, - "sdd": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" - } - }, - "sde": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } + "x-linode-cli-display": 7 + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 24, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "test.example.org", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this IP address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "enum": [ + "ipv4", + "ipv6", + "ipv6/pool", + "ipv6/range" + ], + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + }, + "vpc_nat_1_1": { + "additionalProperties": false, + "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "properties": { + "address": { + "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", + "example": "192.168.0.42", + "format": "ipv4", + "type": "string" }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" - } - }, - "sdf": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer" }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface.", + "example": 111, + "nullable": false, + "readOnly": true, + "type": "integer" } }, - "sdg": { - "additionalProperties": false, - "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", - "properties": { - "disk_id": { - "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", - "example": 124458, - "type": "integer" - }, - "volume_id": { - "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", - "example": null, - "nullable": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/device.yaml" - } - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/rescue-devices.yaml" + "type": "object" } - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-post-rescue-linode-instance.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-rescue-linode-instance.json" - } - } - }, - "description": "Optional object of devices to be mounted.", - "required": false - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, + }, "type": "object", "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" + "file-path": "schemas/ip-address.yaml" } }, "x-example": { - "x-ref": "../examples/post-rescue-linode-instance-200.json" + "x-ref": "../examples/post-add-linode-ip-200.json" } } }, - "description": "Rescue started." + "description": "IP address was successfully allocated." }, "default": { "content": { @@ -53206,14 +55243,14 @@ ] } ], - "summary": "Boot a Linode into rescue mode", + "summary": "Allocate an IPv4 address", "tags": [ - "Linode instances" + "IP addresses" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli linodes rescue 123 \\\n --devices.sda.disk_id 124458", + "syntax": "linode-cli linodes ip-add 123 \\\n --type ipv4 \\\n --public true", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -53224,240 +55261,3706 @@ } ] }, - "x-linode-cli-action": "rescue", + "x-linode-cli-action": "ip-add", "x-linode-grant": "read_write" }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode to rescue.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-7f941cb9.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/rescue.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/rescue" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/resize": { - "post": { - "description": "Resizes a Linode you have the `read_write` permission to a different Type. If any actions are currently running or queued, those actions must be completed first before you can initiate a resize. Additionally, the following criteria must be met in order to resize a Linode:\n\n - The Linode must not have a pending migration.\n - Your Account cannot have an outstanding balance.\n - The Linode must not have more disk allocation than the new Type allows.\n - In that situation, you must first delete or resize the disk to be smaller.\n\nYou can also resize a Linode when using the [Rebuild a Linode](https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance) operation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes resize 123 \\\n --type g6-standard-2\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "get": { + "description": "Returns networking information for a single Linode.\n\n> \ud83d\udcd8\n>\n> If the target Linode has several configuration profiles that include a Virtual Private Cloud (VPC) interface, the response lists address information for all of the VPCs.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ips-list 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-resize-linode-instance" - }, - "operationId": "post-resize-linode-instance", - "requestBody": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "allow_auto_disk_resize": { - "default": true, - "description": "Automatically resize disks when resizing a Linode. When resizing down to a smaller plan your Linode's data must fit within the smaller disk size.", - "example": "{{allow_auto_disk_resize}}", - "type": "boolean" - }, - "migration_type": { - "default": "cold", - "description": "Type of migration used in moving to a new host or Linode type.\n\n`warm`: the Linode will not power down until the migration is complete.\nWarm migrations are not available for DC migrations.\n\n`cold`: the Linode will be powered down and migrated. When the migration\nis complete, the Linode will be powered on.", - "enum": [ - "warm", - "cold" - ], - "example": "{{migration_type}}", - "type": "string" - }, - "type": { - "description": "The ID representing the Linode Type.", - "example": "{{type}}", - "type": "string", - "x-linode-cli-display": 1 - } - }, - "required": [ - "type" - ], - "type": "object", - "x-akamai": { - "file-path": "schemas/added-post-resize-linode-instance.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-resize-linode-instance.json" - } - } - }, - "description": "The Type your current Linode will resize to, and whether to attempt to automatically resize the Linode's disks.", - "required": true + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-ips" }, + "operationId": "get-linode-ips", "responses": { "200": { - "content": { - "application/json": { - "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-resize-linode-instance-200.json" - } - } - }, - "description": "Resize started." - }, - "default": { "content": { "application/json": { "schema": { "additionalProperties": false, "properties": { - "errors": { - "items": { - "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", - "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", - "type": "string" + "ipv4": { + "additionalProperties": false, + "description": "__Read-only__ Information about this Linode's IPv4 addresses.", + "properties": { + "private": { + "description": "__Read-only__ A list of private IP Address objects belonging to this Linode.", + "items": { + "additionalProperties": false, + "description": "A private IPv4 address that exists in Linode's system.", + "properties": { + "address": { + "description": "__Read-only__ The private IPv4 address.", + "example": "192.168.133.234", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": null, + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 17, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": false, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.128.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address-private.yaml" + } }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", - "type": "string" - } + "readOnly": true, + "type": "array" }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" - } - }, - "type": "array" - } - }, - "type": "object" - } - } - }, - "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." - } - }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "linodes:read_write" - ] - } - ], - "summary": "Resize a Linode", - "tags": [ - "Linode instances" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linode-cli linodes resize 123 \\\n --type g6-standard-2", - "title": "CLI", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "linodes:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" - } - ] - }, - "x-linode-cli-action": "resize", - "x-linode-grant": "read_write" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode to resize.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-0d41ac92.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/linode-resize.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/resize" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/shutdown": { - "post": { - "description": "Shuts down a Linode you have permission to modify. If any actions are currently running or queued, those actions must be completed first before you can initiate a shutdown.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes shutdown 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance" - }, - "operationId": "post-shutdown-linode-instance", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { + "public": { + "description": "__Read-only__ A list of public IP Address objects belonging to this Linode.", + "items": { + "additionalProperties": false, + "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "properties": { + "address": { + "description": "__Read-only__ The IP address.", + "example": "97.107.143.141", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "97.107.143.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 24, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "test.example.org", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this IP address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "enum": [ + "ipv4", + "ipv6", + "ipv6/pool", + "ipv6/range" + ], + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + }, + "vpc_nat_1_1": { + "additionalProperties": false, + "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "properties": { + "address": { + "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", + "example": "192.168.0.42", + "format": "ipv4", + "type": "string" + }, + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer" + }, + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface.", + "example": 111, + "nullable": false, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address.yaml" + } + }, + "readOnly": true, + "type": "array" + }, + "reserved": { + "description": "__Read-only__ A list of reserved IP Address objects belonging to this Linode.", + "items": { + "additionalProperties": false, + "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "properties": { + "address": { + "description": "__Read-only__ The IP address.", + "example": "97.107.143.141", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "97.107.143.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 24, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "test.example.org", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this IP address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "enum": [ + "ipv4", + "ipv6", + "ipv6/pool", + "ipv6/range" + ], + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + }, + "vpc_nat_1_1": { + "additionalProperties": false, + "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "properties": { + "address": { + "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", + "example": "192.168.0.42", + "format": "ipv4", + "type": "string" + }, + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer" + }, + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface.", + "example": 111, + "nullable": false, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address.yaml" + } + }, + "readOnly": true, + "type": "array" + }, + "shared": { + "description": "__Read-only__ A list of shared IP Address objects assigned to this Linode.", + "items": { + "additionalProperties": false, + "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "properties": { + "address": { + "description": "__Read-only__ The IP address.", + "example": "97.107.143.141", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "97.107.143.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 24, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "test.example.org", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this IP address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "enum": [ + "ipv4", + "ipv6", + "ipv6/pool", + "ipv6/range" + ], + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + }, + "vpc_nat_1_1": { + "additionalProperties": false, + "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "properties": { + "address": { + "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", + "example": "192.168.0.42", + "format": "ipv4", + "type": "string" + }, + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer" + }, + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface.", + "example": 111, + "nullable": false, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address.yaml" + } + }, + "readOnly": true, + "type": "array" + }, + "vpc": { + "description": "__Read-only__ A list of Virtual Private Cloud (VPC)-specific addresses or ranges for the Linode.", + "items": { + "additionalProperties": false, + "description": "A VPC IP address that exists in Linode's system, specific to the response for the [List VPC IP addresses](https://techdocs.akamai.com/linode-api/reference/get-vpcs-ips) operation. Returned as an empty set for Linodes that are not part of a VPC.", + "properties": { + "active": { + "description": "__Filterable__, __Read-only__ Returns `true` if the VPC interface is in use, meaning that the Linode was powered on using the `config_id` to which the interface belongs. Otherwise returns `false`.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "address": { + "description": "__Read-only__ An IPv4 address configured for this VPC interface. These follow the [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private address format. Displayed as `null` if an `address_range`.", + "example": "192.0.2.141", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "address_range": { + "description": "__Read-only__ A range of IPv4 addresses configured for this VPC interface. Displayed as `null` if a single `address`.", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "config_id": { + "description": "__Filterable__, __Read-only__ The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "gateway": { + "description": "__Read-only__ The default gateway for the VPC subnet that the IP or IP range belongs to.", + "example": "192.0.2.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The globally general API entity identifier for the Linode interface.", + "example": 2435, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + } + }, + "linode_id": { + "description": "__Filterable__, __Read-only__ The identifier for the Linode the VPC interface currently belongs to.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 6, + "x-linode-filterable": true + }, + "nat_1_1": { + "description": "__Read-only__ The public IP address used for NAT 1:1 with the VPC. This is empty if NAT 1:1 isn't used.", + "example": "192.168.0.42", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the `subnet_mask`.", + "example": 24, + "nullable": true, + "readOnly": true, + "type": "integer" + }, + "region": { + "description": "__Filterable__, __Read-only__ The region of the VPC.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + }, + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer", + "x-linode-cli-display": 7 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for the `address` or `address_range`.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "vpc_id": { + "description": "__Filterable__, __Read-only__ The unique globally general API entity identifier for the VPC.", + "example": 7654, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 8, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-addresses-vpc.yaml" + } + }, + "readOnly": true, + "type": "array" + } + }, + "readOnly": true, + "type": "object" + }, + "ipv6": { + "additionalProperties": false, + "description": "__Read-only__ Information about this Linode's IPv6 addresses.", + "properties": { + "global": { + "description": "A list of IPv6 range objects assigned to this Linode.", + "items": { + "additionalProperties": false, + "description": "An object representing an IPv6 range.", + "properties": { + "prefix": { + "description": "The prefix length of the address. The total number of addresses that can be assigned from this range is calculated as 2(128 - prefix length).", + "example": 64, + "type": "integer", + "x-linode-cli-display": 2 + }, + "range": { + "description": "__Read-only__ The IPv6 address of this range.", + "example": "2600:3c01::", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "region": { + "description": "__Read-only__ The region for this range of IPv6 addresses.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "route_target": { + "description": "The IPv6 SLAAC address.", + "example": "2600:3c01::ffff:ffff:ffff:ffff", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ipv6-range.yaml" + } + }, + "type": "array" + }, + "link_local": { + "additionalProperties": false, + "description": "A link-local IPv6 address that exists in Linode's system.", + "properties": { + "address": { + "description": "__Read-only__ The IPv6 link-local address.", + "example": "fe80::f03c:91ff:fe24:3a2f", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "fe80::1", + "readOnly": true, + "type": "string" + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The network prefix.", + "example": 64, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": false, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Filterable__, __Read-only__ The Region this address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + }, + "subnet_mask": { + "description": "__Read-only__ The subnet mask.", + "example": "ffff:ffff:ffff:ffff::", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "example": "ipv6", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address-v6-link-local.yaml" + } + }, + "slaac": { + "additionalProperties": false, + "description": "A SLAAC IPv6 address that exists in Linode's system.", + "properties": { + "address": { + "description": "__Read-only__ The address.", + "example": "2600:3c03::f03c:91ff:fe24:3a2f", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "fe80::1", + "readOnly": true, + "type": "string" + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The network prefix.", + "example": 64, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Filterable__, __Read-only__ The Region this address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + }, + "subnet_mask": { + "description": "__Read-only__ The subnet mask.", + "example": "ffff:ffff:ffff:ffff::", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "example": "ipv6", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address-v6-slaac.yaml" + } + } + }, + "readOnly": true, + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-get-linode-ips-200.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-ips-200.json" + }, + "x-linode-cli-subtables": [ + "ipv4.public", + "ipv4.private", + "ipv4.shared", + "ipv4.reserved", + "ipv4.vpc", + "ipv6.link_local", + "ipv6.slaac", + "ipv6.global" + ] + } + }, + "description": "Requested Linode's networking configuration." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_only" + ] + } + ], + "summary": "Get networking information", + "tags": [ + "IP addresses" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes ips-list 123", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "ips-list", + "x-linode-grant": "read_only" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to look up.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-ips.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/ips" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/ips/{address}": { + "get": { + "description": "View information for a Linode's set of IPs, its Linode interfaces and VPC IPs and ranges.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-view 123 97.107.143.141\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-ip" + }, + "operationId": "get-linode-ip", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "properties": { + "address": { + "description": "__Read-only__ The IP address.", + "example": "97.107.143.141", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "97.107.143.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 24, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "test.example.org", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this IP address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "enum": [ + "ipv4", + "ipv6", + "ipv6/pool", + "ipv6/range" + ], + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + }, + "vpc_nat_1_1": { + "additionalProperties": false, + "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "properties": { + "address": { + "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", + "example": "192.168.0.42", + "format": "ipv4", + "type": "string" + }, + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer" + }, + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface.", + "example": 111, + "nullable": false, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-ip-200.json" + } + } + }, + "description": "A single IP address." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_only" + ] + } + ], + "summary": "Get a Linode's IP address", + "tags": [ + "IP addresses" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes ip-view 123 97.107.143.141", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "ip-view", + "x-linode-grant": "read_only" + }, + "put": { + "description": "Updates the reverse DNS (RDNS) for a Linode's IP Address. This may be done for both IPv4 and IPv6 addresses.\n\nSetting the RDNS to `null` for a public IPv4 address, resets it to the default `ip.linodeusercontent.com` RDNS value.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-update 123 \\\n 203.0.113.1 \\\n --rdns test.example.org\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/put-linode-ip" + }, + "operationId": "put-linode-ip", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "{{rdns}}", + "nullable": true, + "type": "string" + } + }, + "required": [ + "rdns" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/added-put-linode-ip.yaml" + } + }, + "x-example": { + "x-ref": "../examples/put-linode-ip.json" + } + } + }, + "description": "The information to update for the IP address." + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "An IP address that exists in Linode's system, either IPv4 or IPv6.", + "properties": { + "address": { + "description": "__Read-only__ The IP address.", + "example": "97.107.143.141", + "format": "ip", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "gateway": { + "description": "__Read-only__ The default gateway for this address.", + "example": "97.107.143.1", + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, + "linode_id": { + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 6 + }, + "prefix": { + "description": "__Read-only__ The number of bits set in the subnet mask.", + "example": 24, + "readOnly": true, + "type": "integer" + }, + "public": { + "description": "__Read-only__ Whether this is a public or private IP address.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-linode-cli-display": 3 + }, + "rdns": { + "description": "The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if not explicitly set.", + "example": "test.example.org", + "nullable": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "region": { + "description": "__Read-only__ The Region this IP address resides in.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "subnet_mask": { + "description": "__Read-only__ The mask that separates host bits from network bits for this address.", + "example": "255.255.255.0", + "format": "ip", + "readOnly": true, + "type": "string" + }, + "type": { + "description": "__Read-only__ The type of address this is.", + "enum": [ + "ipv4", + "ipv6", + "ipv6/pool", + "ipv6/range" + ], + "example": "ipv4", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 2 + }, + "vpc_nat_1_1": { + "additionalProperties": false, + "description": "IPv4 address configured as a 1:1 NAT for this Interface. If no address is configured as a 1:1 NAT, `null` is returned.\n\n> \ud83d\udcd8\n>\n> Only allowed for `vpc` type interfaces.", + "properties": { + "address": { + "description": "The IPv4 address that is configured as a 1:1 NAT for this VPC interface.", + "example": "192.168.0.42", + "format": "ipv4", + "type": "string" + }, + "subnet_id": { + "description": "The `id` of the VPC Subnet for this interface.", + "example": 101, + "nullable": false, + "type": "integer" + }, + "vpc_id": { + "description": "__Read-only__ The `id` of the VPC configured for this interface.", + "example": 111, + "nullable": false, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/ip-address.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-ip-200.json" + } + } + }, + "description": "The updated IP address record." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Update an IP address's RDNS for a Linode", + "tags": [ + "IP addresses" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes ip-update 123 \\\n 203.0.113.1 \\\n --rdns test.example.org", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "ip-update", + "x-linode-grant": "read_write" + }, + "delete": { + "description": "Deletes a public or private IPv4 address associated with this Linode. This will fail if it is the Linode's last remaining public IPv4 address, or if the address has a 1:1 NAT with an active VPC Subnet address.\n\n> \ud83d\udcd8\n>\n> You can't use this operation to delete an IP assigned to a Linode interface. Run the [update the Linode interface](https://techdocs.akamai.com/linode-api/reference/put-linode-interface) operation instead.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes ip-delete 97.107.143.141\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/delete-linode-ip" + }, + "operationId": "delete-linode-ip", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/delete-linode-ip-200.json" + } + } + }, + "description": "IP address successfully removed." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Delete an IPv4 address", + "tags": [ + "IP addresses" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes ip-delete 97.107.143.141", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "ip-delete", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the Linode.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-820d9f86.yaml" + } + }, + { + "description": "The IP address.", + "example": "{{address}}", + "in": "path", + "name": "address", + "required": true, + "schema": { + "format": "ip", + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/address-path-59ea51e6.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-ip-address.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/ips/{address}" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/migrate": { + "post": { + "description": "Initiate a pending host migration that has been scheduled by Linode or initiate a cross data center (DC) migration. A list of pending migrations, if any, can be accessed from [List notifications](https://techdocs.akamai.com/linode-api/reference/get-notifications). When the migration begins, your Linode will be shutdown if not already off. If the migration initiated the shutdown, it will reboot the Linode when completed.\n\nTo initiate a cross DC migration, you must pass a `region` parameter to the request body specifying the target data center region. You can view a list of all available regions and their feature capabilities from [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions). See our [Pricing Page](https://www.linode.com/pricing/) for Region-specific pricing, which applies after migration is complete. If your Linode has a DC migration already queued or you have initiated a previously scheduled migration, you will not be able to initiate a DC migration until it has completed.\n\n`vpc` details\n\n- Cross DC migrations don't work for Linodes that have a `vpc` purpose legacy configuration interface or a VPC Linode interface. They work for host migrations within the same DC.\n- See the [VPC documentation](https://www.linode.com/docs/products/networking/vpc/#technical-specifications) guide for its specifications and limitations.\n\n`vlan` details:\n\n- Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning will not initiate. If a Linode cannot be migrated or cloned because of an incompatibility, you will be prompted to select a different data center or contact support.\n- Next Generation Network (NGN) data centers do not support IPv6 `/116` pools or IP Failover. If you have these features enabled on your Linode and attempt to migrate to an NGN data center, the migration will not initiate. If a Linode cannot be migrated because of an incompatibility, you will be prompted to select a different data center or contact support.\n- See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) guide to view additional specifications and limitations.\n\n`public` details:\n\n- If the Linode is using Linode interfaces, the destination region needs to also support Linode interfaces.\n- After migrating to a different data center, Linode public interfaces retain the same number of IP addresses, but the IP addresses themselves change.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes migrate 123 \\\n --region us-central \\\n --placement_group.id 528\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-migrate-linode-instance" + }, + "operationId": "post-migrate-linode-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "placement_group": { + "additionalProperties": false, + "description": "Include this to assign this Linode to an existing [placement group](https://www.linode.com/docs/products/compute/compute-instances/guides/placement-groups/) in the data center you're migrating to. These constraints apply:\n\n- If the target Linode is in a placement group, it will be removed from it when migrating.\n- The target placement group needs to be in the same `region` you're migrating to.\n- The target placement group needs to have capacity. Run the [Get a region](https://techdocs.akamai.com/linode-api/reference/get-region) operation for the region you want to migrate to, and store the `maximum_linodes_per_pg` value. Run the [Get a placement group](https://techdocs.akamai.com/linode-api/reference/get-placement-group) operation for that same region to review how many Linodes are in that group.", + "properties": { + "id": { + "description": "The placement group's ID. You need to provide it for all operations that affect it.", + "example": 528, + "nullable": false, + "type": "integer", + "x-linode-cli-display": 1 + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "region": { + "description": "The region to which the Linode will be migrated. Must be a valid region slug. A list of regions can be viewed by running the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation. A cross data center migration will cancel a pending migration that has not yet been initiated. A cross data center migration will initiate a `linode_migrate_datacenter_create` event.", + "example": "{{region}}", + "type": "string" + }, + "type": { + "default": "cold", + "description": "Type of migration used in moving to a new host or Linode type.\n\n`warm`: the Linode will not power down until the migration is complete.\nWarm migrations are not available for DC migrations.\n\n`cold`: the Linode will be powered down and migrated. When the migration\nis complete, the Linode will be powered on.", + "enum": [ + "warm", + "cold" + ], + "example": "{{type}}", + "type": "string" + }, + "upgrade": { + "default": false, + "description": "When initiating a cross DC migration, setting this value to `true` will also ensure that the Linode is upgraded to the latest generation of hardware that corresponds to your Linode's Type, if any free upgrades are available for it. If no free upgrades are available, and this value is set to `true`, then the endpoint will return a 400 error code and the migration will not be performed. If the data center set in the `region` field does not allow upgrades, then the endpoint will return a 400 error code and the migration will not be performed.", + "example": "{{upgrade}}", + "type": "boolean" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-migrate-linode-instance.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-migrate-linode-instance.json" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-migrate-linode-instance-200.json" + } + } + }, + "description": "Scheduled migration started." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Launch a DC migration/pending host migration", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes migrate 123 \\\n --region us-central \\\n --placement_group.id 528", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "migrate", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to migrate.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-1510d8f8.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/migrate.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/migrate" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/mutate": { + "post": { + "description": "Linodes created with now-deprecated Types are entitled to a free upgrade to the next generation. A mutating Linode will be allocated any new resources the upgraded Type provides, and will be subsequently restarted if it was currently running. If any actions are currently running or queued, those actions must be completed first before you can initiate a mutate.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes upgrade 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-mutate-linode-instance" + }, + "operationId": "post-mutate-linode-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "allow_auto_disk_resize": { + "default": true, + "description": "Automatically resize disks when resizing a Linode. When resizing down to a smaller plan your Linode's data must fit within the smaller disk size.", + "example": "{{allow_auto_disk_resize}}", + "type": "boolean" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-mutate-linode-instance.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-mutate-linode-instance.json" + } + } + }, + "description": "Whether to automatically resize disks or not.", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-mutate-linode-instance-200.json" + } + } + }, + "description": "Mutate started." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Upgrade a Linode", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes upgrade 123", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "upgrade", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to mutate.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-ddb4b8aa.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/mutate.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/mutate" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/nodebalancers": { + "get": { + "description": "Returns a list of NodeBalancers that are assigned to this Linode and readable by the requesting User.\n\nRead permission to a NodeBalancer can be given to a User by accessing the [Update a user's grants](https://techdocs.akamai.com/linode-api/reference/put-user-grants) operation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes nodebalancers 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-node-balancers" + }, + "operationId": "get-linode-node-balancers", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "data": { + "items": { + "additionalProperties": false, + "description": "Linode's load balancing solution. Can handle multiple ports, SSL termination, and any number of backends. NodeBalancer ports are configured with NodeBalancer configs, and each config is given one or more NodeBalancer nodes that accepts traffic. The traffic should be routed to the NodeBalancer's IP address, for the NodeBalancer to handle routing individual requests to backends.", + "properties": { + "client_conn_throttle": { + "description": "Throttle TCP connections per second for TCP, HTTP, and HTTPS configurations. Set to `0` (zero) to disable throttling.", + "example": 10, + "maximum": 20, + "minimum": 0, + "type": "integer", + "x-linode-cli-display": 9 + }, + "created": { + "description": "__Read-only__ When this NodeBalancer was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "hostname": { + "description": "__Read-only__ This NodeBalancer's hostname, beginning with its IP address and ending with _.ip.linodeusercontent.com_.", + "example": "192.0.2.1.ip.linodeusercontent.com", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + }, + "id": { + "description": "__Read-only__ This NodeBalancer's unique ID.", + "example": 12345, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "ipv4": { + "description": "__Filterable__, __Read-only__ This NodeBalancer's public IPv4 address.", + "example": "203.0.113.1", + "format": "ip", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 6, + "x-linode-filterable": true + }, + "ipv6": { + "description": "__Read-only__ This NodeBalancer's public IPv6 address.", + "example": null, + "format": "ip", + "nullable": true, + "readOnly": true, + "type": "string", + "x-linode-cli-display": 7 + }, + "label": { + "description": "__Filterable__ This NodeBalancer's label. These must be unique on your Account.", + "example": "balancer12345", + "maxLength": 32, + "minLength": 3, + "pattern": "[a-zA-Z0-9-_]{3,32}", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "lke_cluster": { + "additionalProperties": false, + "description": "__Read-only__ This NodeBalancer's related LKE cluster, if any. The value is `null` if this NodeBalancer isn't related to an LKE cluster.", + "nullable": true, + "properties": { + "id": { + "description": "The ID of the related LKE cluster.", + "example": 12345, + "type": "string" + }, + "label": { + "description": "The label of the related LKE cluster.", + "example": "lkecluster12345", + "type": "string" + }, + "type": { + "description": "__Read-only__ The type for LKE clusters.", + "example": "lkecluster", + "readOnly": true, + "type": "string" + }, + "url": { + "description": "The URL where you can access the related LKE cluster.", + "example": "/v4/lke/clusters/12345", + "type": "string" + } + }, + "readOnly": true, + "type": "object", + "x-linode-cli-display": 8 + }, + "region": { + "description": "__Filterable__, __Read-only__ The Region where this NodeBalancer is located. NodeBalancers only support backends in the same Region.", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 3, + "x-linode-filterable": true + }, + "tags": { + "description": "__Filterable__ An array of Tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "transfer": { + "additionalProperties": false, + "description": "__Read-only__ Information about the amount of transfer this NodeBalancer has had so far this month.", + "properties": { + "in": { + "description": "__Read-only__ The total outbound transfer, in MB, used for this NodeBalancer this month.", + "example": 28.91200828552246, + "nullable": true, + "readOnly": true, + "type": "number" + }, + "out": { + "description": "__Read-only__ The total inbound transfer, in MB, used for this NodeBalancer this month.", + "example": 3.5487728118896484, + "nullable": true, + "readOnly": true, + "type": "number" + }, + "total": { + "description": "__Read-only__ The total transfer, in MB, used by this NodeBalancer this month.", + "example": 32.46078109741211, + "nullable": true, + "readOnly": true, + "type": "number" + } + }, + "readOnly": true, + "type": "object" + }, + "type": { + "description": "__Read-only__ The type of NodeBalancer.", + "enum": [ + "common" + ], + "example": "common", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "updated": { + "description": "__Read-only__ When this NodeBalancer was last updated.", + "example": "2018-03-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + } + }, + "title": "NodeBalancer", + "type": "object", + "x-akamai": { + "file-path": "schemas/node-balancer.yaml" + } + }, + "type": "array" + }, + "page": { + "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, + "readOnly": true, + "type": "integer" + }, + "pages": { + "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, + "readOnly": true, + "type": "integer" + }, + "results": { + "description": "__Read-only__ The total number of results.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-get-linode-node-balancers-200.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-node-balancers-200.json" + } + } + }, + "description": "Returns a paginated list of NodeBalancers." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_only" + ] + } + ], + "summary": "List Linode NodeBalancers", + "tags": [ + "NodeBalancers" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes nodebalancers 123", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "nodebalancers", + "x-linode-grant": "read_only" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to look up.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-32b5e821.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-node-balancers.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/nodebalancers" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/password": { + "post": { + "description": "Resets the root password for this Linode.\n\n- Your Linode must be [shut down](https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance) for a password reset to complete.\n- If your Linode has more than one disk (not counting its swap disk), run the [Reset a disk root password](https://techdocs.akamai.com/linode-api/reference/post-reset-disk-password) operation to update a specific disk's root password.\n- A `password_reset` event is generated when a root password reset is successful.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes linode-reset-password 123 a$eCure4assw0rd!43v51\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-reset-linode-password" + }, + "operationId": "post-reset-linode-password", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "root_pass": { + "description": "The root user's password on this Linode. Linode passwords must meet a password strength score requirement that is calculated internally by the API. If the strength requirement is not met, you will receive a Password does not meet strength requirement error.", + "example": "{{root_pass}}", + "type": "string" + } + }, + "required": [ + "root_pass" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-reset-linode-password.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-reset-linode-password.json" + } + } + }, + "description": "This Linode's new root password." + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-reset-linode-password-200.json" + } + } + }, + "description": "Password Reset." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Reset a Linode's root password", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes linode-reset-password 123 a$eCure4assw0rd!43v51", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "linode-reset-password", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode for which to reset its root password.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-9dcaaf12.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-password.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/password" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/reboot": { + "post": { + "description": "Reboots a Linode you have permission to modify. If any actions are currently running or queued, those actions must be completed first before you can initiate a reboot.\n\nIf the Linode is using Linode interfaces, where `interface_generation` is set as `linode`, an error is returned if the Linode has to reboot without any interface defined.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes reboot 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance" + }, + "operationId": "post-reboot-linode-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "config_id": { + "description": "The Linode Config ID to reboot into. If `null` or omitted, the last booted config will be used. If there was no last booted config and this Linode only has one config, it will be used. If a config cannot be determined, an error will be returned.", + "example": "{{config_id}}", + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-reboot-linode-instance.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-reboot-linode-instance.json" + } + } + }, + "description": "Optional reboot parameters." + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-reboot-linode-instance-200.json" + } + } + }, + "description": "Reboot started." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Reboot a Linode", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes reboot 123", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "reboot", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the linode to reboot.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-84c49e3c.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/reboot.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/reboot" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/rebuild": { + "post": { + "description": "Rebuilds a Linode you have the `read_write` permission to modify.\n\nA rebuild first shuts down the Linode, deletes all disks and configuration profiles on the Linode, then deploys a new `image` to the Linode with the given attributes. Additionally:\n\n - Requires an `image` be supplied.\n - Requires a `root_pass` be supplied to use for the root User's Account.\n - It is recommended to supply SSH keys for the root User using the `authorized_keys` field.\n - Linodes utilizing Metadata (`\"has_user_data\": true`) should include `metadata.user_data` in the rebuild request to continue using the service.\n\nLinode interfaces don't change during a rebuild.\n\nDuring a rebuild, you can `enable` or `disable` local disk encryption. If disk encryption is not included in the request, the previous `disk_encryption` value is used. Disk encryption cannot be disabled if the compute instance is attached to a LKE nodepool.\n\nYou also have the option to resize the Linode to a different plan by including the `type` parameter with your request. Note that resizing involves migrating the Linode to a new hardware host, while rebuilding without resizing maintains the same hardware host. Resizing also requires significantly more time for completion of this operation. The following additional conditions apply:\n\n - The Linode must not have a pending migration.\n - Your Account cannot have an outstanding balance.\n - The Linode must not have more disk allocation than the new Type allows.\n - In that situation, you must first delete or resize the disk to be smaller.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes rebuild 123 \\\n --image \"linode/debian9\" \\\n --root_pass aComplex@Password \\\n --disk_encryption disabled \\\n --authorized_keys \"ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer\" \\\n --authorized_users \"myUsername\" \\\n --authorized_users \"secondaryUsername\" \\\n --booted true \\\n --stackscript_id 10079 \\\n --stackscript_data '{\"gh_username\": \"linode\"}' \\\n --type \"g6-standard-2\" \\\n --metadata.userdata \"I2Nsb3VkLWNvbmZpZw==\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance" + }, + "operationId": "post-rebuild-linode-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "additionalProperties": false, + "description": "Common properties for creating and rebuilding Linodes.", + "properties": { + "authorized_keys": { + "description": "__Write-only__ A list of public SSH keys that will be automatically appended to the root user's `~/.ssh/authorized_keys` file when deploying from an Image.", + "example": [ + "ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer" + ], + "items": { + "type": "string" + }, + "type": "array", + "writeOnly": true + }, + "authorized_users": { + "description": "__Write-only__ A list of usernames. If the usernames have associated SSH keys, the keys will be appended to the root users `~/.ssh/authorized_keys` file automatically when deploying from an Image.", + "example": [ + "myUser", + "secondaryUser" + ], + "items": { + "type": "string" + }, + "type": "array", + "writeOnly": true + }, + "booted": { + "default": true, + "description": "__Write-only__ This field defaults to `true` if the Linode is created with an Image or from a Backup. If it is deployed from an Image or a Backup and you wish it to remain `offline` after deployment, set this to `false`.", + "type": "boolean", + "writeOnly": true + }, + "disk_encryption": { + "description": "__Limited availability__ Local disk encryption ensures that your data stored on Linodes is secured. Disk encryption protects against unauthorized data access by keeping the data encrypted if the disk is ever removed from the data center, decommissioned, or disposed of. The platform manages the encryption and decryption for you.\n\nBy default, encryption is `enabled` on all Linodes. If you opted out of encryption or if the Linode was created prior to local disk encryption support, you can encrypt your data using [Rebuild](https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance).", + "enum": [ + "enabled", + "disabled" + ], + "type": "string", + "x-akamai": { + "status": "LA" + }, + "x-linode-cli-display": 8 + }, + "image": { + "description": "An Image ID to deploy the Linode Disk from.\n\nRun the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation with authentication to view all available Images. Official Linode Images start with `linode/`, while your Account's Images start with `private/`. Creating a disk from a Private Image requires `read_only` or `read_write` permissions for that Image. Run the [Update a user's grants](https://techdocs.akamai.com/linode-api/reference/put-user-grants) operation to adjust permissions for an Account Image.", + "example": "linode/debian9", + "type": "string" + }, + "metadata": { + "additionalProperties": false, + "description": "__Write-only__ An object containing user-defined data relevant to the creation of Linodes.", + "properties": { + "user_data": { + "description": "Base64-encoded [cloud-config](https://www.linode.com/docs/products/compute/compute-instances/guides/metadata-cloud-config/) data.\n\nCannot be modified after provisioning. To update, use either the [Clone a Linode](https://techdocs.akamai.com/linode-api/reference/post-clone-linode-instance) or [Rebuild a Linode](https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance) operations.\n\nMust not be included when cloning to an existing Linode.\n\nUnencoded data must not exceed 65535 bytes, or about 16kb encoded.", + "example": "I2Nsb3VkLWNvbmZpZwpwYWNrYWdlX3VwZGF0ZTogdHJ1ZQpwYWNrYWdlX3VwZ3JhZGU6IHRydWU=", + "format": "byte", + "type": "string" + } + }, + "type": "object", + "writeOnly": true + }, + "root_pass": { + "description": "__Write-only__ This sets the root user's password on a newly created Linode Disk when deploying from an Image.\n\n- __Required__ when creating a Linode Disk from an Image, including when using a StackScript.\n\n- Must meet a password strength score requirement that is calculated internally by the API. If the strength requirement is not met, you will receive a `Password does not meet strength requirement` error.", + "example": "aComplexP@ssword", + "format": "password", + "maxLength": 128, + "minLength": 7, + "type": "string", + "writeOnly": true + }, + "stackscript_data": { + "description": "This field is required only if the StackScript being deployed requires input data from the User for successful completion. See [User Defined Fields (UDFs)](https://www.linode.com/docs/products/tools/stackscripts/guides/write-a-custom-script/#declare-user-defined-fields-udfs) for more details.\n\nThis field is required to be valid JSON.\n\nTotal length cannot exceed 65,535 characters.", + "example": { + "gh_username": "linode" + }, + "maxLength": 65535, + "type": "object" + }, + "stackscript_id": { + "description": "A StackScript ID that will cause the referenced StackScript to be run during deployment of this Linode. A compatible `image` is required to use a StackScript. To get a list of available StackScript and their permitted Images, run [List StackScripts](https://techdocs.akamai.com/linode-api/reference/get-stack-scripts). This field cannot be used when deploying from a Backup or a Private Image.", + "example": 10079, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-request.yaml" + } + }, + { + "additionalProperties": false, + "properties": { + "type": { + "description": "The ID of the [Linode type](https://techdocs.akamai.com/linode-api/reference/get-linode-types) to resize to with this request.", + "example": "g6-standard-2", + "type": "string" + } + }, + "type": "object" + } + ], + "required": [ + "image", + "root_pass" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-rebuild-linode-instance.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-rebuild-linode-instance.json" + } + } + }, + "description": "The requested state your Linode will be rebuilt into.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "alerts": { + "additionalProperties": false, + "properties": { + "cpu": { + "description": "The percentage of CPU usage required to trigger an alert. If the average CPU usage over two hours exceeds this value, we'll send you an alert. Your Linode's total CPU capacity is represented as 100%, multiplied by its number of cores.\n\nFor example, a two core Linode's CPU capacity is represented as 200%. If you want to be alerted at 90% of a two core Linode's CPU capacity, set the alert value to `180`.\n\nThe default value is 90% multiplied by the number of cores.\n\nIf the value is set to `0` (zero), the alert is disabled.", + "example": 180, + "type": "integer" + }, + "io": { + "description": "The amount of disk IO operation per second required to trigger an alert. If the average disk IO over two hours exceeds this value, we'll send you an alert. If set to `0` (zero), this alert is disabled.", + "example": 10000, + "type": "integer" + }, + "network_in": { + "description": "The amount of incoming traffic, in Mbit/s, required to trigger an alert. If the average incoming traffic over two hours exceeds this value, we'll send you an alert. If this is set to `0` (zero), the alert is disabled.", + "example": 10, + "type": "integer" + }, + "network_out": { + "description": "The amount of outbound traffic, in Mbit/s, required to trigger an alert. If the average outbound traffic over two hours exceeds this value, we'll send you an alert. If this is set to `0` (zero), the alert is disabled.", + "example": 10, + "type": "integer" + }, + "transfer_quota": { + "description": "The percentage of network transfer that may be used before an alert is triggered. When this value is exceeded, we'll alert you. If this is set to `0` (zero), the alert is disabled.", + "example": 80, + "type": "integer" + } + }, + "type": "object" + }, + "backups": { + "additionalProperties": false, + "description": "Information about this Linode's backups status. For information about available backups, run [List backups](https://techdocs.akamai.com/linode-api/reference/get-backups).", + "properties": { + "available": { + "description": "__Read-only__ Whether Backups for this Linode are available for restoration.\n\nBackups undergoing maintenance are not available for restoration.", + "example": true, + "readOnly": true, + "type": "boolean" + }, + "enabled": { + "description": "__Read-only__ If this Linode has the Backup service enabled. To enable backups, run [Enable backups](https://techdocs.akamai.com/linode-api/reference/post-enable-backups).", + "example": true, + "readOnly": true, + "type": "boolean" + }, + "last_successful": { + "description": "__Read-only__ The last successful backup time. Displayed as `null` if there was no previous backup.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "day": { + "description": "The day of the week that your Linode's weekly backup is taken. If not set manually, a day will be chosen for you. Backups are taken every day, but backups taken on this day are preferred when selecting backups to retain for a longer period.\n\nIf not set manually, then when backups are initially enabled, this may come back as `Scheduling` until the `day` is automatically selected.", + "enum": [ + "Scheduling", + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "example": "Saturday", + "nullable": true, + "type": "string" + }, + "window": { + "description": "When your backups will be taken, in UTC. A backups window is a two-hour span of time in which the backup may occur.\n\nFor example, `W10` indicates that your backups should be taken between 10:00 and 12:00. If you don't choose a backup window, the API automatically assigns one.\n\nIf not set manually, when backups are initially enabled this may come back as `Scheduling` until the `window` is automatically selected.", + "enum": [ + "Scheduling", + "W0", + "W2", + "W4", + "W6", + "W8", + "W10", + "W12", + "W14", + "W16", + "W18", + "W20", + "W22" + ], + "example": "W22", + "nullable": true, + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "capabilities": { + "description": "__Limited availability__, __Read-only__ A list of capabilities this compute instance supports.", + "example": [ + "Block Storage Encryption" + ], + "items": { + "type": "string" + }, + "readOnly": true, + "type": "array", + "x-akamai": { + "status": "LA" + } + }, + "created": { + "description": "__Read-only__ When this Linode was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "disk_encryption": { + "default": "enabled", + "description": "__Limited availability__, __Read-only__ Indicates the local disk encryption setting for this Linode. If the Linode is part of an LKE cluster, the value is `null`.", + "example": "disabled", + "nullable": true, + "readOnly": true, + "type": "string", + "x-akamai": { + "status": "LA" + }, + "x-linode-cli-display": 8 + }, + "group": { + "deprecated": true, + "description": "__Deprecated__, __Filterable__ The group label for this Linode.", + "example": "Linode-Group", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ], + "status": "DEPRECATED" + }, + "x-linode-filterable": true + }, + "has_user_data": { + "description": "__Read-only__ Whether this compute instance was provisioned with `user_data` provided via the Metadata service. See the [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance) description for more information on Metadata.", + "example": true, + "readOnly": true, + "type": "boolean" + }, + "host_uuid": { + "description": "__Read-only__ The Linode's host machine, as a UUID.", + "example": "3a3ddd59d9a78bb8de041391075df44de62bfec8", + "format": "uuid", + "readOnly": true, + "type": "string" + }, + "hypervisor": { + "description": "__Read-only__ The virtualization software powering this Linode.", + "enum": [ + "kvm" + ], + "example": "kvm", + "readOnly": true, + "type": "string" + }, + "id": { + "description": "__Filterable__, __Read-only__ This Linode's ID which must be provided for all operations impacting this Linode.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true + }, + "image": { + "allOf": [ + { + "description": "An Image ID to deploy the Linode Disk from.\n\nRun the [List images](https://techdocs.akamai.com/linode-api/reference/get-images) operation with authentication to view all available Images. Official Linode Images start with `linode/`, while your Account's Images start with `private/`. Creating a disk from a Private Image requires `read_only` or `read_write` permissions for that Image. Run the [Update a user's grants](https://techdocs.akamai.com/linode-api/reference/put-user-grants) operation to adjust permissions for an Account Image.", + "example": "linode/debian9", + "type": "string" + } + ], + "example": "linode/debian10", + "nullable": true, + "readOnly": true, + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + }, + "interface_generation": { + "description": "__Filterable__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 9, + "x-linode-filterable": true + }, + "ipv4": { + "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", + "example": [ + "203.0.113.1", + "192.0.2.1" + ], + "format": "ipv4", + "items": { + "type": "string" + }, + "readOnly": true, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 7, + "x-linode-filterable": true + }, + "ipv6": { + "description": "__Read-only__ This Linode's IPv6 SLAAC address. This address is specific to a Linode, and may not be shared. If the Linode has not been assigned an IPv6 address, the return value will be `null`.", + "example": "c001:d00d::1337/128", + "format": "ipv6/128", + "nullable": true, + "readOnly": true, + "type": "string" + }, + "label": { + "description": "__Filterable__ Provides a name for the Linode. If not provided, the API generates one for it.\n\nLinode labels have the following constraints:\n\n- It needs to begin and end with an alphanumeric character.\n- It can only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n- Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.", + "example": "linode123", + "maxLength": 64, + "minLength": 3, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "lke_cluster_id": { + "description": "__Read-only__ The ID of the Kubernetes cluster if the Linode is part of cluster.", + "example": 1, + "nullable": true, + "readOnly": true, + "type": "integer" + }, + "placement_group": { + "additionalProperties": false, + "description": "__Read-only__ Details on the [placement group](https://www.linode.com/docs/products/compute/compute-instances/guides/placement-groups/) that this Linode belongs to. Empty if the Linode isn't in a placement group.", + "nullable": true, + "properties": { + "id": { + "description": "The placement group's ID. You need to provide it for all operations that affect it.", + "example": 528, + "nullable": false, + "type": "integer", + "x-linode-cli-display": null + }, + "label": { + "description": "__Filterable__ The unique name set for the placement group. A label has these constraints:\n\n- It needs to begin and end with an alphanumeric character.\n- It can only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).", + "example": "PG_Miami_failover", + "minLength": 1, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 10, + "x-linode-filterable": true + }, + "placement_group_policy": { + "description": "How requests to add future compute instances to your placement group are handled, and whether it remains compliant:\n\n- `strict`. Don't assign a new compute instance if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. Use this to ensure the placement group stays compliant (`is_compliant: true`).\n- `flexible`. Assign a new compute instance, even if it breaks the grouped-together or spread-apart model set by the `placement_group_type`. This makes the group non-compliant (`is_compliant: false`). You need to wait for Akamai to move the offending compute instance to make it compliant again, once the necessary capacity is available in the region. Offers flexibility to add future compute instances if compliance isn't an immediate concern.\n\n<>\n\n> \ud83d\udcd8\n>\n> In rare cases, non-compliance can occur with a `strict` placement group if Akamai needs to failover or migrate your compute instances for maintenance. Fixing non-compliance for a `strict` placement group is prioritized over a `flexible` group.", + "enum": [ + "strict", + "flexible" + ], + "example": "strict", + "type": "string", + "x-linode-cli-display": null + }, + "placement_group_type": { + "description": "__Filterable__, __Read-only__ How compute instances are distributed in your placement group. A `placement_group_type` using anti-affinity (`anti-affinity:local`) places compute instances in separate hosts, but still in the same region. This best supports the spread-apart model for high availability. A `placement_group_type` using affinity places compute instances physically close together, possibly on the same host. This supports the grouped-together model for low-latency.\n\n> \ud83d\udcd8\n>\n> Currently, only `anti_affinity:local` is available for `placement_group_type`.", + "enum": [ + "anti_affinity:local" + ], + "example": "anti-affinity:local", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": null, + "x-linode-filterable": true + } + }, + "readOnly": true, + "type": "object" + }, + "region": { + "description": "__Filterable__, __Read-only__ The [region](https://techdocs.akamai.com/linode-api/reference/get-regions) where the Linode deployed. A Linode's region can only be changed by initiating a [cross data center migration](https://techdocs.akamai.com/linode-api/reference/post-migrate-linode-instance).", + "example": "us-east", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 3, + "x-linode-filterable": true + }, + "specs": { + "additionalProperties": false, + "description": "__Read-only__ Information about the resources available to this Linode.", + "properties": { + "disk": { + "description": "__Read-only__ The amount of storage space, in MB, this Linode has access to. A typical Linode divides this space between a primary disk with an `image` deployed to it, and a swap disk, usually 512 MB. This is the default configuration created when deploying a Linode with an `image` through [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance). While this configuration is suitable for 99% of use cases, if you need finer control over your Linode's disks, see the [List disks](https://techdocs.akamai.com/linode-api/reference/get-linode-disks) operations.", + "example": 81920, + "readOnly": true, + "type": "integer" + }, + "gpus": { + "description": "__Read-only__ The number of GPUs this Linode has access to.", + "example": 0, + "readOnly": true, + "type": "integer" + }, + "memory": { + "description": "__Read-only__ The amount of RAM, in MB, this Linode has access to.\n\nTypically, a Linode boots with all of its available RAM, but this can be configured in a config profile. See the [List config profiles](https://techdocs.akamai.com/linode-api/reference/get-linode-configs) operation for more information.", + "example": 4096, + "readOnly": true, + "type": "integer" + }, + "transfer": { + "description": "__Read-only__ The amount of network transfer this Linode is allotted each month.", + "example": 4000, + "readOnly": true, + "type": "integer" + }, + "vcpus": { + "description": "__Read-only__ The number of VCPUs this Linode has access to.", + "example": 2, + "readOnly": true, + "type": "integer" + } + }, + "readOnly": true, + "type": "object" + }, + "status": { + "description": "__Read-only__ A brief description of this Linode's current state. This field may change without direct action from you. For example, when a compute instance goes into maintenance mode, its status is `stopped`. Status is generally self-explanatory, based on its name.\n\n- `busy` indicates you've assigned the compute instance to a [placement group](https://techdocs.akamai.com/cloud-computing/docs/work-with-placement-groups), but the compute instance is currently booting. Once the boot completes, the API completes the assignment and updates the compute instance's `status` accordingly.\n- `provisioning` indicates that the API is applying operating system or Marketplace applications on the compute instance.\n- `billing_suspension` indicates that payment is past due on the compute instance, so we've suspended its use.", + "enum": [ + "running", + "offline", + "booting", + "busy", + "rebooting", + "shutting_down", + "provisioning", + "deleting", + "migrating", + "rebuilding", + "cloning", + "restoring", + "stopped", + "billing_suspension" + ], + "example": "running", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "billing_suspension": "red", + "default_": "yellow", + "offline": "red", + "running": "green" + }, + "x-linode-cli-display": 6 + }, + "tags": { + "description": "__Filterable__ Tags to help you organize your content.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "type": { + "description": "__Read-only__ This is the [Linode type](https://techdocs.akamai.com/linode-api/reference/get-linode-types) that this Linode was deployed with. To change a Linode's type, use [Resize a Linode](https://techdocs.akamai.com/linode-api/reference/post-resize-linode-instance).", + "example": "g6-standard-1", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 4 + }, + "updated": { + "description": "__Read-only__ When this Linode was last updated.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "watchdog_enabled": { + "description": "The watchdog, named Lassie, is a Shutdown Watchdog that monitors your Linode and reboots it if it powers off unexpectedly. It works by issuing a boot job when your Linode powers off without a shutdown job being responsible. To prevent a loop, Lassie gives up if there have been more than 5 boot jobs issued within 15 minutes.", + "example": true, + "type": "boolean" + } + }, + "title": "Linode", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-rebuild-linode-instance-200.json" + } + } + }, + "description": "Rebuild started." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Rebuild a Linode", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes rebuild 123 \\\n --image \"linode/debian9\" \\\n --root_pass aComplex@Password \\\n --disk_encryption disabled \\\n --authorized_keys \"ssh-rsa AAAA_valid_public_ssh_key_123456785== user@their-computer\" \\\n --authorized_users \"myUsername\" \\\n --authorized_users \"secondaryUsername\" \\\n --booted true \\\n --stackscript_id 10079 \\\n --stackscript_data '{\"gh_username\": \"linode\"}' \\\n --type \"g6-standard-2\" \\\n --metadata.userdata \"I2Nsb3VkLWNvbmZpZw==\"", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "rebuild", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to rebuild.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-2816c8d8.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-rebuild.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/rebuild" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/rescue": { + "post": { + "description": "Rescue Mode is a safe environment for performing many system recovery and disk management tasks. Rescue Mode is based on the Finnix recovery distribution, a self-contained and bootable Linux distribution. You can also use Rescue Mode for tasks other than disaster recovery, such as formatting disks to use different filesystems, copying data between disks, and downloading files from a disk via SSH and SFTP.\n\nLinodes with legacy configuration interfaces receive a public IP and boot into the recovery Linux distribution. Linodes with Linode interfaces still boot into recovery mode with the recovery Linux distribution, but they retain their original network interfaces and settings from before entering rescue mode.\n\n- Note that `sdh` is reserved and unavailable during rescue.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes rescue 123 \\\n --devices.sda.disk_id 124458\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-rescue-linode-instance" + }, + "operationId": "post-rescue-linode-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "devices": { + "additionalProperties": false, + "properties": { + "sda": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + }, + "sdb": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + }, + "sdc": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + }, + "sdd": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + }, + "sde": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + }, + "sdf": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + }, + "sdg": { + "additionalProperties": false, + "description": "Device can be either a Disk or Volume identified by `disk_id` or `volume_id`. Only one type per slot allowed. Can be `null`. Devices mapped from _sde_ through _sdh_ are unavailable in `fullvirt` virt_mode.", + "properties": { + "disk_id": { + "description": "The Disk ID, or `null` if a Volume is assigned to this slot.", + "example": 124458, + "type": "integer" + }, + "volume_id": { + "description": "The Volume ID, or `null` if a Disk is assigned to this slot.", + "example": null, + "nullable": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/device.yaml" + } + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/rescue-devices.yaml" + } + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-rescue-linode-instance.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-rescue-linode-instance.json" + } + } + }, + "description": "Optional object of devices to be mounted.", + "required": false + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-rescue-linode-instance-200.json" + } + } + }, + "description": "Rescue started." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Boot a Linode into rescue mode", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes rescue 123 \\\n --devices.sda.disk_id 124458", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "rescue", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to rescue.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-7f941cb9.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/rescue.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/rescue" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/resize": { + "post": { + "description": "Resizes a Linode you have the `read_write` permission to a different Type. If any actions are currently running or queued, those actions must be completed first before you can initiate a resize. Additionally, the following criteria must be met in order to resize a Linode:\n\n - The Linode must not have a pending migration.\n - Your Account cannot have an outstanding balance.\n - The Linode must not have more disk allocation than the new Type allows.\n - In that situation, you must first delete or resize the disk to be smaller.\n\nYou can also resize a Linode when using the [Rebuild a Linode](https://techdocs.akamai.com/linode-api/reference/post-rebuild-linode-instance) operation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes resize 123 \\\n --type g6-standard-2\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-resize-linode-instance" + }, + "operationId": "post-resize-linode-instance", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "allow_auto_disk_resize": { + "default": true, + "description": "Automatically resize disks when resizing a Linode. When resizing down to a smaller plan your Linode's data must fit within the smaller disk size.", + "example": "{{allow_auto_disk_resize}}", + "type": "boolean" + }, + "migration_type": { + "default": "cold", + "description": "Type of migration used in moving to a new host or Linode type.\n\n`warm`: the Linode will not power down until the migration is complete.\nWarm migrations are not available for DC migrations.\n\n`cold`: the Linode will be powered down and migrated. When the migration\nis complete, the Linode will be powered on.", + "enum": [ + "warm", + "cold" + ], + "example": "{{migration_type}}", + "type": "string" + }, + "type": { + "description": "The ID representing the Linode Type.", + "example": "{{type}}", + "type": "string", + "x-linode-cli-display": 1 + } + }, + "required": [ + "type" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-resize-linode-instance.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-resize-linode-instance.json" + } + } + }, + "description": "The Type your current Linode will resize to, and whether to attempt to automatically resize the Linode's disks.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-resize-linode-instance-200.json" + } + } + }, + "description": "Resize started." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_write" + ] + } + ], + "summary": "Resize a Linode", + "tags": [ + "Linode instances" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes resize 123 \\\n --type g6-standard-2", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "resize", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to resize.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-0d41ac92.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-resize.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/resize" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/shutdown": { + "post": { + "description": "Shuts down a Linode you have permission to modify. If any actions are currently running or queued, those actions must be completed first before you can initiate a shutdown.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes shutdown 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-shutdown-linode-instance" + }, + "operationId": "post-shutdown-linode-instance", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { "type": "object", "x-akamai": { "file-path": "schemas/added-post-shutdown-linode-instance-200.yaml" @@ -54017,87 +59520,418 @@ }, "type": "object" }, - "netv6": { - "additionalProperties": false, - "description": "IPv6 statistics.", - "properties": { - "in": { - "description": "Input stats for IPv6, measured in bits/s (bits/second).", - "items": { - "items": { - "example": [ - 1521484800000, - 0 - ], - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - "out": { - "description": "Output stats for IPv6, measured in bits/s (bits/second).", - "items": { - "items": { - "example": [ - 1521484800000, - 0 - ], - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - "private_in": { - "description": "Private IPv6 input statistics, measured in bits/s (bits/second).", - "items": { - "items": { - "example": [ - 1521484800000, - 195.18 - ], - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - "private_out": { - "description": "Private IPv6 output statistics, measured in bits/s (bits/second).", - "items": { - "items": { - "example": [ - 1521484800000, - 5.6 - ], - "type": "number" - }, - "type": "array" - }, - "type": "array" - } - }, - "type": "object" + "netv6": { + "additionalProperties": false, + "description": "IPv6 statistics.", + "properties": { + "in": { + "description": "Input stats for IPv6, measured in bits/s (bits/second).", + "items": { + "items": { + "example": [ + 1521484800000, + 0 + ], + "type": "number" + }, + "type": "array" + }, + "type": "array" + }, + "out": { + "description": "Output stats for IPv6, measured in bits/s (bits/second).", + "items": { + "items": { + "example": [ + 1521484800000, + 0 + ], + "type": "number" + }, + "type": "array" + }, + "type": "array" + }, + "private_in": { + "description": "Private IPv6 input statistics, measured in bits/s (bits/second).", + "items": { + "items": { + "example": [ + 1521484800000, + 195.18 + ], + "type": "number" + }, + "type": "array" + }, + "type": "array" + }, + "private_out": { + "description": "Private IPv6 output statistics, measured in bits/s (bits/second).", + "items": { + "items": { + "example": [ + 1521484800000, + 5.6 + ], + "type": "number" + }, + "type": "array" + }, + "type": "array" + } + }, + "type": "object" + }, + "title": { + "description": "The title for this data set.", + "example": "linode.com - my-linode (linode123456) - day (5 min avg)", + "type": "string" + } + }, + "readOnly": true, + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-stats.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-stats-by-year-month-200.json" + } + } + }, + "description": "The Linode's statistics for the requested period." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_only" + ] + } + ], + "summary": "Get monthly statistics", + "tags": [ + "Statistics" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linodes:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "stats-month", + "x-linode-cli-skip": true + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to look up.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path.yaml" + } + }, + { + "description": "Numeric value representing the year to look up.", + "example": "{{year}}", + "in": "path", + "name": "year", + "required": true, + "schema": { + "example": 2024, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/year-path-6f345986.yaml" + } + }, + { + "description": "Numeric value representing the month to look up.", + "example": "{{month}}", + "in": "path", + "name": "month", + "required": true, + "schema": { + "example": 8, + "maximum": 12, + "minimum": 1, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/month-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-stats-month.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/stats/{year}/{month}" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/transfer": { + "get": { + "description": "Returns a Linode's network transfer pool statistics for the current month.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes transfer-view 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-transfer" + }, + "operationId": "get-linode-transfer", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "billable": { + "description": "__Read-only__ The amount of network transfer this Linode has used, in GB, past your monthly quota.", + "example": 0, + "readOnly": true, + "type": "integer" + }, + "quota": { + "description": "__Read-only__ The amount of network transfer this Linode adds to your transfer pool, in GB, for the current month's billing cycle.", + "example": 2000, + "readOnly": true, + "type": "integer" + }, + "used": { + "description": "__Read-only__ The amount of network transfer used by this Linode, in bytes, for the current month's billing cycle.", + "example": 22956600198, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-get-linode-transfer-200.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-linode-transfer-200.json" + } + } + }, + "description": "A collection of the specified Linode's network transfer statistics." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "linodes:read_only" + ] + } + ], + "summary": "Get a network transfer", + "tags": [ + "Network transfers" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli linodes transfer-view 123", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linodes:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "transfer-view", + "x-linode-grant": "read_only" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "ID of the Linode to look up.", + "example": "{{linodeId}}", + "in": "path", + "name": "linodeId", + "required": true, + "schema": { + "example": 234, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-id-path-dc17dce5.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-transfer.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/transfer" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/instances/{linodeId}/transfer/{year}/{month}": { + "get": { + "description": "Returns a Linode's network transfer statistics for a specific month. The year/month values must be either a date in the past, or the current month.\n\n\n<>\n\n---\n\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-transfer-by-year-month" + }, + "operationId": "get-linode-transfer-by-year-month", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "bytes_in": { + "description": "__Read-only__ The amount of inbound public network traffic received by this Linode, in bytes, for a specific year/month.", + "example": 30471077120, + "readOnly": true, + "type": "integer" + }, + "bytes_out": { + "description": "__Read-only__ The amount of outbound public network traffic sent by this Linode, in bytes, for a specific year/month.", + "example": 22956600198, + "readOnly": true, + "type": "integer" }, - "title": { - "description": "The title for this data set.", - "example": "linode.com - my-linode (linode123456) - day (5 min avg)", - "type": "string" + "bytes_total": { + "description": "__Read-only__ The total amount of public network traffic sent and received by this Linode, in bytes, for a specific year/month.", + "example": 53427677318, + "readOnly": true, + "type": "integer" } }, - "readOnly": true, "type": "object", "x-akamai": { - "file-path": "schemas/linode-stats.yaml" + "file-path": "schemas/added-get-linode-transfer-by-year-month-200.yaml" } }, "x-example": { - "x-ref": "../examples/get-linode-stats-by-year-month-200.json" + "x-ref": "../examples/get-linode-transfer-by-year-month-200.json" } } }, - "description": "The Linode's statistics for the requested period." + "description": "A collection of the specified Linode's network transfer statistics for the requested month." }, "default": { "content": { @@ -54146,9 +59980,9 @@ ] } ], - "summary": "Get monthly statistics", + "summary": "Get monthly network transfer stats", "tags": [ - "Statistics" + "Network transfer statistics" ], "x-akamai": { "tabs": [ @@ -54159,8 +59993,9 @@ } ] }, - "x-linode-cli-action": "stats-month", - "x-linode-cli-skip": true + "x-linode-cli-action": "transfer-month", + "x-linode-cli-skip": true, + "x-linode-grant": "read_only" }, "parameters": [ { @@ -54202,10 +60037,12 @@ "required": true, "schema": { "example": 2024, + "maximum": 2037, + "minimum": 2000, "type": "integer" }, "x-akamai": { - "file-path": "parameters/year-path-6f345986.yaml" + "file-path": "parameters/year-path-dda8c8e5.yaml" } }, { @@ -54226,56 +60063,662 @@ } ], "x-akamai": { - "file-path": "paths/linode-stats-month.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/stats/{year}/{month}" + "file-path": "paths/linode-transfer-month.yaml", + "path-info": "/{apiVersion}/linode/instances/{linodeId}/transfer/{year}/{month}" }, "x-linode-cli-command": "linodes" }, - "/{apiVersion}/linode/instances/{linodeId}/transfer": { - "get": { - "description": "Returns a Linode's network transfer pool statistics for the current month.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes transfer-view 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "/{apiVersion}/linode/instances/{linodeId}/upgrade-interfaces": { + "post": { + "description": "__Beta__ Automatically upgrades all legacy config interfaces of a single configuration profile to Linode interfaces. A Linode interface is directly associated with the Linode, rather than being tied to a configuration profile.\n\nFirewalls are applied to the Linode interface, not directly to the Linode itself.\n\n> \u2757\ufe0f This upgrade is irreversible\n>\n> Once you upgrade a Linode to use Linode interfaces, you can't use legacy config interfaces. This means you can no longer use the Linode with any Linode products that require private IPs, such as NodeBalancer. You can use `dry_run` to preview the upgrade.\n\nBefore upgrading interfaces, you can check the new Linode interface configuration by performing a dry run, where you set `dry_run` to `true` or omit it. A `dry_run` runs the upgrade logic and returns a JSON representation of what the interface configuration will be after the upgrade without committing any changes.\n\nWhen you run this operation with `dry_run` set to `false`, the following occurs:\n - It creates matching interfaces on the Linode based on the interfaces present on the `config_id`.\n - All firewalls are removed from the Linode. Any firewalls that were originally attached to the Linode are now applied to the public and VPC interfaces. If the Linode has no firewalls attached, then default firewalls are not used.\n - If no legacy config interfaces are defined (`legacy_config`) in the `config_id`, a public interface is created using the public IPv4 assigned to the Linode. The same is the case if the Linode has no config defined.\n - For public interfaces, the Linode's current MAC address and SLAAC address are conserved. The MAC address won't change.\n - It deletes all legacy config interfaces from all configs.\n - It returns the list of interfaces for the Linode.\n\nRequirements:\n - The `config_id` for the legacy config interfaces can't use a public interface private IPv4 address.\n - The Linode needs a MAC address in the database if it's IPv6 enabled. If it doesn't, an error message tells you what to do.\n - The Linode must be in a region that supports Linode interfaces. Run [Get a region](https://techdocs.akamai.com/linode-api/reference/get-region).\n - Your account must allow creation of Linodes with Linode interfaces, run [Get account settings](https://techdocs.akamai.com/linode-api/reference/get-account-settings).\n - If the Linode has a user with a non-standard username, it can't be upgraded.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli linodes interfaces-upgrade $linodeId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-transfer" + "url": "https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces" + }, + "operationId": "post-upgrade-linode-interfaces", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "Upgrades a legacy configuration interface on a Linode to a matching Linode interface.", + "nullable": true, + "properties": { + "config_id": { + "default": null, + "description": "The Linode's `config_id`. Only one `config_id` can be specified:\n- If there are no legacy configuration interfaces or configurations defined in the config_id, a public interface is created using the Linode's automatically assigned public IPv4 address.\n- If a config_id is not provided and the Linode has only one configuration, the upgrade automatically uses that config_id.\n- If the Linode has multiple configurations and a config_id is not specified, an error is returned.", + "example": "{{config_id}}", + "nullable": true, + "type": "integer" + }, + "dry_run": { + "default": true, + "description": "Before you upgrade interfaces, you can preview the new Linode interface by performing a `dry_run`:\n- Either omit `dry_run` or set it to `true` to simulate the upgrade process. The response data shows what the Linode interface will look like after the upgrade, but without committing any changes. Since the interface doesn't exist yet, the interface `id` value is 0.\n- If `dry_run` is set to `false`, the Linode undergoes the actual upgrade, but note you need to first shut down the Linode.", + "example": "{{dry_run}}", + "type": "boolean" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-post-linode-interface-upgrade.yaml" + } + }, + "x-example": { + "x-ref": "../examples/linode-interface.json" + } + } + }, + "description": "Upgrade to a Linode interface or perform a dry run upgrade." }, - "operationId": "get-linode-transfer", "responses": { "200": { "content": { "application/json": { + "examples": { + "ex-public": { + "summary": "Public interface", + "value": { + "config_id": 4567, + "dry_run": true, + "interfaces": [ + { + "created": "2024-01-01T00:01:01", + "default_route": { + "ipv4": true, + "ipv6": true + }, + "id": 0, + "mac_address": "22:00:AB:CD:EF:01", + "public": { + "ipv4": { + "addresses": [ + { + "address": "172.30.0.50", + "primary": true + } + ], + "shared": [ + { + "address": "172.30.0.51", + "linode_id": 12345 + } + ] + }, + "ipv6": { + "ranges": [ + { + "range": "2600:3c09:e001:59::/64", + "route_target": "2600:3c09::ff:feab:cdef" + }, + { + "range": "2600:3c09:e001:5a::/64", + "route_target": "2600:3c09::ff:feab:cdef" + } + ], + "shared": [ + { + "range": "2600:3c09:e001:2a::/64", + "route_target": null + } + ], + "slaac": [ + { + "address": "2600:3c09::ff:feab:cdef", + "prefix": 64 + } + ] + } + }, + "updated": "2024-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": null + } + ] + } + }, + "ex-vlan": { + "summary": "VLAN interface", + "value": { + "config_id": 4567, + "dry_run": true, + "interfaces": [ + { + "created": "2024-01-01T00:01:01", + "default_route": {}, + "id": 0, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2024-01-01T00:01:01", + "version": 1, + "vlan": { + "ipam_address": "10.0.0.1/24", + "vlan_label": "my-vlan" + }, + "vpc": null + } + ] + } + }, + "ex-vpc": { + "summary": "VPC interface", + "value": { + "config_id": 4567, + "dry_run": true, + "interfaces": [ + { + "created": "2024-01-01T00:01:01", + "default_route": { + "ipv4": true + }, + "id": 0, + "mac_address": "22:00:AB:CD:EF:01", + "public": null, + "updated": "2024-01-01T00:01:01", + "version": 1, + "vlan": null, + "vpc": { + "ipv4": { + "addresses": [ + { + "address": "192.168.22.3", + "nat_1_1_address": null, + "primary": true + } + ], + "ranges": [ + { + "range": "192.168.22.16/28" + }, + { + "range": "192.168.32.16/28" + } + ] + }, + "subnet_id": 1234, + "vpc_id": 1234 + } + } + ] + } + } + }, "schema": { "additionalProperties": false, + "description": "Upgraded interfaces", "properties": { - "billable": { - "description": "__Read-only__ The amount of network transfer this Linode has used, in GB, past your monthly quota.", - "example": 0, - "readOnly": true, - "type": "integer" + "config_id": { + "description": "The Linode's `config_id` that was upgraded.", + "example": 4567, + "type": "integer", + "x-linode-cli-display": 2 }, - "quota": { - "description": "__Read-only__ The amount of network transfer this Linode adds to your transfer pool, in GB, for the current month's billing cycle.", - "example": 2000, - "readOnly": true, - "type": "integer" + "dry_run": { + "description": "Indicates if this was a `dry_run` upgrade that didn't commit any changes and didn't generate a unique interface ID. If `dry_run` is `false`, the upgrade completed.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 1 }, - "used": { - "description": "__Read-only__ The amount of network transfer used by this Linode, in bytes, for the current month's billing cycle.", - "example": 22956600198, - "readOnly": true, - "type": "integer" + "interfaces": { + "items": { + "description": "One of the following interface types: VPC, public, or VLAN.", + "oneOf": [ + { + "additionalProperties": false, + "description": "A public interface configuration defines the properties and settings for a specific public interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface is used as a default route.", + "nullable": true, + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface is used for the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + }, + "ipv6": { + "default": false, + "description": "Indicates if the interface is used for the IPv6 default route. Only one interface per Linode can have the IPv6 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. A public interface's `mac_address` does not change, even if the public interface is deleted and then recreated.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "Public interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's public IPv4 `addresses`.", + "properties": { + "addresses": { + "description": "The public IPv4 addresses and primary settings for this public interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The public IPv4 address assigned to this interface.", + "example": "172.232.100.100", + "type": "string", + "x-linode-cli-display": 8 + }, + "primary": { + "description": "Indicates if the public IPv4 address serves as the source address for traffic routing within the Linode and other corresponding network interfaces and services.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 9 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv4 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Shared IPv4 address.", + "example": "172.222.33.4", + "type": "string", + "x-linode-cli-display": 10 + }, + "linode_id": { + "description": "The ID of the Linode this address currently belongs to. For IPv4 addresses, by default this is the Linode this address was assigned when created.", + "example": 12345, + "type": "string", + "x-linode-cli-display": 11 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ipv6": { + "additionalProperties": false, + "description": "The interface's public IPv6 configuration.", + "properties": { + "ranges": { + "description": "List of IPv6 ranges assigned to this interface.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "IPv6 range in CIDR notation (`2600:0db8::1/64`) or prefix-only (`/64`).", + "example": "2600:3c09:e001:59::/64", + "type": "string", + "x-linode-cli-display": 16 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 17 + } + }, + "type": "object" + }, + "type": "array" + }, + "shared": { + "description": "The IPv6 address assigned to this Linode interface, which is also shared with another Linode.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "The IPv6 address range.", + "example": "2600:3c09:e001:2a::/64", + "type": "string", + "x-linode-cli-display": 14 + }, + "route_target": { + "description": "The public IPv6 address that the `range` is routed to.", + "example": null, + "type": "string", + "x-linode-cli-display": 15 + } + }, + "type": "object" + }, + "type": "array" + }, + "slaac": { + "description": "The public `slaac` and subnet prefix settings for this public interface that is used to communicate over the public internet, and with other services in the same data center.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "Public IPv6 addresses assigned to this interface.", + "example": "2600:3c09::ff:feab:cdef", + "type": "string", + "x-linode-cli-display": 12 + }, + "prefix": { + "description": "The prefix length advertised for SLAAC to use. Only the specific (`/128`) EUI-64 address derived from the interface's MAC address is supported. To ensure the MAC-based EUI-64 address is used, privacy addressing needs to be disabled. Network Helper automatically configures the MAC-derived EUI-64 address. If you disable Network Helper or use an unsupported operating system, follow the specific instructions for your OS.", + "example": 64, + "type": "integer", + "x-linode-cli-display": 13 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that increments when the interface updates.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 7 + }, + "vlan": { + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "Public interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-public.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VLAN interface configuration defines the properties and settings for a specific VLAN interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "description": "The value is `null` if this isn't a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface was last updated.", + "example": "2024-01-01T00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "Interface version number that is incremented when the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 5 + }, + "vlan": { + "additionalProperties": false, + "description": "VLAN interface type.", + "properties": { + "ipam_address": { + "description": "This VLAN interface's private IPv4 address in classless inter-domain routing (CIDR) notation.", + "example": "10.0.0.1/24", + "format": "ip/netmask", + "nullable": true, + "type": "string", + "x-linode-cli-display": 7 + }, + "vlan_label": { + "description": "The VLAN's label. VLAN interfaces on the same Linode must have a unique `vlan_label`.", + "example": "my-vlan", + "type": "string", + "x-linode-cli-display": 6 + } + }, + "type": "object" + }, + "vpc": { + "description": "The value is `null` if this isn't a VPC interface.", + "example": null, + "nullable": true, + "type": "object" + } + }, + "title": "VLAN interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vlan.yaml" + } + }, + { + "additionalProperties": false, + "description": "A VPC interface configuration defines settings for a specific VPC interface in the Linode network.", + "properties": { + "created": { + "description": "When the interface was created.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 3 + }, + "default_route": { + "additionalProperties": false, + "description": "Indicates if the interface serves as a default route.", + "properties": { + "ipv4": { + "default": false, + "description": "Indicates if the interface serves as the IPv4 default route. Only one interface per Linode can have the IPv4 default route.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 5 + } + }, + "type": "object" + }, + "id": { + "description": "__Read-only__ The unique ID for this interface. For `dry_run` [upgrades](https://techdocs.akamai.com/linode-api/reference/post-upgrade-linode-interfaces), a unique `id` is not generated for the interface and its value is set to 0.", + "example": 1234, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "mac_address": { + "description": "A 48-bit MAC address used to identify the Linode\u2019s interface. The `mac_address` of an interface remains constant and does not change.", + "example": "22:00:AB:CD:EF:01", + "maxLength": 64, + "minLength": 1, + "pattern": "[a-zA-Z0-9-]+", + "type": "string", + "x-linode-cli-display": 2 + }, + "public": { + "additionalProperties": false, + "description": "The value is `null` if this is not a public interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "updated": { + "description": "When the interface last updated.", + "example": "2025-01-01 00:01:01", + "format": "date-time", + "type": "string", + "x-linode-cli-display": 4 + }, + "version": { + "description": "The version number of the interface configuration, incremented each time the interface is updated.", + "example": 1, + "type": "integer", + "x-linode-cli-display": 6 + }, + "vlan": { + "additionalProperties": false, + "description": "The value is `null` if this is not a VLAN interface.", + "example": null, + "nullable": true, + "type": "object" + }, + "vpc": { + "additionalProperties": false, + "description": "VPC interface type.", + "properties": { + "ipv4": { + "additionalProperties": false, + "description": "The interface's IPv4 `addresses` and `ranges` configuration.", + "properties": { + "addresses": { + "description": "IPv4 address settings for this VPC interface.", + "items": { + "additionalProperties": false, + "properties": { + "address": { + "description": "The VPC subnet IPv4 address.", + "example": "192.168.22.3", + "type": "string", + "x-linode-cli-display": 9 + }, + "nat_1_1_address": { + "description": "The 1:1 NAT IPv4 address used to associate a public IPv4 address with the interface's VPC subnet IPv4 address.", + "example": null, + "nullable": true, + "type": "string", + "x-linode-cli-display": 11 + }, + "primary": { + "description": "Indicates if the IPv4 address is used to set up a source address for routes inside the Linode for the corresponding network interface.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 10 + } + }, + "type": "object" + }, + "type": "array" + }, + "ranges": { + "description": "VPC IPv4 ranges.", + "items": { + "additionalProperties": false, + "properties": { + "range": { + "description": "CIDR notation of a range (`1.2.3.4/24`) or prefix only (`/24`).", + "example": "192.168.22.16/28", + "type": "string", + "x-linode-cli-display": 12 + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "subnet_id": { + "description": "VPC subnet's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 8 + }, + "vpc_id": { + "description": "VPC's unique identifier.", + "example": 1234, + "type": "integer", + "x-linode-cli-display": 7 + } + }, + "type": "object" + } + }, + "title": "VPC interface", + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface-vpc.yaml" + } + } + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/linode-interface.yaml" + } + }, + "type": "array" } }, "type": "object", "x-akamai": { - "file-path": "schemas/added-get-linode-transfer-200.yaml" + "file-path": "schemas/linode-interface-upgrade.yaml" } - }, - "x-example": { - "x-ref": "../examples/get-linode-transfer-200.json" } } }, - "description": "A collection of the specified Linode's network transfer statistics." + "description": "Upgrade or `dry_run` upgrade completed." }, "default": { "content": { @@ -54320,179 +60763,31 @@ }, { "oauth": [ - "linodes:read_only" + "linodes:read_write" ] } ], - "summary": "Get a network transfer", + "summary": "Upgrade to Linode interfaces", "tags": [ - "Network transfers" + "Linode interfaces" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli linodes transfer-view 123", + "syntax": "linode-cli linodes interfaces-upgrade $linodeId", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "linodes:read_only", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" - } - ] - }, - "x-linode-cli-action": "transfer-view", - "x-linode-grant": "read_only" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "ID of the Linode to look up.", - "example": "{{linodeId}}", - "in": "path", - "name": "linodeId", - "required": true, - "schema": { - "example": 234, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/linode-id-path-dc17dce5.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/linode-transfer.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/transfer" - }, - "x-linode-cli-command": "linodes" - }, - "/{apiVersion}/linode/instances/{linodeId}/transfer/{year}/{month}": { - "get": { - "description": "Returns a Linode's network transfer statistics for a specific month. The year/month values must be either a date in the past, or the current month.\n\n\n<>\n\n---\n\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-linode-transfer-by-year-month" - }, - "operationId": "get-linode-transfer-by-year-month", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "bytes_in": { - "description": "__Read-only__ The amount of inbound public network traffic received by this Linode, in bytes, for a specific year/month.", - "example": 30471077120, - "readOnly": true, - "type": "integer" - }, - "bytes_out": { - "description": "__Read-only__ The amount of outbound public network traffic sent by this Linode, in bytes, for a specific year/month.", - "example": 22956600198, - "readOnly": true, - "type": "integer" - }, - "bytes_total": { - "description": "__Read-only__ The total amount of public network traffic sent and received by this Linode, in bytes, for a specific year/month.", - "example": 53427677318, - "readOnly": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/added-get-linode-transfer-by-year-month-200.yaml" - } - }, - "x-example": { - "x-ref": "../examples/get-linode-transfer-by-year-month-200.json" - } - } - }, - "description": "A collection of the specified Linode's network transfer statistics for the requested month." - }, - "default": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "errors": { - "items": { - "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", - "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", - "type": "string" - }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" - } - }, - "type": "array" - } - }, - "type": "object" - } - } - }, - "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." - } - }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "linodes:read_only" - ] - } - ], - "summary": "Get monthly network transfer stats", - "tags": [ - "Network transfer statistics" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linodes:read_only", + "syntax": "linodes:read_write", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "transfer-month", - "x-linode-cli-skip": true, - "x-linode-grant": "read_only" + "x-linode-cli-action": "interfaces-upgrade", + "x-linode-grant": "read_write" }, "parameters": [ { @@ -54513,7 +60808,7 @@ } }, { - "description": "ID of the Linode to look up.", + "description": "The `id` of the Linode.", "example": "{{linodeId}}", "in": "path", "name": "linodeId", @@ -54523,45 +60818,14 @@ "type": "integer" }, "x-akamai": { - "file-path": "parameters/linode-id-path.yaml" - } - }, - { - "description": "Numeric value representing the year to look up.", - "example": "{{year}}", - "in": "path", - "name": "year", - "required": true, - "schema": { - "example": 2024, - "maximum": 2037, - "minimum": 2000, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/year-path-dda8c8e5.yaml" - } - }, - { - "description": "Numeric value representing the month to look up.", - "example": "{{month}}", - "in": "path", - "name": "month", - "required": true, - "schema": { - "example": 8, - "maximum": 12, - "minimum": 1, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/month-path.yaml" + "file-path": "parameters/linode-id.yaml" } } ], "x-akamai": { - "file-path": "paths/linode-transfer-month.yaml", - "path-info": "/{apiVersion}/linode/instances/{linodeId}/transfer/{year}/{month}" + "file-path": "paths/linode-interface-upgrade.yaml", + "path-info": "/{apiVersion}/linode/{linodeId}/upgrade-interfaces", + "status": "BETA" }, "x-linode-cli-command": "linodes" }, @@ -55115,23 +61379,222 @@ "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." } }, - "summary": "List kernels", + "summary": "List kernels", + "tags": [ + "Kernels" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli kernels list", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + } + ] + }, + "x-linode-cli-action": [ + "list", + "ls" + ] + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/kernels.yaml", + "path-info": "/{apiVersion}/linode/kernels" + }, + "x-linode-cli-command": "kernels" + }, + "/{apiVersion}/linode/kernels/{kernelId}": { + "get": { + "description": "Returns information about a single Kernel.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli kernels view latest-64bit\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-kernel" + }, + "operationId": "get-kernel", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "Linux kernel object.", + "properties": { + "architecture": { + "description": "__Filterable__, __Read-only__ The architecture of this Kernel.", + "enum": [ + "x86_64", + "i386" + ], + "example": "x86_64", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true + }, + "built": { + "description": "__Read-only__ The date on which this Kernel was built.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "deprecated": { + "description": "__Filterable__, __Read-only__ If this Kernel is marked as deprecated, this field has a value of `true`; otherwise, this field is `false`.", + "example": false, + "readOnly": true, + "type": "boolean", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "id": { + "description": "__Read-only__ The unique ID of this Kernel.", + "example": "linode/latest-64bit", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "kvm": { + "description": "__Filterable__, __Read-only__ If this Kernel is suitable for KVM Linodes.", + "example": true, + "readOnly": true, + "type": "boolean", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "label": { + "description": "__Filterable__, __Read-only__ The friendly name of this Kernel.", + "example": "Latest 64 bit (4.15.7-x86_64-linode102)", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "pvops": { + "description": "__Filterable__, __Read-only__ If this Kernel is suitable for paravirtualized operations.", + "example": false, + "readOnly": true, + "type": "boolean", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "version": { + "description": "__Filterable__, __Read-only__ Linux Kernel version.", + "example": "4.15.7", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 3, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/kernel.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-kernel-200.json" + } + } + }, + "description": "A single Kernel object." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "summary": "Get a kernel", "tags": [ "Kernels" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli kernels list", + "syntax": "linode-cli kernels view latest-64bit", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" } ] }, - "x-linode-cli-action": [ - "list", - "ls" - ] + "x-linode-cli-action": "view" }, "parameters": [ { @@ -55150,188 +61613,54 @@ "x-akamai": { "file-path": "parameters/api-version-path.yaml" } + }, + { + "description": "ID of the Kernel to look up.", + "example": "{{kernelId}}", + "in": "path", + "name": "kernelId", + "required": true, + "schema": { + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/kernel-id-path.yaml" + } } ], "x-akamai": { - "file-path": "paths/kernels.yaml", - "path-info": "/{apiVersion}/linode/kernels" + "file-path": "paths/kernel.yaml", + "path-info": "/{apiVersion}/linode/kernels/{kernelId}" }, "x-linode-cli-command": "kernels" }, - "/{apiVersion}/linode/kernels/{kernelId}": { - "get": { - "description": "Returns information about a single Kernel.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli kernels view latest-64bit\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-kernel" - }, - "operationId": "get-kernel", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "description": "Linux kernel object.", - "properties": { - "architecture": { - "description": "__Filterable__, __Read-only__ The architecture of this Kernel.", - "enum": [ - "x86_64", - "i386" - ], - "example": "x86_64", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 4, - "x-linode-filterable": true - }, - "built": { - "description": "__Read-only__ The date on which this Kernel was built.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - }, - "deprecated": { - "description": "__Filterable__, __Read-only__ If this Kernel is marked as deprecated, this field has a value of `true`; otherwise, this field is `false`.", - "example": false, - "readOnly": true, - "type": "boolean", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "id": { - "description": "__Read-only__ The unique ID of this Kernel.", - "example": "linode/latest-64bit", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 1 - }, - "kvm": { - "description": "__Filterable__, __Read-only__ If this Kernel is suitable for KVM Linodes.", - "example": true, - "readOnly": true, - "type": "boolean", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "label": { - "description": "__Filterable__, __Read-only__ The friendly name of this Kernel.", - "example": "Latest 64 bit (4.15.7-x86_64-linode102)", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 2, - "x-linode-filterable": true - }, - "pvops": { - "description": "__Filterable__, __Read-only__ If this Kernel is suitable for paravirtualized operations.", - "example": false, - "readOnly": true, - "type": "boolean", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "version": { - "description": "__Filterable__, __Read-only__ Linux Kernel version.", - "example": "4.15.7", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 3, - "x-linode-filterable": true - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/kernel.yaml" - } - }, - "x-example": { - "x-ref": "../examples/get-kernel-200.json" - } - } - }, - "description": "A single Kernel object." + "/{apiVersion}/linode/quotas": { + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" }, - "default": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "errors": { - "items": { - "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", - "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", - "type": "string" - }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" - } - }, - "type": "array" - } - }, - "type": "object" - } - } - }, - "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" } - }, - "summary": "Get a kernel", - "tags": [ - "Kernels" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linode-cli kernels view latest-64bit", - "title": "CLI", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - } - ] - }, - "x-linode-cli-action": "view" + } + ], + "x-akamai": { + "file-path": "paths/linode-quotas.yaml", + "path-info": "/{apiVersion}/linode/quotas" }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/quotas/{linode-quotaId}": { "parameters": [ { "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", @@ -55351,24 +61680,65 @@ } }, { - "description": "ID of the Kernel to look up.", - "example": "{{kernelId}}", + "description": "The `id` of the specific Linode-related quota to look up.", + "example": "{{linode-quotaId}}", "in": "path", - "name": "kernelId", + "name": "linode-quotaId", "required": true, "schema": { + "example": 123, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-quota-id-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/linode-quota.yaml", + "path-info": "/{apiVersion}/linode/quotas/{linode-quotaId}" + }, + "x-linode-cli-command": "linodes" + }, + "/{apiVersion}/linode/quotas/{linode-quotaId}/usage": { + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], "type": "string" }, "x-akamai": { - "file-path": "parameters/kernel-id-path.yaml" + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The `id` of the specific Linode-related quota to look up.", + "example": "{{linode-quotaId}}", + "in": "path", + "name": "linode-quotaId", + "required": true, + "schema": { + "example": 123, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/linode-quota-id-path.yaml" } } ], "x-akamai": { - "file-path": "paths/kernel.yaml", - "path-info": "/{apiVersion}/linode/kernels/{kernelId}" + "file-path": "paths/linode-quota-usage.yaml", + "path-info": "/{apiVersion}/linode/quotas/{linode-quotaId}/usage" }, - "x-linode-cli-command": "kernels" + "x-linode-cli-command": "linodes" }, "/{apiVersion}/linode/stackscripts": { "post": { @@ -57267,7 +63637,7 @@ "type": "object" }, "class": { - "description": "__Filterable__, __Read-only__ The class of the Linode type.\n\n- `nanode`. These instances are good for low-duty workloads, where performance isn't critical.\n\n- `standard`. These instances are good for medium-duty workloads, and offer a good mix of performance, resources, and price.\n\n- `dedicated`. These instances are good for full-duty workloads where consistent performance is important.\n\n- `premium` (limited regions). This includes the features of a `dedicated` instance as well as the latest AMD EPYC™ CPUs. This ensures your applications are running on the latest hardware with consistently high performance. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with \"Premium Plans\" in their `capabilities`.\n\n- `gpu` (limited regions). Linodes with dedicated NVIDIA Quadro® RTX 6000 GPUs accelerate highly specialized applications such as machine learning, AI, and video transcoding. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with `GPU Linodes` in their `capabilities`.\n\n- `accelerated` (limited regions - **Beta**). These leverage the power of dedicated, application-specific integrated circuits (ASIC), starting with NETINT Video Processing Units (VPUs). They're ideal for video transcoding, media processing, and other compute-heavy workloads. Designed to offload specialized tasks, these instances deliver faster processing times and greater efficiency than traditional CPU-based solutions.\n\n- `highmem`. High Memory instances favor RAM over other resources, and can be good for memory hungry use cases like caching and in-memory databases. All High Memory plans contain dedicated CPU cores.\n\n> \ud83d\udcd8\n>\n> - A `nanode` class is listed as a 1 GB Linode in Cloud Manager. The API, the CLI, and billing continue to refer to these as a Nanode.\n>\n> - A `standard` class is listed as a Shared Linode in Cloud Manager. The API, the CLI, and billing still refer to these as Standard.\n>\n> - The `accelerated` Linode type is in **Beta**. Talk to your account team or [open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket).", + "description": "__Filterable__, __Read-only__ The class of the Linode type.\n\n- `nanode`. These instances are good for low-duty workloads, where performance isn't critical.\n\n- `standard`. These instances are good for medium-duty workloads, and offer a good mix of performance, resources, and price.\n\n- `dedicated`. These instances are good for full-duty workloads where consistent performance is important.\n\n- `premium` (limited regions). This includes the features of a `dedicated` instance as well as the latest AMD EPYC™ CPUs. This ensures your applications are running on the latest hardware with consistently high performance. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with \"Premium Plans\" in their `capabilities`.\n\n- `gpu` (limited regions). Linodes with dedicated NVIDIA Quadro® RTX 6000 GPUs accelerate highly specialized applications such as machine learning, AI, and video transcoding. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with `GPU Linodes` in their `capabilities`.\n\n- `accelerated` (limited regions). These leverage the power of dedicated, application-specific integrated circuits (ASIC), starting with NETINT Video Processing Units (VPUs). They're ideal for video transcoding, media processing, and other compute-heavy workloads. Designed to offload specialized tasks, these instances deliver faster processing times and greater efficiency than traditional CPU-based solutions. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with `Accelerated` in their `capabilities`.\n\n- `highmem`. High Memory instances favor RAM over other resources, and can be good for memory hungry use cases like caching and in-memory databases. All High Memory plans contain dedicated CPU cores.\n\n> \ud83d\udcd8\n>\n> - A `nanode` class is listed as a 1 GB Linode in Cloud Manager. The API, the CLI, and billing continue to refer to these as a Nanode.\n>\n> - A `standard` class is listed as a Shared Linode in Cloud Manager. The API, the CLI, and billing still refer to these as Standard.", "enum": [ "nanode", "standard", @@ -57628,7 +63998,7 @@ "type": "object" }, "class": { - "description": "__Filterable__, __Read-only__ The class of the Linode type.\n\n- `nanode`. These instances are good for low-duty workloads, where performance isn't critical.\n\n- `standard`. These instances are good for medium-duty workloads, and offer a good mix of performance, resources, and price.\n\n- `dedicated`. These instances are good for full-duty workloads where consistent performance is important.\n\n- `premium` (limited regions). This includes the features of a `dedicated` instance as well as the latest AMD EPYC™ CPUs. This ensures your applications are running on the latest hardware with consistently high performance. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with \"Premium Plans\" in their `capabilities`.\n\n- `gpu` (limited regions). Linodes with dedicated NVIDIA Quadro® RTX 6000 GPUs accelerate highly specialized applications such as machine learning, AI, and video transcoding. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with `GPU Linodes` in their `capabilities`.\n\n- `accelerated` (limited regions - **Beta**). These leverage the power of dedicated, application-specific integrated circuits (ASIC), starting with NETINT Video Processing Units (VPUs). They're ideal for video transcoding, media processing, and other compute-heavy workloads. Designed to offload specialized tasks, these instances deliver faster processing times and greater efficiency than traditional CPU-based solutions.\n\n- `highmem`. High Memory instances favor RAM over other resources, and can be good for memory hungry use cases like caching and in-memory databases. All High Memory plans contain dedicated CPU cores.\n\n> \ud83d\udcd8\n>\n> - A `nanode` class is listed as a 1 GB Linode in Cloud Manager. The API, the CLI, and billing continue to refer to these as a Nanode.\n>\n> - A `standard` class is listed as a Shared Linode in Cloud Manager. The API, the CLI, and billing still refer to these as Standard.\n>\n> - The `accelerated` Linode type is in **Beta**. Talk to your account team or [open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket).", + "description": "__Filterable__, __Read-only__ The class of the Linode type.\n\n- `nanode`. These instances are good for low-duty workloads, where performance isn't critical.\n\n- `standard`. These instances are good for medium-duty workloads, and offer a good mix of performance, resources, and price.\n\n- `dedicated`. These instances are good for full-duty workloads where consistent performance is important.\n\n- `premium` (limited regions). This includes the features of a `dedicated` instance as well as the latest AMD EPYC™ CPUs. This ensures your applications are running on the latest hardware with consistently high performance. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with \"Premium Plans\" in their `capabilities`.\n\n- `gpu` (limited regions). Linodes with dedicated NVIDIA Quadro® RTX 6000 GPUs accelerate highly specialized applications such as machine learning, AI, and video transcoding. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with `GPU Linodes` in their `capabilities`.\n\n- `accelerated` (limited regions). These leverage the power of dedicated, application-specific integrated circuits (ASIC), starting with NETINT Video Processing Units (VPUs). They're ideal for video transcoding, media processing, and other compute-heavy workloads. Designed to offload specialized tasks, these instances deliver faster processing times and greater efficiency than traditional CPU-based solutions. Only available in [regions](https://techdocs.akamai.com/linode-api/reference/get-regions) with `Accelerated` in their `capabilities`.\n\n- `highmem`. High Memory instances favor RAM over other resources, and can be good for memory hungry use cases like caching and in-memory databases. All High Memory plans contain dedicated CPU cores.\n\n> \ud83d\udcd8\n>\n> - A `nanode` class is listed as a 1 GB Linode in Cloud Manager. The API, the CLI, and billing continue to refer to these as a Nanode.\n>\n> - A `standard` class is listed as a Shared Linode in Cloud Manager. The API, the CLI, and billing still refer to these as Standard.", "enum": [ "nanode", "standard", @@ -59433,7 +65803,7 @@ }, "/{apiVersion}/lke/clusters/{clusterId}/control_plane_acl": { "get": { - "description": "Get a specific cluster's control plane access control List.\n\n> \ud83d\udcd8\n>\n> Currently, control plane ACLs may not be available to all users.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke cluster-acl-view 12345\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Get a specific cluster's control plane access control List.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke cluster-acl-view 12345\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/get-lke-cluster-acl" @@ -59679,7 +66049,7 @@ "x-linode-cli-action": "cluster-acl-view" }, "put": { - "description": "Updates a specific cluster's control plane access control list.\n\n> \ud83d\udcd8\n>\n> Currently, control plane ACLs may not be available to all users.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke cluster-acl-update 12345 \\\n --acl.enabled true \\\n --acl.addresses.ipv4 \"203.0.113.1\" \\\n --acl.addresses.ipv6 \"2001:db8:1234:abcd::/64\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Updates a specific cluster's control plane access control list.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke cluster-acl-update 12345 \\\n --acl.enabled true \\\n --acl.addresses.ipv4 \"203.0.113.1\" \\\n --acl.addresses.ipv6 \"2001:db8:1234:abcd::/64\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/put-lke-cluster-acl" @@ -59988,7 +66358,7 @@ "x-linode-cli-action": "cluster-acl-update" }, "delete": { - "description": "Disable control plane access controls and deletes all rules. This has the same effect as calling `PUT` with an acl json map value of `{\u201cenabled\u201d : false}`. \n\n> \ud83d\udcd8\n>\n> Currently, control plane ACLs may not be available to all users.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke cluster-acl-delete 12345\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Disable control plane access controls and deletes all rules. This has the same effect as calling `PUT` with an acl json map value of `{\u201cenabled\u201d : false}`. \n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke cluster-acl-delete 12345\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/delete-lke-cluster-acl" @@ -61209,9 +67579,10 @@ "type": "integer" }, "disk_encryption": { - "description": "__Limited availability__ For new LKE node pools, `disk_encryption` is automatically `enabled` where disk encryption is supported. It can't be `disabled`. For existing LKE node pools, this derives from the Linode's `disk_encryption` setting. If a Linode's node pool is not encrypted and you want an encrypted node pool, delete the node pool and create a new node pool.", + "description": "__Limited availability__ Indicates the local disk encryption setting for this LKE node pool.", "enum": [ - "enabled" + "enabled", + "disabled" ], "example": "disabled", "type": "string", @@ -61507,9 +67878,10 @@ "type": "integer" }, "disk_encryption": { - "description": "__Limited availability__ For new LKE node pools, `disk_encryption` is automatically `enabled` where disk encryption is supported. It can't be `disabled`. For existing LKE node pools, this derives from the Linode's `disk_encryption` setting. If a Linode's node pool is not encrypted and you want an encrypted node pool, delete the node pool and create a new node pool.", + "description": "__Limited availability__ Indicates the local disk encryption setting for this LKE node pool.", "enum": [ - "enabled" + "enabled", + "disabled" ], "example": "disabled", "type": "string", @@ -61896,9 +68268,10 @@ "type": "integer" }, "disk_encryption": { - "description": "__Limited availability__ For new LKE node pools, `disk_encryption` is automatically `enabled` where disk encryption is supported. It can't be `disabled`. For existing LKE node pools, this derives from the Linode's `disk_encryption` setting. If a Linode's node pool is not encrypted and you want an encrypted node pool, delete the node pool and create a new node pool.", + "description": "__Limited availability__ Indicates the local disk encryption setting for this LKE node pool.", "enum": [ - "enabled" + "enabled", + "disabled" ], "example": "disabled", "type": "string", @@ -62274,9 +68647,10 @@ "type": "integer" }, "disk_encryption": { - "description": "__Limited availability__ For new LKE node pools, `disk_encryption` is automatically `enabled` where disk encryption is supported. It can't be `disabled`. For existing LKE node pools, this derives from the Linode's `disk_encryption` setting. If a Linode's node pool is not encrypted and you want an encrypted node pool, delete the node pool and create a new node pool.", + "description": "__Limited availability__ Indicates the local disk encryption setting for this LKE node pool.", "enum": [ - "enabled" + "enabled", + "disabled" ], "example": "disabled", "type": "string", @@ -63201,6 +69575,112 @@ }, "x-linode-cli-command": "lke" }, + "/{apiVersion}/lke/quotas": { + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/lke-quotas.yaml", + "path-info": "/{apiVersion}/lke/quotas" + }, + "x-linode-cli-command": "lke" + }, + "/{apiVersion}/lke/quotas/{lke-quotaId}": { + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the specific LKE-related quota to look up.", + "example": "{{lke-quotaId}}", + "in": "path", + "name": "lke-quotaId", + "required": true, + "schema": { + "example": 345, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/lke-quota-id-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/lke-quota.yaml", + "path-info": "/{apiVersion}/lke/quotas/{lke-quotaId}" + }, + "x-linode-cli-command": "lke" + }, + "/{apiVersion}/lke/quotas/{lke-quotaId}/usage": { + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the specific LKE-related quota to look up.", + "example": "{{lke-quotaId}}", + "in": "path", + "name": "lke-quotaId", + "required": true, + "schema": { + "example": 345, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/lke-quota-id-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/lke-quota-usage.yaml", + "path-info": "/{apiVersion}/lke/quotas/{lke-quotaId}/usage" + }, + "x-linode-cli-command": "lke" + }, "/{apiVersion}/lke/tiers/{tier}/versions": { "get": { "description": "List LKE Kubernetes versions available for deployment to a Kubernetes cluster (any tier).\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli lke tiered-versions-list standard\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n lke:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", @@ -63821,7 +70301,7 @@ }, "summary": "List Kubernetes types", "tags": [ - "Kubernetes types" + "LKE types" ], "x-akamai": { "tabs": [ @@ -70541,27 +77021,613 @@ "minimum": 1, "type": "integer" }, - "updated": { - "description": "__Read-only__ When this Managed Service was last updated.", - "example": "{{updated}}", - "format": "date-time", - "readOnly": true, - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/managed-service.yaml" + "updated": { + "description": "__Read-only__ When this Managed Service was last updated.", + "example": "{{updated}}", + "format": "date-time", + "readOnly": true, + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/managed-service.yaml" + } + }, + "x-example": { + "x-ref": "../examples/put-managed-service.json" + } + } + }, + "description": "The fields to update.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "A service that Linode is monitoring as part of your Managed services. If issues are detected with this service, a ManagedIssue will be opened and, optionally, Linode special forces will attempt to resolve the Issue.", + "properties": { + "address": { + "description": "The URL at which this Service is monitored. URL parameters such as `?no-cache=1` are preserved. URL fragments/anchors such as `#monitor` are __not__ preserved.", + "example": "https://example.org", + "format": "url", + "maxLength": 100, + "minLength": 3, + "type": "string", + "x-linode-cli-display": 5 + }, + "body": { + "description": "What to expect to find in the response body for the Service to be considered up.", + "example": "it worked", + "maxLength": 100, + "minLength": 0, + "nullable": true, + "type": "string" + }, + "consultation_group": { + "description": "The group of ManagedContacts who should be notified or consulted with when an Issue is detected.", + "example": "on-call", + "maxLength": 50, + "minLength": 0, + "type": "string", + "x-linode-cli-display": 6 + }, + "created": { + "description": "__Read-only__ When this Managed Service was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "credentials": { + "description": "An array of ManagedCredential IDs that should be used when attempting to resolve issues with this Service.", + "items": { + "example": 9991, + "type": "integer" + }, + "type": "array" + }, + "id": { + "description": "__Read-only__ This Service's unique ID.", + "example": 9944, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "label": { + "description": "The label for this Service. This is for display purposes only.", + "example": "prod-1", + "maxLength": 64, + "minLength": 3, + "pattern": "[a-zA-Z0-9-_ \\.]{3,64}", + "type": "string", + "x-linode-cli-display": 4 + }, + "notes": { + "description": "Any information relevant to the Service that Linode special forces should know when attempting to resolve Issues.", + "example": "The service name is my-cool-application", + "nullable": true, + "type": "string" + }, + "region": { + "description": "The Region in which this Service is located. This is required if address is a private IP, and may not be set otherwise.", + "example": null, + "nullable": true, + "type": "string" + }, + "service_type": { + "description": "How this Service is monitored.", + "enum": [ + "url", + "tcp" + ], + "example": "url", + "type": "string", + "x-linode-cli-display": 3 + }, + "status": { + "description": "__Read-only__ The current status of this Service.", + "enum": [ + "disabled", + "pending", + "ok", + "problem" + ], + "example": "ok", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "default_": "yellow", + "disabled": "red", + "ok": "green" + }, + "x-linode-cli-display": 2 + }, + "timeout": { + "description": "How long to wait, in seconds, for a response before considering the Service to be down.", + "example": 30, + "maximum": 255, + "minimum": 1, + "type": "integer" + }, + "updated": { + "description": "__Read-only__ When this Managed Service was last updated.", + "example": "2018-03-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/managed-service.yaml" + } + }, + "x-example": { + "x-ref": "../examples/get-managed-service-200.json" + } + } + }, + "description": "Service updated successfully." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "account:read_write" + ] + } + ], + "summary": "Update a managed service", + "tags": [ + "Services" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli managed service-update 9994 \\\n --service_type url \\\n --label prod-1 \\\n --address \"https://example.org\" \\\n --timeout 30 \\\n --body \"it worked\" \\\n --consultation_group on-call \\\n --notes \"The service name is my-cool-application\" \\\n --credentials 9991", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "account:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "service-update", + "x-linode-grant": "unrestricted only" + }, + "delete": { + "description": "Deletes a Managed Service. This service will no longer be monitored by Linode Managed.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed service-delete 9994\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/delete-managed-service" + }, + "operationId": "delete-managed-service", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/delete-managed-service-200.json" + } + } + }, + "description": "Service deleted successfully." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "account:read_write" + ] + } + ], + "summary": "Delete a managed service", + "tags": [ + "Services" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli managed service-delete 9994", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "account:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "service-delete", + "x-linode-grant": "unrestricted only" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the Managed Service to access.", + "example": "{{serviceId}}", + "in": "path", + "name": "serviceId", + "required": true, + "schema": { + "example": 429, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/service-id-path-d31c71b2.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/service.yaml", + "path-info": "/{apiVersion}/managed/services/{serviceId}" + }, + "x-linode-cli-command": "managed" + }, + "/{apiVersion}/managed/services/{serviceId}/disable": { + "post": { + "description": "Temporarily disables monitoring of a Managed Service.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed service-disable 9994\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-disable-managed-service" + }, + "operationId": "post-disable-managed-service", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "A service that Linode is monitoring as part of your Managed services. If issues are detected with this service, a ManagedIssue will be opened and, optionally, Linode special forces will attempt to resolve the Issue.", + "properties": { + "address": { + "description": "The URL at which this Service is monitored. URL parameters such as `?no-cache=1` are preserved. URL fragments/anchors such as `#monitor` are __not__ preserved.", + "example": "https://example.org", + "format": "url", + "maxLength": 100, + "minLength": 3, + "type": "string", + "x-linode-cli-display": 5 + }, + "body": { + "description": "What to expect to find in the response body for the Service to be considered up.", + "example": "it worked", + "maxLength": 100, + "minLength": 0, + "nullable": true, + "type": "string" + }, + "consultation_group": { + "description": "The group of ManagedContacts who should be notified or consulted with when an Issue is detected.", + "example": "on-call", + "maxLength": 50, + "minLength": 0, + "type": "string", + "x-linode-cli-display": 6 + }, + "created": { + "description": "__Read-only__ When this Managed Service was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + }, + "credentials": { + "description": "An array of ManagedCredential IDs that should be used when attempting to resolve issues with this Service.", + "items": { + "example": 9991, + "type": "integer" + }, + "type": "array" + }, + "id": { + "description": "__Read-only__ This Service's unique ID.", + "example": 9944, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "label": { + "description": "The label for this Service. This is for display purposes only.", + "example": "prod-1", + "maxLength": 64, + "minLength": 3, + "pattern": "[a-zA-Z0-9-_ \\.]{3,64}", + "type": "string", + "x-linode-cli-display": 4 + }, + "notes": { + "description": "Any information relevant to the Service that Linode special forces should know when attempting to resolve Issues.", + "example": "The service name is my-cool-application", + "nullable": true, + "type": "string" + }, + "region": { + "description": "The Region in which this Service is located. This is required if address is a private IP, and may not be set otherwise.", + "example": null, + "nullable": true, + "type": "string" + }, + "service_type": { + "description": "How this Service is monitored.", + "enum": [ + "url", + "tcp" + ], + "example": "url", + "type": "string", + "x-linode-cli-display": 3 + }, + "status": { + "description": "__Read-only__ The current status of this Service.", + "enum": [ + "disabled", + "pending", + "ok", + "problem" + ], + "example": "ok", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "default_": "yellow", + "disabled": "red", + "ok": "green" + }, + "x-linode-cli-display": 2 + }, + "timeout": { + "description": "How long to wait, in seconds, for a response before considering the Service to be down.", + "example": 30, + "maximum": 255, + "minimum": 1, + "type": "integer" + }, + "updated": { + "description": "__Read-only__ When this Managed Service was last updated.", + "example": "2018-03-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/managed-service.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-disable-managed-service-200.json" + } + } + }, + "description": "Service disabled." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" } - }, - "x-example": { - "x-ref": "../examples/put-managed-service.json" } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "account:read_write" + ] + } + ], + "summary": "Disable a managed service", + "tags": [ + "Services" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli managed service-disable 9994", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "account:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } + ] + }, + "x-linode-cli-action": "service-disable", + "x-linode-grant": "unrestricted only" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" }, - "description": "The fields to update.", - "required": true + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the Managed Service to disable.", + "example": "{{serviceId}}", + "in": "path", + "name": "serviceId", + "required": true, + "schema": { + "example": 429, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/service-id-path-67e33f47.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/disable.yaml", + "path-info": "/{apiVersion}/managed/services/{serviceId}/disable" + }, + "x-linode-cli-command": "managed" + }, + "/{apiVersion}/managed/services/{serviceId}/enable": { + "post": { + "description": "Enables monitoring of a Managed Service.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed service-enable 9994\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/post-enable-managed-service" }, + "operationId": "post-enable-managed-service", "responses": { "200": { "content": { @@ -70687,11 +77753,11 @@ } }, "x-example": { - "x-ref": "../examples/get-managed-service-200.json" + "x-ref": "../examples/post-enable-managed-service-200.json" } } }, - "description": "Service updated successfully." + "description": "Service enabled." }, "default": { "content": { @@ -70740,14 +77806,14 @@ ] } ], - "summary": "Update a managed service", + "summary": "Enable a managed service", "tags": [ "Services" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli managed service-update 9994 \\\n --service_type url \\\n --label prod-1 \\\n --address \"https://example.org\" \\\n --timeout 30 \\\n --body \"it worked\" \\\n --consultation_group on-call \\\n --notes \"The service name is my-cool-application\" \\\n --credentials 9991", + "syntax": "linode-cli managed service-enable 9994", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -70758,34 +77824,239 @@ } ] }, - "x-linode-cli-action": "service-update", + "x-linode-cli-action": "service-enable", "x-linode-grant": "unrestricted only" }, - "delete": { - "description": "Deletes a Managed Service. This service will no longer be monitored by Linode Managed.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed service-delete 9994\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the Managed Service to enable.", + "example": "{{serviceId}}", + "in": "path", + "name": "serviceId", + "required": true, + "schema": { + "example": 429, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/service-id-path-ea3ecd21.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/service-enable.yaml", + "path-info": "/{apiVersion}/managed/services/{serviceId}/enable" + }, + "x-linode-cli-command": "managed" + }, + "/{apiVersion}/managed/stats": { + "get": { + "description": "Returns a list of Managed Stats on your Account in the form of x and y data points. You can use these data points to plot your own graph visualizations. These stats reflect the last 24 hours of combined usage across all managed Linodes on your account giving you a high-level snapshot of data for the following:\n\n- cpu\n- disk\n- swap\n- network in\n- network out\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed stats-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/delete-managed-service" + "url": "https://techdocs.akamai.com/linode-api/reference/get-managed-stats" }, - "operationId": "delete-managed-service", + "operationId": "get-managed-stats", "responses": { "200": { "content": { "application/json": { "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, + "additionalProperties": false, + "properties": { + "data": { + "discriminator": { + "propertyName": "x-linode-ref-name" + }, + "oneOf": [ + { + "additionalProperties": false, + "description": "A collection of graph data returned for managed stats.", + "properties": { + "cpu": { + "description": "CPU usage stats from the last 24 hours.", + "items": { + "additionalProperties": false, + "description": "A stat data point.", + "properties": { + "x": { + "description": "__Read-only__ A stats graph data point.", + "example": 11513761600000, + "readOnly": true, + "type": "integer" + }, + "y": { + "description": "__Read-only__ A stats graph data point.", + "example": 29.94, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/stats-data.yaml" + } + }, + "type": "array" + }, + "disk": { + "description": "Disk usage stats from the last 24 hours.", + "items": { + "additionalProperties": false, + "description": "A stat data point.", + "properties": { + "x": { + "description": "__Read-only__ A stats graph data point.", + "example": 11513761600000, + "readOnly": true, + "type": "integer" + }, + "y": { + "description": "__Read-only__ A stats graph data point.", + "example": 29.94, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/stats-data.yaml" + } + }, + "type": "array" + }, + "net_in": { + "description": "Inbound network traffic stats from the last 24 hours.", + "items": { + "additionalProperties": false, + "description": "A stat data point.", + "properties": { + "x": { + "description": "__Read-only__ A stats graph data point.", + "example": 11513761600000, + "readOnly": true, + "type": "integer" + }, + "y": { + "description": "__Read-only__ A stats graph data point.", + "example": 29.94, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/stats-data.yaml" + } + }, + "type": "array" + }, + "net_out": { + "description": "Outbound network traffic stats from the last 24 hours.", + "items": { + "additionalProperties": false, + "description": "A stat data point.", + "properties": { + "x": { + "description": "__Read-only__ A stats graph data point.", + "example": 11513761600000, + "readOnly": true, + "type": "integer" + }, + "y": { + "description": "__Read-only__ A stats graph data point.", + "example": 29.94, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/stats-data.yaml" + } + }, + "type": "array" + }, + "swap": { + "description": "Swap usage stats from the last 24 hours.", + "items": { + "additionalProperties": false, + "description": "A stat data point.", + "properties": { + "x": { + "description": "__Read-only__ A stats graph data point.", + "example": 11513761600000, + "readOnly": true, + "type": "integer" + }, + "y": { + "description": "__Read-only__ A stats graph data point.", + "example": 29.94, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/stats-data.yaml" + } + }, + "type": "array" + } + }, + "title": "Stats available", + "type": "object", + "x-akamai": { + "file-path": "schemas/stats-data-available.yaml" + }, + "x-linode-ref-name": "Stats Available" + }, + { + "description": "__Read-only__ An array of error messages if managed stats are unavailable.", + "items": { + "example": "Graphs are not yet available.", + "type": "string" + }, + "readOnly": true, + "title": "Stats unavailable", + "type": "array", + "x-akamai": { + "file-path": "schemas/stats-data-unavailable.yaml" + }, + "x-linode-ref-name": "Stats Unavailable" + } + ], + "type": "object" + } + }, "type": "object", "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" + "file-path": "schemas/added-get-managed-stats-200.yaml" } }, "x-example": { - "x-ref": "../examples/delete-managed-service-200.json" + "x-ref": "../examples/get-managed-stats-200.json" } } }, - "description": "Service deleted successfully." + "description": "A list of Managed Stats from the last 24 hours." }, "default": { "content": { @@ -70830,29 +78101,29 @@ }, { "oauth": [ - "account:read_write" + "account:read_only" ] } ], - "summary": "Delete a managed service", + "summary": "List managed stats", "tags": [ - "Services" + "Statistics" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli managed service-delete 9994", + "syntax": "linode-cli managed stats-list", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "account:read_write", + "syntax": "account:read_only", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "service-delete", + "x-linode-cli-action": "stats-list", "x-linode-grant": "unrestricted only" }, "parameters": [ @@ -70872,166 +78143,167 @@ "x-akamai": { "file-path": "parameters/api-version-path.yaml" } - }, - { - "description": "The ID of the Managed Service to access.", - "example": "{{serviceId}}", - "in": "path", - "name": "serviceId", - "required": true, - "schema": { - "example": 429, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/service-id-path-d31c71b2.yaml" - } } ], "x-akamai": { - "file-path": "paths/service.yaml", - "path-info": "/{apiVersion}/managed/services/{serviceId}" + "file-path": "paths/managed-stats.yaml", + "path-info": "/{apiVersion}/managed/stats" }, "x-linode-cli-command": "managed" }, - "/{apiVersion}/managed/services/{serviceId}/disable": { - "post": { - "description": "Temporarily disables monitoring of a Managed Service.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed service-disable 9994\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "/{apiVersion}/network-transfer/prices": { + "get": { + "description": "Returns collection of network transfer prices, including any region-specific rates.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli network-transfer prices\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-disable-managed-service" + "url": "https://techdocs.akamai.com/linode-api/reference/get-network-transfer-prices" }, - "operationId": "post-disable-managed-service", + "operationId": "get-network-transfer-prices", "responses": { "200": { "content": { "application/json": { "schema": { "additionalProperties": false, - "description": "A service that Linode is monitoring as part of your Managed services. If issues are detected with this service, a ManagedIssue will be opened and, optionally, Linode special forces will attempt to resolve the Issue.", "properties": { - "address": { - "description": "The URL at which this Service is monitored. URL parameters such as `?no-cache=1` are preserved. URL fragments/anchors such as `#monitor` are __not__ preserved.", - "example": "https://example.org", - "format": "url", - "maxLength": 100, - "minLength": 3, - "type": "string", - "x-linode-cli-display": 5 - }, - "body": { - "description": "What to expect to find in the response body for the Service to be considered up.", - "example": "it worked", - "maxLength": 100, - "minLength": 0, - "nullable": true, - "type": "string" - }, - "consultation_group": { - "description": "The group of ManagedContacts who should be notified or consulted with when an Issue is detected.", - "example": "on-call", - "maxLength": 50, - "minLength": 0, - "type": "string", - "x-linode-cli-display": 6 - }, - "created": { - "description": "__Read-only__ When this Managed Service was created.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - }, - "credentials": { - "description": "An array of ManagedCredential IDs that should be used when attempting to resolve issues with this Service.", + "data": { "items": { - "example": 9991, - "type": "integer" + "additionalProperties": false, + "description": "Returns collection of network transfer prices, including any region-specific rates.", + "properties": { + "id": { + "description": "__Read-only__ The ID representing the network transfer price.", + "example": "network_transfer", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 1 + }, + "label": { + "description": "__Filterable__, __Read-only__ The network transfer price label is for display purposes only.", + "example": "Network Transfer", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "price": { + "additionalProperties": false, + "description": "__Read-only__ The default cost of this network transfer. Prices are in US dollars, broken down into hourly and monthly charges.\n\nCertain regions have different prices from the default. For region-specific prices, see `region_prices`.", + "properties": { + "hourly": { + "description": "__Filterable__ Cost (in US dollars) per hour.", + "example": 0.005, + "type": "number", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 3, + "x-linode-filterable": true + }, + "monthly": { + "description": "__Filterable__ Cost per month, in US dollars.", + "example": null, + "nullable": true, + "type": "number", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true + } + }, + "readOnly": true, + "type": "object" + }, + "region_prices": { + "items": { + "additionalProperties": false, + "properties": { + "hourly": { + "description": "Cost per hour for this region, in US dollars.", + "example": 0.015, + "type": "number", + "x-linode-cli-display": 6 + }, + "id": { + "description": "The Region ID for these prices.", + "example": "us-east", + "type": "string", + "x-linode-cli-display": 5 + }, + "monthly": { + "description": "Cost per month for this region, in US dollars.", + "example": null, + "nullable": true, + "type": "number", + "x-linode-cli-display": 7 + } + }, + "type": "object" + }, + "type": "array" + }, + "transfer": { + "description": "__Filterable__, __Read-only__ The monthly outbound transfer amount, in MB.", + "example": 0, + "minimum": 0, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 8, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/network-transfer-price.yaml" + } }, "type": "array" }, - "id": { - "description": "__Read-only__ This Service's unique ID.", - "example": 9944, + "page": { + "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 - }, - "label": { - "description": "The label for this Service. This is for display purposes only.", - "example": "prod-1", - "maxLength": 64, - "minLength": 3, - "pattern": "[a-zA-Z0-9-_ \\.]{3,64}", - "type": "string", - "x-linode-cli-display": 4 - }, - "notes": { - "description": "Any information relevant to the Service that Linode special forces should know when attempting to resolve Issues.", - "example": "The service name is my-cool-application", - "nullable": true, - "type": "string" - }, - "region": { - "description": "The Region in which this Service is located. This is required if address is a private IP, and may not be set otherwise.", - "example": null, - "nullable": true, - "type": "string" - }, - "service_type": { - "description": "How this Service is monitored.", - "enum": [ - "url", - "tcp" - ], - "example": "url", - "type": "string", - "x-linode-cli-display": 3 + "type": "integer" }, - "status": { - "description": "__Read-only__ The current status of this Service.", - "enum": [ - "disabled", - "pending", - "ok", - "problem" - ], - "example": "ok", + "pages": { + "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, "readOnly": true, - "type": "string", - "x-linode-cli-color": { - "default_": "yellow", - "disabled": "red", - "ok": "green" - }, - "x-linode-cli-display": 2 - }, - "timeout": { - "description": "How long to wait, in seconds, for a response before considering the Service to be down.", - "example": 30, - "maximum": 255, - "minimum": 1, "type": "integer" }, - "updated": { - "description": "__Read-only__ When this Managed Service was last updated.", - "example": "2018-03-01T00:01:01", - "format": "date-time", + "results": { + "description": "__Read-only__ The total number of results.", + "example": 1, "readOnly": true, - "type": "string" + "type": "integer" } }, "type": "object", "x-akamai": { - "file-path": "schemas/managed-service.yaml" + "file-path": "schemas/added-get-network-transfer-prices-200.yaml" } }, "x-example": { - "x-ref": "../examples/post-disable-managed-service-200.json" + "x-ref": "../examples/get-network-transfer-prices-200.json" } } }, - "description": "Service disabled." + "description": "A collection of network transfer prices." }, "default": { "content": { @@ -71070,36 +78342,21 @@ "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." } }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "account:read_write" - ] - } - ], - "summary": "Disable a managed service", + "summary": "List network transfer prices", "tags": [ - "Services" + "Network transfer prices" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli managed service-disable 9994", + "syntax": "linode-cli network-transfer prices", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "account:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "service-disable", - "x-linode-grant": "unrestricted only" + "x-linode-cli-action": "prices", + "x-linode-redoc-load-ids": true }, "parameters": [ { @@ -71118,465 +78375,712 @@ "x-akamai": { "file-path": "parameters/api-version-path.yaml" } - }, - { - "description": "The ID of the Managed Service to disable.", - "example": "{{serviceId}}", - "in": "path", - "name": "serviceId", - "required": true, - "schema": { - "example": 429, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/service-id-path-67e33f47.yaml" - } } ], "x-akamai": { - "file-path": "paths/disable.yaml", - "path-info": "/{apiVersion}/managed/services/{serviceId}/disable" + "file-path": "paths/network-transfer-prices.yaml", + "path-info": "/{apiVersion}/network-transfer/prices" }, - "x-linode-cli-command": "managed" + "x-linode-cli-command": "network-transfer" }, - "/{apiVersion}/managed/services/{serviceId}/enable": { + "/{apiVersion}/networking/firewalls": { "post": { - "description": "Enables monitoring of a Managed Service.\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed service-enable 9994\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Creates a Firewall to filter network traffic.\n\n- Use `rules` to create inbound and outbound access rules. Rule versions increment from `1` whenever the firewall's `rules` change.\n\n- Use `devices` to assign a firewall to a service such as a Linode that is using legacy config profiles, a Linode interface or a NodeBalancer. The firewall\u2019s rules are then applied to that service. Requires a `read_write` [user grant](https://techdocs.akamai.com/linode-api/reference/get-user-grants) to the device.\n\n - For Linodes using Linode interfaces, firewalls need to be assigned to `interfaces` and not the `linodes`. Firewall templates are available for both VPC Linode interfaces and public Linode interfaces, and come with pre-configured protection rules.\n\n - For Linodes using legacy configuration profiles, firewalls are applied through the Linode. Public and VPC interfaces are subject to the firewall rules, while VLAN interfaces are not.\n\n- Currently, firewalls can be assigned to Linodes with legacy configuration profiles, Linode interfaces, and NodeBalancers.\n\n - The same firewall can be assigned to multiple services at a time.\n\n- Use `firewall_id` to assign a firewall when [creating a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance) or when [adding a Linode interface](https://techdocs.akamai.com/linode-api/reference/post-linode-interface).\n\n- A service can have one assigned firewall enabled at a time.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- A `firewall_create` event is generated when this operation succeeds.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls create \\\n --label example-firewall \\\n --rules.outbound_policy ACCEPT \\\n --rules.inbound_policy DROP \\\n --rules.inbound '[{\"protocol\": \"TCP\", \"ports\": \"22, 80, 8080, 443\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"], \"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"ACCEPT\"}]' \\\n --rules.outbound '[{\"protocol\": \"TCP\", \"ports\": \"49152-65535\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"],\"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"DROP\", \"label\": \"outbound-rule123\", \"description\": \"An example outbound rule description.\"}]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-enable-managed-service" + "url": "https://techdocs.akamai.com/linode-api/reference/post-firewalls" + }, + "operationId": "post-firewalls", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "additionalProperties": false, + "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", + "properties": { + "created": { + "description": "__Filterable__, __Read-only__ When this Firewall was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true + }, + "id": { + "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true + }, + "label": { + "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", + "example": "firewall123", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "rules": { + "additionalProperties": false, + "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "properties": { + "fingerprint": { + "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", + "example": "997dd135", + "readOnly": true, + "type": "string" + }, + "inbound": { + "description": "The inbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "inbound_policy": { + "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "version": { + "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + }, + "status": { + "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "enum": [ + "enabled", + "disabled", + "deleted" + ], + "example": "enabled", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "tags": { + "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "updated": { + "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", + "example": "2018-01-02T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall.yaml" + } + } + ], + "properties": { + "devices": { + "additionalProperties": false, + "description": "Devices to create for this firewall. When a device is created, the firewall is assigned to its associated service. Currently, devices can be created for Linodes using legacy configuration profiles, Linode interfaces, and NodeBalancers. Firewall devices can't be created for individual legacy configuration profile interfaces.\n\nAdditional devices can be assigned after Firewall creation by using the [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) operation.", + "properties": { + "interfaces": { + "description": "An array of Linode interface IDs. A firewall device is created for each ID. For Linodes using Linode interfaces, firewalls need to be assigned to Linode interfaces and not the Linode.", + "example": [ + 321 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "linodes": { + "description": "An array of Linode IDs. A firewall device is created for each ID. These Linodes can't use Linode interfaces.", + "example": [ + 123, + 456 + ], + "items": { + "type": "integer" + }, + "type": "array" + }, + "nodebalancers": { + "description": "An array containing a NodeBalancer ID. A Firewall device is created for the ID.\n\n- A NodeBalancer can have only one Firewall assigned to it.\n- Firewalls only apply to inbound TCP traffic to NodeBalancers.", + "example": [ + 321 + ], + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "rules": { + "additionalProperties": false, + "properties": { + "inbound": { + "required": [ + "action", + "addresses", + "protocol" + ] + }, + "outbound": { + "required": [ + "action", + "addresses", + "protocol" + ] + } + }, + "required": [ + "inbound_policy", + "outbound_policy" + ] + } + }, + "required": [ + "label", + "rules" + ], + "x-akamai": { + "file-path": "schemas/added-post-firewalls.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-firewalls.json" + } + } + }, + "description": "Creates a firewall object that can be applied to a service to filter the service's network traffic." }, - "operationId": "post-enable-managed-service", "responses": { "200": { "content": { "application/json": { "schema": { "additionalProperties": false, - "description": "A service that Linode is monitoring as part of your Managed services. If issues are detected with this service, a ManagedIssue will be opened and, optionally, Linode special forces will attempt to resolve the Issue.", + "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", "properties": { - "address": { - "description": "The URL at which this Service is monitored. URL parameters such as `?no-cache=1` are preserved. URL fragments/anchors such as `#monitor` are __not__ preserved.", - "example": "https://example.org", - "format": "url", - "maxLength": 100, - "minLength": 3, - "type": "string", - "x-linode-cli-display": 5 - }, - "body": { - "description": "What to expect to find in the response body for the Service to be considered up.", - "example": "it worked", - "maxLength": 100, - "minLength": 0, - "nullable": true, - "type": "string" - }, - "consultation_group": { - "description": "The group of ManagedContacts who should be notified or consulted with when an Issue is detected.", - "example": "on-call", - "maxLength": 50, - "minLength": 0, - "type": "string", - "x-linode-cli-display": 6 - }, "created": { - "description": "__Read-only__ When this Managed Service was created.", + "description": "__Filterable__, __Read-only__ When this Firewall was created.", "example": "2018-01-01T00:01:01", "format": "date-time", "readOnly": true, - "type": "string" - }, - "credentials": { - "description": "An array of ManagedCredential IDs that should be used when attempting to resolve issues with this Service.", - "items": { - "example": 9991, - "type": "integer" + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] }, - "type": "array" + "x-linode-cli-display": 4, + "x-linode-filterable": true }, "id": { - "description": "__Read-only__ This Service's unique ID.", - "example": 9944, + "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", + "example": 123, "readOnly": true, "type": "integer", - "x-linode-cli-display": 1 + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true }, "label": { - "description": "The label for this Service. This is for display purposes only.", - "example": "prod-1", - "maxLength": 64, + "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", + "example": "firewall123", + "maxLength": 32, "minLength": 3, - "pattern": "[a-zA-Z0-9-_ \\.]{3,64}", - "type": "string", - "x-linode-cli-display": 4 - }, - "notes": { - "description": "Any information relevant to the Service that Linode special forces should know when attempting to resolve Issues.", - "example": "The service name is my-cool-application", - "nullable": true, - "type": "string" - }, - "region": { - "description": "The Region in which this Service is located. This is required if address is a private IP, and may not be set otherwise.", - "example": null, - "nullable": true, - "type": "string" - }, - "service_type": { - "description": "How this Service is monitored.", - "enum": [ - "url", - "tcp" - ], - "example": "url", - "type": "string", - "x-linode-cli-display": 3 - }, - "status": { - "description": "__Read-only__ The current status of this Service.", - "enum": [ - "disabled", - "pending", - "ok", - "problem" - ], - "example": "ok", - "readOnly": true, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", "type": "string", - "x-linode-cli-color": { - "default_": "yellow", - "disabled": "red", - "ok": "green" + "x-akamai": { + "labels": [ + "Filterable" + ] }, - "x-linode-cli-display": 2 - }, - "timeout": { - "description": "How long to wait, in seconds, for a response before considering the Service to be down.", - "example": 30, - "maximum": 255, - "minimum": 1, - "type": "integer" + "x-linode-cli-display": 2, + "x-linode-filterable": true }, - "updated": { - "description": "__Read-only__ When this Managed Service was last updated.", - "example": "2018-03-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/managed-service.yaml" - } - }, - "x-example": { - "x-ref": "../examples/post-enable-managed-service-200.json" - } - } - }, - "description": "Service enabled." - }, - "default": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "errors": { - "items": { - "additionalProperties": false, - "description": "An object for describing a single error that occurred during the processing of a request.", - "properties": { - "field": { - "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", - "example": "fieldname", - "type": "string" - }, - "reason": { - "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", - "example": "fieldname must be a valid value", - "type": "string" - } + "rules": { + "additionalProperties": false, + "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "properties": { + "fingerprint": { + "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", + "example": "997dd135", + "readOnly": true, + "type": "string" }, - "type": "object", - "x-akamai": { - "file-path": "schemas/error-object.yaml" - } - }, - "type": "array" - } - }, - "type": "object" - } - } - }, - "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." - } - }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "account:read_write" - ] - } - ], - "summary": "Enable a managed service", - "tags": [ - "Services" - ], - "x-akamai": { - "tabs": [ - { - "syntax": "linode-cli managed service-enable 9994", - "title": "CLI", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "account:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" - } - ] - }, - "x-linode-cli-action": "service-enable", - "x-linode-grant": "unrestricted only" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - }, - { - "description": "The ID of the Managed Service to enable.", - "example": "{{serviceId}}", - "in": "path", - "name": "serviceId", - "required": true, - "schema": { - "example": 429, - "type": "integer" - }, - "x-akamai": { - "file-path": "parameters/service-id-path-ea3ecd21.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/service-enable.yaml", - "path-info": "/{apiVersion}/managed/services/{serviceId}/enable" - }, - "x-linode-cli-command": "managed" - }, - "/{apiVersion}/managed/stats": { - "get": { - "description": "Returns a list of Managed Stats on your Account in the form of x and y data points. You can use these data points to plot your own graph visualizations. These stats reflect the last 24 hours of combined usage across all managed Linodes on your account giving you a high-level snapshot of data for the following:\n\n- cpu\n- disk\n- swap\n- network in\n- network out\n\nThis operation can only be accessed by the unrestricted users of an account.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli managed stats-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-managed-stats" - }, - "operationId": "get-managed-stats", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "additionalProperties": false, - "properties": { - "data": { - "discriminator": { - "propertyName": "x-linode-ref-name" - }, - "oneOf": [ - { - "additionalProperties": false, - "description": "A collection of graph data returned for managed stats.", - "properties": { - "cpu": { - "description": "CPU usage stats from the last 24 hours.", - "items": { - "additionalProperties": false, - "description": "A stat data point.", - "properties": { - "x": { - "description": "__Read-only__ A stats graph data point.", - "example": 11513761600000, - "readOnly": true, - "type": "integer" - }, - "y": { - "description": "__Read-only__ A stats graph data point.", - "example": 29.94, - "readOnly": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/stats-data.yaml" - } + "inbound": { + "description": "The inbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" }, - "type": "array" - }, - "disk": { - "description": "Disk usage stats from the last 24 hours.", - "items": { + "addresses": { "additionalProperties": false, - "description": "A stat data point.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { - "x": { - "description": "__Read-only__ A stats graph data point.", - "example": 11513761600000, - "readOnly": true, - "type": "integer" + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "y": { - "description": "__Read-only__ A stats graph data point.", - "example": 29.94, - "readOnly": true, - "type": "integer" + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/stats-data.yaml" - } + "type": "object" }, - "type": "array" - }, - "net_in": { - "description": "Inbound network traffic stats from the last 24 hours.", - "items": { - "additionalProperties": false, - "description": "A stat data point.", - "properties": { - "x": { - "description": "__Read-only__ A stats graph data point.", - "example": 11513761600000, - "readOnly": true, - "type": "integer" - }, - "y": { - "description": "__Read-only__ A stats graph data point.", - "example": 29.94, - "readOnly": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/stats-data.yaml" - } + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" }, - "type": "array" - }, - "net_out": { - "description": "Outbound network traffic stats from the last 24 hours.", - "items": { - "additionalProperties": false, - "description": "A stat data point.", - "properties": { - "x": { - "description": "__Read-only__ A stats graph data point.", - "example": 11513761600000, - "readOnly": true, - "type": "integer" - }, - "y": { - "description": "__Read-only__ A stats graph data point.", - "example": 29.94, - "readOnly": true, - "type": "integer" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/stats-data.yaml" - } + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" }, - "type": "array" + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } }, - "swap": { - "description": "Swap usage stats from the last 24 hours.", - "items": { + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "inbound_policy": { + "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { "additionalProperties": false, - "description": "A stat data point.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { - "x": { - "description": "__Read-only__ A stats graph data point.", - "example": 11513761600000, - "readOnly": true, - "type": "integer" + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" }, - "y": { - "description": "__Read-only__ A stats graph data point.", - "example": 29.94, - "readOnly": true, - "type": "integer" + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" } }, - "type": "object", - "x-akamai": { - "file-path": "schemas/stats-data.yaml" - } + "type": "object" }, - "type": "array" + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" } }, - "title": "Stats available", - "type": "object", - "x-akamai": { - "file-path": "schemas/stats-data-available.yaml" - }, - "x-linode-ref-name": "Stats Available" + "type": "array", + "x-linode-cli-format": "json" }, - { - "description": "__Read-only__ An array of error messages if managed stats are unavailable.", - "items": { - "example": "Graphs are not yet available.", - "type": "string" - }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "version": { + "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", + "example": 1, "readOnly": true, - "title": "Stats unavailable", - "type": "array", - "x-akamai": { - "file-path": "schemas/stats-data-unavailable.yaml" - }, - "x-linode-ref-name": "Stats Unavailable" + "type": "integer" } - ], + }, "type": "object" + }, + "status": { + "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "enum": [ + "enabled", + "disabled", + "deleted" + ], + "example": "enabled", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "tags": { + "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "updated": { + "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", + "example": "2018-01-02T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true } }, "type": "object", "x-akamai": { - "file-path": "schemas/added-get-managed-stats-200.yaml" + "file-path": "schemas/firewall.yaml" } }, "x-example": { - "x-ref": "../examples/get-managed-stats-200.json" + "x-ref": "../examples/post-firewalls-200.json" } } }, - "description": "A list of Managed Stats from the last 24 hours." + "description": "Returns information about the created Firewall." }, "default": { "content": { @@ -71621,64 +79125,72 @@ }, { "oauth": [ - "account:read_only" + "firewall:read_write" ] } ], - "summary": "List managed stats", + "summary": "Create a firewall", "tags": [ - "Statistics" + "Firewalls" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli managed stats-list", + "syntax": "linode-cli firewalls create \\\n --label example-firewall \\\n --rules.outbound_policy ACCEPT \\\n --rules.inbound_policy DROP \\\n --rules.inbound '[{\"protocol\": \"TCP\", \"ports\": \"22, 80, 8080, 443\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"], \"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"ACCEPT\"}]' \\\n --rules.outbound '[{\"protocol\": \"TCP\", \"ports\": \"49152-65535\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"],\"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"DROP\", \"label\": \"outbound-rule123\", \"description\": \"An example outbound rule description.\"}]'", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "account:read_only", + "syntax": "firewall:read_write", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "stats-list", - "x-linode-grant": "unrestricted only" - }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/managed-stats.yaml", - "path-info": "/{apiVersion}/managed/stats" + "x-linode-cli-action": "create", + "x-linode-grant": "add_firewalls" }, - "x-linode-cli-command": "managed" - }, - "/{apiVersion}/network-transfer/prices": { "get": { - "description": "Returns collection of network transfer prices, including any region-specific rates.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli network-transfer prices\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", + "description": "Returns a paginated list of accessible Firewalls.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-network-transfer-prices" + "url": "https://techdocs.akamai.com/linode-api/reference/get-firewalls" }, - "operationId": "get-network-transfer-prices", + "operationId": "get-firewalls", + "parameters": [ + { + "description": "The page of a collection to return.", + "example": "{{page}}", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "example": 6, + "minimum": 1, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-offset.yaml" + } + }, + { + "description": "The number of items to return per page.", + "example": "{{page_size}}", + "in": "query", + "name": "page_size", + "schema": { + "default": 100, + "example": 50, + "maximum": 500, + "minimum": 25, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-size.yaml" + } + } + ], "responses": { "200": { "content": { @@ -71689,19 +79201,41 @@ "data": { "items": { "additionalProperties": false, - "description": "Returns collection of network transfer prices, including any region-specific rates.", + "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", "properties": { - "id": { - "description": "__Read-only__ The ID representing the network transfer price.", - "example": "network_transfer", + "created": { + "description": "__Filterable__, __Read-only__ When this Firewall was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", "readOnly": true, "type": "string", - "x-linode-cli-display": 1 + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true }, - "label": { - "description": "__Filterable__, __Read-only__ The network transfer price label is for display purposes only.", - "example": "Network Transfer", + "id": { + "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", + "example": 123, "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true + }, + "label": { + "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", + "example": "firewall123", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", "type": "string", "x-akamai": { "labels": [ @@ -71711,85 +79245,256 @@ "x-linode-cli-display": 2, "x-linode-filterable": true }, - "price": { + "rules": { "additionalProperties": false, - "description": "__Read-only__ The default cost of this network transfer. Prices are in US dollars, broken down into hourly and monthly charges.\n\nCertain regions have different prices from the default. For region-specific prices, see `region_prices`.", + "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", "properties": { - "hourly": { - "description": "__Filterable__ Cost (in US dollars) per hour.", - "example": 0.005, - "type": "number", - "x-akamai": { - "labels": [ - "Filterable" - ] + "fingerprint": { + "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", + "example": "997dd135", + "readOnly": true, + "type": "string" + }, + "inbound": { + "description": "The inbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } }, - "x-linode-cli-display": 3, - "x-linode-filterable": true + "type": "array", + "x-linode-cli-format": "json" }, - "monthly": { - "description": "__Filterable__ Cost per month, in US dollars.", - "example": null, - "nullable": true, - "type": "number", - "x-akamai": { - "labels": [ - "Filterable" - ] + "inbound_policy": { + "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } }, - "x-linode-cli-display": 4, - "x-linode-filterable": true + "type": "array", + "x-linode-cli-format": "json" + }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "version": { + "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", + "example": 1, + "readOnly": true, + "type": "integer" } }, - "readOnly": true, "type": "object" }, - "region_prices": { + "status": { + "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "enum": [ + "enabled", + "disabled", + "deleted" + ], + "example": "enabled", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "tags": { + "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], "items": { - "additionalProperties": false, - "properties": { - "hourly": { - "description": "Cost per hour for this region, in US dollars.", - "example": 0.015, - "type": "number", - "x-linode-cli-display": 6 - }, - "id": { - "description": "The Region ID for these prices.", - "example": "us-east", - "type": "string", - "x-linode-cli-display": 5 - }, - "monthly": { - "description": "Cost per month for this region, in US dollars.", - "example": null, - "nullable": true, - "type": "number", - "x-linode-cli-display": 7 - } - }, - "type": "object" + "type": "string" }, - "type": "array" + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true }, - "transfer": { - "description": "__Filterable__, __Read-only__ The monthly outbound transfer amount, in MB.", - "example": 0, - "minimum": 0, + "updated": { + "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", + "example": "2018-01-02T00:01:01", + "format": "date-time", "readOnly": true, - "type": "integer", + "type": "string", "x-akamai": { "labels": [ "Filterable" ] }, - "x-linode-cli-display": 8, + "x-linode-cli-display": 5, "x-linode-filterable": true } }, "type": "object", "x-akamai": { - "file-path": "schemas/network-transfer-price.yaml" + "file-path": "schemas/firewall.yaml" } }, "type": "array" @@ -71815,15 +79520,15 @@ }, "type": "object", "x-akamai": { - "file-path": "schemas/added-get-network-transfer-prices-200.yaml" + "file-path": "schemas/added-get-firewalls-200.yaml" } }, "x-example": { - "x-ref": "../examples/get-network-transfer-prices-200.json" + "x-ref": "../examples/get-firewalls-200.json" } } }, - "description": "A collection of network transfer prices." + "description": "Returns an array of Firewalls." }, "default": { "content": { @@ -71862,21 +79567,39 @@ "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." } }, - "summary": "List network transfer prices", + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "firewall:read_only" + ] + } + ], + "summary": "List firewalls", "tags": [ - "Network transfer prices" + "Firewalls" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli network-transfer prices", + "syntax": "linode-cli firewalls list", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "firewall:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "prices", - "x-linode-redoc-load-ids": true + "x-linode-cli-action": [ + "list", + "ls" + ], + "x-linode-grant": "read_only" }, "parameters": [ { @@ -71898,390 +79621,232 @@ } ], "x-akamai": { - "file-path": "paths/network-transfer-prices.yaml", - "path-info": "/{apiVersion}/network-transfer/prices" + "file-path": "paths/networking-firewalls.yaml", + "path-info": "/{apiVersion}/networking/firewalls" }, - "x-linode-cli-command": "network-transfer" + "x-linode-cli-command": "firewalls" }, - "/{apiVersion}/networking/firewalls": { - "post": { - "description": "Creates a Firewall to filter network traffic.\n\n- Use `rules` to create inbound and outbound access rules. Rule versions increment from `1` whenever the firewall's `rules` change.\n\n- Use `devices` to assign the firewall to a service and apply its rules to the device. Requires `read_write` [user grant](https://techdocs.akamai.com/linode-api/reference/get-user-grants) to the device. Currently, firewalls can be assigned to Linode compute instances and NodeBalancers.\n\n- A Firewall can be assigned to multiple services at a time.\n\n- Use `firewall_id` to assign a firewall when [creating a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance).\n\n- A service can have one assigned Firewall at a time.\n\n- Firewalls apply to all of a Linode's non-`vlan` purpose Configuration Profile Interfaces.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- A `firewall_create` Event is generated when this operation succeeds.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls create \\\n --label example-firewall \\\n --rules.outbound_policy ACCEPT \\\n --rules.inbound_policy DROP \\\n --rules.inbound '[{\"protocol\": \"TCP\", \"ports\": \"22, 80, 8080, 443\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"], \"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"ACCEPT\"}]' \\\n --rules.outbound '[{\"protocol\": \"TCP\", \"ports\": \"49152-65535\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"],\"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"DROP\", \"label\": \"outbound-rule123\", \"description\": \"An example outbound rule description.\"}]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "/{apiVersion}/networking/firewalls/settings": { + "get": { + "description": "__Beta__ Returns default firewalls for Linodes, Linode VPC and public interfaces, and NodeBalancers.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls firewall-settings-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/post-firewalls" + "url": "https://techdocs.akamai.com/linode-api/reference/get-firewall-settings" }, - "operationId": "post-firewalls", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "additionalProperties": false, - "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", - "properties": { - "created": { - "description": "__Filterable__, __Read-only__ When this Firewall was created.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] + "operationId": "get-firewall-settings", + "parameters": [ + { + "description": "The page of a collection to return.", + "example": "{{page}}", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "example": 6, + "minimum": 1, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-offset.yaml" + } + }, + { + "description": "The number of items to return per page.", + "example": "{{page_size}}", + "in": "query", + "name": "page_size", + "schema": { + "default": 100, + "example": 50, + "maximum": 500, + "minimum": 25, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-size.yaml" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "Default firewalls.", + "properties": { + "default_firewall_ids": { + "additionalProperties": false, + "description": "The default firewall ID for a `linode`, `nodebalancer`, `public_interface`, or `vpc_interface`. Default firewalls can't be deleted or disabled.", + "properties": { + "linode": { + "description": "The Linode's default firewall.", + "example": 100, + "type": "integer", + "x-linode-cli-display": 1 }, - "x-linode-cli-display": 4, - "x-linode-filterable": true - }, - "id": { - "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] + "nodebalancer": { + "description": "The NodeBalancer's default firewall.", + "example": 101, + "type": "integer", + "x-linode-cli-display": 2 }, - "x-linode-cli-display": 1, - "x-linode-filterable": true - }, - "label": { - "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", - "example": "firewall123", - "maxLength": 32, - "minLength": 3, - "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] + "public_interface": { + "description": "The public interface's default firewall.", + "example": 200, + "type": "integer", + "x-linode-cli-display": 3 }, - "x-linode-cli-display": 2, - "x-linode-filterable": true + "vpc_interface": { + "description": "The public interface's default firewall.", + "example": 200, + "type": "integer", + "x-linode-cli-display": 4 + } }, - "rules": { + "type": "object" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-settings.yaml" + } + }, + "x-example": { + "x-ref": "../examples/firewall-settings-200.json" + } + } + }, + "description": "Returns default firewalls." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { "additionalProperties": false, - "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "description": "An object for describing a single error that occurred during the processing of a request.", "properties": { - "fingerprint": { - "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", - "example": "997dd135", - "readOnly": true, - "type": "string" - }, - "inbound": { - "description": "The inbound rules for the firewall, as a JSON array.", - "items": { - "additionalProperties": false, - "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", - "properties": { - "action": { - "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "ACCEPT", - "type": "string" - }, - "addresses": { - "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", - "properties": { - "ipv4": { - "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", - "example": [ - "192.0.2.0/24", - "198.51.100.2/32" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "ipv6": { - "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", - "example": [ - "2001:DB8::/128" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "description": { - "description": "Used to describe this rule. For display purposes only.", - "example": "An example firewall rule description.", - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "label": { - "description": "Used to identify this rule. For display purposes only.", - "example": "firewallrule123", - "maxLength": 32, - "minLength": 3, - "type": "string" - }, - "ports": { - "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", - "example": "22-24, 80, 443", - "nullable": true, - "type": "string" - }, - "protocol": { - "description": "The type of network traffic affected by this rule.", - "enum": [ - "TCP", - "UDP", - "ICMP", - "IPENCAP" - ], - "example": "TCP", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/firewall-rule-config.yaml" - } - }, - "type": "array", - "x-linode-cli-format": "json" - }, - "inbound_policy": { - "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "DROP", + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", "type": "string" }, - "outbound": { - "description": "The outbound rules for the firewall, as a JSON array.", - "items": { - "additionalProperties": false, - "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", - "properties": { - "action": { - "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "ACCEPT", - "type": "string" - }, - "addresses": { - "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", - "properties": { - "ipv4": { - "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", - "example": [ - "192.0.2.0/24", - "198.51.100.2/32" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "ipv6": { - "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", - "example": [ - "2001:DB8::/128" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "description": { - "description": "Used to describe this rule. For display purposes only.", - "example": "An example firewall rule description.", - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "label": { - "description": "Used to identify this rule. For display purposes only.", - "example": "firewallrule123", - "maxLength": 32, - "minLength": 3, - "type": "string" - }, - "ports": { - "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", - "example": "22-24, 80, 443", - "nullable": true, - "type": "string" - }, - "protocol": { - "description": "The type of network traffic affected by this rule.", - "enum": [ - "TCP", - "UDP", - "ICMP", - "IPENCAP" - ], - "example": "TCP", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/firewall-rule-config.yaml" - } - }, - "type": "array", - "x-linode-cli-format": "json" - }, - "outbound_policy": { - "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "DROP", + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", "type": "string" - }, - "version": { - "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", - "example": 1, - "readOnly": true, - "type": "integer" } }, - "type": "object" - }, - "status": { - "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", - "enum": [ - "enabled", - "disabled", - "deleted" - ], - "example": "enabled", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 3 - }, - "tags": { - "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", - "example": [ - "example tag", - "another example" - ], - "items": { - "type": "string" - }, - "type": "array", + "type": "object", "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true + "file-path": "schemas/error-object.yaml" + } }, - "updated": { - "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", - "example": "2018-01-02T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 5, - "x-linode-filterable": true - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/firewall.yaml" + "type": "array" } - } - ], + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "firewall:read_only" + ] + } + ], + "summary": "List default firewalls", + "tags": [ + "Firewall settings" + ], + "x-akamai": { + "status": "BETA", + "tabs": [ + { + "syntax": "linode-cli firewalls firewall-settings-list", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "firewall:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "firewall-settings-list", + "x-linode-grant": "read_only" + }, + "put": { + "description": "__Beta__ You can update or add a default firewall to:\n\n- Linodes using legacy config profile interfaces\n\n- Linode VPC interfaces and Linode public interfaces\n\n- NodeBalancers\n\nIf a firewall isn't provided during service creation, a default firewall is assigned, unless you have opted out of firewall protection.\n\n> \ud83d\udcd8\n>\n> Default firewalls on Linodes with Linode interfaces are applied to the interfaces, not the Linode itself.\n>\n> Default firewalls on Linodes with legacy configuration profile interfaces are applied directly to the Linode, not its interfaces.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls firewall-settings-update \\\n --default_firewall_ids.vpc_interface 1 \\\n --default_firewall_ids.public_interface 2 \\\n --default_firewall_ids.nodebalancer 3 \\\n --default_firewall_ids.linode 5\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n account:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/put-firewall-settings" + }, + "operationId": "put-firewall-settings", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "Default firewalls.", "properties": { - "devices": { + "default_firewall_ids": { "additionalProperties": false, - "description": "Devices to create for this Firewall. When a Device is created, the Firewall is assigned to its associated service. Currently, Devices can be created for Linode compute instances and NodeBalancers.\n\nAdditional devices can be assigned after Firewall creation by using the [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) operation.", + "description": "The default firewall ID for a `linode`, `nodebalancer`, `public_interface`, or `vpc_interface`. Default firewalls can't be deleted or disabled.", "properties": { - "linodes": { - "description": "An array of Linode IDs. A Firewall Device is created for each ID.", - "example": [ - 123, - 456 - ], - "items": { - "type": "integer" - }, - "type": "array" + "linode": { + "description": "The Linode's default firewall.", + "example": 100, + "type": "integer", + "x-linode-cli-display": 1 }, - "nodebalancers": { - "description": "An array containing a NodeBalancer ID. A Firewall Device is created for the ID.\n\n- A NodeBalancer can have only one Firewall assigned to it.\n- Firewalls only apply to inbound TCP traffic to NodeBalancers.", - "example": [ - 321 - ], - "items": { - "type": "integer" - }, - "type": "array" - } - }, - "type": "object" - }, - "rules": { - "additionalProperties": false, - "properties": { - "inbound": { - "required": [ - "action", - "addresses", - "protocol" - ] + "nodebalancer": { + "description": "The NodeBalancer's default firewall.", + "example": 101, + "type": "integer", + "x-linode-cli-display": 2 }, - "outbound": { - "required": [ - "action", - "addresses", - "protocol" - ] + "public_interface": { + "description": "The public interface's default firewall.", + "example": 200, + "type": "integer", + "x-linode-cli-display": 3 + }, + "vpc_interface": { + "description": "The public interface's default firewall.", + "example": 200, + "type": "integer", + "x-linode-cli-display": 4 } }, - "required": [ - "inbound_policy", - "outbound_policy" - ] + "type": "object" } }, - "required": [ - "label", - "rules" - ], + "type": "object", "x-akamai": { - "file-path": "schemas/added-post-firewalls.yaml" + "file-path": "schemas/firewall-settings.yaml" } }, "x-example": { - "x-ref": "../examples/post-firewalls.json" + "x-ref": "../examples/firewall-settings.json" } } }, - "description": "Creates a Firewall object that can be applied to a service to filter the service's network traffic." + "description": "Update default firewalls for Linodes that use legacy configuration profiles, Linode interfaces, and NodeBalancers. For Linodes using Linode interfaces, firewalls need to be assigned to Linode interfaces and not the Linode.", + "required": true }, "responses": { "200": { @@ -72289,308 +79854,51 @@ "application/json": { "schema": { "additionalProperties": false, - "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", + "description": "Default firewalls.", "properties": { - "created": { - "description": "__Filterable__, __Read-only__ When this Firewall was created.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 4, - "x-linode-filterable": true - }, - "id": { - "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 1, - "x-linode-filterable": true - }, - "label": { - "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", - "example": "firewall123", - "maxLength": 32, - "minLength": 3, - "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 2, - "x-linode-filterable": true - }, - "rules": { + "default_firewall_ids": { "additionalProperties": false, - "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "description": "The default firewall ID for a `linode`, `nodebalancer`, `public_interface`, or `vpc_interface`. Default firewalls can't be deleted or disabled.", "properties": { - "fingerprint": { - "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", - "example": "997dd135", - "readOnly": true, - "type": "string" - }, - "inbound": { - "description": "The inbound rules for the firewall, as a JSON array.", - "items": { - "additionalProperties": false, - "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", - "properties": { - "action": { - "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "ACCEPT", - "type": "string" - }, - "addresses": { - "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", - "properties": { - "ipv4": { - "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", - "example": [ - "192.0.2.0/24", - "198.51.100.2/32" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "ipv6": { - "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", - "example": [ - "2001:DB8::/128" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "description": { - "description": "Used to describe this rule. For display purposes only.", - "example": "An example firewall rule description.", - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "label": { - "description": "Used to identify this rule. For display purposes only.", - "example": "firewallrule123", - "maxLength": 32, - "minLength": 3, - "type": "string" - }, - "ports": { - "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", - "example": "22-24, 80, 443", - "nullable": true, - "type": "string" - }, - "protocol": { - "description": "The type of network traffic affected by this rule.", - "enum": [ - "TCP", - "UDP", - "ICMP", - "IPENCAP" - ], - "example": "TCP", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/firewall-rule-config.yaml" - } - }, - "type": "array", - "x-linode-cli-format": "json" - }, - "inbound_policy": { - "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "DROP", - "type": "string" + "linode": { + "description": "The Linode's default firewall.", + "example": 100, + "type": "integer", + "x-linode-cli-display": 1 }, - "outbound": { - "description": "The outbound rules for the firewall, as a JSON array.", - "items": { - "additionalProperties": false, - "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", - "properties": { - "action": { - "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "ACCEPT", - "type": "string" - }, - "addresses": { - "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", - "properties": { - "ipv4": { - "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", - "example": [ - "192.0.2.0/24", - "198.51.100.2/32" - ], - "items": { - "type": "string" - }, - "type": "array" - }, - "ipv6": { - "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", - "example": [ - "2001:DB8::/128" - ], - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "description": { - "description": "Used to describe this rule. For display purposes only.", - "example": "An example firewall rule description.", - "maxLength": 100, - "minLength": 1, - "type": "string" - }, - "label": { - "description": "Used to identify this rule. For display purposes only.", - "example": "firewallrule123", - "maxLength": 32, - "minLength": 3, - "type": "string" - }, - "ports": { - "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", - "example": "22-24, 80, 443", - "nullable": true, - "type": "string" - }, - "protocol": { - "description": "The type of network traffic affected by this rule.", - "enum": [ - "TCP", - "UDP", - "ICMP", - "IPENCAP" - ], - "example": "TCP", - "type": "string" - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/firewall-rule-config.yaml" - } - }, - "type": "array", - "x-linode-cli-format": "json" + "nodebalancer": { + "description": "The NodeBalancer's default firewall.", + "example": 101, + "type": "integer", + "x-linode-cli-display": 2 }, - "outbound_policy": { - "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", - "enum": [ - "ACCEPT", - "DROP" - ], - "example": "DROP", - "type": "string" + "public_interface": { + "description": "The public interface's default firewall.", + "example": 200, + "type": "integer", + "x-linode-cli-display": 3 }, - "version": { - "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", - "example": 1, - "readOnly": true, - "type": "integer" + "vpc_interface": { + "description": "The public interface's default firewall.", + "example": 200, + "type": "integer", + "x-linode-cli-display": 4 } }, "type": "object" - }, - "status": { - "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", - "enum": [ - "enabled", - "disabled", - "deleted" - ], - "example": "enabled", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 3 - }, - "tags": { - "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", - "example": [ - "example tag", - "another example" - ], - "items": { - "type": "string" - }, - "type": "array", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "updated": { - "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", - "example": "2018-01-02T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 5, - "x-linode-filterable": true } }, "type": "object", "x-akamai": { - "file-path": "schemas/firewall.yaml" + "file-path": "schemas/firewall-settings.yaml" } }, "x-example": { - "x-ref": "../examples/post-firewalls-200.json" + "x-ref": "../examples/firewall-settings-200.json" } } }, - "description": "Returns information about the created Firewall." + "description": "The updated default firewalls." }, "default": { "content": { @@ -72635,38 +79943,66 @@ }, { "oauth": [ - "firewall:read_write" + "account:read_write" ] } ], - "summary": "Create a firewall", + "summary": "Update default firewalls", "tags": [ - "Firewalls" + "Firewall settings" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli firewalls create \\\n --label example-firewall \\\n --rules.outbound_policy ACCEPT \\\n --rules.inbound_policy DROP \\\n --rules.inbound '[{\"protocol\": \"TCP\", \"ports\": \"22, 80, 8080, 443\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"], \"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"ACCEPT\"}]' \\\n --rules.outbound '[{\"protocol\": \"TCP\", \"ports\": \"49152-65535\", \"addresses\": {\"ipv4\": [\"192.0.2.0/24\", \"198.51.100.2/32\"],\"ipv6\": [\"2001:DB8::/128\"]}, \"action\": \"DROP\", \"label\": \"outbound-rule123\", \"description\": \"An example outbound rule description.\"}]'", + "syntax": "linode-cli firewalls firewall-settings-update \\\n --default_firewall_ids.vpc_interface 1 \\\n --default_firewall_ids.public_interface 2 \\\n --default_firewall_ids.nodebalancer 3 \\\n --default_firewall_ids.linode 5", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "firewall:read_write", + "syntax": "account:read_write", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "create", - "x-linode-grant": "add_firewalls" + "x-linode-cli-action": "firewall-settings-update", + "x-linode-grant": "read_write" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/firewall-settings.yaml", + "path-info": "/{apiVersion}/networking/firewalls/settings", + "status": "BETA" }, + "x-linode-cli-command": "firewalls" + }, + "/{apiVersion}/networking/firewalls/templates": { "get": { - "description": "Returns a paginated list of accessible Firewalls.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "__Beta__ Returns a paginated list of a firewall templates. There are firewall templates specifically for VPC interfaces and public interfaces. Firewall templates come with some protection rules already configured.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls templates-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-firewalls" + "url": "https://techdocs.akamai.com/linode-api/reference/get-firewall-templates" }, - "operationId": "get-firewalls", + "operationId": "get-firewall-templates", "parameters": [ { "description": "The page of a collection to return.", @@ -72709,64 +80045,109 @@ "additionalProperties": false, "properties": { "data": { + "example": [ + { + "rules": { + "inbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Rule to allow inbound SSH traffic.", + "label": "accept-inbound-ssh", + "ports": "22", + "protocol": "TCP" + }, + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Rule to allow inbound ICMP traffic.", + "label": "accept-inbound-icmp", + "protocol": "ICMP" + }, + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "10.0.0.0/8", + "192.168.0.0/17", + "172.16.0.0/12" + ], + "ipv6": [] + }, + "description": "Rule to allow inbound for RFC1918 ranges; `10.0.0.0/8`, `192.168.0.0/17`, `172.16.0.0/12`.", + "label": "accept-inbound-rfc1918", + "ports": "1-65535", + "protocol": "TCP, UDP" + } + ], + "inbound_policy": "DROP", + "outbound_policy": "ACCEPT" + }, + "slug": "vpc" + }, + { + "rules": { + "inbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Rule to allow inbound SSH traffic.", + "label": "accept-inbound-ssh", + "ports": "22", + "protocol": "TCP" + }, + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Rule to allow inbound ICMP traffic.", + "label": "accept-inbound-icmp", + "protocol": "ICMP" + } + ], + "inbound_policy": "DROP", + "outbound_policy": "ACCEPT" + }, + "slug": "public" + } + ], "items": { "additionalProperties": false, - "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", + "description": "A list of firewall templates and their `rules`.", "properties": { - "created": { - "description": "__Filterable__, __Read-only__ When this Firewall was created.", - "example": "2018-01-01T00:01:01", - "format": "date-time", - "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 4, - "x-linode-filterable": true - }, - "id": { - "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", - "example": 123, - "readOnly": true, - "type": "integer", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 1, - "x-linode-filterable": true - }, - "label": { - "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", - "example": "firewall123", - "maxLength": 32, - "minLength": 3, - "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 2, - "x-linode-filterable": true - }, "rules": { "additionalProperties": false, - "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "description": "The inbound and outbound access rules for the VPC firewall template.\n\nA firewall can have up to 25 rules across its inbound and outbound rule sets. Multiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic from the same address, the first rule applies, and inbound traffic from that address is accepted.", "properties": { - "fingerprint": { - "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", - "example": "997dd135", - "readOnly": true, - "type": "string" - }, "inbound": { - "description": "The inbound rules for the firewall, as a JSON array.", + "description": "The inbound rules for the firewall.", "items": { "additionalProperties": false, "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", @@ -72782,7 +80163,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -72849,7 +80230,7 @@ "x-linode-cli-format": "json" }, "inbound_policy": { - "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "description": "The default behavior for inbound traffic. The default behavior for inbound traffic. You can override this setting by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound` object's `action` field.", "enum": [ "ACCEPT", "DROP" @@ -72858,7 +80239,7 @@ "type": "string" }, "outbound": { - "description": "The outbound rules for the firewall, as a JSON array.", + "description": "The outbound rules for the firewall.", "items": { "additionalProperties": false, "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", @@ -72874,7 +80255,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -72941,70 +80322,35 @@ "x-linode-cli-format": "json" }, "outbound_policy": { - "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "description": "The default behavior for outbound traffic. The default behavior for inbound traffic. You can override this setting by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound` object's `action` fields.", "enum": [ "ACCEPT", "DROP" ], "example": "DROP", "type": "string" - }, - "version": { - "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", - "example": 1, - "readOnly": true, - "type": "integer" } }, "type": "object" }, - "status": { - "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "slug": { + "description": "__Read-only__ The firewall template types available for VPC and public Linode interfaces.", "enum": [ - "enabled", - "disabled", - "deleted" - ], - "example": "enabled", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 3 - }, - "tags": { - "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", - "example": [ - "example tag", - "another example" + "vpc", + "public" ], + "example": "vpc", "items": { "type": "string" }, - "type": "array", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-filterable": true - }, - "updated": { - "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", - "example": "2018-01-02T00:01:01", - "format": "date-time", "readOnly": true, - "type": "string", - "x-akamai": { - "labels": [ - "Filterable" - ] - }, - "x-linode-cli-display": 5, - "x-linode-filterable": true + "type": "array", + "x-linode-cli-display": 1 } }, "type": "object", "x-akamai": { - "file-path": "schemas/firewall.yaml" + "file-path": "schemas/firewall-templates.yaml" } }, "type": "array" @@ -73023,22 +80369,55 @@ }, "results": { "description": "__Read-only__ The total number of results.", - "example": 1, + "example": 2, "readOnly": true, "type": "integer" } }, "type": "object", "x-akamai": { - "file-path": "schemas/added-get-firewalls-200.yaml" + "file-path": "schemas/added-get-firewall-templates-200.yaml" } }, "x-example": { - "x-ref": "../examples/get-firewalls-200.json" + "x-ref": "../examples/get-firewall-templates-200.json" + }, + "x-linode-cli-use-schema": { + "additionalProperties": false, + "properties": { + "rules.inbound": { + "additionalProperties": true, + "type": "object", + "x-linode-cli-display": 4, + "x-linode-cli-format": "json" + }, + "rules.inbound_policy": { + "type": "string", + "x-linode-cli-display": 2 + }, + "rules.outbound": { + "additionalProperties": true, + "type": "object", + "x-linode-cli-display": 5, + "x-linode-cli-format": "json" + }, + "rules.outbound_policy": { + "type": "string", + "x-linode-cli-display": 3 + }, + "slug": { + "type": "string", + "x-linode-cli-display": 1 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-template-cli.yaml" + } } } }, - "description": "Returns an array of Firewalls." + "description": "Returns a paginated list of firewall templates." }, "default": { "content": { @@ -73087,14 +80466,15 @@ ] } ], - "summary": "List firewalls", + "summary": "List firewall templates", "tags": [ - "Firewalls" + "Templates" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli firewalls list", + "syntax": "linode-cli firewalls templates-list", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, @@ -73105,10 +80485,509 @@ } ] }, - "x-linode-cli-action": [ - "list", - "ls" + "x-linode-cli-action": "templates-list", + "x-linode-grant": "read_only" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/firewall-templates.yaml", + "path-info": "/{apiVersion}/networking/firewalls/templates", + "status": "BETA" + }, + "x-linode-cli-command": "firewalls" + }, + "/{apiVersion}/networking/firewalls/templates/{slug}": { + "get": { + "description": "__Beta__ Gets a `vpc` or `public` firewall template you can use with Linode VPC and public interfaces. Firewall templates come with some protection rules already configured.\n\nThe public interface's firewall template allows for login with SSH, and regular networking control data. You should further strengthen these rules by limiting the allowed IPv4 and IPv6 ranges.\n\nThe VPC interface's firewall template allows for login with SSH, regular networking control data, and inbound traffic from the VPC address space. You should further strengthen these rules by limiting the allowed IPv4 and IPv6 ranges.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls template-view vpc\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-firewall-template" + }, + "operationId": "get-firewall-template", + "parameters": [ + { + "description": "The page of a collection to return.", + "example": "{{page}}", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "example": 6, + "minimum": 1, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-offset.yaml" + } + }, + { + "description": "The number of items to return per page.", + "example": "{{page_size}}", + "in": "query", + "name": "page_size", + "schema": { + "default": 100, + "example": 50, + "maximum": 500, + "minimum": 25, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-size.yaml" + } + } ], + "responses": { + "200": { + "content": { + "application/json": { + "examples": { + "ex-public": { + "summary": "Public firewall template", + "value": { + "data": [ + { + "rules": { + "inbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Accept inbound SSH", + "label": "accept-inbound-ssh", + "ports": "22", + "protocol": "TCP" + }, + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Accept inbound ICMP", + "label": "accept-inbound-icmp", + "protocol": "ICMP" + } + ], + "inbound_policy": "DROP", + "outbound": [], + "outbound_policy": "ACCEPT" + }, + "slug": "public" + } + ] + } + }, + "ex-vpc": { + "summary": "VPC firewall template", + "value": { + "data": [ + { + "rules": { + "inbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Accept inbound SSH", + "label": "accept-inbound-ssh", + "ports": "22", + "protocol": "TCP" + }, + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "0.0.0.0/0" + ], + "ipv6": [ + "::/0" + ] + }, + "description": "Accept inbound ICMP", + "label": "accept-inbound-icmp", + "protocol": "ICMP" + }, + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "1O.0.0.0/8", + "192.168.0.0/17", + "172.16.0.0/12" + ], + "ipv6": [] + }, + "description": "Rule to allow inbound for RFC1918 ranges; `10.0.0.0/8`, `192.168.0.0/17`, `172.16.0.0/12`.", + "label": "accept-inbound-rfc1918", + "ports": "1-65535", + "protocol": "TCP, UDP" + } + ], + "inbound_policy": "DROP", + "outbound": [], + "outbound_policy": "ACCEPT" + }, + "slug": "vpc" + } + ] + } + } + }, + "schema": { + "additionalProperties": false, + "description": "A list of firewall templates and their `rules`.", + "properties": { + "rules": { + "additionalProperties": false, + "description": "The inbound and outbound access rules for the VPC firewall template.\n\nA firewall can have up to 25 rules across its inbound and outbound rule sets. Multiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic from the same address, the first rule applies, and inbound traffic from that address is accepted.", + "properties": { + "inbound": { + "description": "The inbound rules for the firewall.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "inbound_policy": { + "description": "The default behavior for inbound traffic. The default behavior for inbound traffic. You can override this setting by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound` object's `action` field.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. The default behavior for inbound traffic. You can override this setting by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound` object's `action` fields.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + } + }, + "type": "object" + }, + "slug": { + "description": "__Read-only__ The firewall template types available for VPC and public Linode interfaces.", + "enum": [ + "vpc", + "public" + ], + "example": "vpc", + "items": { + "type": "string" + }, + "readOnly": true, + "type": "array", + "x-linode-cli-display": 1 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-templates.yaml" + } + }, + "x-linode-cli-use-schema": { + "additionalProperties": false, + "properties": { + "rules.inbound": { + "additionalProperties": true, + "type": "object", + "x-linode-cli-display": 4, + "x-linode-cli-format": "json" + }, + "rules.inbound_policy": { + "type": "string", + "x-linode-cli-display": 2 + }, + "rules.outbound": { + "additionalProperties": true, + "type": "object", + "x-linode-cli-display": 5, + "x-linode-cli-format": "json" + }, + "rules.outbound_policy": { + "type": "string", + "x-linode-cli-display": 3 + }, + "slug": { + "type": "string", + "x-linode-cli-display": 1 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-template-cli.yaml" + } + } + } + }, + "description": "Returns a `vpc` or `public` firewall template for interface firewalls." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "firewall:read_only" + ] + } + ], + "summary": "Get a firewall template", + "tags": [ + "Templates" + ], + "x-akamai": { + "status": "BETA", + "tabs": [ + { + "syntax": "linode-cli firewalls template-view vpc", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "firewall:read_only", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "template-view", "x-linode-grant": "read_only" }, "parameters": [ @@ -73128,11 +81007,29 @@ "x-akamai": { "file-path": "parameters/api-version-path.yaml" } + }, + { + "description": "__Enum__ The firewall template type, available for either `vpc` or `public` interfaces.", + "example": "{{slug}}", + "in": "path", + "name": "slug", + "required": true, + "schema": { + "enum": [ + "vpc", + "public" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/firewall-template-path.yaml" + } } ], "x-akamai": { - "file-path": "paths/networking-firewalls.yaml", - "path-info": "/{apiVersion}/networking/firewalls" + "file-path": "paths/firewall-template.yaml", + "path-info": "/{apiVersion}/networking/firewalls/templates/{slug}", + "status": "BETA" }, "x-linode-cli-command": "firewalls" }, @@ -73221,7 +81118,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -73313,7 +81210,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -73522,7 +81419,7 @@ "x-linode-grant": "read_only" }, "put": { - "description": "Updates information for a Firewall.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- If a Firewall's status is changed with this operation, a corresponding `firewall_enable` or `firewall_disable` Event will be generated.\n\nSome parts of a Firewall's configuration cannot be manipulated by this operation:\n\n- A Firewall's Devices cannot be set with this operation. Instead, run the [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) and [Delete a firewall device](https://techdocs.akamai.com/linode-api/reference/delete-firewall-device) operations to assign and remove this Firewall from services.\n\n- A Firewall's Rules cannot be changed with this operation. Instead, run the [Update firewall rules](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) operation to update your Rules.\n\n- A Firewall's status can be set to `enabled` or `disabled` by this operation, but it cannot be set to `deleted`. Instead, run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls update 123 \\\n --status disabled\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Updates information for a firewall.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- If this operation changes a firewall's status, it generates a corresponding `firewall_enable` or `firewall_disable` event.\n\nThis operation doesn't affect some parts of a firewall's configuration:\n\n- This operation doesn't set a firewall's devices. Instead, run the [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) and [Delete a firewall device](https://techdocs.akamai.com/linode-api/reference/delete-firewall-device) operations to assign and remove this firewall from services.\n\n- A firewall's rules can't be changed with this operation. Instead, run the [Update firewall rules](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) operation to update your rules.\n\n- Use this operation to set a firewall's status to `enabled` or `disabled`. But to set it to `deleted`, run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation.\n\n- An assigned default firewall can't be disabled.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls update 123 \\\n --status disabled\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/put-firewall" @@ -73550,7 +81447,7 @@ "x-linode-filterable": true }, "status": { - "description": "The status to be applied to this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "description": "The status to be applied to this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - An assigned default firewall can't be disabled.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", "enum": [ "enabled", "disabled" @@ -73586,8 +81483,7 @@ "x-ref": "../examples/put-firewall.json" } } - }, - "description": "The Firewall information to update." + } }, "responses": { "200": { @@ -73666,7 +81562,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -73758,7 +81654,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -73967,7 +81863,7 @@ "x-linode-grant": "read_write" }, "delete": { - "description": "Delete a Firewall resource by its ID. This removes all of the Firewall's Rules from any services that the Firewall was assigned to.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- A `firewall_delete` Event is generated when this operation returns successfully.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls delete 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Delete a firewall. This also removes all of the firewall's rules from any services the firewall was assigned to.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- A `firewall_delete` event is generated when this operation returns successfully.\n\n- An assigned default firewall can't be deleted.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls delete 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/delete-firewall" @@ -74104,7 +82000,7 @@ }, "/{apiVersion}/networking/firewalls/{firewallId}/devices": { "post": { - "description": "Creates a Firewall Device, which assigns a Firewall to a service (referred to as the Device's `entity`) and applies the Firewall's Rules to the device.\n\n- Currently, Devices with `linode` and `nodebalancer` entity types are accepted.\n\n- Firewalls only apply to inbound TCP traffic to NodeBalancers.\n\n- A Firewall can be assigned to multiple services at a time.\n\n- A service can have one assigned Firewall at a time.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- A `firewall_device_add` Event is generated when the Firewall Device is added successfully.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls device-create 123 \\\n --id 456 \\\n --type \"linode\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Creates a firewall device, which assigns a firewall to a service (referred to as the device's `entity`) and applies the firewall's rules to the device.\n\n- Currently, devices with `linode`, `interface`, and `nodebalancer` entity types are accepted.\n - The `linode` type is not allowed for Linodes using Linode interfaces.\n - The `interface` type is not allowed for legacy config interfaces. For VPC and public legacy config profile interfaces, the firewall is applied through the `linode` device.\n\n- Firewalls only apply to inbound TCP traffic to NodeBalancers.\n\n- A firewall can be assigned to multiple services at a time.\n\n- A service can have one assigned firewall at a time.\n\n- Assigned Linodes must not have any ongoing live migrations.\n\n- A `firewall_device_add` event is generated when the firewall device is added successfully.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls device-create 123 \\\n --id 456 \\\n --type \"linode\"\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-firewall-device" @@ -74117,7 +82013,7 @@ "allOf": [ { "additionalProperties": false, - "description": "__Read-only__ The compute service that this Firewall has been applied to.", + "description": "__Read-only__ The compute service or interface this firewall is assigned to.", "properties": { "id": { "description": "The entity's ID.", @@ -74134,7 +82030,8 @@ "description": "The entity's type.", "enum": [ "linode", - "nodebalancer" + "nodebalancer", + "interface" ], "example": "linode", "type": "string" @@ -74172,10 +82069,10 @@ "application/json": { "schema": { "additionalProperties": false, - "description": "Associates a Firewall with a Linode or NodeBalancer service.", + "description": "Associates a firewall with a Linode, a Linode interface, or a NodeBalancer service.", "properties": { "created": { - "description": "__Filterable__, __Read-only__ When this Device was created.", + "description": "__Filterable__, __Read-only__ When this device was created.", "example": "2018-01-01T00:01:01", "format": "date-time", "readOnly": true, @@ -74190,7 +82087,7 @@ }, "entity": { "additionalProperties": false, - "description": "__Read-only__ The compute service that this Firewall has been applied to.", + "description": "__Read-only__ The compute service or interface this firewall is assigned to.", "properties": { "id": { "description": "The entity's ID.", @@ -74207,7 +82104,8 @@ "description": "The entity's type.", "enum": [ "linode", - "nodebalancer" + "nodebalancer", + "interface" ], "example": "linode", "type": "string" @@ -74224,7 +82122,7 @@ "type": "object" }, "id": { - "description": "__Filterable__ The Device's unique ID.", + "description": "__Filterable__ The device's unique ID.", "example": 123, "type": "integer", "x-akamai": { @@ -74236,7 +82134,7 @@ "x-linode-filterable": true }, "updated": { - "description": "__Filterable__, __Read-only__ When this Device was last updated.", + "description": "__Filterable__, __Read-only__ When this device was last updated.", "example": "2018-01-02T00:01:01", "format": "date-time", "readOnly": true, @@ -74331,7 +82229,7 @@ "x-linode-grant": "read_write" }, "get": { - "description": "Returns a paginated list of a Firewall's Devices. A Firewall Device assigns a Firewall to a service (referred to as the Device's `entity`).\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls devices-list 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Returns a paginated list of a firewall's devices. A firewall device assigns a firewall to a service (referred to as the device's `entity`).\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli firewalls devices-list 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n firewall:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/get-firewall-devices" @@ -74397,18 +82295,29 @@ "id": 321, "label": "my-nodebalancer", "type": "nodebalancer", - "url": "/v4/nodebalancers/123" + "url": "/v4/nodebalancers/1234" }, "id": 654, "updated": "2018-01-02 00:01:01" + }, + { + "created": "2025-01-01 00:01:01", + "entity": { + "id": 321, + "label": "my-interface", + "type": "interface", + "url": "/v4/linode/instances/123/interfaces/12345" + }, + "id": 654, + "updated": "2025-01-02 00:01:01" } ], "items": { "additionalProperties": false, - "description": "Associates a Firewall with a Linode or NodeBalancer service.", + "description": "Associates a firewall with a Linode, a Linode interface, or a NodeBalancer service.", "properties": { "created": { - "description": "__Filterable__, __Read-only__ When this Device was created.", + "description": "__Filterable__, __Read-only__ When this device was created.", "example": "2018-01-01T00:01:01", "format": "date-time", "readOnly": true, @@ -74423,7 +82332,7 @@ }, "entity": { "additionalProperties": false, - "description": "__Read-only__ The compute service that this Firewall has been applied to.", + "description": "__Read-only__ The compute service or interface this firewall is assigned to.", "properties": { "id": { "description": "The entity's ID.", @@ -74440,7 +82349,8 @@ "description": "The entity's type.", "enum": [ "linode", - "nodebalancer" + "nodebalancer", + "interface" ], "example": "linode", "type": "string" @@ -74457,7 +82367,7 @@ "type": "object" }, "id": { - "description": "__Filterable__ The Device's unique ID.", + "description": "__Filterable__ The device's unique ID.", "example": 123, "type": "integer", "x-akamai": { @@ -74469,7 +82379,7 @@ "x-linode-filterable": true }, "updated": { - "description": "__Filterable__, __Read-only__ When this Device was last updated.", + "description": "__Filterable__, __Read-only__ When this device was last updated.", "example": "2018-01-02T00:01:01", "format": "date-time", "readOnly": true, @@ -74642,10 +82552,10 @@ "application/json": { "schema": { "additionalProperties": false, - "description": "Associates a Firewall with a Linode or NodeBalancer service.", + "description": "Associates a firewall with a Linode, a Linode interface, or a NodeBalancer service.", "properties": { "created": { - "description": "__Filterable__, __Read-only__ When this Device was created.", + "description": "__Filterable__, __Read-only__ When this device was created.", "example": "2018-01-01T00:01:01", "format": "date-time", "readOnly": true, @@ -74660,7 +82570,7 @@ }, "entity": { "additionalProperties": false, - "description": "__Read-only__ The compute service that this Firewall has been applied to.", + "description": "__Read-only__ The compute service or interface this firewall is assigned to.", "properties": { "id": { "description": "The entity's ID.", @@ -74677,7 +82587,8 @@ "description": "The entity's type.", "enum": [ "linode", - "nodebalancer" + "nodebalancer", + "interface" ], "example": "linode", "type": "string" @@ -74694,7 +82605,7 @@ "type": "object" }, "id": { - "description": "__Filterable__ The Device's unique ID.", + "description": "__Filterable__ The device's unique ID.", "example": 123, "type": "integer", "x-akamai": { @@ -74706,7 +82617,7 @@ "x-linode-filterable": true }, "updated": { - "description": "__Filterable__, __Read-only__ When this Device was last updated.", + "description": "__Filterable__, __Read-only__ When this device was last updated.", "example": "2018-01-02T00:01:01", "format": "date-time", "readOnly": true, @@ -75032,7 +82943,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -75124,7 +83035,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -75456,7 +83367,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -75548,7 +83459,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -75848,7 +83759,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -75940,7 +83851,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -76142,7 +84053,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -76234,7 +84145,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -76381,7 +84292,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -76473,7 +84384,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -76677,7 +84588,7 @@ }, "/{apiVersion}/networking/ips": { "post": { - "description": "Allocates a new IPv4 Address on your Account. The Linode must be configured to support additional addresses - please [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) requesting additional addresses before attempting allocation.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ip-add \\\n --type ipv4 \\\n --public true \\\n --linode_id 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Allocates a new IPv4 Address on your Account. The Linode must be configured to support additional addresses - please [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) requesting additional addresses before attempting allocation.\n\n> \ud83d\udcd8\n>\n> You can run this operation for Linodes with legacy configuration interfaces. You can't use it for Linodes with Linode interfaces. To allocate an IP for a Linode with Linode interfaces, use the [Add a Linode interface](https://techdocs.akamai.com/linode-api/reference/post-linode-interface) operation and set the public IPv4 address to `auto`.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ip-add \\\n --type ipv4 \\\n --public true \\\n --linode_id 123\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-allocate-ip" @@ -76750,8 +84661,19 @@ "readOnly": true, "type": "string" }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", "example": 123, "readOnly": true, "type": "integer", @@ -76912,7 +84834,7 @@ "x-linode-grant": "read_write" }, "get": { - "description": "Returns a paginated list of IP addresses on your account, excluding private addresses.\n\n> \ud83d\udc4d\n>\n> if your application frequently accesses this operation and doesn't require IPv6 RDNS data, you can use the `skip_ipv6_rdns` query string to improve performance.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ips-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Returns a paginated list of IP addresses on your account for Linodes or Linode interfaces, excluding private addresses.\n\n> \ud83d\udc4d\n>\n> if your application frequently accesses this operation and doesn't require IPv6 RDNS data, you can use the `skip_ipv6_rdns` query string to improve performance.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ips-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/get-ips" @@ -76941,8 +84863,9 @@ "example": { "data": [ { - "address": "192.0.2.141", - "gateway": "192.0.2.1", + "address": "198.51.100.141", + "gateway": "198.51.100.1", + "interface_id": 456, "linode_id": 123, "prefix": 24, "public": true, @@ -76951,7 +84874,7 @@ "subnet_mask": "192.0.2.139", "type": "ipv4", "vpc_nat_1_1": { - "address": "192.0.2.99", + "address": "192.0.2.1", "subnet_id": 101, "vpc_id": 111 } @@ -77021,6 +84944,17 @@ "readOnly": true, "type": "string" }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID this public IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, "linode_id": { "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this defaults to the Linode that this address was assigned to on creation. IPv4 addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", "example": 123, @@ -77238,7 +85172,7 @@ }, "/{apiVersion}/networking/ips/assign": { "post": { - "description": "Assign multiple IPv4 addresses and/or IPv6 ranges to multiple Linodes in one Region. This allows swapping, shuffling, or otherwise reorganizing IPs to your Linodes.\n\nThe following restrictions apply:\n\n- All Linodes involved must have at least one public IPv4 address after assignment.\n- Linodes may have no more than one assigned private IPv4 address.\n- Linodes may have no more than one assigned IPv6 range.\n- Shared IP addresses cannot be swapped between Linodes.\n\n[Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to request additional IPv4 addresses or IPv6 ranges beyond standard account limits.\n\n> \ud83d\udcd8\n>\n> Removing an IP address that has been set as a Managed Linode's `ssh.ip` causes the Managed Linode's SSH access settings to reset to their default values.\n\nTo view and configure Managed Linode SSH settings, use the following operations:\n\n- [Get a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/get-managed-linode-setting)\n- [Update a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/put-managed-linode-setting)\n\n> \ud83d\udcd8\n>\n> Addresses with an active 1:1 NAT to a VPC Interface address cannot be assigned to other Linodes.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ip-assign \\\n --region us-east \\\n --assignments.address 192.0.2.1 \\\n --assignments.linode_id 123 \\\n --assignments.address 2001:db8:3c4d:15::/64 \\\n --assignments.linode_id 234\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Assign any set of IPv4 addresses and IPv6 ranges to Linodes in one region. This allows swapping, shuffling, or otherwise reorganizing IPs among your Linodes.\n\nThe following restrictions apply:\n\n- All Linodes need to have at least one public IPv4 address assigned.\n - For Linode interfaces, the Linode needs to have a public interface, and the address it receives can't be a private IPv4 address.\n- Linodes may have no more than one assigned private IPv4 address.\n- Linodes may have no more than one assigned IPv6 range.\n- Shared IP addresses cannot be swapped between Linodes.\n\n[Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to request additional IPv4 addresses or IPv6 ranges beyond standard account limits.\n\n> \ud83d\udcd8\n>\n> Removing an IP address that has been set as a Managed Linode's `ssh.ip` causes the Managed Linode's SSH access settings to reset to their default values.\n\nTo view and configure Managed Linode SSH settings, use the following operations:\n\n- [Get a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/get-managed-linode-setting)\n- [Update a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/put-managed-linode-setting)\n\n> \ud83d\udcd8\n>\n> Addresses with an active 1:1 NAT to a VPC Interface address cannot be assigned to other Linodes.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ip-assign \\\n --region us-east \\\n --assignments.address 192.0.2.1 \\\n --assignments.linode_id 123 \\\n --assignments.address 2001:db8:3c4d:15::/64 \\\n --assignments.linode_id 234\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-assign-ips" @@ -77257,7 +85191,7 @@ "additionalProperties": false, "properties": { "address": { - "description": "The IPv4 address or IPv6 range for this assignment.\n\n- Must be an IPv4 address or an IPv6 range you can access in the Region specified.\n- IPv6 ranges must include a prefix length of `/56` or `/64`, for example: `2001:db8:3c4d:15::/64`.\n- Assignment of an IPv6 range to a Linode updates the route target of the range to the assigned Linode's SLAAC address.\n- May be a public or private address.", + "description": "The IPv4 address or IPv6 range for this assignment.\n\n- Must be an IPv4 address or an IPv6 range you can access in the Region specified.\n- IPv6 ranges must include a prefix length of `/56` or `/64`, for example: `2001:db8:3c4d:15::/64`.\n- Assignment of an IPv6 range to a Linode updates the route target of the range to the assigned Linode's SLAAC address.\n- Can be a public or private address.\n- For Linode interfaces, public IPv4 addresses or public IPv6 ranges can be exchanged on public interfaces. Private IPv4 addresses are not supported.", "example": "192.0.2.1", "format": "ipv4|ipv6/prefix_length", "type": "string" @@ -77414,7 +85348,7 @@ }, "/{apiVersion}/networking/ips/share": { "post": { - "description": "Configure shared IPs.\n\nIP sharing allows IP address reassignment (also referred to as IP failover) from one Linode to another if the primary Linode becomes unresponsive. This means that requests to the primary Linode's IP address can be automatically rerouted to secondary Linodes at the configured shared IP addresses.\n\nIP failover requires configuration of a [BGP based failover service](https://techdocs.akamai.com/cloud-computing/docs/configure-failover-on-a-compute-instance) within the internal system of the primary Linode.\n\n> \ud83d\udcd8\n>\n> A public IPv4 address can't be shared if it's configured for a 1:1 NAT on a `vpc` purpose Configuration Profile Interface.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ip-share \\\n --linode_id 123 \\\n --ips 192.0.2.1 \\\n --ips 2001:db8:3c4d:15::\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Configure shared IPs.\n\nIP sharing allows IP address reassignment (also referred to as IP failover) from one Linode to another if the primary Linode becomes unresponsive. This means that requests to the primary Linode's IP address can be automatically rerouted to secondary Linodes at the configured shared IP addresses.\n\nIP failover requires configuration of a [BGP based failover service](https://techdocs.akamai.com/cloud-computing/docs/configure-failover-on-a-compute-instance) within the internal system of the primary Linode.\n\n> \ud83d\udcd8\n>\n> A public IPv4 address can't be shared if it's configured for a 1:1 NAT on a legacy configuration profile VPC interface or on a Linode VPC interface.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli networking ip-share \\\n --linode_id 123 \\\n --ips 192.0.2.1 \\\n --ips 2001:db8:3c4d:15::\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-share-ips" @@ -77607,8 +85541,19 @@ "readOnly": true, "type": "string" }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", "example": 123, "readOnly": true, "type": "integer", @@ -77829,8 +85774,19 @@ "readOnly": true, "type": "string" }, + "interface_id": { + "description": "__Beta__, __Read-only__ The Linode interface ID that this IP address is assigned to. This value is `null` if a Linode interface is not assigned, or if the IP is assigned to a legacy configuration profile interface.", + "example": 456, + "nullable": true, + "readOnly": true, + "type": "integer", + "x-akamai": { + "status": "BETA" + }, + "x-linode-cli-display": 7 + }, "linode_id": { - "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses my be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value may not be changed.", + "description": "__Read-only__ The ID of the Linode this address currently belongs to. For IPv4 addresses, this is by default the Linode that this address was assigned to on creation, and these addresses may be moved using the [Assign IPv4s to Linodes](https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s) operation. For SLAAC and link-local addresses, this value can't be changed.", "example": 123, "readOnly": true, "type": "integer", @@ -78031,7 +85987,7 @@ }, "/{apiVersion}/networking/ipv4/assign": { "post": { - "description": "This operation is equivalent to [Assign IP addresses](https://techdocs.akamai.com/linode-api/reference/post-assign-ips).\n\nAssign multiple IPv4 addresses and/or IPv6 ranges to multiple Linodes in one Region. This allows swapping, shuffling, or otherwise reorganizing IPs to your Linodes.\n\nThe following restrictions apply:\n\n- All Linodes involved must have at least one public IPv4 address after assignment.\n- Linodes may have no more than one assigned private IPv4 address.\n- Linodes may have no more than one assigned IPv6 range.\n\n[Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to request additional IPv4 addresses or IPv6 ranges beyond standard account limits.\n\n> \ud83d\udcd8\n>\n> Removing an IP address that has been set as a Managed Linode's `ssh.ip` causes the Managed Linode's SSH access settings to reset to their default values.\n\nTo view and configure Managed Linode SSH settings, use the following operations:\n- [Get a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/get-managed-linode-setting)\n- [Update a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/put-managed-linode-setting)\n\n\n<>\n\n---\n\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "This operation is equivalent to [Assign IP addresses](https://techdocs.akamai.com/linode-api/reference/post-assign-ips).\n\nAssign multiple IPv4 addresses and/or IPv6 ranges to multiple Linodes in one Region. This allows swapping, shuffling, or otherwise reorganizing IPs to your Linodes.\n\nThe following restrictions apply:\n\n- All Linodes involved must have at least one public IPv4 address after assignment.\n - For Linode interfaces, the Linode needs to have a public interface, and the address it receives can't be a private IPv4 address.\n- Linodes may have no more than one assigned private IPv4 address.\n- Linodes may have no more than one assigned IPv6 range.\n\n[Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to request additional IPv4 addresses or IPv6 ranges beyond standard account limits.\n\n> \ud83d\udcd8\n>\n> Removing an IP address that has been set as a Managed Linode's `ssh.ip` causes the Managed Linode's SSH access settings to reset to their default values.\n\nTo view and configure Managed Linode SSH settings, use the following operations:\n- [Get a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/get-managed-linode-setting)\n- [Update a Linode's managed settings](https://techdocs.akamai.com/linode-api/reference/put-managed-linode-setting)\n\n\n<>\n\n---\n\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-assign-ipv4s" @@ -78050,7 +86006,7 @@ "additionalProperties": false, "properties": { "address": { - "description": "The IPv4 address or IPv6 range for this assignment.\n\n- Must be an IPv4 address or an IPv6 range you can access in the Region specified.\n- IPv6 ranges must include a prefix length of `/56` or `/64`, for example: `2001:db8:3c4d:15::/64`.\n- Assignment of an IPv6 range to a Linode updates the route target of the range to the assigned Linode's SLAAC address.\n- May be a public or private address.", + "description": "The IPv4 address or IPv6 range for this assignment.\n\n- Must be an IPv4 address or an IPv6 range you can access in the Region specified.\n- IPv6 ranges must include a prefix length of `/56` or `/64`, for example: `2001:db8:3c4d:15::/64`.\n- Assignment of an IPv6 range to a Linode updates the route target of the range to the assigned Linode's SLAAC address.\n- Can be a public or private address.\n- For Linode interfaces, public IPv4 addresses or public IPv6 ranges can be exchanged on public interfaces. Private IPv4 addresses are not supported.", "example": "192.0.2.1", "format": "ipv4|ipv6/prefix_length", "type": "string" @@ -78202,7 +86158,7 @@ }, "/{apiVersion}/networking/ipv4/share": { "post": { - "description": "This operation is equivalent to [Share IP addresses](https://techdocs.akamai.com/linode-api/reference/post-share-ips).\n\nConfigure shared IPs.\n\nIP sharing allows IP address reassignment (also referred to as IP failover) from one Linode to another if the primary Linode becomes unresponsive. This means that requests to the primary Linode's IP address can be automatically rerouted to secondary Linodes at the configured shared IP addresses.\n\nIP failover requires configuration of a [BGP based failover service](https://techdocs.akamai.com/cloud-computing/docs/configure-failover-on-a-compute-instance) within the internal system of the primary Linode.\n\n\n<>\n\n---\n\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "This operation is equivalent to [Share IP addresses](https://techdocs.akamai.com/linode-api/reference/post-share-ips).\n\nConfigure shared IPs.\n\nIP sharing allows IP address reassignment (also referred to as IP failover) from one Linode to another if the primary Linode becomes unresponsive. This means that requests to the primary Linode's IP address can be automatically rerouted to secondary Linodes at the configured shared IP addresses.\n\nIP failover requires configuration of a [BGP based failover service](https://techdocs.akamai.com/cloud-computing/docs/configure-failover-on-a-compute-instance) within the internal system of the primary Linode.\n\n> \ud83d\udcd8\n>\n> A public IPv4 address can't be shared if it's configured for a 1:1 NAT on a legacy configuration profile VPC interface or on a Linode VPC interface.\n\n\n<>\n\n---\n\n\n- __OAuth scopes__.\n\n ```\n ips:read_write\nlinodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-share-ipv4s" @@ -79203,7 +87159,7 @@ }, "/{apiVersion}/networking/vlans": { "get": { - "description": "Returns a list of all Virtual Local Area Networks (VLANs) on your Account. VLANs provide a mechanism for secure communication between two or more Linodes that are assigned to the same VLAN and are both within the same Layer 2 broadcast domain.\n\nVLANs are created and attached to Linodes by using the `interfaces` property for the following operations:\n\n- [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance)\n- [Create a config profile](https://techdocs.akamai.com/linode-api/reference/post-add-linode-config)\n- [Update a config profile](https://techdocs.akamai.com/linode-api/reference/put-linode-config)\n\nThere are several ways to detach a VLAN from a Linode:\n\n- [Update](https://techdocs.akamai.com/linode-api/reference/put-linode-config) the active Configuration Profile to remove the VLAN Interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode.\n- [Create a config profile](https://techdocs.akamai.com/linode-api/reference/post-add-linode-config) without the VLAN Interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode into the new Configuration Profile.\n- [Delete](https://techdocs.akamai.com/linode-api/reference/delete-linode-instance) the Linode.\n\n> \ud83d\udcd8\n>\n> - Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning won't initiate. If a Linode cannot be migrated because of an incompatibility, you will be prompted to select a different data center or contact support.\n>\n> - See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) to view additional specifications and limitations.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli vlans list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Returns a list of all Virtual Local Area Networks (VLANs) on your account. VLANs provide a mechanism for secure communication between two or more Linodes that are assigned to the same VLAN, and are both within the same Layer 2 broadcast domain.\n\nFor legacy configuration profile interfaces, you can use the following operations to create, attach, detach, and delete VLANs on a Linode:\n- [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance)\n- [Create a config profile](https://techdocs.akamai.com/linode-api/reference/post-add-linode-config)\n- [Update a config profile](https://techdocs.akamai.com/linode-api/reference/put-linode-config)\n- [Update](https://techdocs.akamai.com/linode-api/reference/put-linode-config) the active Configuration Profile to remove the VLAN Interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode.\n- [Create a config profile](https://techdocs.akamai.com/linode-api/reference/post-add-linode-config) without the VLAN Interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode into the new Configuration Profile.\n- [Delete](https://techdocs.akamai.com/linode-api/reference/delete-linode-instance) the Linode.\n\nFor Linode interfaces, you can use the following operations to create, attach, detach, and delete VLANs on a Linode:\n- [Create a Linode](https://techdocs.akamai.com/linode-api/reference/post-linode-instance)\n- [Add a Linode interface](https://techdocs.akamai.com/linode-api/reference/post-linode-interface)\n- [Update a Linode interface](put-linode-interface-settings)\n- [Delete a Linode interface](https://techdocs.akamai.com/linode-api/reference/delete-linode-interface) from a Linode. \n\n> \ud83d\udcd8\n>\n> - Only Next Generation Network (NGN) data centers support VLANs. Run the [List regions](https://techdocs.akamai.com/linode-api/reference/get-regions) operation to view the capabilities of data center regions. If a VLAN is attached to your Linode and you attempt to migrate or clone it to a non-NGN data center, the migration or cloning won't initiate. If a Linode cannot be migrated because of an incompatibility, you will be prompted to select a different data center or contact support.\n>\n> - See the [VLANs Overview](https://www.linode.com/docs/products/networking/vlans/#technical-specifications) to view additional specifications and limitations.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli vlans list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/get-vlans" @@ -79438,7 +87394,7 @@ }, "/{apiVersion}/networking/vlans/{regionId}/{label}": { "delete": { - "description": "This operation deletes a VLAN. You can't delete a VLAN if it's still attached to a Linode. There are a few ways to detach it:\n- [Update](https://techdocs.akamai.com/linode-api/reference/put-linode-config) the active configuration profile to remove the VLAN interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode.\n- [Create a config profile](https://techdocs.akamai.com/linode-api/reference/post-add-linode-config) without the VLAN interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode into the new configuration profile.\n- [Delete](https://techdocs.akamai.com/linode-api/reference/delete-linode-instance) the Linode.\n\nTo run this operation, you need `read_write` grants to Linodes that use the VLAN.\n\nA successful request triggers a `vlan_delete` event.\n\n> \ud83d\udcd8\n>\n> VLANs without any attached Linodes are periodically cleaned up by the system.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli vlans delete $regionId $label\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "This operation deletes a legacy configuration profile VLAN interface. To delete a Linode interface VLAN, use the [Delete a Linode interface](https://techdocs.akamai.com/linode-api/reference/delete-linode-interface) operation.\n\nYou can't delete a VLAN if it's still attached to a Linode. There are a few ways to detach it:\n- [Update](https://techdocs.akamai.com/linode-api/reference/put-linode-config) the active configuration profile to remove the VLAN interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode.\n- [Create a config profile](https://techdocs.akamai.com/linode-api/reference/post-add-linode-config) without the VLAN interface, then [reboot](https://techdocs.akamai.com/linode-api/reference/post-reboot-linode-instance) the Linode into the new configuration profile.\n- [Delete](https://techdocs.akamai.com/linode-api/reference/delete-linode-instance) the Linode.\n\nTo run this operation, you need `read_write` grants to Linodes that use the VLAN.\n\nA successful request triggers a `vlan_delete` event.\n\n> \ud83d\udcd8\n>\n> VLANs without any attached Linodes are periodically cleaned up by the system.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli vlans delete $regionId $label\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n linodes:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/delete-vlan" @@ -82226,7 +90182,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -84834,7 +92790,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -87503,7 +95459,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -88333,7 +96289,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -89182,7 +97138,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -90268,198 +98224,585 @@ "type": "string", "x-linode-cli-display": 3 }, - "id": { - "description": "__Read-only__ This node's unique ID.", - "example": 54321, + "id": { + "description": "__Read-only__ This node's unique ID.", + "example": 54321, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "label": { + "description": "The label for this node. This is for display purposes only.", + "example": "node54321", + "maxLength": 32, + "minLength": 3, + "pattern": "[a-zA-Z0-9-_.]{3,32}", + "type": "string", + "x-linode-cli-display": 2 + }, + "mode": { + "description": "The mode this NodeBalancer should use when sending traffic to this backend.\n\n- If set to `accept` this backend is accepting traffic.\n- If set to `reject` this backend will not receive traffic.\n- If set to `drain` this backend will not receive _new_ traffic, but connections already pinned to it will continue to be routed to it.\n- If set to `backup`, this backend will only receive traffic if all `accept` nodes are down.", + "enum": [ + "accept", + "reject", + "drain", + "backup" + ], + "example": "accept", + "type": "string", + "x-linode-cli-display": 6 + }, + "status": { + "description": "__Read-only__ The current status of this node, based on the configured checks of its NodeBalancer Config.", + "enum": [ + "unknown", + "UP", + "DOWN" + ], + "example": "UP", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "DOWN": "red", + "UP": "green", + "default_": "white", + "unknown": "yellow" + }, + "x-linode-cli-display": 4 + }, + "weight": { + "description": "Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic.", + "example": 50, + "maximum": 255, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 5 + } + }, + "type": "object" + }, + "type": "array" + }, + "nodes_status": { + "additionalProperties": false, + "description": "__Read-only__ A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.", + "properties": { + "down": { + "description": "__Read-only__ The number of backends considered to be \"DOWN\" and unhealthy. These are not in rotation, and not serving requests.", + "example": 0, + "readOnly": true, + "type": "integer" + }, + "up": { + "description": "__Read-only__ The number of backends considered to be \"UP\" and healthy, and that are serving requests.", + "example": 4, + "readOnly": true, + "type": "integer" + } + }, + "readOnly": true, + "type": "object", + "x-linode-cli-display": 10 + }, + "port": { + "default": 80, + "description": "The port for this config. Ports need to be unique across configs for each NodeBalancer. For example, you can't have two configs for port 80. While some protocols are typically assigned specific ports, there's no enforcement, and you can configure your NodeBalancer however you find useful. For example, while port 443 is generally used for HTTPS, you don't need SSL configured to have a NodeBalancer listening on port 443.", + "example": 80, + "maximum": 65535, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 2 + }, + "protocol": { + "default": "http", + "description": "The protocol this port is configured to serve.\n\n- The `http` and `tcp` protocols don't support `ssl_cert` and `ssl_key`.\n\n- For the `https` protocol, you need `ssl_cert` and `ssl_key`.\n\nReview our guide on [Available protocols](https://www.linode.com/docs/products/networking/nodebalancers/guides/protocols/) for information on protocol features.", + "enum": [ + "http", + "https", + "tcp" + ], + "example": "http", + "type": "string", + "x-linode-cli-display": 3 + }, + "proxy_protocol": { + "default": "none", + "description": "ProxyProtocol is a TCP extension that sends initial TCP connection information such as source/destination IPs and ports to backend devices. This information would be lost otherwise. Backend devices must be configured to work with ProxyProtocol if enabled.\n\n- If omitted, or set to `none`, the NodeBalancer doesn't send any auxiliary data over TCP connections. This is the default.\n- If set to `v1`, the human-readable header format (Version 1) is used. Requires `tcp` protocol.\n- If set to `v2`, the binary header format (Version 2) is used. Requires `tcp` protocol.", + "enum": [ + "none", + "v1", + "v2" + ], + "example": "none", + "type": "string" + }, + "ssl_cert": { + "description": "\nThe PEM-formatted public SSL certificate (or the combined PEM-formatted SSL certificate and Certificate Authority chain) that should be served on this NodeBalancerConfig's port.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\n[Diffie-Hellman Parameters](https://www.linode.com/docs/products/networking/nodebalancers/guides/ssl-termination/#diffie-hellman-parameters) can be included in this value to enable forward secrecy.\n\nThe contents of this field will not be shown in any responses that display the NodeBalancerConfig. Instead, `` will be printed where the field appears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig response are automatically derived from your certificate. Please refer to these fields to verify that the appropriate certificate was assigned to your NodeBalancerConfig.", + "example": "", + "format": "ssl-cert", + "nullable": true, + "type": "string" + }, + "ssl_commonname": { + "description": "__Read-only__ The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.", + "example": "www.example.com", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 8 + }, + "ssl_fingerprint": { + "description": "__Read-only__ The read-only SHA1-encoded fingerprint automatically derived from the SSL certificate assigned to this NodeBalancer configuration. Please refer to the `ssl_fingerprint` field to verify that the appropriate certificate is assigned to your NodeBalancer configuration.", + "example": "00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10:11:12:13", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 9 + }, + "ssl_key": { + "description": "The PEM-formatted private key for the SSL certificate set in the `ssl_cert` field.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\nThe contents of this field will not be shown in any responses that display\nthe NodeBalancerConfig. Instead, `` will be printed where the field\nappears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig\nresponse are automatically derived from your certificate. Please refer to these fields to\nverify that the appropriate certificate was assigned to your NodeBalancerConfig.", + "example": "", + "format": "ssl-key", + "nullable": true, + "type": "string" + }, + "stickiness": { + "default": "none", + "description": "Controls how session stickiness is handled on this port.\n- If set to `none`, connections will always be assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address will be routed to the same backend.\n- For HTTP or HTTPS clients, `http_cookie` allows sessions to be routed to the same backend based on a cookie set by the NodeBalancer.", + "enum": [ + "none", + "table", + "http_cookie" + ], + "example": "http_cookie", + "type": "string", + "x-linode-cli-display": 5 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/node-balancer-config-rebuild-cli.yaml" + }, + "x-linode-cli-subtables": [ + "nodes" + ] + } + } + }, + "description": "Information about the NodeBalancer Config to rebuild.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "NodeBalancer `config` options for each protocol.", + "oneOf": [ + { + "additionalProperties": false, + "description": "A NodeBalancer configuration defines the protocol and settings for a specific port on the NodeBalancer. These fields apply to TCP configurations.", + "properties": { + "algorithm": { + "default": "roundrobin", + "description": "The algorithm this TCP NodeBalancer uses to route traffic to backends.", + "enum": [ + "roundrobin", + "leastconn", + "source" + ], + "example": "leastconn", + "type": "string", + "x-linode-cli-display": 4 + }, + "check": { + "default": "none", + "description": "The type of check to perform against backends to ensure they are serving requests. This determines if backends are up or down.\n\n- If `none`, no check is performed.\n- `connection` requires only a connection to the backend to succeed.\n- `http` and `http_body` rely on the backend serving HTTP, and that the response returned matches what is expected.", + "enum": [ + "none", + "connection", + "http", + "http_body" + ], + "example": "http_body", + "type": "string" + }, + "check_attempts": { + "default": 3, + "description": "How many times to attempt a check before considering a backend to be down.", + "example": 3, + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "check_body": { + "description": "This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down.", + "example": "it works", + "type": "string" + }, + "check_interval": { + "default": 5, + "description": "How often, in seconds, to check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", + "example": 90, + "maximum": 3600, + "minimum": 2, + "type": "integer" + }, + "check_passive": { + "default": true, + "description": "If `true`, any response from this backend with a `5xx` status code is enough for it to be considered unhealthy and taken out of rotation.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + }, + "check_path": { + "description": "The URL path to check on each backend. If the backend does not respond to this request, it's considered to be down.", + "example": "/test", + "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", + "type": "string" + }, + "check_timeout": { + "default": 30, + "description": "How long, in seconds, to wait for a check attempt before considering it failed.\n\nMust be less than `check_interval`.", + "example": 10, + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "cipher_suite": { + "description": "__Read-only__ Not applicable for `tcp` configs.", + "example": "none", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "default_": "white", + "legacy": "red" + }, + "x-linode-cli-display": 7 + }, + "id": { + "description": "__Read-only__ This config's unique ID.", + "example": 6000, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "nodebalancer_id": { + "description": "__Read-only__ The ID for the NodeBalancer this config belongs to.", + "example": 12345, + "readOnly": true, + "type": "integer" + }, + "nodes_status": { + "additionalProperties": false, + "description": "__Read-only__ Describes the health of the backends for this port. This data updates periodically as checks are performed against backends.", + "properties": { + "down": { + "description": "__Read-only__ The number of backends considered to be `DOWN` and unhealthy. These are not in rotation, and not serving requests.", + "example": 0, + "readOnly": true, + "type": "integer" + }, + "up": { + "description": "__Read-only__ The number of backends considered to be `UP` and healthy, and that are serving requests.", + "example": 4, + "readOnly": true, + "type": "integer" + } + }, + "readOnly": true, + "type": "object", + "x-linode-cli-display": 10 + }, + "port": { + "default": 80, + "description": "This is the port the NodeBalancer listens on for this configuration. Port numbers must be unique across TCP, HTTP, and HTTPS configurations on a single NodeBalancer. However, ports assigned to TCP, HTTP, or HTTPS configurations can also be reused for UDP configurations. For example, Port 80 can simultaneously serve a TCP and a UDP configuration on the same NodeBalancer, but it can't be shared by both a TCP and an HTTP configuration. Although certain ports are traditionally associated with specific protocols, this isn't strictly enforced, and you may configure your NodeBalancer however you find useful.", + "example": 22, + "maximum": 65535, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 2 + }, + "protocol": { + "default": "http", + "description": "The protocol the port is configured to serve, `tcp` in this case. Review our guide on [Available protocols](https://techdocs.akamai.com/cloud-computing/docs/available-protocols) for information on protocol features.", + "enum": [ + "tcp" + ], + "example": "tcp", + "type": "string", + "x-linode-cli-display": 3 + }, + "proxy_protocol": { + "default": "none", + "description": "Proxy protocol is a TCP extension that sends initial TCP connection information such as source or destination IPs and ports to backend devices. Proxy protocol preserves initial TCP information that would be lost otherwise. Backend devices must be configured to work with `proxy_protocol` if enabled.\n\n- If omitted, or set to `none`, the NodeBalancer doesn't send any auxiliary data over TCP connections. This is the default.\n- If set to `v1`, the human-readable header format (Version 1) is used. Requires `tcp` protocol.\n- If set to `v2`, the binary header format (Version 2) is used. Requires `tcp` protocol.", + "enum": [ + "none", + "v1", + "v2" + ], + "example": "none", + "type": "string" + }, + "ssl_cert": { + "description": "__Read-only__ Not applicable for TCP configs.", + "example": null, + "nullable": true, + "readOnly": true, + "type": "string" + }, + "ssl_commonname": { + "description": "__Read-only__ Not applicable for TCP configs.", + "example": "", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 8 + }, + "ssl_fingerprint": { + "description": "__Read-only__ Not applicable for TCP configs.", + "example": "", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 9 + }, + "ssl_key": { + "description": "__Read-only__ Not applicable for HTTP configs.", + "example": null, + "nullable": true, + "readOnly": true, + "type": "string" + }, + "stickiness": { + "default": "none", + "description": "__Read-only__ Controls how session stickiness is handled on this port.\n\nNot applicable to TCP configurations.", + "enum": [ + "none", + "table", + "http_cookie" + ], + "example": "none", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 5 + } + }, + "required": [ + "nodes" + ], + "title": "TCP", + "type": "object", + "x-akamai": { + "file-path": "schemas/node-balancer-config-tcp-response.yaml" + } + }, + { + "additionalProperties": false, + "description": "A NodeBalancer configuration defines the protocol and settings for a specific port on the NodeBalancer. These fields apply to HTTP configurations.", + "properties": { + "algorithm": { + "default": "roundrobin", + "description": "The algorithm this HTTP NodeBalancer uses for routing traffic to backends.", + "enum": [ + "roundrobin", + "leastconn", + "source" + ], + "example": "roundrobin", + "type": "string", + "x-linode-cli-display": 4 + }, + "check": { + "default": "none", + "description": "The type of check to perform against backends to ensure they are serving requests. This determines if backends are up or down.\n\n- If `none`, no check is performed.\n- `connection` requires only a connection to the backend to succeed.\n- `http` and `http_body` rely on the backend serving HTTP, and that the response returned matches what is expected.", + "enum": [ + "none", + "connection", + "http", + "http_body" + ], + "example": "http_body", + "type": "string" + }, + "check_attempts": { + "default": 3, + "description": "How many times to attempt a check before considering a backend to be down.", + "example": 3, + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "check_body": { + "description": "Use when the active health `check` type is `http_body`. This value needs to be in the response body of the check in order for it to pass. Otherwise the backend is considered to be down.", + "example": "it works", + "type": "string" + }, + "check_interval": { + "default": 5, + "description": "How often, in seconds, to check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", + "example": 90, + "maximum": 3600, + "minimum": 2, + "type": "integer" + }, + "check_passive": { + "default": true, + "description": "If `true`, any response from this backend with a `5xx` status code will be enough for it to be considered unhealthy and taken out of rotation.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + }, + "check_path": { + "description": "The URL path to check on each backend. Use when the active health `check` type is `http`. If the backend doesn't respond to this request, it's considered to be down.", + "example": "/test", + "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", + "type": "string" + }, + "check_timeout": { + "default": 3, + "description": "How long, in seconds, to wait for a check attempt before considering it failed.\n\nMust be less than `check_interval`.", + "example": 10, + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "cipher_suite": { + "description": "__Read-only__ Not applicable for `http` configs.", + "example": "none", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "default_": "white", + "legacy": "red" + }, + "x-linode-cli-display": 7 + }, + "id": { + "description": "__Read-only__ This config's unique ID.", + "example": 4000, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "nodebalancer_id": { + "description": "__Read-only__ Identifies the NodeBalancer this config belongs to.", + "example": 12345, + "readOnly": true, + "type": "integer" + }, + "nodes_status": { + "additionalProperties": false, + "description": "__Read-only__ Describes the health of the backends for this port. This data updates periodically as checks are performed against backends.", + "properties": { + "down": { + "description": "__Read-only__ The number of backends considered to be `DOWN` and unhealthy. These are not in rotation, and not serving requests.", + "example": 0, + "readOnly": true, + "type": "integer" + }, + "up": { + "description": "__Read-only__ The number of backends considered to be `UP` and healthy, and that are serving requests.", + "example": 4, + "readOnly": true, + "type": "integer" + } + }, + "readOnly": true, + "type": "object", + "x-linode-cli-display": 10 + }, + "port": { + "default": 80, + "description": "This is the port the NodeBalancer listens on for this configuration. Port numbers need to be unique across TCP, HTTP, and HTTPS configurations on a single NodeBalancer. However, ports assigned to TCP, HTTP, or HTTPS configurations can also be reused for UDP configurations. For example, Port 80 can simultaneously serve a TCP and a UDP configuration on the same NodeBalancer, but it can't be shared by both a TCP and an HTTP configuration. Although certain ports are traditionally associated with specific protocols, this isn't strictly enforced. You may configure your NodeBalancer however you find useful.", + "example": 80, + "maximum": 65535, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 2 + }, + "protocol": { + "default": "http", + "description": "The protocol the port is configured to serve, `http` in this case. Review our guide on [Available protocols](https://techdocs.akamai.com/cloud-computing/docs/available-protocols) for information on protocol features.", + "enum": [ + "http" + ], + "example": "http", + "type": "string", + "x-linode-cli-display": 3 + }, + "proxy_protocol": { + "default": "none", + "description": "__Read-only__ Not applicable for HTTP configs.", + "example": "none", "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 + "type": "string" }, - "label": { - "description": "The label for this node. This is for display purposes only.", - "example": "node54321", - "maxLength": 32, - "minLength": 3, - "pattern": "[a-zA-Z0-9-_.]{3,32}", + "ssl_cert": { + "description": "__Read-only__ Not applicable for HTTP configs.", + "example": null, + "nullable": true, + "readOnly": true, + "type": "string" + }, + "ssl_commonname": { + "description": "__Read-only__ Not applicable for HTTP configs.", + "example": "", + "readOnly": true, "type": "string", - "x-linode-cli-display": 2 + "x-linode-cli-display": 8 }, - "mode": { - "description": "The mode this NodeBalancer should use when sending traffic to this backend.\n\n- If set to `accept` this backend is accepting traffic.\n- If set to `reject` this backend will not receive traffic.\n- If set to `drain` this backend will not receive _new_ traffic, but connections already pinned to it will continue to be routed to it.\n- If set to `backup`, this backend will only receive traffic if all `accept` nodes are down.", - "enum": [ - "accept", - "reject", - "drain", - "backup" - ], - "example": "accept", + "ssl_fingerprint": { + "description": "__Read-only__ Not applicable for HTTP configs.", + "example": "", + "readOnly": true, "type": "string", - "x-linode-cli-display": 6 + "x-linode-cli-display": 9 }, - "status": { - "description": "__Read-only__ The current status of this node, based on the configured checks of its NodeBalancer Config.", + "ssl_key": { + "description": "__Read-only__ Not applicable for HTTP configs.", + "example": null, + "nullable": true, + "readOnly": true, + "type": "string" + }, + "stickiness": { + "default": "table", + "description": "Controls how session stickiness is handled on this port.\n\n- If set to `none`, connections are always assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address are routed to the same backend.\n- If set to `http_cookie`, sessions are routed to the same backend based on a cookie set by the NodeBalancer.", "enum": [ - "unknown", - "UP", - "DOWN" + "none", + "table", + "http_cookie" ], - "example": "UP", - "readOnly": true, + "example": "http_cookie", "type": "string", - "x-linode-cli-color": { - "DOWN": "red", - "UP": "green", - "default_": "white", - "unknown": "yellow" - }, - "x-linode-cli-display": 4 - }, - "weight": { - "description": "Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic.", - "example": 50, - "maximum": 255, - "minimum": 1, - "type": "integer", "x-linode-cli-display": 5 } }, - "type": "object" - }, - "type": "array" - }, - "nodes_status": { - "additionalProperties": false, - "description": "__Read-only__ A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.", - "properties": { - "down": { - "description": "__Read-only__ The number of backends considered to be \"DOWN\" and unhealthy. These are not in rotation, and not serving requests.", - "example": 0, - "readOnly": true, - "type": "integer" - }, - "up": { - "description": "__Read-only__ The number of backends considered to be \"UP\" and healthy, and that are serving requests.", - "example": 4, - "readOnly": true, - "type": "integer" + "required": [ + "nodes" + ], + "title": "HTTP", + "type": "object", + "x-akamai": { + "file-path": "schemas/node-balancer-config-http-response.yaml" } }, - "readOnly": true, - "type": "object", - "x-linode-cli-display": 10 - }, - "port": { - "default": 80, - "description": "The port for this config. Ports need to be unique across configs for each NodeBalancer. For example, you can't have two configs for port 80. While some protocols are typically assigned specific ports, there's no enforcement, and you can configure your NodeBalancer however you find useful. For example, while port 443 is generally used for HTTPS, you don't need SSL configured to have a NodeBalancer listening on port 443.", - "example": 80, - "maximum": 65535, - "minimum": 1, - "type": "integer", - "x-linode-cli-display": 2 - }, - "protocol": { - "default": "http", - "description": "The protocol this port is configured to serve.\n\n- The `http` and `tcp` protocols don't support `ssl_cert` and `ssl_key`.\n\n- For the `https` protocol, you need `ssl_cert` and `ssl_key`.\n\nReview our guide on [Available protocols](https://www.linode.com/docs/products/networking/nodebalancers/guides/protocols/) for information on protocol features.", - "enum": [ - "http", - "https", - "tcp" - ], - "example": "http", - "type": "string", - "x-linode-cli-display": 3 - }, - "proxy_protocol": { - "default": "none", - "description": "ProxyProtocol is a TCP extension that sends initial TCP connection information such as source/destination IPs and ports to backend devices. This information would be lost otherwise. Backend devices must be configured to work with ProxyProtocol if enabled.\n\n- If omitted, or set to `none`, the NodeBalancer doesn't send any auxiliary data over TCP connections. This is the default.\n- If set to `v1`, the human-readable header format (Version 1) is used. Requires `tcp` protocol.\n- If set to `v2`, the binary header format (Version 2) is used. Requires `tcp` protocol.", - "enum": [ - "none", - "v1", - "v2" - ], - "example": "none", - "type": "string" - }, - "ssl_cert": { - "description": "\nThe PEM-formatted public SSL certificate (or the combined PEM-formatted SSL certificate and Certificate Authority chain) that should be served on this NodeBalancerConfig's port.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\n[Diffie-Hellman Parameters](https://www.linode.com/docs/products/networking/nodebalancers/guides/ssl-termination/#diffie-hellman-parameters) can be included in this value to enable forward secrecy.\n\nThe contents of this field will not be shown in any responses that display the NodeBalancerConfig. Instead, `` will be printed where the field appears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig response are automatically derived from your certificate. Please refer to these fields to verify that the appropriate certificate was assigned to your NodeBalancerConfig.", - "example": "", - "format": "ssl-cert", - "nullable": true, - "type": "string" - }, - "ssl_commonname": { - "description": "__Read-only__ The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.", - "example": "www.example.com", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 8 - }, - "ssl_fingerprint": { - "description": "__Read-only__ The read-only SHA1-encoded fingerprint automatically derived from the SSL certificate assigned to this NodeBalancer configuration. Please refer to the `ssl_fingerprint` field to verify that the appropriate certificate is assigned to your NodeBalancer configuration.", - "example": "00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10:11:12:13", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 9 - }, - "ssl_key": { - "description": "The PEM-formatted private key for the SSL certificate set in the `ssl_cert` field.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\nThe contents of this field will not be shown in any responses that display\nthe NodeBalancerConfig. Instead, `` will be printed where the field\nappears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig\nresponse are automatically derived from your certificate. Please refer to these fields to\nverify that the appropriate certificate was assigned to your NodeBalancerConfig.", - "example": "", - "format": "ssl-key", - "nullable": true, - "type": "string" - }, - "stickiness": { - "default": "none", - "description": "Controls how session stickiness is handled on this port.\n- If set to `none`, connections will always be assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address will be routed to the same backend.\n- For HTTP or HTTPS clients, `http_cookie` allows sessions to be routed to the same backend based on a cookie set by the NodeBalancer.", - "enum": [ - "none", - "table", - "http_cookie" - ], - "example": "http_cookie", - "type": "string", - "x-linode-cli-display": 5 - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/node-balancer-config-rebuild-cli.yaml" - }, - "x-linode-cli-subtables": [ - "nodes" - ] - } - } - }, - "description": "Information about the NodeBalancer Config to rebuild.", - "required": true - }, - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "description": "NodeBalancer `config` options for each protocol.", - "oneOf": [ { "additionalProperties": false, - "description": "A NodeBalancer configuration defines the protocol and settings for a specific port on the NodeBalancer. These fields apply to TCP configurations.", + "description": "A NodeBalancer configuration defines the protocol and settings for a specific port on the NodeBalancer. These fields apply to HTTPS configurations.", "properties": { "algorithm": { "default": "roundrobin", - "description": "The algorithm this TCP NodeBalancer uses to route traffic to backends.", + "description": "The algorithm this HTTPS NodeBalancer uses for routing traffic to backends.", "enum": [ "roundrobin", "leastconn", "source" ], - "example": "leastconn", + "example": "roundrobin", "type": "string", "x-linode-cli-display": 4 }, "check": { "default": "none", - "description": "The type of check to perform against backends to ensure they are serving requests. This determines if backends are up or down.\n\n- If `none`, no check is performed.\n- `connection` requires only a connection to the backend to succeed.\n- `http` and `http_body` rely on the backend serving HTTP, and that the response returned matches what is expected.", + "description": "The type of check to perform against backends to ensure they are serving requests. The `check` is used to determine if backends are up or down.\n\n- If `none` no check is performed.\n- `connection` requires only a connection to the backend to succeed.\n- `http` and `http_body` rely on the backend serving HTTP, and that the response returned matches what is expected.", "enum": [ "none", "connection", @@ -90478,13 +98821,13 @@ "type": "integer" }, "check_body": { - "description": "This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down.", + "description": "Use when the active health `check` type is `http_body`. This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down.", "example": "it works", "type": "string" }, "check_interval": { "default": 5, - "description": "How often, in seconds, to check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", + "description": "The number of seconds between each check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", "example": 90, "maximum": 3600, "minimum": 2, @@ -90492,19 +98835,19 @@ }, "check_passive": { "default": true, - "description": "If `true`, any response from this backend with a `5xx` status code is enough for it to be considered unhealthy and taken out of rotation.", + "description": "If `true`, any response from this backend with a `5xx` status code will be enough for it to be considered unhealthy and taken out of rotation.", "example": true, "type": "boolean", "x-linode-cli-display": 6 }, "check_path": { - "description": "The URL path to check on each backend. If the backend does not respond to this request, it's considered to be down.", + "description": "The URL path to check on each backend. Use when the active health `check` type is `http`. If the backend doesn't respond to this request, it's considered to be down.", "example": "/test", "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", "type": "string" }, "check_timeout": { - "default": 30, + "default": 3, "description": "How long, in seconds, to wait for a check attempt before considering it failed.\n\nMust be less than `check_interval`.", "example": 10, "maximum": 30, @@ -90512,797 +98855,955 @@ "type": "integer" }, "cipher_suite": { - "description": "__Read-only__ Not applicable for `tcp` configs.", - "example": "none", - "readOnly": true, + "default": "recommended", + "description": "What ciphers to use for SSL connections served by this NodeBalancer. The `legacy` cipher is considered insecure and should only be used if necessary. For information on recommended and legacy ciphers, see [TLS cipher suites](https://techdocs.akamai.com/cloud-computing/docs/tls-ssl-termination-on-nodebalancers#tls-cipher-suites).", + "enum": [ + "recommended", + "legacy" + ], + "example": "recommended", "type": "string", "x-linode-cli-color": { "default_": "white", "legacy": "red" }, - "x-linode-cli-display": 7 - }, - "id": { - "description": "__Read-only__ This config's unique ID.", - "example": 6000, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 - }, - "nodebalancer_id": { - "description": "__Read-only__ The ID for the NodeBalancer this config belongs to.", - "example": 12345, - "readOnly": true, - "type": "integer" - }, - "nodes_status": { - "additionalProperties": false, - "description": "__Read-only__ Describes the health of the backends for this port. This data updates periodically as checks are performed against backends.", - "properties": { - "down": { - "description": "__Read-only__ The number of backends considered to be `DOWN` and unhealthy. These are not in rotation, and not serving requests.", - "example": 0, - "readOnly": true, - "type": "integer" + "x-linode-cli-display": 7 + }, + "id": { + "description": "__Read-only__ This config's unique ID.", + "example": 5000, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "nodebalancer_id": { + "description": "__Read-only__ The ID for the NodeBalancer this config belongs to.", + "example": 12345, + "readOnly": true, + "type": "integer" + }, + "nodes_status": { + "additionalProperties": false, + "description": "__Read-only__ Describes the health of the backends for this port. This data updates periodically as checks are performed against backends.", + "properties": { + "down": { + "description": "__Read-only__ The number of backends considered to be `DOWN` and unhealthy. These are not in rotation, and not serving requests.", + "example": 0, + "readOnly": true, + "type": "integer" + }, + "up": { + "description": "__Read-only__ The number of backends considered to be `UP` and healthy, and that are serving requests.", + "example": 4, + "readOnly": true, + "type": "integer" + } + }, + "readOnly": true, + "type": "object", + "x-linode-cli-display": 10 + }, + "port": { + "default": 80, + "description": "This is the port the NodeBalancer listens on for this configuration. Port numbers must be unique across TCP, HTTP, and HTTPS configurations on a single NodeBalancer. However, ports assigned to TCP, HTTP, or HTTPS configurations can also be reused for UDP configurations. For example, Port 80 can simultaneously serve a TCP and a UDP configuration on the same NodeBalancer, but it can't be shared by both a TCP and an HTTP configuration. Although certain ports are traditionally associated with specific protocols, this isn't strictly enforced, and you may configure your NodeBalancer however you find useful.", + "example": 443, + "maximum": 65535, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 2 + }, + "protocol": { + "default": "http", + "description": "The protocol the port is configured to serve, `https` in this case. Review our guide on [Available protocols](https://techdocs.akamai.com/cloud-computing/docs/available-protocols) for information on protocol features. The `https` protocol needs to be specified with both `ssl_cert` and `ssl_key`.", + "enum": [ + "https" + ], + "example": "https", + "type": "string", + "x-linode-cli-display": 3 + }, + "proxy_protocol": { + "default": "none", + "description": "__Read-only__ Not applicable for HTTPS configs.", + "example": "none", + "readOnly": true, + "type": "string" + }, + "ssl_cert": { + "description": "\nThe PEM-formatted public SSL certificate (or the combined PEM-formatted SSL certificate and Certificate Authority chain) that should be served on this NodeBalancerConfig's port.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\n[Diffie-Hellman Parameters](https://www.linode.com/docs/products/networking/nodebalancers/guides/ssl-termination/#diffie-hellman-parameters) can be included in this value to enable forward secrecy.\n\nThe contents of this field will not be shown in any responses that display the NodeBalancerConfig. Instead, `` will be printed where the field appears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig response are automatically derived from your certificate. Please refer to these fields to verify that the appropriate certificate was assigned to your NodeBalancerConfig.", + "example": "", + "format": "ssl-cert", + "nullable": true, + "type": "string" + }, + "ssl_commonname": { + "description": "__Read-only__ The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.", + "example": "www.example.com", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 8 + }, + "ssl_fingerprint": { + "description": "__Read-only__ The read-only SHA1-encoded fingerprint automatically derived from the SSL certificate assigned to this NodeBalancer configuration. Please refer to the `ssl_fingerprint` field to verify that the appropriate certificate is assigned to your NodeBalancer configuration.", + "example": "00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10:11:12:13", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 9 + }, + "ssl_key": { + "description": "The PEM-formatted private key for the SSL certificate set in the `ssl_cert` field.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\nThe contents of this field will not be shown in any responses that display\nthe NodeBalancerConfig. Instead, `` will be printed where the field\nappears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig\nresponse are automatically derived from your certificate. Please refer to these fields to\nverify that the appropriate certificate was assigned to your NodeBalancerConfig.", + "example": "", + "format": "ssl-key", + "nullable": true, + "type": "string" + }, + "stickiness": { + "default": "table", + "description": "Controls how session stickiness is handled on this port.\n\n- If set to `none`, connections will always be assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address will be routed to the same backend.\n- For HTTP or HTTPS clients, `http_cookie` allows sessions to be routed to the same backend based on a cookie set by the NodeBalancer.", + "enum": [ + "none", + "table", + "http_cookie" + ], + "example": "http_cookie", + "type": "string", + "x-linode-cli-display": 5 + } + }, + "required": [ + "nodes" + ], + "title": "HTTPS", + "type": "object", + "x-akamai": { + "file-path": "schemas/node-balancer-config-https-response.yaml" + } + } + ], + "x-akamai": { + "file-path": "schemas/node-balancer-config-response.yaml" + } + }, + "x-example": { + "x-ref": "../examples/post-rebuild-node-balancer-config-200.json" + }, + "x-linode-cli-use-schema": { + "additionalProperties": false, + "properties": { + "algorithm": { + "default": "roundrobin", + "description": "The algorithm this NodeBalancer should use to route traffic to backends.\n- If set to `roundrobin`, connections are allocated in a weighted circular order across the backends.\n- If set to `leastconn`, allocates new connections to the backend with the least connections.\n- If set to `source`, allocates the client's IP to the same backend on subsequent requests. Session `stickiness` affects this algorithm.", + "enum": [ + "roundrobin", + "leastconn", + "source" + ], + "example": "roundrobin", + "type": "string", + "x-linode-cli-display": 4 + }, + "check": { + "default": "none", + "description": "The type of check to perform against backends to ensure they're serving requests. This determines if backends are up or down.\n- If `none`, no check is performed.\n- If `connection`, requires a successful TCP handshake with a backend node.\n- If `http`, requires a 2xx or 3xx response from the backend node.\n- If `http_body`, requires the provided regular expression matches against the request's result body.", + "enum": [ + "none", + "connection", + "http", + "http_body" + ], + "example": "http_body", + "type": "string" + }, + "check_attempts": { + "default": 3, + "description": "How many times to attempt a check before considering a backend to be down.", + "example": 3, + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "check_body": { + "description": "This value must be present in the response body of the check in order for it to pass. If this value isn't present in the response body of a check request, the backend is considered to be down.", + "example": "it works", + "type": "string" + }, + "check_interval": { + "default": 31, + "description": "How often, in seconds, to check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", + "example": 90, + "type": "integer" + }, + "check_passive": { + "default": true, + "description": "If `true`, any response from this backend with a `5xx` status code will be enough for it to be considered unhealthy and taken out of rotation.", + "example": true, + "type": "boolean", + "x-linode-cli-display": 6 + }, + "check_path": { + "description": "The URL path to check on each backend. If the backend doesn't respond to this request it's considered to be down.", + "example": "/test", + "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", + "type": "string" + }, + "check_timeout": { + "default": 30, + "description": "How long, in seconds, to wait for a check attempt before considering it failed. Must be less than `check_interval`.", + "example": 10, + "maximum": 30, + "minimum": 1, + "type": "integer" + }, + "cipher_suite": { + "default": "recommended", + "description": "What ciphers to use for SSL connections served by this NodeBalancer.\n\n- The `legacy` cipher is considered insecure and should only be used if necessary.", + "enum": [ + "recommended", + "legacy" + ], + "example": "recommended", + "type": "string", + "x-linode-cli-color": { + "default_": "white", + "legacy": "red" + }, + "x-linode-cli-display": 7 + }, + "id": { + "description": "__Read-only__ This config's unique ID.", + "example": 4567, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "nodebalancer_id": { + "description": "__Read-only__ The ID for the NodeBalancer this config belongs to.", + "example": 12345, + "readOnly": true, + "type": "integer" + }, + "nodes": { + "description": "The NodeBalancer nodes that serve this configuration.", + "items": { + "additionalProperties": false, + "description": "NodeBalancer Node request object including ID.", + "properties": { + "address": { + "description": "The private IP Address where this backend can be reached. This _must_ be a private IP address.", + "example": "192.168.210.120:80", + "format": "ip", + "type": "string", + "x-linode-cli-display": 3 + }, + "id": { + "description": "__Read-only__ This node's unique ID.", + "example": 54321, + "readOnly": true, + "type": "integer", + "x-linode-cli-display": 1 + }, + "label": { + "description": "The label for this node. This is for display purposes only.", + "example": "node54321", + "maxLength": 32, + "minLength": 3, + "pattern": "[a-zA-Z0-9-_.]{3,32}", + "type": "string", + "x-linode-cli-display": 2 + }, + "mode": { + "description": "The mode this NodeBalancer should use when sending traffic to this backend.\n\n- If set to `accept` this backend is accepting traffic.\n- If set to `reject` this backend will not receive traffic.\n- If set to `drain` this backend will not receive _new_ traffic, but connections already pinned to it will continue to be routed to it.\n- If set to `backup`, this backend will only receive traffic if all `accept` nodes are down.", + "enum": [ + "accept", + "reject", + "drain", + "backup" + ], + "example": "accept", + "type": "string", + "x-linode-cli-display": 6 + }, + "status": { + "description": "__Read-only__ The current status of this node, based on the configured checks of its NodeBalancer Config.", + "enum": [ + "unknown", + "UP", + "DOWN" + ], + "example": "UP", + "readOnly": true, + "type": "string", + "x-linode-cli-color": { + "DOWN": "red", + "UP": "green", + "default_": "white", + "unknown": "yellow" }, - "up": { - "description": "__Read-only__ The number of backends considered to be `UP` and healthy, and that are serving requests.", - "example": 4, - "readOnly": true, - "type": "integer" - } + "x-linode-cli-display": 4 }, - "readOnly": true, - "type": "object", - "x-linode-cli-display": 10 - }, - "port": { - "default": 80, - "description": "This is the port the NodeBalancer listens on for this configuration. Port numbers must be unique across TCP, HTTP, and HTTPS configurations on a single NodeBalancer. However, ports assigned to TCP, HTTP, or HTTPS configurations can also be reused for UDP configurations. For example, Port 80 can simultaneously serve a TCP and a UDP configuration on the same NodeBalancer, but it can't be shared by both a TCP and an HTTP configuration. Although certain ports are traditionally associated with specific protocols, this isn't strictly enforced, and you may configure your NodeBalancer however you find useful.", - "example": 22, - "maximum": 65535, - "minimum": 1, - "type": "integer", - "x-linode-cli-display": 2 - }, - "protocol": { - "default": "http", - "description": "The protocol the port is configured to serve, `tcp` in this case. Review our guide on [Available protocols](https://techdocs.akamai.com/cloud-computing/docs/available-protocols) for information on protocol features.", - "enum": [ - "tcp" - ], - "example": "tcp", - "type": "string", - "x-linode-cli-display": 3 - }, - "proxy_protocol": { - "default": "none", - "description": "Proxy protocol is a TCP extension that sends initial TCP connection information such as source or destination IPs and ports to backend devices. Proxy protocol preserves initial TCP information that would be lost otherwise. Backend devices must be configured to work with `proxy_protocol` if enabled.\n\n- If omitted, or set to `none`, the NodeBalancer doesn't send any auxiliary data over TCP connections. This is the default.\n- If set to `v1`, the human-readable header format (Version 1) is used. Requires `tcp` protocol.\n- If set to `v2`, the binary header format (Version 2) is used. Requires `tcp` protocol.", - "enum": [ - "none", - "v1", - "v2" - ], - "example": "none", - "type": "string" - }, - "ssl_cert": { - "description": "__Read-only__ Not applicable for TCP configs.", - "example": null, - "nullable": true, - "readOnly": true, - "type": "string" - }, - "ssl_commonname": { - "description": "__Read-only__ Not applicable for TCP configs.", - "example": "", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 8 - }, - "ssl_fingerprint": { - "description": "__Read-only__ Not applicable for TCP configs.", - "example": "", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 9 - }, - "ssl_key": { - "description": "__Read-only__ Not applicable for HTTP configs.", - "example": null, - "nullable": true, - "readOnly": true, - "type": "string" + "weight": { + "description": "Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic.", + "example": 50, + "maximum": 255, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 5 + } }, - "stickiness": { - "default": "none", - "description": "__Read-only__ Controls how session stickiness is handled on this port.\n\nNot applicable to TCP configurations.", - "enum": [ - "none", - "table", - "http_cookie" - ], - "example": "none", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 5 - } + "type": "object" }, - "required": [ - "nodes" - ], - "title": "TCP", - "type": "object", - "x-akamai": { - "file-path": "schemas/node-balancer-config-tcp-response.yaml" - } + "type": "array" }, - { + "nodes_status": { "additionalProperties": false, - "description": "A NodeBalancer configuration defines the protocol and settings for a specific port on the NodeBalancer. These fields apply to HTTP configurations.", + "description": "__Read-only__ A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.", "properties": { - "algorithm": { - "default": "roundrobin", - "description": "The algorithm this HTTP NodeBalancer uses for routing traffic to backends.", - "enum": [ - "roundrobin", - "leastconn", - "source" - ], - "example": "roundrobin", - "type": "string", - "x-linode-cli-display": 4 - }, - "check": { - "default": "none", - "description": "The type of check to perform against backends to ensure they are serving requests. This determines if backends are up or down.\n\n- If `none`, no check is performed.\n- `connection` requires only a connection to the backend to succeed.\n- `http` and `http_body` rely on the backend serving HTTP, and that the response returned matches what is expected.", - "enum": [ - "none", - "connection", - "http", - "http_body" - ], - "example": "http_body", - "type": "string" - }, - "check_attempts": { - "default": 3, - "description": "How many times to attempt a check before considering a backend to be down.", - "example": 3, - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - "check_body": { - "description": "Use when the active health `check` type is `http_body`. This value needs to be in the response body of the check in order for it to pass. Otherwise the backend is considered to be down.", - "example": "it works", - "type": "string" - }, - "check_interval": { - "default": 5, - "description": "How often, in seconds, to check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", - "example": 90, - "maximum": 3600, - "minimum": 2, - "type": "integer" - }, - "check_passive": { - "default": true, - "description": "If `true`, any response from this backend with a `5xx` status code will be enough for it to be considered unhealthy and taken out of rotation.", - "example": true, - "type": "boolean", - "x-linode-cli-display": 6 - }, - "check_path": { - "description": "The URL path to check on each backend. Use when the active health `check` type is `http`. If the backend doesn't respond to this request, it's considered to be down.", - "example": "/test", - "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", - "type": "string" - }, - "check_timeout": { - "default": 3, - "description": "How long, in seconds, to wait for a check attempt before considering it failed.\n\nMust be less than `check_interval`.", - "example": 10, - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - "cipher_suite": { - "description": "__Read-only__ Not applicable for `http` configs.", - "example": "none", - "readOnly": true, - "type": "string", - "x-linode-cli-color": { - "default_": "white", - "legacy": "red" - }, - "x-linode-cli-display": 7 - }, - "id": { - "description": "__Read-only__ This config's unique ID.", - "example": 4000, + "down": { + "description": "__Read-only__ The number of backends considered to be \"DOWN\" and unhealthy. These are not in rotation, and not serving requests.", + "example": 0, "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 + "type": "integer" }, - "nodebalancer_id": { - "description": "__Read-only__ Identifies the NodeBalancer this config belongs to.", - "example": 12345, + "up": { + "description": "__Read-only__ The number of backends considered to be \"UP\" and healthy, and that are serving requests.", + "example": 4, "readOnly": true, "type": "integer" + } + }, + "readOnly": true, + "type": "object", + "x-linode-cli-display": 10 + }, + "port": { + "default": 80, + "description": "The port for this config. Ports need to be unique across configs for each NodeBalancer. For example, you can't have two configs for port 80. While some protocols are typically assigned specific ports, there's no enforcement, and you can configure your NodeBalancer however you find useful. For example, while port 443 is generally used for HTTPS, you don't need SSL configured to have a NodeBalancer listening on port 443.", + "example": 80, + "maximum": 65535, + "minimum": 1, + "type": "integer", + "x-linode-cli-display": 2 + }, + "protocol": { + "default": "http", + "description": "The protocol this port is configured to serve.\n\n- The `http` and `tcp` protocols don't support `ssl_cert` and `ssl_key`.\n\n- For the `https` protocol, you need `ssl_cert` and `ssl_key`.\n\nReview our guide on [Available protocols](https://www.linode.com/docs/products/networking/nodebalancers/guides/protocols/) for information on protocol features.", + "enum": [ + "http", + "https", + "tcp" + ], + "example": "http", + "type": "string", + "x-linode-cli-display": 3 + }, + "proxy_protocol": { + "default": "none", + "description": "ProxyProtocol is a TCP extension that sends initial TCP connection information such as source/destination IPs and ports to backend devices. This information would be lost otherwise. Backend devices must be configured to work with ProxyProtocol if enabled.\n\n- If omitted, or set to `none`, the NodeBalancer doesn't send any auxiliary data over TCP connections. This is the default.\n- If set to `v1`, the human-readable header format (Version 1) is used. Requires `tcp` protocol.\n- If set to `v2`, the binary header format (Version 2) is used. Requires `tcp` protocol.", + "enum": [ + "none", + "v1", + "v2" + ], + "example": "none", + "type": "string" + }, + "ssl_cert": { + "description": "\nThe PEM-formatted public SSL certificate (or the combined PEM-formatted SSL certificate and Certificate Authority chain) that should be served on this NodeBalancerConfig's port.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\n[Diffie-Hellman Parameters](https://www.linode.com/docs/products/networking/nodebalancers/guides/ssl-termination/#diffie-hellman-parameters) can be included in this value to enable forward secrecy.\n\nThe contents of this field will not be shown in any responses that display the NodeBalancerConfig. Instead, `` will be printed where the field appears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig response are automatically derived from your certificate. Please refer to these fields to verify that the appropriate certificate was assigned to your NodeBalancerConfig.", + "example": "", + "format": "ssl-cert", + "nullable": true, + "type": "string" + }, + "ssl_commonname": { + "description": "__Read-only__ The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.", + "example": "www.example.com", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 8 + }, + "ssl_fingerprint": { + "description": "__Read-only__ The read-only SHA1-encoded fingerprint automatically derived from the SSL certificate assigned to this NodeBalancer configuration. Please refer to the `ssl_fingerprint` field to verify that the appropriate certificate is assigned to your NodeBalancer configuration.", + "example": "00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10:11:12:13", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 9 + }, + "ssl_key": { + "description": "The PEM-formatted private key for the SSL certificate set in the `ssl_cert` field.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\nThe contents of this field will not be shown in any responses that display\nthe NodeBalancerConfig. Instead, `` will be printed where the field\nappears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig\nresponse are automatically derived from your certificate. Please refer to these fields to\nverify that the appropriate certificate was assigned to your NodeBalancerConfig.", + "example": "", + "format": "ssl-key", + "nullable": true, + "type": "string" + }, + "stickiness": { + "default": "none", + "description": "Controls how session stickiness is handled on this port.\n- If set to `none`, connections will always be assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address will be routed to the same backend.\n- For HTTP or HTTPS clients, `http_cookie` allows sessions to be routed to the same backend based on a cookie set by the NodeBalancer.", + "enum": [ + "none", + "table", + "http_cookie" + ], + "example": "http_cookie", + "type": "string", + "x-linode-cli-display": 5 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/node-balancer-config-rebuild-cli.yaml" + }, + "x-linode-cli-subtables": [ + "nodes" + ] + } + } + }, + "description": "NodeBalancer created successfully." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } }, - "nodes_status": { - "additionalProperties": false, - "description": "__Read-only__ Describes the health of the backends for this port. This data updates periodically as checks are performed against backends.", - "properties": { - "down": { - "description": "__Read-only__ The number of backends considered to be `DOWN` and unhealthy. These are not in rotation, and not serving requests.", - "example": 0, - "readOnly": true, - "type": "integer" + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "nodebalancers:read_write" + ] + } + ], + "summary": "Rebuild a config", + "tags": [ + "Configurations" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli nodebalancers config-rebuild \\\n 12345 4567 \\\n --port 443 \\\n --protocol https \\\n --algorithm roundrobin \\\n --stickiness http_cookie \\\n --check http_body \\\n --check_interval 90 \\\n --check_timeout 10 \\\n --check_attempts 3 \\\n --check_path \"/test\" \\\n --check_body \"it works\" \\\n --check_passive true \\\n --proxy_protocol \"none\" \\\n --ssl_cert \"-----BEGIN CERTIFICATE-----\n CERTIFICATE_INFORMATION\n -----END CERTIFICATE-----\" \\\n --ssl_key \"-----BEGIN PRIVATE KEY-----\n PRIVATE_KEY_INFORMATION\n -----END PRIVATE KEY-----\" \\\n --cipher_suite recommended \\\n --nodes.label \"node1\" --nodes.address \"192.168.210.120:80\" --nodes.mode \"accept\" --nodes.weight 50 \\\n --nodes '[{\"address\":\"192.168.210.122:80\",\"label\":\"node2\",\"weight\":50,\"mode\":\"accept\"}]'", + "title": "CLI: HTTPS", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "linode-cli nodebalancers config-rebuild \\\n 12345 4567 \\\n --port 80 \\\n --protocol tcp \\\n --algorithm roundrobin \\\n --stickiness none \\\n --proxy_protocol \"v2\"\n --nodes.label \"node1\" --nodes.address \"192.168.210.120:80\" --nodes.mode \"accept\" --nodes.weight 50 \\\n --nodes '[{\"address\":\"192.168.210.122:80\",\"label\":\"node2\",\"weight\":50,\"mode\":\"accept\"}]'", + "title": "CLI: TCP", + "url": "https://www.linode.com/docs/products/tools/cli/get-started/" + }, + { + "syntax": "linode-cli nodebalancers config-rebuild \\\n 12345 4567 \\\n --port 440 \\\n --protocol http \\\n --algorithm roundrobin \\\n --stickiness none \\\n --check http_body \\\n --check_interval 90 \\\n --check_timeout 10 \\\n --check_attempts 3 \\\n --check_path \"/test\" \\\n --check_body \"it works\" \\\n --nodes.label \"node1\" --nodes.address \"192.168.210.120:80\" --nodes.mode \"accept\" --nodes.weight 50 \\\n --nodes '[{\"address\":\"192.168.210.122:80\",\"label\":\"node2\",\"weight\":50,\"mode\":\"accept\"}]'", + "title": "CLI: HTTP", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "nodebalancers:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "config-rebuild", + "x-linode-grant": "add_nodebalancers" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The ID of the NodeBalancer.", + "example": "{{nodeBalancerId}}", + "in": "path", + "name": "nodeBalancerId", + "required": true, + "schema": { + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/node-balancer-id.yaml" + } + }, + { + "description": "The ID of the Config to access.", + "example": "{{configId}}", + "in": "path", + "name": "configId", + "required": true, + "schema": { + "example": 521, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/config-id.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/config-rebuild.yaml", + "path-info": "/{apiVersion}/nodebalancers/{nodeBalancerId}/configs/{configId}/rebuild" + }, + "x-linode-cli-command": "nodebalancers" + }, + "/{apiVersion}/nodebalancers/{nodeBalancerId}/firewalls": { + "get": { + "description": "View information for Firewalls assigned to this NodeBalancer.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli nodebalancers firewalls $nodeBalancerId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n nodebalancers:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-node-balancer-firewalls" + }, + "operationId": "get-node-balancer-firewalls", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "created": "2018-01-01T00:01:01", + "id": 123, + "label": "firewall123", + "rules": { + "inbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "192.0.2.0/24", + "192.0.2.167/24" + ], + "ipv6": [ + "2001:DB8::/128" + ] + }, + "description": "An example firewall rule description.", + "label": "firewallrule123", + "ports": "22-24, 80, 443", + "protocol": "TCP" + } + ], + "inbound_policy": "DROP", + "outbound": [ + { + "action": "ACCEPT", + "addresses": { + "ipv4": [ + "192.0.2.0/24", + "192.0.2.1/24" + ], + "ipv6": [ + "2001:DB8::/128" + ] }, - "up": { - "description": "__Read-only__ The number of backends considered to be `UP` and healthy, and that are serving requests.", - "example": 4, - "readOnly": true, - "type": "integer" - } - }, - "readOnly": true, - "type": "object", - "x-linode-cli-display": 10 - }, - "port": { - "default": 80, - "description": "This is the port the NodeBalancer listens on for this configuration. Port numbers need to be unique across TCP, HTTP, and HTTPS configurations on a single NodeBalancer. However, ports assigned to TCP, HTTP, or HTTPS configurations can also be reused for UDP configurations. For example, Port 80 can simultaneously serve a TCP and a UDP configuration on the same NodeBalancer, but it can't be shared by both a TCP and an HTTP configuration. Although certain ports are traditionally associated with specific protocols, this isn't strictly enforced. You may configure your NodeBalancer however you find useful.", - "example": 80, - "maximum": 65535, - "minimum": 1, - "type": "integer", - "x-linode-cli-display": 2 - }, - "protocol": { - "default": "http", - "description": "The protocol the port is configured to serve, `http` in this case. Review our guide on [Available protocols](https://techdocs.akamai.com/cloud-computing/docs/available-protocols) for information on protocol features.", - "enum": [ - "http" - ], - "example": "http", - "type": "string", - "x-linode-cli-display": 3 - }, - "proxy_protocol": { - "default": "none", - "description": "__Read-only__ Not applicable for HTTP configs.", - "example": "none", - "readOnly": true, - "type": "string" - }, - "ssl_cert": { - "description": "__Read-only__ Not applicable for HTTP configs.", - "example": null, - "nullable": true, - "readOnly": true, - "type": "string" - }, - "ssl_commonname": { - "description": "__Read-only__ Not applicable for HTTP configs.", - "example": "", + "description": "An example firewall rule description.", + "label": "firewallrule123", + "ports": "22-24, 80, 443", + "protocol": "TCP" + } + ], + "outbound_policy": "DROP" + }, + "status": "enabled", + "tags": [ + "example tag", + "another example" + ], + "updated": "2018-01-02T00:01:01" + } + ], + "page": 1, + "pages": 1, + "results": 1 + }, + "schema": { + "allOf": [ + { + "additionalProperties": false, + "description": "An envelope for paginated response. When accessing a collection through a GET endpoint, the results are wrapped in this envelope which includes metadata about those results. Results are presented within a `data` array. See [Pagination](https://techdocs.akamai.com/linode-api/reference/pagination) for more information.", + "properties": { + "page": { + "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, "readOnly": true, - "type": "string", - "x-linode-cli-display": 8 + "type": "integer" }, - "ssl_fingerprint": { - "description": "__Read-only__ Not applicable for HTTP configs.", - "example": "", + "pages": { + "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, "readOnly": true, - "type": "string", - "x-linode-cli-display": 9 + "type": "integer" }, - "ssl_key": { - "description": "__Read-only__ Not applicable for HTTP configs.", - "example": null, - "nullable": true, + "results": { + "description": "__Read-only__ The total number of results.", + "example": 1, "readOnly": true, - "type": "string" - }, - "stickiness": { - "default": "table", - "description": "Controls how session stickiness is handled on this port.\n\n- If set to `none`, connections are always assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address are routed to the same backend.\n- If set to `http_cookie`, sessions are routed to the same backend based on a cookie set by the NodeBalancer.", - "enum": [ - "none", - "table", - "http_cookie" - ], - "example": "http_cookie", - "type": "string", - "x-linode-cli-display": 5 + "type": "integer" } }, - "required": [ - "nodes" - ], - "title": "HTTP", "type": "object", "x-akamai": { - "file-path": "schemas/node-balancer-config-http-response.yaml" + "file-path": "schemas/pagination-envelope.yaml" } }, { - "additionalProperties": false, - "description": "A NodeBalancer configuration defines the protocol and settings for a specific port on the NodeBalancer. These fields apply to HTTPS configurations.", "properties": { - "algorithm": { - "default": "roundrobin", - "description": "The algorithm this HTTPS NodeBalancer uses for routing traffic to backends.", - "enum": [ - "roundrobin", - "leastconn", - "source" - ], - "example": "roundrobin", - "type": "string", - "x-linode-cli-display": 4 - }, - "check": { - "default": "none", - "description": "The type of check to perform against backends to ensure they are serving requests. The `check` is used to determine if backends are up or down.\n\n- If `none` no check is performed.\n- `connection` requires only a connection to the backend to succeed.\n- `http` and `http_body` rely on the backend serving HTTP, and that the response returned matches what is expected.", - "enum": [ - "none", - "connection", - "http", - "http_body" - ], - "example": "http_body", - "type": "string" - }, - "check_attempts": { - "default": 3, - "description": "How many times to attempt a check before considering a backend to be down.", - "example": 3, - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - "check_body": { - "description": "Use when the active health `check` type is `http_body`. This value must be present in the response body of the check in order for it to pass. If this value is not present in the response body of a check request, the backend is considered to be down.", - "example": "it works", - "type": "string" - }, - "check_interval": { - "default": 5, - "description": "The number of seconds between each check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", - "example": 90, - "maximum": 3600, - "minimum": 2, - "type": "integer" - }, - "check_passive": { - "default": true, - "description": "If `true`, any response from this backend with a `5xx` status code will be enough for it to be considered unhealthy and taken out of rotation.", - "example": true, - "type": "boolean", - "x-linode-cli-display": 6 - }, - "check_path": { - "description": "The URL path to check on each backend. Use when the active health `check` type is `http`. If the backend doesn't respond to this request, it's considered to be down.", - "example": "/test", - "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", - "type": "string" - }, - "check_timeout": { - "default": 3, - "description": "How long, in seconds, to wait for a check attempt before considering it failed.\n\nMust be less than `check_interval`.", - "example": 10, - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - "cipher_suite": { - "default": "recommended", - "description": "What ciphers to use for SSL connections served by this NodeBalancer. The `legacy` cipher is considered insecure and should only be used if necessary. For information on recommended and legacy ciphers, see [TLS cipher suites](https://techdocs.akamai.com/cloud-computing/docs/tls-ssl-termination-on-nodebalancers#tls-cipher-suites).", - "enum": [ - "recommended", - "legacy" - ], - "example": "recommended", - "type": "string", - "x-linode-cli-color": { - "default_": "white", - "legacy": "red" - }, - "x-linode-cli-display": 7 - }, - "id": { - "description": "__Read-only__ This config's unique ID.", - "example": 5000, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 - }, - "nodebalancer_id": { - "description": "__Read-only__ The ID for the NodeBalancer this config belongs to.", - "example": 12345, - "readOnly": true, - "type": "integer" - }, - "nodes_status": { - "additionalProperties": false, - "description": "__Read-only__ Describes the health of the backends for this port. This data updates periodically as checks are performed against backends.", - "properties": { - "down": { - "description": "__Read-only__ The number of backends considered to be `DOWN` and unhealthy. These are not in rotation, and not serving requests.", - "example": 0, - "readOnly": true, - "type": "integer" + "data": { + "items": { + "additionalProperties": false, + "description": "A resource that controls incoming and outgoing network traffic to a compute service. Only one enabled Firewall can be attached to a particular service at any given time. [Create a firewall device](https://techdocs.akamai.com/linode-api/reference/post-firewall-device) to assign a Firewall to a service. Currently, Firewalls can assigned to Linode compute instances and NodeBalancers.", + "properties": { + "created": { + "description": "__Filterable__, __Read-only__ When this Firewall was created.", + "example": "2018-01-01T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 4, + "x-linode-filterable": true + }, + "id": { + "description": "__Filterable__, __Read-only__ The Firewall's unique ID.", + "example": 123, + "readOnly": true, + "type": "integer", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 1, + "x-linode-filterable": true + }, + "label": { + "description": "__Filterable__ The Firewall's label, for display purposes only.\n\nFirewall labels have the following constraints:\n\n - Must begin and end with an alphanumeric character.\n - May only consist of alphanumeric characters, hyphens (`-`), underscores (`_`) or periods (`.`).\n - Cannot have two hyphens (`--`), underscores (`__`) or periods (`..`) in a row.\n - Must be between 3 and 32 characters.\n - Must be unique.", + "example": "firewall123", + "maxLength": 32, + "minLength": 3, + "pattern": "^[a-zA-Z]((?!--|__|\\.\\.)[a-zA-Z0-9-_.])+$", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "rules": { + "additionalProperties": false, + "description": "The inbound and outbound access rules to apply to the Firewall.\n\nA Firewall may have up to 25 rules across its inbound and outbound rulesets.\n\nMultiple rules are applied in order. If two rules conflict, the first rule takes precedence. For example, if the first rule accepts inbound traffic from an address, and the second rule drops inbound traffic the same address, the first rule applies and inbound traffic from that address is accepted.", + "properties": { + "fingerprint": { + "description": "__Read-only__ The fingerprint is a 32-bit hash. It represents the firewall rules as an 8 character hex string. You can use `fingerprint` to compare rule versions.", + "example": "997dd135", + "readOnly": true, + "type": "string" + }, + "inbound": { + "description": "The inbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "inbound_policy": { + "description": "The default behavior for inbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `inbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "outbound": { + "description": "The outbound rules for the firewall, as a JSON array.", + "items": { + "additionalProperties": false, + "description": "One of a Firewall's inbound or outbound access rules. The `ports` property can be used to allow traffic on a comma-separated list of different ports.", + "properties": { + "action": { + "description": "Controls whether traffic is accepted or dropped by this rule. Overrides the Firewall's `inbound_policy` if this is an inbound rule, or the `outbound_policy` if this is an outbound rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "ACCEPT", + "type": "string" + }, + "addresses": { + "additionalProperties": false, + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "properties": { + "ipv4": { + "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", + "example": [ + "192.0.2.0/24", + "198.51.100.2/32" + ], + "items": { + "type": "string" + }, + "type": "array" + }, + "ipv6": { + "description": "A list of IPv6 addresses or networks. Addresses must be in IP/mask format and must not include zone_id notation as described in [RFC 4007](https://www.rfc-editor.org/rfc/rfc4007). Must not be an empty list.\n\nIf `::/0` is included in this list, all IPv6 addresses are affected by this rule.", + "example": [ + "2001:DB8::/128" + ], + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "description": { + "description": "Used to describe this rule. For display purposes only.", + "example": "An example firewall rule description.", + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "label": { + "description": "Used to identify this rule. For display purposes only.", + "example": "firewallrule123", + "maxLength": 32, + "minLength": 3, + "type": "string" + }, + "ports": { + "description": "A string representing the port or ports affected by this rule:\n\n- The string may be a single port, a range of ports, or a comma-separated list of single ports and port ranges. A space is permitted following each comma.\n- A range of ports is inclusive of the start and end values for the range. The end value of the range must be greater than the start value.\n- Ports must be within 1 and 65535, and may not contain any leading zeroes. For example, port `080` is not allowed.\n- The ports string can have up to 15 _pieces_, where a single port is treated as one piece, and a port range is treated as two pieces. For example, the string \"22-24, 80, 443\" has four pieces.\n- If no ports are configured, all ports are affected.\n- Only allowed for the TCP and UDP protocols. Ports are not allowed for the ICMP and IPENCAP protocols.", + "example": "22-24, 80, 443", + "nullable": true, + "type": "string" + }, + "protocol": { + "description": "The type of network traffic affected by this rule.", + "enum": [ + "TCP", + "UDP", + "ICMP", + "IPENCAP" + ], + "example": "TCP", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-rule-config.yaml" + } + }, + "type": "array", + "x-linode-cli-format": "json" + }, + "outbound_policy": { + "description": "The default behavior for outbound traffic. This setting can be overridden by [updating](https://techdocs.akamai.com/linode-api/reference/put-firewall-rules) the `outbound.action` property of the Firewall Rule.", + "enum": [ + "ACCEPT", + "DROP" + ], + "example": "DROP", + "type": "string" + }, + "version": { + "description": "__Read-only__ The firewall's rule version. The first version is `1`. The version number is incremented when the firewall's rules change.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, + "type": "object" + }, + "status": { + "description": "__Read-only__ The status of this Firewall.\n\n - When a Firewall is first created its status is `enabled`.\n - Run the [Update a firewall](https://techdocs.akamai.com/linode-api/reference/put-firewall) operation to set a Firewall's status to `enabled` or `disabled`.\n - Run the [Delete a firewall](https://techdocs.akamai.com/linode-api/reference/delete-firewall) operation to delete a Firewall.", + "enum": [ + "enabled", + "disabled", + "deleted" + ], + "example": "enabled", + "readOnly": true, + "type": "string", + "x-linode-cli-display": 3 + }, + "tags": { + "description": "__Filterable__ An array of tags applied to this object. Tags are for organizational purposes only.", + "example": [ + "example tag", + "another example" + ], + "items": { + "type": "string" + }, + "type": "array", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-filterable": true + }, + "updated": { + "description": "__Filterable__, __Read-only__ When this Firewall was last updated.", + "example": "2018-01-02T00:01:01", + "format": "date-time", + "readOnly": true, + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 5, + "x-linode-filterable": true + } }, - "up": { - "description": "__Read-only__ The number of backends considered to be `UP` and healthy, and that are serving requests.", - "example": 4, - "readOnly": true, - "type": "integer" + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall.yaml" } }, - "readOnly": true, - "type": "object", - "x-linode-cli-display": 10 - }, - "port": { - "default": 80, - "description": "This is the port the NodeBalancer listens on for this configuration. Port numbers must be unique across TCP, HTTP, and HTTPS configurations on a single NodeBalancer. However, ports assigned to TCP, HTTP, or HTTPS configurations can also be reused for UDP configurations. For example, Port 80 can simultaneously serve a TCP and a UDP configuration on the same NodeBalancer, but it can't be shared by both a TCP and an HTTP configuration. Although certain ports are traditionally associated with specific protocols, this isn't strictly enforced, and you may configure your NodeBalancer however you find useful.", - "example": 443, - "maximum": 65535, - "minimum": 1, - "type": "integer", - "x-linode-cli-display": 2 - }, - "protocol": { - "default": "http", - "description": "The protocol the port is configured to serve, `https` in this case. Review our guide on [Available protocols](https://techdocs.akamai.com/cloud-computing/docs/available-protocols) for information on protocol features. The `https` protocol needs to be specified with both `ssl_cert` and `ssl_key`.", - "enum": [ - "https" - ], - "example": "https", - "type": "string", - "x-linode-cli-display": 3 - }, - "proxy_protocol": { - "default": "none", - "description": "__Read-only__ Not applicable for HTTPS configs.", - "example": "none", - "readOnly": true, - "type": "string" - }, - "ssl_cert": { - "description": "\nThe PEM-formatted public SSL certificate (or the combined PEM-formatted SSL certificate and Certificate Authority chain) that should be served on this NodeBalancerConfig's port.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\n[Diffie-Hellman Parameters](https://www.linode.com/docs/products/networking/nodebalancers/guides/ssl-termination/#diffie-hellman-parameters) can be included in this value to enable forward secrecy.\n\nThe contents of this field will not be shown in any responses that display the NodeBalancerConfig. Instead, `` will be printed where the field appears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig response are automatically derived from your certificate. Please refer to these fields to verify that the appropriate certificate was assigned to your NodeBalancerConfig.", - "example": "", - "format": "ssl-cert", - "nullable": true, - "type": "string" - }, - "ssl_commonname": { - "description": "__Read-only__ The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.", - "example": "www.example.com", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 8 - }, - "ssl_fingerprint": { - "description": "__Read-only__ The read-only SHA1-encoded fingerprint automatically derived from the SSL certificate assigned to this NodeBalancer configuration. Please refer to the `ssl_fingerprint` field to verify that the appropriate certificate is assigned to your NodeBalancer configuration.", - "example": "00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10:11:12:13", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 9 - }, - "ssl_key": { - "description": "The PEM-formatted private key for the SSL certificate set in the `ssl_cert` field.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\nThe contents of this field will not be shown in any responses that display\nthe NodeBalancerConfig. Instead, `` will be printed where the field\nappears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig\nresponse are automatically derived from your certificate. Please refer to these fields to\nverify that the appropriate certificate was assigned to your NodeBalancerConfig.", - "example": "", - "format": "ssl-key", - "nullable": true, - "type": "string" - }, - "stickiness": { - "default": "table", - "description": "Controls how session stickiness is handled on this port.\n\n- If set to `none`, connections will always be assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address will be routed to the same backend.\n- For HTTP or HTTPS clients, `http_cookie` allows sessions to be routed to the same backend based on a cookie set by the NodeBalancer.", - "enum": [ - "none", - "table", - "http_cookie" - ], - "example": "http_cookie", - "type": "string", - "x-linode-cli-display": 5 + "type": "array" } }, - "required": [ - "nodes" - ], - "title": "HTTPS", - "type": "object", - "x-akamai": { - "file-path": "schemas/node-balancer-config-https-response.yaml" - } + "type": "object" } ], "x-akamai": { - "file-path": "schemas/node-balancer-config-response.yaml" + "file-path": "schemas/added-get-node-balancer-firewalls-200.yaml" } - }, - "x-example": { - "x-ref": "../examples/post-rebuild-node-balancer-config-200.json" - }, - "x-linode-cli-use-schema": { - "additionalProperties": false, - "properties": { - "algorithm": { - "default": "roundrobin", - "description": "The algorithm this NodeBalancer should use to route traffic to backends.\n- If set to `roundrobin`, connections are allocated in a weighted circular order across the backends.\n- If set to `leastconn`, allocates new connections to the backend with the least connections.\n- If set to `source`, allocates the client's IP to the same backend on subsequent requests. Session `stickiness` affects this algorithm.", - "enum": [ - "roundrobin", - "leastconn", - "source" - ], - "example": "roundrobin", - "type": "string", - "x-linode-cli-display": 4 - }, - "check": { - "default": "none", - "description": "The type of check to perform against backends to ensure they're serving requests. This determines if backends are up or down.\n- If `none`, no check is performed.\n- If `connection`, requires a successful TCP handshake with a backend node.\n- If `http`, requires a 2xx or 3xx response from the backend node.\n- If `http_body`, requires the provided regular expression matches against the request's result body.", - "enum": [ - "none", - "connection", - "http", - "http_body" - ], - "example": "http_body", - "type": "string" - }, - "check_attempts": { - "default": 3, - "description": "How many times to attempt a check before considering a backend to be down.", - "example": 3, - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - "check_body": { - "description": "This value must be present in the response body of the check in order for it to pass. If this value isn't present in the response body of a check request, the backend is considered to be down.", - "example": "it works", - "type": "string" - }, - "check_interval": { - "default": 31, - "description": "How often, in seconds, to check that backends are up and serving requests.\n\nMust be greater than `check_timeout`.", - "example": 90, - "type": "integer" - }, - "check_passive": { - "default": true, - "description": "If `true`, any response from this backend with a `5xx` status code will be enough for it to be considered unhealthy and taken out of rotation.", - "example": true, - "type": "boolean", - "x-linode-cli-display": 6 - }, - "check_path": { - "description": "The URL path to check on each backend. If the backend doesn't respond to this request it's considered to be down.", - "example": "/test", - "pattern": "^[a-zA-Z0-9\\/\\-%?&=.]*$", - "type": "string" - }, - "check_timeout": { - "default": 30, - "description": "How long, in seconds, to wait for a check attempt before considering it failed. Must be less than `check_interval`.", - "example": 10, - "maximum": 30, - "minimum": 1, - "type": "integer" - }, - "cipher_suite": { - "default": "recommended", - "description": "What ciphers to use for SSL connections served by this NodeBalancer.\n\n- The `legacy` cipher is considered insecure and should only be used if necessary.", - "enum": [ - "recommended", - "legacy" - ], - "example": "recommended", - "type": "string", - "x-linode-cli-color": { - "default_": "white", - "legacy": "red" - }, - "x-linode-cli-display": 7 - }, - "id": { - "description": "__Read-only__ This config's unique ID.", - "example": 4567, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 - }, - "nodebalancer_id": { - "description": "__Read-only__ The ID for the NodeBalancer this config belongs to.", - "example": 12345, - "readOnly": true, - "type": "integer" - }, - "nodes": { - "description": "The NodeBalancer nodes that serve this configuration.", - "items": { - "additionalProperties": false, - "description": "NodeBalancer Node request object including ID.", - "properties": { - "address": { - "description": "The private IP Address where this backend can be reached. This _must_ be a private IP address.", - "example": "192.168.210.120:80", - "format": "ip", - "type": "string", - "x-linode-cli-display": 3 - }, - "id": { - "description": "__Read-only__ This node's unique ID.", - "example": 54321, - "readOnly": true, - "type": "integer", - "x-linode-cli-display": 1 - }, - "label": { - "description": "The label for this node. This is for display purposes only.", - "example": "node54321", - "maxLength": 32, - "minLength": 3, - "pattern": "[a-zA-Z0-9-_.]{3,32}", - "type": "string", - "x-linode-cli-display": 2 - }, - "mode": { - "description": "The mode this NodeBalancer should use when sending traffic to this backend.\n\n- If set to `accept` this backend is accepting traffic.\n- If set to `reject` this backend will not receive traffic.\n- If set to `drain` this backend will not receive _new_ traffic, but connections already pinned to it will continue to be routed to it.\n- If set to `backup`, this backend will only receive traffic if all `accept` nodes are down.", - "enum": [ - "accept", - "reject", - "drain", - "backup" - ], - "example": "accept", - "type": "string", - "x-linode-cli-display": 6 - }, - "status": { - "description": "__Read-only__ The current status of this node, based on the configured checks of its NodeBalancer Config.", - "enum": [ - "unknown", - "UP", - "DOWN" - ], - "example": "UP", - "readOnly": true, - "type": "string", - "x-linode-cli-color": { - "DOWN": "red", - "UP": "green", - "default_": "white", - "unknown": "yellow" - }, - "x-linode-cli-display": 4 - }, - "weight": { - "description": "Used when picking a backend to serve a request and is not pinned to a single backend yet. Nodes with a higher weight will receive more traffic.", - "example": 50, - "maximum": 255, - "minimum": 1, - "type": "integer", - "x-linode-cli-display": 5 - } - }, - "type": "object" - }, - "type": "array" - }, - "nodes_status": { - "additionalProperties": false, - "description": "__Read-only__ A structure containing information about the health of the backends for this port. This information is updated periodically as checks are performed against backends.", - "properties": { - "down": { - "description": "__Read-only__ The number of backends considered to be \"DOWN\" and unhealthy. These are not in rotation, and not serving requests.", - "example": 0, - "readOnly": true, - "type": "integer" - }, - "up": { - "description": "__Read-only__ The number of backends considered to be \"UP\" and healthy, and that are serving requests.", - "example": 4, - "readOnly": true, - "type": "integer" - } - }, - "readOnly": true, - "type": "object", - "x-linode-cli-display": 10 - }, - "port": { - "default": 80, - "description": "The port for this config. Ports need to be unique across configs for each NodeBalancer. For example, you can't have two configs for port 80. While some protocols are typically assigned specific ports, there's no enforcement, and you can configure your NodeBalancer however you find useful. For example, while port 443 is generally used for HTTPS, you don't need SSL configured to have a NodeBalancer listening on port 443.", - "example": 80, - "maximum": 65535, - "minimum": 1, - "type": "integer", - "x-linode-cli-display": 2 - }, - "protocol": { - "default": "http", - "description": "The protocol this port is configured to serve.\n\n- The `http` and `tcp` protocols don't support `ssl_cert` and `ssl_key`.\n\n- For the `https` protocol, you need `ssl_cert` and `ssl_key`.\n\nReview our guide on [Available protocols](https://www.linode.com/docs/products/networking/nodebalancers/guides/protocols/) for information on protocol features.", - "enum": [ - "http", - "https", - "tcp" - ], - "example": "http", - "type": "string", - "x-linode-cli-display": 3 - }, - "proxy_protocol": { - "default": "none", - "description": "ProxyProtocol is a TCP extension that sends initial TCP connection information such as source/destination IPs and ports to backend devices. This information would be lost otherwise. Backend devices must be configured to work with ProxyProtocol if enabled.\n\n- If omitted, or set to `none`, the NodeBalancer doesn't send any auxiliary data over TCP connections. This is the default.\n- If set to `v1`, the human-readable header format (Version 1) is used. Requires `tcp` protocol.\n- If set to `v2`, the binary header format (Version 2) is used. Requires `tcp` protocol.", - "enum": [ - "none", - "v1", - "v2" - ], - "example": "none", - "type": "string" - }, - "ssl_cert": { - "description": "\nThe PEM-formatted public SSL certificate (or the combined PEM-formatted SSL certificate and Certificate Authority chain) that should be served on this NodeBalancerConfig's port.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\n[Diffie-Hellman Parameters](https://www.linode.com/docs/products/networking/nodebalancers/guides/ssl-termination/#diffie-hellman-parameters) can be included in this value to enable forward secrecy.\n\nThe contents of this field will not be shown in any responses that display the NodeBalancerConfig. Instead, `` will be printed where the field appears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig response are automatically derived from your certificate. Please refer to these fields to verify that the appropriate certificate was assigned to your NodeBalancerConfig.", - "example": "", - "format": "ssl-cert", - "nullable": true, - "type": "string" - }, - "ssl_commonname": { - "description": "__Read-only__ The read-only common name automatically derived from the SSL certificate assigned to this NodeBalancerConfig. Please refer to this field to verify that the appropriate certificate is assigned to your NodeBalancerConfig.", - "example": "www.example.com", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 8 - }, - "ssl_fingerprint": { - "description": "__Read-only__ The read-only SHA1-encoded fingerprint automatically derived from the SSL certificate assigned to this NodeBalancer configuration. Please refer to the `ssl_fingerprint` field to verify that the appropriate certificate is assigned to your NodeBalancer configuration.", - "example": "00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F:10:11:12:13", - "readOnly": true, - "type": "string", - "x-linode-cli-display": 9 - }, - "ssl_key": { - "description": "The PEM-formatted private key for the SSL certificate set in the `ssl_cert` field.\n\nLine breaks must be represented as `\\n` in the string for requests (but not when using the Linode CLI).\n\nThe contents of this field will not be shown in any responses that display\nthe NodeBalancerConfig. Instead, `` will be printed where the field\nappears.\n\nThe read-only `ssl_commonname` and `ssl_fingerprint` fields in a NodeBalancerConfig\nresponse are automatically derived from your certificate. Please refer to these fields to\nverify that the appropriate certificate was assigned to your NodeBalancerConfig.", - "example": "", - "format": "ssl-key", - "nullable": true, - "type": "string" - }, - "stickiness": { - "default": "none", - "description": "Controls how session stickiness is handled on this port.\n- If set to `none`, connections will always be assigned a backend based on the algorithm configured.\n- If set to `table`, sessions from the same remote address will be routed to the same backend.\n- For HTTP or HTTPS clients, `http_cookie` allows sessions to be routed to the same backend based on a cookie set by the NodeBalancer.", - "enum": [ - "none", - "table", - "http_cookie" - ], - "example": "http_cookie", - "type": "string", - "x-linode-cli-display": 5 - } - }, - "type": "object", - "x-akamai": { - "file-path": "schemas/node-balancer-config-rebuild-cli.yaml" - }, - "x-linode-cli-subtables": [ - "nodes" - ] } } }, - "description": "NodeBalancer created successfully." + "description": "Returns a paginated list of Firewalls assigned to this NodeBalancer." }, "default": { "content": { @@ -91347,101 +99848,104 @@ }, { "oauth": [ - "nodebalancers:read_write" + "nodebalancers:read_only" ] } ], - "summary": "Rebuild a config", + "summary": "List NodeBalancer firewalls", "tags": [ - "Configurations" + "Firewalls" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli nodebalancers config-rebuild \\\n 12345 4567 \\\n --port 443 \\\n --protocol https \\\n --algorithm roundrobin \\\n --stickiness http_cookie \\\n --check http_body \\\n --check_interval 90 \\\n --check_timeout 10 \\\n --check_attempts 3 \\\n --check_path \"/test\" \\\n --check_body \"it works\" \\\n --check_passive true \\\n --proxy_protocol \"none\" \\\n --ssl_cert \"-----BEGIN CERTIFICATE-----\n CERTIFICATE_INFORMATION\n -----END CERTIFICATE-----\" \\\n --ssl_key \"-----BEGIN PRIVATE KEY-----\n PRIVATE_KEY_INFORMATION\n -----END PRIVATE KEY-----\" \\\n --cipher_suite recommended \\\n --nodes.label \"node1\" --nodes.address \"192.168.210.120:80\" --nodes.mode \"accept\" --nodes.weight 50 \\\n --nodes '[{\"address\":\"192.168.210.122:80\",\"label\":\"node2\",\"weight\":50,\"mode\":\"accept\"}]'", - "title": "CLI: HTTPS", - "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "linode-cli nodebalancers config-rebuild \\\n 12345 4567 \\\n --port 80 \\\n --protocol tcp \\\n --algorithm roundrobin \\\n --stickiness none \\\n --proxy_protocol \"v2\"\n --nodes.label \"node1\" --nodes.address \"192.168.210.120:80\" --nodes.mode \"accept\" --nodes.weight 50 \\\n --nodes '[{\"address\":\"192.168.210.122:80\",\"label\":\"node2\",\"weight\":50,\"mode\":\"accept\"}]'", - "title": "CLI: TCP", - "url": "https://www.linode.com/docs/products/tools/cli/get-started/" - }, - { - "syntax": "linode-cli nodebalancers config-rebuild \\\n 12345 4567 \\\n --port 440 \\\n --protocol http \\\n --algorithm roundrobin \\\n --stickiness none \\\n --check http_body \\\n --check_interval 90 \\\n --check_timeout 10 \\\n --check_attempts 3 \\\n --check_path \"/test\" \\\n --check_body \"it works\" \\\n --nodes.label \"node1\" --nodes.address \"192.168.210.120:80\" --nodes.mode \"accept\" --nodes.weight 50 \\\n --nodes '[{\"address\":\"192.168.210.122:80\",\"label\":\"node2\",\"weight\":50,\"mode\":\"accept\"}]'", - "title": "CLI: HTTP", + "syntax": "linode-cli nodebalancers firewalls $nodeBalancerId", + "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "nodebalancers:read_write", + "syntax": "nodebalancers:read_only", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "config-rebuild", - "x-linode-grant": "add_nodebalancers" + "x-linode-cli-action": "firewalls", + "x-linode-grant": "read_only" }, - "parameters": [ - { - "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", - "example": "{{apiVersion}}", - "in": "path", - "name": "apiVersion", - "required": true, - "schema": { - "enum": [ - "v4", - "v4beta" - ], - "type": "string" - }, - "x-akamai": { - "file-path": "parameters/api-version-path.yaml" - } + "put": { + "description": "Replace the current list of assigned firewalls with a new list, or provide an empty list to remove all firewalls from this NodeBalancer.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli nodebalancers firewalls-update 12345 \\\n --firewall_ids '[1234, 4567]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n nodebalancers:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/put-node-balancer-firewalls" }, - { - "description": "The ID of the NodeBalancer to access.", - "example": "{{nodeBalancerId}}", - "in": "path", - "name": "nodeBalancerId", - "required": true, - "schema": { - "type": "integer" + "operationId": "put-node-balancer-firewalls", + "parameters": [ + { + "description": "The page of a collection to return.", + "example": "{{page}}", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "example": 6, + "minimum": 1, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-offset.yaml" + } }, - "x-akamai": { - "file-path": "parameters/node-balancer-id.yaml" + { + "description": "The number of items to return per page.", + "example": "{{page_size}}", + "in": "query", + "name": "page_size", + "schema": { + "default": 100, + "example": 50, + "maximum": 500, + "minimum": 25, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/page-size.yaml" + } } - }, - { - "description": "The ID of the Config to access.", - "example": "{{configId}}", - "in": "path", - "name": "configId", - "required": true, - "schema": { - "example": 521, - "type": "integer" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "description": "Replace or remove firewalls IDs assigned to a Linode or NodeBalancer.", + "properties": { + "firewall_ids": { + "description": "A complete list of firewall IDs to assign to this Linode or NodeBalancer. This operation replaces any existing assignments. To remove all firewalls, pass an empty list, `[]`.", + "example": 1234, + "items": { + "type": "integer" + }, + "minItems": 0, + "type": "array" + } + }, + "required": [ + "firewall_ids" + ], + "type": "object", + "x-akamai": { + "file-path": "schemas/firewall-ids-request.yaml" + } + }, + "x-example": { + "x-ref": "../examples/put-node-balancer.json" + } + } }, - "x-akamai": { - "file-path": "parameters/config-id.yaml" - } - } - ], - "x-akamai": { - "file-path": "paths/config-rebuild.yaml", - "path-info": "/{apiVersion}/nodebalancers/{nodeBalancerId}/configs/{configId}/rebuild" - }, - "x-linode-cli-command": "nodebalancers" - }, - "/{apiVersion}/nodebalancers/{nodeBalancerId}/firewalls": { - "get": { - "description": "View information for Firewalls assigned to this NodeBalancer.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli nodebalancers firewalls $nodeBalancerId\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n nodebalancers:read_only\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", - "externalDocs": { - "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/get-node-balancer-firewalls" + "required": true }, - "operationId": "get-node-balancer-firewalls", "responses": { "200": { "content": { @@ -91610,7 +100114,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -91702,7 +100206,7 @@ }, "addresses": { "additionalProperties": false, - "description": "The IPv4 and/or IPv6 addresses affected by this rule. A Rule can have up to 255 total addresses or networks listed across its IPv4 and IPv6 arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", + "description": "The IPv4 or IPv6 addresses affected by this rule. A rule can have up to 255 total addresses or networks listed across its `ipv4` and `ipv6` arrays. A network and a single IP are treated as equivalent when accounting for this limit.\n\nMust contain `ipv4`, `ipv6`, or both.", "properties": { "ipv4": { "description": "A list of IPv4 addresses or networks. Addresses must be in IP/mask format. Must not be an empty list.\n\nIf `0.0.0.0/0` is included in this list, all IPv4 addresses are affected by this rule.", @@ -91892,30 +100396,30 @@ }, { "oauth": [ - "nodebalancers:read_only" + "nodebalancers:read_write" ] } ], - "summary": "List NodeBalancer firewalls", + "summary": "Update a NodeBalancer's firewalls", "tags": [ "Firewalls" ], "x-akamai": { "tabs": [ { - "syntax": "linode-cli nodebalancers firewalls $nodeBalancerId", + "syntax": "linode-cli nodebalancers firewalls-update 12345 \\\n --firewall_ids '[1234, 4567]'", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" }, { - "syntax": "nodebalancers:read_only", + "syntax": "nodebalancers:read_write", "title": "OAuth scopes", "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, "x-linode-cli-action": "firewalls", - "x-linode-grant": "read_only" + "x-linode-grant": "read_write" }, "parameters": [ { @@ -91936,7 +100440,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -92119,7 +100623,7 @@ } }, { - "description": "The ID of the NodeBalancer to access.", + "description": "The ID of the NodeBalancer.", "example": "{{nodeBalancerId}}", "in": "path", "name": "nodeBalancerId", @@ -95222,7 +103726,7 @@ }, "/{apiVersion}/object-storage/keys": { "post": { - "description": "Provisions a new Object Storage key for authentication. A successful request triggers an `obj_access_key_create` [event](https://techdocs.akamai.com/linode-api/reference/get-events).\n\n> \ud83d\udcd8\n>\n> Accounts with negative balances can't access this operation.\n\n**The `regions` and `region` parameters**\n\nWhen creating an Object Storage key, specify one or more data centers ([regions](https://techdocs.akamai.com/linode-api/reference/get-regions)) where you want to create and manage Object Storage buckets.\n\n- **The `regions` array**. Populate it with `regionId` values. The resulting Object Storage key grants access to list and create new buckets in these regions. This *doesn't* give access to manage content in these buckets. To address this, you can:\n\n - Use the `bucket_access` array instead to grant management access, per bucket.\n\n - Use [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/) to change the access for this key.\n\n- **The `bucket_access` array**. This optional array lets you set up limited keys. Include individual objects naming a `regionId`, the target `bucket_name`, and the `permissions` for the Object Storage key. Use the resulting key to manage content in the `bucket_name`, based on the permission level set. You can also use the key to create new buckets in the named region. However, the key doesn't have access to manage content in the newly created bucket. You can grant it this access using [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/).\n\n- **Combine the two to apply varying levels of access in the key**. For example, set `regions` to `us-west` to give the key bucket list and create access in that region. Then, set up the `bucket_access` array to give access to a specific `bucket_name` in the `us-east` region. The key has access to manage content in that `bucket_name` and list and create buckets in the `us-east` region, too. If you include the same region in both, the settings applied in the `bucket_access` array take precedence. For example, assume you include `us-east` in the `regions` array, expecting to only give bucket list and creation access to that region. If you also set `us-east` as a `region` in the `bucket_access` array, the Object Storage key gives access to manage content in the specified `bucket_name`, and lets you list and create buckets in that region.\n\n**The `cluster` parameter (legacy)**\n\nFor backward compatibility, include the `cluster` parameter to create an Object Storage key. Use the `clusterId` equivalent (us-west-1) instead of the `regionId` (us-west). Leave the `regions` array out. If including the `bucket_access` array to limit access, omit `region` from each object. Use the resulting key in clusters in all supported regions.\n\n> \ud83d\udcd8\n>\n> While the API supports this method, you should use the `regions` parameters, instead.\n\n- **Unlimited access**. Omit the `bucket_access` array. The Object Storage key has unlimited cluster access to all buckets, with all permissions.\n\n- **Limited access**. Include the `bucket_access` array. Set the target `bucket_name` and the level of `permissions` for access to that bucket. Use the resulting key to manage content in the named bucket. A limited Object Storage key can [list all buckets](https://techdocs.akamai.com/linode-api/reference/get-object-storage-buckets) and [create a new bucket](https://techdocs.akamai.com/linode-api/reference/post-object-storage-bucket). However, you can't use the key to perform any actions on a bucket, unless the key has access to it. You can use [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/) to modify a key's access.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage keys-create \\\n --label \"my-object-storage-key\" \\\n --bucket_access '[{\"region\": \"ap-south\", \"bucket_name\": \"bucket-example-1\", \"permissions\": \"read_write\" }]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n object_storage:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "description": "Provisions a new Object Storage key for authentication. A successful request triggers an `obj_access_key_create` [event](https://techdocs.akamai.com/linode-api/reference/get-events).\n\n> \ud83d\udcd8\n>\n> Accounts with negative balances can't access this operation.\n\n**The `regions` and `region` parameters**\n\nWhen creating an Object Storage key, specify one or more data centers ([regions](https://techdocs.akamai.com/linode-api/reference/get-regions)) where you want to create and manage Object Storage buckets.\n\n- **The `regions` array**. Populate it with `regionId` values. The resulting Object Storage key grants access to list and create new buckets in these regions. This *doesn't* give access to manage content in these buckets. To address this, you can:\n\n - Use the `bucket_access` array instead to grant management access, per bucket.\n\n - Use [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/) to change the access for this key.\n\n- **The `bucket_access` array**. This optional array lets you set up limited keys. Include individual objects naming a `regionId` where the bucket exists, the target `bucket_name` to access, and the `permissions` for the Object Storage key. Use the resulting key to manage content in the `bucket_name`, based on the permission level set. You can also use the key to create new buckets in the named region. The key doesn't have access to manage content in a newly created bucket. You can grant it this access using [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/).\n\n- **Combine the two to apply varying levels of access in the key**. For example, set `regions` to `us-west` to give the key bucket list and create access in that region. Then, set up the `bucket_access` array to give access to a specific `bucket_name` in the `us-east` region. The key has access to manage content in that `bucket_name` and list and create buckets in the `us-east` region, too. If you include the same region in both, the settings applied in the `bucket_access` array take precedence. For example, assume you include `us-east` in the `regions` array, expecting to only give bucket list and creation access to that region. If you also set `us-east` as a `region` in the `bucket_access` array, the Object Storage key gives access to manage content in the specified `bucket_name`, and lets you list and create buckets in that region.\n\n**The `cluster` parameter (legacy)**\n\nFor backward compatibility, include the `cluster` parameter to create an Object Storage key. Use the `clusterId` equivalent (us-west-1) instead of the `regionId` (us-west). Leave the `regions` array out. If including the `bucket_access` array to limit access, omit `region` from each object. Use the resulting key in clusters in all supported regions.\n\n> \ud83d\udcd8\n>\n> While the API supports this method, you should use the `regions` parameters, instead.\n\n- **Unlimited access**. Omit the `bucket_access` array. The Object Storage key has unlimited cluster access to all buckets, with all permissions.\n\n- **Limited access**. Include the `bucket_access` array. Set the target `bucket_name` and the level of `permissions` for access to that bucket. Use the resulting key to manage content in the named bucket. A limited Object Storage key can [list all buckets](https://techdocs.akamai.com/linode-api/reference/get-object-storage-buckets) and [create a new bucket](https://techdocs.akamai.com/linode-api/reference/post-object-storage-bucket). However, you can't use the key to perform any actions on a bucket, unless the key has access to it. You can use [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/) to modify a key's access.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage keys-create \\\n --label \"my-object-storage-key\" \\\n --bucket_access '[{\"region\": \"ap-south\", \"bucket_name\": \"bucket-example-1\", \"permissions\": \"read_write\" }]'\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n object_storage:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", "url": "https://techdocs.akamai.com/linode-api/reference/post-object-storage-keys" @@ -95240,12 +103744,12 @@ "additionalProperties": false, "properties": { "bucket_name": { - "description": "The `label` set for a bucket that this key grants access to.", + "description": "The name of the bucket that this key grants access to. Run the [List Object Storage buckets](https://techdocs.akamai.com/linode-api/reference/get-object-storage-buckets) operation and store the label for the desired bucket.", "example": "example-bucket", "type": "string" }, "permissions": { - "description": "The level of access the key grants to the specified `bucket_name`. Keys with `read_write` access can manage content in the `bucket_name`, while `read_only` can be used to view content. See [Create an Object Storage key]((ref:post-object-storage-keys) for more details.", + "description": "The level of access the key grants to the specified `bucket_name`. Keys with `read_write` access can manage content in the `bucket_name`, while `read_only` can be used to view content.", "enum": [ "read_write", "read_only" @@ -95923,7 +104427,7 @@ "type": "string" }, "regions": { - "description": "Replace the current list of `regions` set in a specific key. Include an existing region to maintain it or leave it out to remove it. If you include new `regions` in the key, they can't be used to manage content in buckets in that specific region. You can grant these keys this access using [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/). Omit this to leave the existing list unchanged.\n\n> \ud83d\udea7\n>\n> You can't remove a `region` from a limited key's original `bucket_access` list. If you include the `regions` array in this operation, you need to include all existing `region` entries from the `bucket_access` array. Otherwise, the operation fails with an error. Run [Get an Object Storage key](https://techdocs.akamai.com/linode-api/reference/get-object-storage-key) to review current `region` entries in a limited key.", + "description": "Replace the current list of `regions` set in a specific key. Include an existing region to maintain it or leave it out to remove it. If you include new `regions` in the key, they can't be used to manage content in buckets in that specific region. You can grant these keys this access using [bucket policies](https://www.linode.com/docs/products/storage/object-storage/guides/bucket-policies/). Omit this to leave the existing list unchanged.\n\n> \ud83d\udea7\n>\n> You can't remove a `region` from a limited key's original `bucket_access` list. If you include the `regions` array in this operation, you need to include all existing `region` entries from the `bucket_access` array, if you included it when [creating](https://techdocs.akamai.com/linode-api/reference/post-object-storage-keys) this key. Otherwise, the operation fails with an error. Run [Get an Object Storage key](https://techdocs.akamai.com/linode-api/reference/get-object-storage-key) to review current `region` entries in a limited key.", "example": [ "us-iad", "fr-par" @@ -96053,61 +104557,506 @@ "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." } }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "object_storage:read_write" - ] - } - ], - "summary": "Update an Object Storage key", + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "object_storage:read_write" + ] + } + ], + "summary": "Update an Object Storage key", + "tags": [ + "Keys" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli object-storage keys-update \\\n --keyId 12345\n --label \"my-object-storage-key\"", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "object_storage:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "keys-update" + }, + "delete": { + "description": "Revokes an Object Storage Key. This keypair will no longer be usable by third-party clients. A successful request triggers an `obj_access_key_delete` [event](https://techdocs.akamai.com/linode-api/reference/get-events).\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage keys-delete 12345\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n object_storage:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/delete-object-storage-key" + }, + "operationId": "delete-object-storage-key", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "The API responds with an empty object.", + "maxProperties": 0, + "type": "object", + "x-akamai": { + "file-path": "schemas/added-empty-obj.yaml" + } + }, + "x-example": { + "x-ref": "../examples/delete-object-storage-key-200.json" + } + } + }, + "description": "Deletion successful." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "security": [ + { + "personalAccessToken": [] + }, + { + "oauth": [ + "object_storage:read_write" + ] + } + ], + "summary": "Revoke an Object Storage key", + "tags": [ + "Keys" + ], + "x-akamai": { + "tabs": [ + { + "syntax": "linode-cli object-storage keys-delete 12345", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + }, + { + "syntax": "object_storage:read_write", + "title": "OAuth scopes", + "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + } + ] + }, + "x-linode-cli-action": "keys-delete" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The key to look up.", + "example": "{{keyId}}", + "in": "path", + "name": "keyId", + "required": true, + "schema": { + "example": 715, + "type": "integer" + }, + "x-akamai": { + "file-path": "parameters/key-id-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/key.yaml", + "path-info": "/{apiVersion}/object-storage/keys/{keyId}" + }, + "x-linode-cli-command": "object-storage" + }, + "/{apiVersion}/object-storage/quotas": { + "get": { + "description": "__Beta__ Returns the active Object Storage-related quotas applied to your account. For example, you may have a quota maximum for the number of buckets you can have on a single endpoint. The operation includes any quota overrides in the response.\n\n> \ud83d\udcd8\n>\n> You can't combine parameters when [filtering](https://techdocs.akamai.com/linode-api/reference//filtering-and-sorting) with this operation. Only a single filterable parameter can be used.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage quotas-list\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-object-storage-quotas" + }, + "operationId": "get-object-storage-quotas", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": [ + { + "description": "Maximum number of buckets this customer is allowed to have on this endpoint", + "endpoint_type": "E1", + "quota_id": "obj-buckets-eu-central-1.linodeobjects.com", + "quota_limit": 50, + "quota_name": "Number of Buckets", + "resource_metric": "bucket", + "s3_endpoint": "us-sea-9.linodeobjects.com" + } + ], + "page": 1, + "pages": 1, + "results": 1 + }, + "schema": { + "allOf": [ + { + "properties": { + "data": { + "items": { + "additionalProperties": false, + "description": "The current Object Storage-related quotas on your account.", + "properties": { + "description": { + "description": "A detailed description for the Object Storage-related quota.", + "example": "Maximum number of buckets this customer is allowed to have on this endpoint", + "type": "string", + "x-linode-cli-display": 3 + }, + "endpoint_type": { + "description": "The type of `s3_endpoint`. See [Endpoint types](https://techdocs.akamai.com/cloud-computing/docs/object-storage#endpoint-types) for more information.", + "enum": [ + "E0", + "E1", + "E2", + "E3" + ], + "example": "E1", + "type": "string", + "x-linode-cli-display": 6 + }, + "quota_id": { + "description": "Identifies the Object Storage-related quota. Formatted as `obj--`, where `` is the `resource_metric` in use, `buckets`, `objects` or `bytes`.", + "example": "obj-buckets-eu-central-1.linodeobjects.com", + "type": "string", + "x-linode-cli-display": 1 + }, + "quota_limit": { + "description": "The maximum quantity of the `resource_metric` allowed by the quota.", + "example": 50, + "type": "integer", + "x-linode-cli-display": 5 + }, + "quota_name": { + "description": "__Filterable__ The name of the Object Storage-related quota. This is how the quota displays in Akamai Cloud Manager. This can be `Number of Buckets`, `Number of Objects`, or `Total Capacity`.", + "enum": [ + "Number of Objects", + "Number of Buckets", + "Total Capacity" + ], + "example": "Number of Buckets", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "resource_metric": { + "description": "The specific Object Storage-based resource for the quota. A quota maximum may apply as follows:\n\n- The Object Storage `bucket` quota for a single `s3_endpoint`\n\n- The `object` quota for a single `s3_endpoint`\n\n- The `byte` count quota for content in a single `s3_endpoint`", + "enum": [ + "bucket", + "object", + "byte" + ], + "example": "bucket", + "type": "string", + "x-linode-cli-display": 4 + }, + "s3_endpoint": { + "description": "__Filterable__ The URL for the s3 endpoint where the quota applies. Every `s3_endpoint` exists in a specific Akamai Cloud Computing data center (`region`). Run the [List Object Storage endpoints](https://techdocs.akamai.com/linode-api/reference/get-object-storage-endpoints) operation to see more specifics on this `s3_endpoint`.", + "example": "us-sea-9.linodeobjects.com", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 7, + "x-linode-filterable": true + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/object-storage-quota.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "description": "An envelope for paginated response. When accessing a collection through a GET endpoint, the results are wrapped in this envelope which includes metadata about those results. Results are presented within a `data` array. See [Pagination](https://techdocs.akamai.com/linode-api/reference/pagination) for more information.", + "properties": { + "page": { + "description": "__Read-only__ The current [page](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, + "readOnly": true, + "type": "integer" + }, + "pages": { + "description": "__Read-only__ The total number of [pages](https://techdocs.akamai.com/linode-api/reference/pagination).", + "example": 1, + "readOnly": true, + "type": "integer" + }, + "results": { + "description": "__Read-only__ The total number of results.", + "example": 1, + "readOnly": true, + "type": "integer" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/pagination-envelope.yaml" + } + } + ], + "x-akamai": { + "file-path": "schemas/object-storage-quotas.yaml" + } + } + } + }, + "description": "A paginated list of Object Storage-related quotas applied to your account." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "summary": "List Object Storage quotas", "tags": [ - "Keys" + "Object Storage quotas" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli object-storage keys-update \\\n --keyId 12345\n --label \"my-object-storage-key\"", + "syntax": "linode-cli object-storage quotas-list", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" - }, - { - "syntax": "object_storage:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" } ] }, - "x-linode-cli-action": "keys-update" + "x-linode-cli-action": "object-storage-quotas", + "x-linode-redoc-load-ids": true }, - "delete": { - "description": "Revokes an Object Storage Key. This keypair will no longer be usable by third-party clients. A successful request triggers an `obj_access_key_delete` [event](https://techdocs.akamai.com/linode-api/reference/get-events).\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage keys-delete 12345\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)\n\n- __OAuth scopes__.\n\n ```\n object_storage:read_write\n ```\n\n [Learn more...](https://techdocs.akamai.com/linode-api/reference/get-started#oauth)", + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/object-storage-quotas.yaml", + "path-info": "/{apiVersion}/object-storage/quotas" + }, + "x-linode-cli-command": "object-storage" + }, + "/{apiVersion}/object-storage/quotas/{object-storage-quotaId}": { + "get": { + "description": "__Beta__ Returns information about a specific Object Storage-related quota on your account. The operation includes any quota overrides in the response.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage quota-view obj-objects-us-ord-1\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", "externalDocs": { "description": "See documentation for this operation in Akamai's Linode API", - "url": "https://techdocs.akamai.com/linode-api/reference/delete-object-storage-key" + "url": "https://techdocs.akamai.com/linode-api/reference/get-object-storage-quota" }, - "operationId": "delete-object-storage-key", + "operationId": "get-object-storage-quota", "responses": { "200": { "content": { "application/json": { + "example": { + "description": "Maximum number of buckets this customer is allowed to have on this endpoint", + "endpoint_type": "E1", + "quota_id": "obj-buckets-eu-central-1.linodeobjects.com", + "quota_limit": 50, + "quota_name": "Number of Buckets", + "resource_metric": "bucket", + "s3_endpoint": "us-sea-9.linodeobjects.com" + }, "schema": { - "description": "The API responds with an empty object.", - "maxProperties": 0, + "additionalProperties": false, + "description": "The current Object Storage-related quotas on your account.", + "properties": { + "description": { + "description": "A detailed description for the Object Storage-related quota.", + "example": "Maximum number of buckets this customer is allowed to have on this endpoint", + "type": "string", + "x-linode-cli-display": 3 + }, + "endpoint_type": { + "description": "The type of `s3_endpoint`. See [Endpoint types](https://techdocs.akamai.com/cloud-computing/docs/object-storage#endpoint-types) for more information.", + "enum": [ + "E0", + "E1", + "E2", + "E3" + ], + "example": "E1", + "type": "string", + "x-linode-cli-display": 6 + }, + "quota_id": { + "description": "Identifies the Object Storage-related quota. Formatted as `obj--`, where `` is the `resource_metric` in use, `buckets`, `objects` or `bytes`.", + "example": "obj-buckets-eu-central-1.linodeobjects.com", + "type": "string", + "x-linode-cli-display": 1 + }, + "quota_limit": { + "description": "The maximum quantity of the `resource_metric` allowed by the quota.", + "example": 50, + "type": "integer", + "x-linode-cli-display": 5 + }, + "quota_name": { + "description": "__Filterable__ The name of the Object Storage-related quota. This is how the quota displays in Akamai Cloud Manager. This can be `Number of Buckets`, `Number of Objects`, or `Total Capacity`.", + "enum": [ + "Number of Objects", + "Number of Buckets", + "Total Capacity" + ], + "example": "Number of Buckets", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 2, + "x-linode-filterable": true + }, + "resource_metric": { + "description": "The specific Object Storage-based resource for the quota. A quota maximum may apply as follows:\n\n- The Object Storage `bucket` quota for a single `s3_endpoint`\n\n- The `object` quota for a single `s3_endpoint`\n\n- The `byte` count quota for content in a single `s3_endpoint`", + "enum": [ + "bucket", + "object", + "byte" + ], + "example": "bucket", + "type": "string", + "x-linode-cli-display": 4 + }, + "s3_endpoint": { + "description": "__Filterable__ The URL for the s3 endpoint where the quota applies. Every `s3_endpoint` exists in a specific Akamai Cloud Computing data center (`region`). Run the [List Object Storage endpoints](https://techdocs.akamai.com/linode-api/reference/get-object-storage-endpoints) operation to see more specifics on this `s3_endpoint`.", + "example": "us-sea-9.linodeobjects.com", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 7, + "x-linode-filterable": true + } + }, "type": "object", "x-akamai": { - "file-path": "schemas/added-empty-obj.yaml" + "file-path": "schemas/object-storage-quota.yaml" } - }, - "x-example": { - "x-ref": "../examples/delete-object-storage-key-200.json" } } }, - "description": "Deletion successful." + "description": "A single Object Storage-related quota for your account." }, "default": { "content": { @@ -96146,35 +105095,156 @@ "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." } }, - "security": [ - { - "personalAccessToken": [] - }, - { - "oauth": [ - "object_storage:read_write" - ] - } - ], - "summary": "Revoke an Object Storage key", + "summary": "Get an Object Storage quota", "tags": [ - "Keys" + "Object Storage quotas" ], "x-akamai": { + "status": "BETA", "tabs": [ { - "syntax": "linode-cli object-storage keys-delete 12345", + "syntax": "linode-cli object-storage quota-view obj-objects-us-ord-1", "title": "CLI", "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" + } + ] + }, + "x-linode-cli-action": "object-storage-quota-view" + }, + "parameters": [ + { + "description": "__Enum__ Call either the `v4` URL, or `v4beta` for operations still in Beta.", + "example": "{{apiVersion}}", + "in": "path", + "name": "apiVersion", + "required": true, + "schema": { + "enum": [ + "v4", + "v4beta" + ], + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/api-version-path.yaml" + } + }, + { + "description": "The unique string that identifies the specific Object Storage-related quota to look up. This follows the pattern, `obj--`, for example, `obj-buckets-eu-central-1.linodeobjects.com`.", + "example": "{{object-storage-quotaId}}", + "in": "path", + "name": "object-storage-quotaId", + "required": true, + "schema": { + "example": "obj-buckets-eu-central-1.linodeobjects.com", + "type": "string" + }, + "x-akamai": { + "file-path": "parameters/object-storage-quota-id-path.yaml" + } + } + ], + "x-akamai": { + "file-path": "paths/object-storage-quota.yaml", + "path-info": "/{apiVersion}/object-storage/quotas/{object-storage-quotaId}" + }, + "x-linode-cli-command": "object-storage" + }, + "/{apiVersion}/object-storage/quotas/{object-storage-quotaId}/usage": { + "get": { + "description": "__Beta__ Returns usage data for a specific `object-storage-quotaId`. This includes the maximum number of `object-storage-quotaId` resources you can have for a single endpoint and the current usage for that resource.\n\n\n<>\n\n---\n\n\n- __CLI__.\n\n ```\n linode-cli object-storage quotas-usage obj-objects-us-ord-1\n ```\n\n [Learn more...](https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli)", + "externalDocs": { + "description": "See documentation for this operation in Akamai's Linode API", + "url": "https://techdocs.akamai.com/linode-api/reference/get-object-storage-quota-usage" + }, + "operationId": "get-object-storage-quota-usage", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "quota_limit": 100, + "usage": 10 + }, + "schema": { + "additionalProperties": false, + "description": "Usage data for a specific Object Storage-related quota on your account.", + "properties": { + "quota_limit": { + "description": "The availability limit for a specific Object Storage resource (`object-storage-quotaId`) for a single endpoint.", + "example": 100, + "type": "integer", + "x-linode-cli-display": 1 + }, + "usage": { + "description": "The quantity of the Object Storage resource currently in use on an endpoint. Displayed as `null` if no resources are in use.", + "example": 10, + "nullable": true, + "type": "integer", + "x-linode-cli-display": 2 + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/object-storage-quota-usage.yaml" + } + } + } }, + "description": "Usage data for the specified `object-storage-quotaId`." + }, + "default": { + "content": { + "application/json": { + "schema": { + "additionalProperties": false, + "properties": { + "errors": { + "items": { + "additionalProperties": false, + "description": "An object for describing a single error that occurred during the processing of a request.", + "properties": { + "field": { + "description": "The field in the request that caused this error. This may be a path, separated by periods in the case of nested fields. In some cases this may come back as `null` if the error is not specific to any single element of the request.", + "example": "fieldname", + "type": "string" + }, + "reason": { + "description": "What happened to cause this error. In most cases, this can be fixed immediately by changing the data you sent in the request, but in some cases you will be instructed to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) or perform some other action before you can complete the request successfully.", + "example": "fieldname must be a valid value", + "type": "string" + } + }, + "type": "object", + "x-akamai": { + "file-path": "schemas/error-object.yaml" + } + }, + "type": "array" + } + }, + "type": "object" + } + } + }, + "description": "See [Errors](https://techdocs.akamai.com/linode-api/reference/errors) for the range of possible error response codes." + } + }, + "summary": "Get Object Storage quota usage data", + "tags": [ + "Object Storage quotas" + ], + "x-akamai": { + "status": "BETA", + "tabs": [ { - "syntax": "object_storage:read_write", - "title": "OAuth scopes", - "url": "https://techdocs.akamai.com/linode-api/reference/get-started#oauth" + "syntax": "linode-cli object-storage quotas-usage obj-objects-us-ord-1", + "title": "CLI", + "url": "https://techdocs.akamai.com/cloud-computing/docs/getting-started-with-the-linode-cli" } ] }, - "x-linode-cli-action": "keys-delete" + "x-linode-cli-action": "object-storage-quota-usage-view" }, "parameters": [ { @@ -96195,23 +105265,23 @@ } }, { - "description": "The key to look up.", - "example": "{{keyId}}", + "description": "The unique string that identifies the specific Object Storage-related quota to look up. This follows the pattern, `obj--`, for example, `obj-buckets-eu-central-1.linodeobjects.com`.", + "example": "{{object-storage-quotaId}}", "in": "path", - "name": "keyId", + "name": "object-storage-quotaId", "required": true, "schema": { - "example": 715, - "type": "integer" + "example": "obj-buckets-eu-central-1.linodeobjects.com", + "type": "string" }, "x-akamai": { - "file-path": "parameters/key-id-path.yaml" + "file-path": "parameters/object-storage-quota-id-path.yaml" } } ], "x-akamai": { - "file-path": "paths/key.yaml", - "path-info": "/{apiVersion}/object-storage/keys/{keyId}" + "file-path": "paths/object-storage-quota-usage.yaml", + "path-info": "/{apiVersion}/object-storage/quotas/{object-storage-quotaId}/usage" }, "x-linode-cli-command": "object-storage" }, @@ -106987,6 +116057,22 @@ "x-linode-cli-display": 5, "x-linode-filterable": true }, + "interface_generation": { + "description": "__Filterable__ Indicates if the Linode is configured to use Linode interfaces (`linode`) or legacy configuration profile interfaces (`legacy_config`).", + "enum": [ + "legacy_config", + "linode" + ], + "example": "linode", + "type": "string", + "x-akamai": { + "labels": [ + "Filterable" + ] + }, + "x-linode-cli-display": 9, + "x-linode-filterable": true + }, "ipv4": { "description": "__Filterable__, __Read-only__ This Linode's IPv4 Addresses. Each Linode is assigned a single public IPv4 address upon creation, and may get a single private IPv4 address if needed. You may need to [Open a support ticket](https://techdocs.akamai.com/linode-api/reference/post-ticket) to get additional IPv4 addresses.\n\nIPv4 addresses may be reassigned between your Linodes, or shared with other Linodes. See the [networking](https://techdocs.akamai.com/linode-api/reference/post-firewalls) operations for details.", "example": [ @@ -110797,6 +119883,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -111010,6 +120102,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -111201,7 +120299,7 @@ { "created": "2023-07-11T00:00:00", "id": 456, - "ipv4": "192.0.2.210/24", + "ipv4": "10.1.0.0/24", "label": "cool-vpc-subnet", "linodes": [ { @@ -111209,6 +120307,7 @@ "interfaces": [ { "active": true, + "config_id": null, "id": 421 } ] @@ -111394,6 +120493,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -111604,13 +120709,13 @@ "data": [ { "active": true, - "address": "192.0.2.141", + "address": "172.30.254.145", "address_range": null, "config_id": 4567, - "gateway": "192.0.2.1", + "gateway": "172.23.210.1", "interface_id": 2435, "linode_id": 123, - "nat_1_1": "192.0.2.97", + "nat_1_1": "192.0.2.1", "prefix": 24, "region": "us-east", "subnet_id": 101, @@ -111688,8 +120793,9 @@ "type": "string" }, "config_id": { - "description": "__Filterable__, __Read-only__ The globally general entity identifier for the Linode configuration profile where the VPC is included.", + "description": "__Filterable__, __Read-only__ The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", "example": 4567, + "nullable": true, "readOnly": true, "type": "integer", "x-akamai": { @@ -111708,10 +120814,13 @@ "type": "string" }, "interface_id": { - "description": "__Read-only__ The globally general API entity identifier for the Linode interface.", + "description": "__Beta__, __Read-only__ The globally general API entity identifier for the Linode interface.", "example": 2435, "readOnly": true, - "type": "integer" + "type": "integer", + "x-akamai": { + "status": "BETA" + } }, "linode_id": { "description": "__Filterable__, __Read-only__ The identifier for the Linode the VPC interface currently belongs to.", @@ -112045,6 +121154,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -112362,6 +121477,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -112679,7 +121800,7 @@ "data": [ { "active": true, - "address": "192.0.2.141", + "address": "198.51.100.42", "address_range": null, "config_id": 4567, "gateway": "192.0.2.1", @@ -112763,8 +121884,9 @@ "type": "string" }, "config_id": { - "description": "__Filterable__, __Read-only__ The globally general entity identifier for the Linode configuration profile where the VPC is included.", + "description": "__Filterable__, __Read-only__ The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", "example": 4567, + "nullable": true, "readOnly": true, "type": "integer", "x-akamai": { @@ -112783,10 +121905,13 @@ "type": "string" }, "interface_id": { - "description": "__Read-only__ The globally general API entity identifier for the Linode interface.", + "description": "__Beta__, __Read-only__ The globally general API entity identifier for the Linode interface.", "example": 2435, "readOnly": true, - "type": "integer" + "type": "integer", + "x-akamai": { + "status": "BETA" + } }, "linode_id": { "description": "__Filterable__, __Read-only__ The identifier for the Linode the VPC interface currently belongs to.", @@ -113113,6 +122238,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -113275,7 +122406,7 @@ { "created": "2023-07-11T00:00:00", "id": 456, - "ipv4": "192.0.2.13/24", + "ipv4": "10.1.0.0/24", "label": "cool-vpc-subnet", "linodes": [ { @@ -113283,6 +122414,7 @@ "interfaces": [ { "active": true, + "config_id": null, "id": 421 } ] @@ -113399,6 +122531,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -113634,6 +122772,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421, @@ -113855,6 +122999,12 @@ "example": true, "type": "boolean" }, + "config_id": { + "description": "The globally general entity identifier for the Linode configuration profile that includes the VPC. If this is a VPC Linode interface, the value is `null`.", + "example": 4567, + "nullable": true, + "type": "integer" + }, "id": { "description": "ID of the interface.", "example": 421,