/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.gkeonprem.v1.model;

/**
 * Resource that represents a VMware user cluster. ##
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Anthos On-Prem API. For a detailed explanation see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class VmwareCluster extends com.google.api.client.json.GenericJson {

  /**
   * Required. The admin cluster this VMware user cluster belongs to. This is the full resource name
   * of the admin cluster's fleet membership. In the future, references to other resource types
   * might be allowed if admin clusters are modeled as their own resources.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String adminClusterMembership;

  /**
   * Output only. The resource name of the VMware admin cluster hosting this user cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String adminClusterName;

  /**
   * Annotations on the VMware user cluster. This field has the same restrictions as Kubernetes
   * annotations. The total size of all keys and values combined is limited to 256k. Key can have 2
   * segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS
   * subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes
   * (-), underscores (_), dots (.), and alphanumerics between.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.Map<String, java.lang.String> annotations;

  /**
   * AAGConfig specifies whether to spread VMware user cluster nodes across at least three physical
   * hosts in the datacenter.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareAAGConfig antiAffinityGroups;

  /**
   * RBAC policy that will be applied and managed by the Anthos On-Prem API.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Authorization authorization;

  /**
   * Configuration for auto repairing.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareAutoRepairConfig autoRepairConfig;

  /**
   * VMware user cluster control plane nodes must have either 1 or 3 replicas.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareControlPlaneNodeConfig controlPlaneNode;

  /**
   * Output only. The time at which VMware user cluster was created.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String createTime;

  /**
   * VmwareDataplaneV2Config specifies configuration for Dataplane V2.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareDataplaneV2Config dataplaneV2;

  /**
   * Output only. The time at which VMware user cluster was deleted.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String deleteTime;

  /**
   * A human readable description of this VMware user cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String description;

  /**
   * Disable bundled ingress.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean disableBundledIngress;

  /**
   * Enable control plane V2. Default to false.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean enableControlPlaneV2;

  /**
   * Output only. The DNS name of VMware user cluster's API server.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String endpoint;

  /**
   * This checksum is computed by the server based on the value of other fields, and may be sent on
   * update and delete requests to ensure the client has an up-to-date value before proceeding.
   * Allows clients to perform consistent read-modify-writes through optimistic concurrency control.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String etag;

  /**
   * Output only. Fleet configuration for the cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private Fleet fleet;

  /**
   * Load balancer configuration.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareLoadBalancerConfig loadBalancer;

  /**
   * Output only. The object name of the VMware OnPremUserCluster custom resource on the associated
   * admin cluster. This field is used to support conflicting names when enrolling existing clusters
   * to the API. When used as a part of cluster enrollment, this field will differ from the ID in
   * the resource name. For new clusters, this field will match the user provided cluster name and
   * be visible in the last component of the resource name. It is not modifiable. All users should
   * use this name to access their cluster using gkectl or kubectl and should expect to see the
   * local name when viewing admin cluster controller logs.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String localName;

  /**
   * Immutable. The VMware user cluster resource name.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String name;

  /**
   * The VMware user cluster network configuration.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareNetworkConfig networkConfig;

  /**
   * Required. The Anthos clusters on the VMware version for your user cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String onPremVersion;

  /**
   * Output only. If set, there are currently changes in flight to the VMware user cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean reconciling;

  /**
   * Output only. The current state of VMware user cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String state;

  /**
   * Output only. ResourceStatus representing detailed cluster state.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ResourceStatus status;

  /**
   * Storage configuration.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareStorageConfig storage;

  /**
   * Output only. The unique identifier of the VMware user cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String uid;

  /**
   * Output only. The time at which VMware user cluster was last updated.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private String updateTime;

  /**
   * Specifies upgrade policy for the cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareClusterUpgradePolicy upgradePolicy;

  /**
   * Output only. ValidationCheck represents the result of the preflight check job.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ValidationCheck validationCheck;

  /**
   * Output only. VmwareVCenterConfig specifies vCenter config for the user cluster. Inherited from
   * the admin cluster.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VmwareVCenterConfig vcenter;

  /**
   * Enable VM tracking.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean vmTrackingEnabled;

  /**
   * Required. The admin cluster this VMware user cluster belongs to. This is the full resource name
   * of the admin cluster's fleet membership. In the future, references to other resource types
   * might be allowed if admin clusters are modeled as their own resources.
   * @return value or {@code null} for none
   */
  public java.lang.String getAdminClusterMembership() {
    return adminClusterMembership;
  }

  /**
   * Required. The admin cluster this VMware user cluster belongs to. This is the full resource name
   * of the admin cluster's fleet membership. In the future, references to other resource types
   * might be allowed if admin clusters are modeled as their own resources.
   * @param adminClusterMembership adminClusterMembership or {@code null} for none
   */
  public VmwareCluster setAdminClusterMembership(java.lang.String adminClusterMembership) {
    this.adminClusterMembership = adminClusterMembership;
    return this;
  }

  /**
   * Output only. The resource name of the VMware admin cluster hosting this user cluster.
   * @return value or {@code null} for none
   */
  public java.lang.String getAdminClusterName() {
    return adminClusterName;
  }

  /**
   * Output only. The resource name of the VMware admin cluster hosting this user cluster.
   * @param adminClusterName adminClusterName or {@code null} for none
   */
  public VmwareCluster setAdminClusterName(java.lang.String adminClusterName) {
    this.adminClusterName = adminClusterName;
    return this;
  }

  /**
   * Annotations on the VMware user cluster. This field has the same restrictions as Kubernetes
   * annotations. The total size of all keys and values combined is limited to 256k. Key can have 2
   * segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS
   * subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes
   * (-), underscores (_), dots (.), and alphanumerics between.
   * @return value or {@code null} for none
   */
  public java.util.Map<String, java.lang.String> getAnnotations() {
    return annotations;
  }

  /**
   * Annotations on the VMware user cluster. This field has the same restrictions as Kubernetes
   * annotations. The total size of all keys and values combined is limited to 256k. Key can have 2
   * segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS
   * subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes
   * (-), underscores (_), dots (.), and alphanumerics between.
   * @param annotations annotations or {@code null} for none
   */
  public VmwareCluster setAnnotations(java.util.Map<String, java.lang.String> annotations) {
    this.annotations = annotations;
    return this;
  }

  /**
   * AAGConfig specifies whether to spread VMware user cluster nodes across at least three physical
   * hosts in the datacenter.
   * @return value or {@code null} for none
   */
  public VmwareAAGConfig getAntiAffinityGroups() {
    return antiAffinityGroups;
  }

  /**
   * AAGConfig specifies whether to spread VMware user cluster nodes across at least three physical
   * hosts in the datacenter.
   * @param antiAffinityGroups antiAffinityGroups or {@code null} for none
   */
  public VmwareCluster setAntiAffinityGroups(VmwareAAGConfig antiAffinityGroups) {
    this.antiAffinityGroups = antiAffinityGroups;
    return this;
  }

  /**
   * RBAC policy that will be applied and managed by the Anthos On-Prem API.
   * @return value or {@code null} for none
   */
  public Authorization getAuthorization() {
    return authorization;
  }

  /**
   * RBAC policy that will be applied and managed by the Anthos On-Prem API.
   * @param authorization authorization or {@code null} for none
   */
  public VmwareCluster setAuthorization(Authorization authorization) {
    this.authorization = authorization;
    return this;
  }

  /**
   * Configuration for auto repairing.
   * @return value or {@code null} for none
   */
  public VmwareAutoRepairConfig getAutoRepairConfig() {
    return autoRepairConfig;
  }

  /**
   * Configuration for auto repairing.
   * @param autoRepairConfig autoRepairConfig or {@code null} for none
   */
  public VmwareCluster setAutoRepairConfig(VmwareAutoRepairConfig autoRepairConfig) {
    this.autoRepairConfig = autoRepairConfig;
    return this;
  }

  /**
   * VMware user cluster control plane nodes must have either 1 or 3 replicas.
   * @return value or {@code null} for none
   */
  public VmwareControlPlaneNodeConfig getControlPlaneNode() {
    return controlPlaneNode;
  }

  /**
   * VMware user cluster control plane nodes must have either 1 or 3 replicas.
   * @param controlPlaneNode controlPlaneNode or {@code null} for none
   */
  public VmwareCluster setControlPlaneNode(VmwareControlPlaneNodeConfig controlPlaneNode) {
    this.controlPlaneNode = controlPlaneNode;
    return this;
  }

  /**
   * Output only. The time at which VMware user cluster was created.
   * @return value or {@code null} for none
   */
  public String getCreateTime() {
    return createTime;
  }

  /**
   * Output only. The time at which VMware user cluster was created.
   * @param createTime createTime or {@code null} for none
   */
  public VmwareCluster setCreateTime(String createTime) {
    this.createTime = createTime;
    return this;
  }

  /**
   * VmwareDataplaneV2Config specifies configuration for Dataplane V2.
   * @return value or {@code null} for none
   */
  public VmwareDataplaneV2Config getDataplaneV2() {
    return dataplaneV2;
  }

  /**
   * VmwareDataplaneV2Config specifies configuration for Dataplane V2.
   * @param dataplaneV2 dataplaneV2 or {@code null} for none
   */
  public VmwareCluster setDataplaneV2(VmwareDataplaneV2Config dataplaneV2) {
    this.dataplaneV2 = dataplaneV2;
    return this;
  }

  /**
   * Output only. The time at which VMware user cluster was deleted.
   * @return value or {@code null} for none
   */
  public String getDeleteTime() {
    return deleteTime;
  }

  /**
   * Output only. The time at which VMware user cluster was deleted.
   * @param deleteTime deleteTime or {@code null} for none
   */
  public VmwareCluster setDeleteTime(String deleteTime) {
    this.deleteTime = deleteTime;
    return this;
  }

  /**
   * A human readable description of this VMware user cluster.
   * @return value or {@code null} for none
   */
  public java.lang.String getDescription() {
    return description;
  }

  /**
   * A human readable description of this VMware user cluster.
   * @param description description or {@code null} for none
   */
  public VmwareCluster setDescription(java.lang.String description) {
    this.description = description;
    return this;
  }

  /**
   * Disable bundled ingress.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getDisableBundledIngress() {
    return disableBundledIngress;
  }

  /**
   * Disable bundled ingress.
   * @param disableBundledIngress disableBundledIngress or {@code null} for none
   */
  public VmwareCluster setDisableBundledIngress(java.lang.Boolean disableBundledIngress) {
    this.disableBundledIngress = disableBundledIngress;
    return this;
  }

  /**
   * Enable control plane V2. Default to false.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getEnableControlPlaneV2() {
    return enableControlPlaneV2;
  }

  /**
   * Enable control plane V2. Default to false.
   * @param enableControlPlaneV2 enableControlPlaneV2 or {@code null} for none
   */
  public VmwareCluster setEnableControlPlaneV2(java.lang.Boolean enableControlPlaneV2) {
    this.enableControlPlaneV2 = enableControlPlaneV2;
    return this;
  }

  /**
   * Output only. The DNS name of VMware user cluster's API server.
   * @return value or {@code null} for none
   */
  public java.lang.String getEndpoint() {
    return endpoint;
  }

  /**
   * Output only. The DNS name of VMware user cluster's API server.
   * @param endpoint endpoint or {@code null} for none
   */
  public VmwareCluster setEndpoint(java.lang.String endpoint) {
    this.endpoint = endpoint;
    return this;
  }

  /**
   * This checksum is computed by the server based on the value of other fields, and may be sent on
   * update and delete requests to ensure the client has an up-to-date value before proceeding.
   * Allows clients to perform consistent read-modify-writes through optimistic concurrency control.
   * @return value or {@code null} for none
   */
  public java.lang.String getEtag() {
    return etag;
  }

  /**
   * This checksum is computed by the server based on the value of other fields, and may be sent on
   * update and delete requests to ensure the client has an up-to-date value before proceeding.
   * Allows clients to perform consistent read-modify-writes through optimistic concurrency control.
   * @param etag etag or {@code null} for none
   */
  public VmwareCluster setEtag(java.lang.String etag) {
    this.etag = etag;
    return this;
  }

  /**
   * Output only. Fleet configuration for the cluster.
   * @return value or {@code null} for none
   */
  public Fleet getFleet() {
    return fleet;
  }

  /**
   * Output only. Fleet configuration for the cluster.
   * @param fleet fleet or {@code null} for none
   */
  public VmwareCluster setFleet(Fleet fleet) {
    this.fleet = fleet;
    return this;
  }

  /**
   * Load balancer configuration.
   * @return value or {@code null} for none
   */
  public VmwareLoadBalancerConfig getLoadBalancer() {
    return loadBalancer;
  }

  /**
   * Load balancer configuration.
   * @param loadBalancer loadBalancer or {@code null} for none
   */
  public VmwareCluster setLoadBalancer(VmwareLoadBalancerConfig loadBalancer) {
    this.loadBalancer = loadBalancer;
    return this;
  }

  /**
   * Output only. The object name of the VMware OnPremUserCluster custom resource on the associated
   * admin cluster. This field is used to support conflicting names when enrolling existing clusters
   * to the API. When used as a part of cluster enrollment, this field will differ from the ID in
   * the resource name. For new clusters, this field will match the user provided cluster name and
   * be visible in the last component of the resource name. It is not modifiable. All users should
   * use this name to access their cluster using gkectl or kubectl and should expect to see the
   * local name when viewing admin cluster controller logs.
   * @return value or {@code null} for none
   */
  public java.lang.String getLocalName() {
    return localName;
  }

  /**
   * Output only. The object name of the VMware OnPremUserCluster custom resource on the associated
   * admin cluster. This field is used to support conflicting names when enrolling existing clusters
   * to the API. When used as a part of cluster enrollment, this field will differ from the ID in
   * the resource name. For new clusters, this field will match the user provided cluster name and
   * be visible in the last component of the resource name. It is not modifiable. All users should
   * use this name to access their cluster using gkectl or kubectl and should expect to see the
   * local name when viewing admin cluster controller logs.
   * @param localName localName or {@code null} for none
   */
  public VmwareCluster setLocalName(java.lang.String localName) {
    this.localName = localName;
    return this;
  }

  /**
   * Immutable. The VMware user cluster resource name.
   * @return value or {@code null} for none
   */
  public java.lang.String getName() {
    return name;
  }

  /**
   * Immutable. The VMware user cluster resource name.
   * @param name name or {@code null} for none
   */
  public VmwareCluster setName(java.lang.String name) {
    this.name = name;
    return this;
  }

  /**
   * The VMware user cluster network configuration.
   * @return value or {@code null} for none
   */
  public VmwareNetworkConfig getNetworkConfig() {
    return networkConfig;
  }

  /**
   * The VMware user cluster network configuration.
   * @param networkConfig networkConfig or {@code null} for none
   */
  public VmwareCluster setNetworkConfig(VmwareNetworkConfig networkConfig) {
    this.networkConfig = networkConfig;
    return this;
  }

  /**
   * Required. The Anthos clusters on the VMware version for your user cluster.
   * @return value or {@code null} for none
   */
  public java.lang.String getOnPremVersion() {
    return onPremVersion;
  }

  /**
   * Required. The Anthos clusters on the VMware version for your user cluster.
   * @param onPremVersion onPremVersion or {@code null} for none
   */
  public VmwareCluster setOnPremVersion(java.lang.String onPremVersion) {
    this.onPremVersion = onPremVersion;
    return this;
  }

  /**
   * Output only. If set, there are currently changes in flight to the VMware user cluster.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getReconciling() {
    return reconciling;
  }

  /**
   * Output only. If set, there are currently changes in flight to the VMware user cluster.
   * @param reconciling reconciling or {@code null} for none
   */
  public VmwareCluster setReconciling(java.lang.Boolean reconciling) {
    this.reconciling = reconciling;
    return this;
  }

  /**
   * Output only. The current state of VMware user cluster.
   * @return value or {@code null} for none
   */
  public java.lang.String getState() {
    return state;
  }

  /**
   * Output only. The current state of VMware user cluster.
   * @param state state or {@code null} for none
   */
  public VmwareCluster setState(java.lang.String state) {
    this.state = state;
    return this;
  }

  /**
   * Output only. ResourceStatus representing detailed cluster state.
   * @return value or {@code null} for none
   */
  public ResourceStatus getStatus() {
    return status;
  }

  /**
   * Output only. ResourceStatus representing detailed cluster state.
   * @param status status or {@code null} for none
   */
  public VmwareCluster setStatus(ResourceStatus status) {
    this.status = status;
    return this;
  }

  /**
   * Storage configuration.
   * @return value or {@code null} for none
   */
  public VmwareStorageConfig getStorage() {
    return storage;
  }

  /**
   * Storage configuration.
   * @param storage storage or {@code null} for none
   */
  public VmwareCluster setStorage(VmwareStorageConfig storage) {
    this.storage = storage;
    return this;
  }

  /**
   * Output only. The unique identifier of the VMware user cluster.
   * @return value or {@code null} for none
   */
  public java.lang.String getUid() {
    return uid;
  }

  /**
   * Output only. The unique identifier of the VMware user cluster.
   * @param uid uid or {@code null} for none
   */
  public VmwareCluster setUid(java.lang.String uid) {
    this.uid = uid;
    return this;
  }

  /**
   * Output only. The time at which VMware user cluster was last updated.
   * @return value or {@code null} for none
   */
  public String getUpdateTime() {
    return updateTime;
  }

  /**
   * Output only. The time at which VMware user cluster was last updated.
   * @param updateTime updateTime or {@code null} for none
   */
  public VmwareCluster setUpdateTime(String updateTime) {
    this.updateTime = updateTime;
    return this;
  }

  /**
   * Specifies upgrade policy for the cluster.
   * @return value or {@code null} for none
   */
  public VmwareClusterUpgradePolicy getUpgradePolicy() {
    return upgradePolicy;
  }

  /**
   * Specifies upgrade policy for the cluster.
   * @param upgradePolicy upgradePolicy or {@code null} for none
   */
  public VmwareCluster setUpgradePolicy(VmwareClusterUpgradePolicy upgradePolicy) {
    this.upgradePolicy = upgradePolicy;
    return this;
  }

  /**
   * Output only. ValidationCheck represents the result of the preflight check job.
   * @return value or {@code null} for none
   */
  public ValidationCheck getValidationCheck() {
    return validationCheck;
  }

  /**
   * Output only. ValidationCheck represents the result of the preflight check job.
   * @param validationCheck validationCheck or {@code null} for none
   */
  public VmwareCluster setValidationCheck(ValidationCheck validationCheck) {
    this.validationCheck = validationCheck;
    return this;
  }

  /**
   * Output only. VmwareVCenterConfig specifies vCenter config for the user cluster. Inherited from
   * the admin cluster.
   * @return value or {@code null} for none
   */
  public VmwareVCenterConfig getVcenter() {
    return vcenter;
  }

  /**
   * Output only. VmwareVCenterConfig specifies vCenter config for the user cluster. Inherited from
   * the admin cluster.
   * @param vcenter vcenter or {@code null} for none
   */
  public VmwareCluster setVcenter(VmwareVCenterConfig vcenter) {
    this.vcenter = vcenter;
    return this;
  }

  /**
   * Enable VM tracking.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getVmTrackingEnabled() {
    return vmTrackingEnabled;
  }

  /**
   * Enable VM tracking.
   * @param vmTrackingEnabled vmTrackingEnabled or {@code null} for none
   */
  public VmwareCluster setVmTrackingEnabled(java.lang.Boolean vmTrackingEnabled) {
    this.vmTrackingEnabled = vmTrackingEnabled;
    return this;
  }

  @Override
  public VmwareCluster set(String fieldName, Object value) {
    return (VmwareCluster) super.set(fieldName, value);
  }

  @Override
  public VmwareCluster clone() {
    return (VmwareCluster) super.clone();
  }

}
