// Module included in the following assemblies:
//
// * windows_containers/creating_windows_machinesets/creating-windows-machineset-gcp.adoc

:_mod-docs-content-type: REFERENCE
[id="windows-machineset-gcp_{context}"]
= Sample YAML for a Windows MachineSet object on {gcp-short}

[role="_abstract"]
You can add Windows nodes to a {gcp-first} cluster by defining a Windows `MachineSet` object that the Windows Machine Config Operator (WMCO) can react upon.

The following example is a YAML file for creating a `MachineSet` object for {gcp-short}.

[source,yaml]
----
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
  name: <infrastructure_id>-windows-worker-<zone_suffix>
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone_suffix>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone_suffix>
        machine.openshift.io/os-id: Windows
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/worker: ""
      providerSpec:
        value:
          apiVersion: machine.openshift.io/v1beta1
          canIPForward: false
          credentialsSecret:
            name: gcp-cloud-credentials
          deletionProtection: false
          disks:
          - autoDelete: true
            boot: true
            image: <windows_server_image>
            sizeGb: 128
            type: pd-ssd
          kind: GCPMachineProviderSpec
          machineType: n1-standard-4
          networkInterfaces:
          - network: <infrastructure_id>-network
            subnetwork: <infrastructure_id>-worker-subnet
          projectID: <project_id>
          region: <region>
          serviceAccounts:
          - email: <infrastructure_id>-w@<project_id>.iam.gserviceaccount.com
            scopes:
            - https://www.googleapis.com/auth/cloud-platform
          tags:
          - <infrastructure_id>-worker
          userDataSecret:
            name: windows-user-data
          zone: <zone>
----
where:

`metadata.labels`:: For the `machine.openshift.io/cluster-api-cluster` label, replace `<infrastructure_id>` with the infrastructure ID that is based on the cluster ID that you set when you provisioned the cluster. You can obtain the infrastructure ID by running the following command: 
+
[source,terminal]
----
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
----
`metadata.name`:: Replace the infrastructure ID, worker label, and zone suffix, such as `a`.
`spec.selector.matchLabels`:: Replace the parameters for the following labels: 
* `machine.openshift.io/cluster-api-cluster`. Replace the infrastructure ID.
* `machine.openshift.io/cluster-api-machineset`. Replace the infrastructure ID, worker label, and zone suffix.
`spec.template.metadata.labels`:: Replace the parameters for the following labels: 
* `machine.openshift.io/cluster-api-cluster`. Replace the infrastructure ID.
* `machine.openshift.io/cluster-api-machineset`. Replace the infrastructure ID, worker label, and zone suffix. 
* `machine.openshift.io/os-id: Windows`. When set to `Windows`, configures the compute machine set as a Windows machine.
`spec.template.spec.metadata.labels`::  When set to `node-role.kubernetes.io/worker`, configures the node as a compute machine.
`spec.template.spec.providerSpec`:: Specify the following parameters:
* `value.disks.image`. Specifies the full path to an image of a supported version of Windows Server. 
* `value.networkInterfaces.network`. Replace the infrastructure ID.
* `value.networkInterfaces.subnetwork`. Replace the infrastructure ID.
* `value.projectID`. Specifies the {gcp-short} project that this cluster was created in.
* `value.region`. Specifies the {gcp-short} region, such as `us-central1`. 
* `value.userDataSecret.name`. Specifies the name of the secret in the user data YAML file that is in the `openshift-machine-api` namespace. Use the value that installation program populates in the default compute machine set.
* `value.zone`. Specifies the zone within the chosen region, such as `us-central1-a`.
