> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/infra-controller/llms.txt.
> For full documentation content, see https://docs.nvidia.com/infra-controller/llms-full.txt.

# Update VPC

PATCH https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/vpc/{vpcId}
Content-Type: application/json

Update an existing VPC

Org must have a Tenant entity. User must have `FORGE_TENANT_ADMIN` authorization role

Reference: https://docs.nvidia.com/infra-controller/infra-controller/rest-api-reference/api-reference/vpc/update-vpc

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: NCX Infra Controller REST API
  version: 1.0.0
paths:
  /v2/org/{org}/carbide/vpc/{vpcId}:
    patch:
      operationId: update-vpc
      summary: Update VPC
      description: >-
        Update an existing VPC


        Org must have a Tenant entity. User must have `FORGE_TENANT_ADMIN`
        authorization role
      tags:
        - subpackage_vpc
      parameters:
        - name: org
          in: path
          required: true
          schema:
            type: string
        - name: vpcId
          in: path
          required: true
          schema:
            type: string
        - name: Authorization
          in: header
          description: >-
            ```

            export JWT_BEARER_TOKEN="<jwt-bearer-token>"


            # Example org name: "acme-inc

            export ORG_NAME=<org-name>


            # Use the JWT bearer token in your API request auth header:

            curl -v -X GET -H "Content-Type: application/json" -H
            "Authorization: Bearer $JWT_BEARER_TOKEN"
            https://carbide-rest-api.carbide.svc.cluster.local/v2/org/$ORG_NAME/carbide/user/current

            ```
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VPC'
        '400':
          description: Error response when request data cannot be validated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarbideAPIError'
        '403':
          description: >-
            Error response when user is not authorized to call an endpoint or
            retrieve/modify objects
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarbideAPIError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VpcUpdateRequest'
servers:
  - url: https://carbide-rest-api.carbide.svc.cluster.local
components:
  schemas:
    Labels:
      type: object
      additionalProperties:
        type: string
      title: Labels
    VpcUpdateRequest:
      type: object
      properties:
        name:
          type: string
          description: Updated name of the VPC
        description:
          type: string
          description: Updated description of the VPC
        networkSecurityGroupId:
          type:
            - string
            - 'null'
          description: ID of the Network Security Group to attach to the VPC
        nvLinkLogicalPartitionId:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            ID of the default NVLink Logical Partition that GPUs for all
            Instances in the VPC will attach to. Can only be updated if VPC
            currently has no active Instances
        labels:
          $ref: '#/components/schemas/Labels'
          description: >-
            Update labels of the VPC. Up to 10 key value pairs can be specified.
            The labels will be entirely replaced by those sent in the request.
            Any labels not included in the request will be removed. To retain
            existing labels, first fetch them and include them along with this
            request.
      description: Request data to update a VPC
      title: VpcUpdateRequest
    VpcNetworkVirtualizationType:
      type: string
      enum:
        - ETHERNET_VIRTUALIZER
        - FNN
      description: Network virtualization type of the VPC
      title: VpcNetworkVirtualizationType
    NetworkSecurityGroupPropagationDetailsDetailedStatus:
      type: string
      enum:
        - None
        - Partial
        - Full
        - Unknown
        - Error
      title: NetworkSecurityGroupPropagationDetailsDetailedStatus
    NetworkSecurityGroupPropagationStatus:
      type: string
      enum:
        - Synchronizing
        - Synchronized
        - Error
      description: Status values for Network Security Group propagation
      title: NetworkSecurityGroupPropagationStatus
    NetworkSecurityGroupPropagationDetails:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The VPC or Instance ID
        detailedStatus:
          $ref: >-
            #/components/schemas/NetworkSecurityGroupPropagationDetailsDetailedStatus
        status:
          $ref: '#/components/schemas/NetworkSecurityGroupPropagationStatus'
        details:
          type:
            - string
            - 'null'
        unpropagatedInstanceIds:
          type: array
          items:
            type: string
            format: uuid
        relatedInstanceIds:
          type: array
          items:
            type: string
            format: uuid
      description: The Network Security Group propagation details for a VPC or Instance
      title: NetworkSecurityGroupPropagationDetails
    VpcStatus:
      type: string
      enum:
        - Pending
        - Provisioning
        - Ready
        - Configuring
        - Deleting
        - Error
      description: Status values for VPC objects
      title: VpcStatus
    StatusDetail:
      type: object
      properties:
        status:
          type: string
        message:
          type: string
        created:
          type: string
          format: date-time
        updated:
          type: string
          format: date-time
      description: Describes the details of a status transition for a resource
      title: StatusDetail
    VPC:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: ID of the VPC
        name:
          type: string
          description: Name of the VPC
        description:
          type: string
          description: Description of the VPC, can be empty
        org:
          type: string
          description: Organization the VPC belongs to
        tenantId:
          type: string
          format: uuid
          description: ID of the Tenant the VPC belongs to
        siteId:
          type: string
          format: uuid
          description: ID of the Site the VPC belongs to
        controllerVpcId:
          type:
            - string
            - 'null'
          format: uuid
          description: Legacy attribute, contains the same value as ID
        networkVirtualizationType:
          $ref: '#/components/schemas/VpcNetworkVirtualizationType'
          description: Network virtualization type of the VPC
        requestedVni:
          type:
            - integer
            - 'null'
          description: >-
            Explicitly requested VNI for the VPC if one was requested at
            creation time
        vni:
          type:
            - integer
            - 'null'
          description: Active VNI assigned to the VPC
        networkSecurityGroupId:
          type:
            - string
            - 'null'
          description: ID of the Network Security Group attached to the VPC
        networkSecurityGroupPropagationDetails:
          $ref: '#/components/schemas/NetworkSecurityGroupPropagationDetails'
          description: Propagation details for the attached Network Security Group
        nvLinkLogicalPartitionId:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            ID of the default NVLink Logical Partition that GPUs for all
            Instances in the VPC will attach to
        labels:
          $ref: '#/components/schemas/Labels'
          description: String key value pairs describing VPC labels
        status:
          $ref: '#/components/schemas/VpcStatus'
          description: Status of the VPC
        statusHistory:
          type: array
          items:
            $ref: '#/components/schemas/StatusDetail'
          description: History of status changes for the VPC
        created:
          type: string
          format: date-time
          description: Date/time when VPC was created
        updated:
          type: string
          format: date-time
          description: Date/time when VPC was last updated
      description: VPCs are grouping constructs that bind resources together
      title: VPC
    CarbideApiErrorSource:
      type: string
      enum:
        - carbide
      description: Source of the error. Only 'carbide' is supported
      title: CarbideApiErrorSource
    CarbideApiErrorData:
      type: object
      properties: {}
      description: Additional data about the error
      title: CarbideApiErrorData
    CarbideAPIError:
      type: object
      properties:
        source:
          $ref: '#/components/schemas/CarbideApiErrorSource'
          description: Source of the error. Only 'carbide' is supported
        message:
          type: string
          description: Message describing the error
        data:
          oneOf:
            - $ref: '#/components/schemas/CarbideApiErrorData'
            - type: 'null'
          description: Additional data about the error
      description: Describes the error response from NCX Infra Controller REST API
      title: CarbideAPIError
  securitySchemes:
    JWTBearerToken:
      type: http
      scheme: bearer
      description: >-
        ```

        export JWT_BEARER_TOKEN="<jwt-bearer-token>"


        # Example org name: "acme-inc

        export ORG_NAME=<org-name>


        # Use the JWT bearer token in your API request auth header:

        curl -v -X GET -H "Content-Type: application/json" -H "Authorization:
        Bearer $JWT_BEARER_TOKEN"
        https://carbide-rest-api.carbide.svc.cluster.local/v2/org/$ORG_NAME/carbide/user/current

        ```

