code: func (c *controllerCommon) getNodeVMSet(nodeName types.NodeName) (VMSet, error) {
  	// 1. vmType is standard, return cloud.vmSet directly.
  	if c.cloud.VMType == vmTypeStandard {
  		return c.cloud.vmSet, nil
  	}
  
  	// 2. vmType is Virtual Machine Scale Set (vmss), convert vmSet to scaleSet.
  	ss, ok := c.cloud.vmSet.(*scaleSet)
  	if !ok {
  		return nil, fmt.Errorf("error of converting vmSet (%q) to scaleSet with vmType %q", c.cloud.vmSet, c.cloud.VMType)
  	}
  
  	// 3. If the node is managed by availability set, then return ss.availabilitySet.
  	managedByAS, err := ss.isNodeManagedByAvailabilitySet(mapNodeNameToVMName(nodeName))
  	if err != nil {
  		return nil, err
  	}
  	if managedByAS {
  		// vm is managed by availability set.
  		return ss.availabilitySet, nil
  	}
  
  	// 4. Node is managed by vmss
  	return ss, nil
  }
docs: // getNodeVMSet gets the VMSet interface based on config.VMType and the real virtual machine type.