This page describes how to order Google Distributed Cloud connected hardware.
Distributed Cloud connected is available in the following countries:

- Australia
- Austria
- Belgium
- Brazil
- Canada
- Denmark
- Finland
- France
- Germany
- Hong Kong
- Japan
- India
- Indonesia
- Italy
- Netherlands
- Norway
- Poland
- Saudi Arabia
- Singapore
- South Korea
- Spain
- Sweden
- Switzerland
- United Kingdom
- United States

Before you order the hardware, you must meet the
[Distributed Cloud connected installation
requirements](https://docs.cloud.google.com/distributed-cloud/connected/1.7.0/docs/requirements).

## Distributed Cloud connected order types

You can order the Distributed Cloud connected hardware in one of the following ways,
based on your business requirements:

- **Google-owned hardware.** You can order the Distributed Cloud connected hardware directly
  from Google. In this scenario, Google sources, maintains, repairs, and decommissions the
  Distributed Cloud connected hardware. When your contract concludes, Google
  collects the Distributed Cloud hardware and destroys all data stored on it.

- **Customer-sourced hardware.** You can order Distributed Cloud connected from a Google-partnered
  SI after consulting with Google on a deployment configuration that fits your business requirements.
  In this scenario, you own the Distributed Cloud connected hardware. The SI works with you and
  Google to deploy, repair, and decommission the hardware. When your contract concludes, the SI wipes
  all Google software and your data from the Distributed Cloud connected hardware. You are
  then free to reuse or dispose of the hardware.

### Order Distributed Cloud connected hardware using the Google Cloud console

1. In the Google Cloud console, go to the **Orders** page.

   [Go to Orders](https://console.cloud.google.com/distributed-cloud/edgezones/order-management/orders?project=_)

   <br />

2. Select the target Google Cloud project.

3. Click **Create order**.

4. Fill out the request form and submit it.

A Google Cloud sales representative reviews your submission and contacts you to
complete the order. The representative does the following:

- Reviews your business requirements to help you pick the optimal hardware configuration.
- Collects information about your local network, Google Cloud project, installation site, and other requirements listed in the [installation requirements](https://docs.cloud.google.com/distributed-cloud/connected/1.7.0/docs/requirements).
- Uses this information to configure your Distributed Cloud hardware before delivery.

## Order Distributed Cloud connected hardware using the GDC Hardware Management API

> [!WARNING]
>
> **Preview**
>
>
> This feature is
>
> subject to the "Pre-GA Offerings Terms" in the General Service Terms section of the
> [Service Specific
> Terms](https://docs.cloud.google.com/terms/service-terms#1).
>
> Pre-GA features are available "as is" and might have limited support.
>
> For more information, see the
> [launch stage descriptions](https://cloud.google.com/products/#product-launch-stages).

To place an order using the GDC Hardware Management API, you must create an `Order` resource, plus
the accompanying `Site`, `Zone`, and `Hardware` resources that the `Order` resources references.
You then submit the `Order` resource to Google.

These resources have the following functions. For more information on using the GDC Hardware Management API, see the
[Google Distributed Cloud CLI and API reference](https://docs.cloud.google.com/distributed-cloud/connected/1.7.0/docs/apis).

- **`Order`** . This resource requests the creation of one or more Distributed Cloud zones.
  When you create this resource, it receives a name accessible in the `create_order_response.name` field.
  The `Order` resource name has the following format:

  ```python
  `projects/`PROJECT_ID`/locations/`REGION`/orders/`ORDER_ID
  ```

  where:
  - `PROJECT_ID`: the ID of the target Google Cloud project.
  - `REGION`: the Google Cloud region in which you want to deploy your Distributed Cloud zones.
  - `ORDER_ID`: a unique ID that identifies this order. If omitted, a value is automatically generated. We recommend that you provide a unique order ID value consisting of [lowercase letters, numbers, and dashes](https://google.aip.dev/122#resource-id-segments). Otherwise, failed order creation calls can generate duplicate orders.
- **`Site`**. This resource represents the physical location where you want to deploy your
  Distributed Cloud hardware. This resource includes the contact information
  of a responsible party who coordinates access for initial delivery and future maintenance.
  This contact might be different from the one you provided on the order.

- **`Hardware`** . This resource represents a Distributed Cloud server or rack.
  Each `Hardware` resource references the associated `Order`,`Site`, and `Zone` resources.
  To see the available SKUs, use the
  [ListSkus](https://docs.cloud.google.com/distributed-cloud/connected/1.7.0/docs/reference/hardware/rpc/google.cloud.gdchardwaremanagement.v1alpha#google.cloud.gdchardwaremanagement.v1alpha.GDCHardwareManagement.ListSkus)
  API call.

- **`Zone`**. This resource represents the Distributed Cloud connected hardware
  to be deployed on your premises. A Distributed Cloud zone covers one or more
  Distributed Cloud connected racks or all of the Distributed Cloud
  connected server machines deployed at your location.

Before completing the steps in this section, you must work with your Google sales representative
to complete the Customer Information Questionnaire (CIQ) and finalize the scope and configuration
of your Distributed Cloud connected deployment. You will need this information
to place the order.

### Prerequisites

Before you begin, complete the following prerequisites:

1. [Set up a Python development environment](https://docs.cloud.google.com/python/docs/setup).

2. Install the GDC Hardware Management API client library using the following command:

   ```
   python3 -m pip install google-cloud-gdchardwaremanagement
   ```
3. Enable the [GDC Hardware Management API](https://console.cloud.google.com/apis/api/gdchardwaremanagement.googleapis.com)
   on the target Google Cloud project.

### Create and submit a Distributed Cloud connected hardware order using the GDC Hardware Management API

The steps in this section are examples that illustrate how to create and submit an an `Order` resource to Google
using the GDC Hardware Management API. To complete the steps in this section, you must have the
[GDC Hardware Management Admin](https://docs.cloud.google.com/iam/docs/roles-permissions/gdchardwaremanagement#gdchardwaremanagement.admin)
(`roles/gdchardwaremanagement.admin`) role in your Google Cloud project.

1. Create an `Order` resource. For example:

   ```python
   import datetime
   from google.cloud import gdchardwaremanagement_v1alpha
   from google.protobuf.timestamp_pb2 import Timestamp
   from google.type import postal_address_pb2

   client = gdchardwaremanagement_v1alpha.GDCHardwareManagementClient()

   contact = gdchardwaremanagement_v1alpha.Contact(
       given_name="John",
       family_name="Customer",
       email="jcustomer@example.com",
       phone="+1 123 456 7890",
   )

   organization_contact = gdchardwaremanagement_v1alpha.OrganizationContact(
       address=postal_address_pb2.PostalAddress(
           organization="Example Organization",
           address_lines=["1800 Amphibious Blvd."],
           locality="Mountain View",
           administrative_area="CA",
           postal_code="94045",
           region_code="US",
       ),
       contacts=[contact],
   )

   order = gdchardwaremanagement_v1alpha.Order(
       organization_contact=organization_contact,
       customer_motivation="I like Google Distributed Cloud!",
       fulfillment_time=Timestamp(
           seconds=int(datetime.datetime(2024, 11, 22, 9, 0).timestamp()),
       ),
       region_code="US",
   )

   create_order_response = client.create_order(
       request=gdchardwaremanagement_v1alpha.CreateOrderRequest(
           parent="projects/myProject/locations/us-east1",
           order_id="myOrderID",
           order=order,
       ),
   ).result()
   ```

   Your order is now in `DRAFT` state and has been assigned a resource name stored in
   the `create_order_response.name` field. Use this resource name when modifying or
   tracking the status of this order.
2. Create a `Site` resource. For example:

   ```python
   site = gdchardwaremanagement_v1alpha.Site(
       organization_contact=organization_contact,
       google_maps_pin_uri="https://maps.app.goo.gl/z7bE8z8fffg6Sri46",
   )

   create_site_response = client.create_site(
       request=gdchardwaremanagement_v1alpha.CreateSiteRequest(
           parent="projects/myProject/locations/us-east1",
           site_id="mySite",
           site=site,
       ),
   ).result()
   ```
3. Create a `Zone` resource. For example:

   ```python
   zone = gdchardwaremanagement_v1alpha.Zone(
       contacts=[contact],
       network_config=gdchardwaremanagement_v1alpha.ZoneNetworkConfig(
           management_ipv4_subnet=gdchardwaremanagement_v1alpha.Subnet(
               address_range="192.0.2.0/24",
               default_gateway_ip_address="192.0.2.1",
           ),
           machine_mgmt_ipv4_range="192.0.2.8/29",
           kubernetes_ipv4_subnet=gdchardwaremanagement_v1alpha.Subnet(
               address_range="203.0.113.0/24",
               default_gateway_ip_address="203.0.113.1",
           ),
           kubernetes_node_ipv4_range="203.0.113.8/29",
           kubernetes_control_plane_ipv4_range="203.0.113.16/29",
       ),
   )

   create_zone_response = client.create_zone(
       request=gdchardwaremanagement_v1alpha.CreateZoneRequest(
           parent="projects/myProject/locations/us-east1",
           zone_id="myZone",
           zone=zone,
       ),
   ).result()
   ```
4. Create the `Hardware` resources. You must specify a unique `hardware_id` value
   for each machine in your Distributed Cloud connected deployment.
   For example:

   ```python
   from google.type import date_pb2

   hardware = gdchardwaremanagement_v1alpha.Hardware(
       order=create_order_response.name,
       site=create_site_response.name,
       zone=create_zone_response.name,
       config=gdchardwaremanagement_v1alpha.HardwareConfig(
           sku="projects/myProject/locations/us-east1/skus/gdce-server-l",
           power_supply=gdchardwaremanagement_v1alpha.types.PowerSupply.POWER_SUPPLY_AC,
       ),
       physical_info=gdchardwaremanagement_v1alpha.HardwarePhysicalInfo(
           power_receptacle=gdchardwaremanagement_v1alpha.types.HardwarePhysicalInfo.PowerReceptacleType.NEMA_5_15,
           network_uplink=gdchardwaremanagement_v1alpha.types.HardwarePhysicalInfo.NetworkUplinkType.RJ_45,
           voltage=gdchardwaremanagement_v1alpha.types.HardwarePhysicalInfo.Voltage.VOLTAGE_110,
           amperes=gdchardwaremanagement_v1alpha.types.HardwarePhysicalInfo.Amperes.AMPERES_15,
       ),
       installation_info=gdchardwaremanagement_v1alpha.HardwareInstallationInfo(
           rack_location="Floor 2, Room 201, Row 7, Rack 3",
           power_distance_meters=2,
           switch_distance_meters=2,
           rack_unit_dimensions=gdchardwaremanagement_v1alpha.Dimensions(
               width_inches=19,
               height_inches=1.75,
               depth_inches=30,
           ),
           rack_space=gdchardwaremanagement_v1alpha.RackSpace(
               start_rack_unit=12,
               end_rack_unit=12,
           ),
           rack_type=gdchardwaremanagement_v1alpha.types.HardwareInstallationInfo.RackType.FOUR_POST,
       ),
       requested_installation_date=date_pb2.Date(year=2024, month=11, day=22),
   )

   create_hardware_response = client.create_hardware(
       request=gdchardwaremanagement_v1alpha.CreateHardwareRequest(
           parent="projects/myProject/locations/us-east1",
           hardware_id="machineHardwareID",
           hardware=hardware,
       ),
   ).result()
   ```
5. Submit the `Order` resource to Google:

   ```python
   submit_order_response = client.submit_order(
       request=gdchardwaremanagement_v1alpha.SubmitOrderRequest(
           name=create_order_response.name,
       ),
   ).result()
   ```

## What's next

- [Deploy workloads on Google Distributed Cloud connected](https://docs.cloud.google.com/distributed-cloud/connected/1.7.0/docs/deploy)