```

## SDK Code Examples

```python example-1
import requests

url = "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId"

payload = {
    "name": "spark-vpc-v1",
    "description": "Virtual network for machines executing Spark jobs v1",
    "labels": {
        "region": "us-west-1",
        "env": "dev"
    }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.json())
```

```javascript example-1
const url = 'https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId';
const options = {
  method: 'PATCH',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"name":"spark-vpc-v1","description":"Virtual network for machines executing Spark jobs v1","labels":{"region":"us-west-1","env":"dev"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go example-1
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId"

	payload := strings.NewReader("{\n  \"name\": \"spark-vpc-v1\",\n  \"description\": \"Virtual network for machines executing Spark jobs v1\",\n  \"labels\": {\n    \"region\": \"us-west-1\",\n    \"env\": \"dev\"\n  }\n}")

	req, _ := http.NewRequest("PATCH", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby example-1
require 'uri'
require 'net/http'

url = URI("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"name\": \"spark-vpc-v1\",\n  \"description\": \"Virtual network for machines executing Spark jobs v1\",\n  \"labels\": {\n    \"region\": \"us-west-1\",\n    \"env\": \"dev\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java example-1
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.patch("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"name\": \"spark-vpc-v1\",\n  \"description\": \"Virtual network for machines executing Spark jobs v1\",\n  \"labels\": {\n    \"region\": \"us-west-1\",\n    \"env\": \"dev\"\n  }\n}")
  .asString();
```

```php example-1
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId', [
  'body' => '{
  "name": "spark-vpc-v1",
  "description": "Virtual network for machines executing Spark jobs v1",
  "labels": {
    "region": "us-west-1",
    "env": "dev"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp example-1
using RestSharp;

var client = new RestClient("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"name\": \"spark-vpc-v1\",\n  \"description\": \"Virtual network for machines executing Spark jobs v1\",\n  \"labels\": {\n    \"region\": \"us-west-1\",\n    \"env\": \"dev\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift example-1
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "name": "spark-vpc-v1",
  "description": "Virtual network for machines executing Spark jobs v1",
  "labels": [
    "region": "us-west-1",
    "env": "dev"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/vpc/vpcId")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```