/// <summary>
 /// Validate the object.
 /// </summary>
 /// <exception cref="ValidationException">
 /// Thrown if validation fails
 /// </exception>
 public override void Validate()
 {
     base.Validate();
     if (UpgradePolicy != null)
     {
         UpgradePolicy.Validate();
     }
     if (VirtualMachineProfile != null)
     {
         VirtualMachineProfile.Validate();
     }
 }
 /// <summary>
 /// Initializes a new instance of the VirtualMachineScaleSet class.
 /// </summary>
 /// <param name="location">Resource location</param>
 /// <param name="id">Resource Id</param>
 /// <param name="name">Resource name</param>
 /// <param name="type">Resource type</param>
 /// <param name="tags">Resource tags</param>
 /// <param name="sku">The virtual machine scale set sku.</param>
 /// <param name="plan">Specifies information about the marketplace
 /// image used to create the virtual machine. This element is only used
 /// for marketplace images. Before you can use a marketplace image from
 /// an API, you must enable the image for programmatic use.  In the
 /// Azure portal, find the marketplace image that you want to use and
 /// then click **Want to deploy programmatically, Get Started -&gt;**.
 /// Enter any required information and then click **Save**.</param>
 /// <param name="upgradePolicy">The upgrade policy.</param>
 /// <param name="virtualMachineProfile">The virtual machine
 /// profile.</param>
 /// <param name="provisioningState">The provisioning state, which only
 /// appears in the response.</param>
 /// <param name="overprovision">Specifies whether the Virtual Machine
 /// Scale Set should be overprovisioned.</param>
 /// <param name="uniqueId">Specifies the ID which uniquely identifies a
 /// Virtual Machine Scale Set.</param>
 /// <param name="singlePlacementGroup">When true this limits the scale
 /// set to a single placement group, of max size 100 virtual
 /// machines.</param>
 /// <param name="zoneBalance">Whether to force stictly even Virtual
 /// Machine distribution cross x-zones in case there is zone
 /// outage.</param>
 /// <param name="platformFaultDomainCount">Fault Domain count for each
 /// placement group.</param>
 /// <param name="identity">The identity of the virtual machine scale
 /// set, if configured.</param>
 /// <param name="zones">The virtual machine scale set zones.</param>
 public VirtualMachineScaleSet(string location, string id = default(string), string name = default(string), string type = default(string), IDictionary <string, string> tags = default(IDictionary <string, string>), Sku sku = default(Sku), Plan plan = default(Plan), UpgradePolicy upgradePolicy = default(UpgradePolicy), VirtualMachineScaleSetVMProfile virtualMachineProfile = default(VirtualMachineScaleSetVMProfile), string provisioningState = default(string), bool?overprovision = default(bool?), string uniqueId = default(string), bool?singlePlacementGroup = default(bool?), bool?zoneBalance = default(bool?), int?platformFaultDomainCount = default(int?), VirtualMachineScaleSetIdentity identity = default(VirtualMachineScaleSetIdentity), IList <string> zones = default(IList <string>))
     : base(location, id, name, type, tags)
 {
     Sku                      = sku;
     Plan                     = plan;
     UpgradePolicy            = upgradePolicy;
     VirtualMachineProfile    = virtualMachineProfile;
     ProvisioningState        = provisioningState;
     Overprovision            = overprovision;
     UniqueId                 = uniqueId;
     SinglePlacementGroup     = singlePlacementGroup;
     ZoneBalance              = zoneBalance;
     PlatformFaultDomainCount = platformFaultDomainCount;
     Identity                 = identity;
     Zones                    = zones;
     CustomInit();
 }
 /// <summary>
 /// Initializes a new instance of the VirtualMachineScaleSetUpdate
 /// class.
 /// </summary>
 /// <param name="tags">Resource tags</param>
 /// <param name="sku">The virtual machine scale set sku.</param>
 /// <param name="plan">The purchase plan when deploying a virtual
 /// machine scale set from VM Marketplace images.</param>
 /// <param name="upgradePolicy">The upgrade policy.</param>
 /// <param name="virtualMachineProfile">The virtual machine
 /// profile.</param>
 /// <param name="overprovision">Specifies whether the Virtual Machine
 /// Scale Set should be overprovisioned.</param>
 /// <param name="singlePlacementGroup">When true this limits the scale
 /// set to a single placement group, of max size 100 virtual
 /// machines.</param>
 /// <param name="identity">The identity of the virtual machine scale
 /// set, if configured.</param>
 public VirtualMachineScaleSetUpdate(IDictionary <string, string> tags = default(IDictionary <string, string>), Sku sku = default(Sku), Plan plan = default(Plan), UpgradePolicy upgradePolicy = default(UpgradePolicy), VirtualMachineScaleSetUpdateVMProfile virtualMachineProfile = default(VirtualMachineScaleSetUpdateVMProfile), bool?overprovision = default(bool?), bool?singlePlacementGroup = default(bool?), VirtualMachineScaleSetIdentity identity = default(VirtualMachineScaleSetIdentity))
     : base(tags)
 {
     Sku                   = sku;
     Plan                  = plan;
     UpgradePolicy         = upgradePolicy;
     VirtualMachineProfile = virtualMachineProfile;
     Overprovision         = overprovision;
     SinglePlacementGroup  = singlePlacementGroup;
     Identity              = identity;
     CustomInit();
 }