docstr: This function is used to attach tag to vm
docstr_tok: ["This","function","is","used","to","attach","tag","to","vm"]
code: def attach_tag(self, vm_id, resource_type, tag_id):
      """
      This function is used to attach tag to vm
      """
      dynamic_id = DynamicID(type=resource_type, id=vm_id)
      try:
          self.vsphere_sdk_client.tagging.TagAssociation.attach(
              tag_id, dynamic_id
          )
          logger.debug(f"Tag {tag_id} attached on VM {dynamic_id}")
      except Exception as e:
          logger.warning(
              f"Check that the tag is attachable to {resource_type}"
          )
          raise e
  
imports: import logging
  import time
  import uuid
  from threading import RLock
  import com.vmware.vapi.std.errors_client
  import requests
  from com.vmware.cis.tagging_client import CategoryModel
  from com.vmware.content.library_client import Item
  from com.vmware.vapi.std.errors_client import Unauthenticated
  from com.vmware.vapi.std_client import DynamicID
  from com.vmware.vcenter.ovf_client import DiskProvisioningType, LibraryItem
  from com.vmware.vcenter.vm.hardware_client import Cpu, Memory
  from com.vmware.vcenter.vm_client import Power
  from com.vmware.vcenter_client import VM, Host, ResourcePool
  from vmware.vapi.vsphere.client import create_vsphere_client
  from ray.autoscaler._private.vsphere.utils import Constants, singleton_client
  from ray.autoscaler.tags import TAG_RAY_CLUSTER_NAME
label_desc: Use image node_id 18 for calling the VsphereSdkProvider obj's underlying member method code with example usage: obj.attach_tag(vm_id, resource_type, tag_id) without return types