code: def add_storage_controller(self, name, connection_type):
          
          if not isinstance(name, basestring):
              raise TypeError("name can only be an instance of type basestring")
          if not isinstance(connection_type, StorageBus):
              raise TypeError("connection_type can only be an instance of type StorageBus")
          controller = self._call("addStorageController",
                       in_p=[name, connection_type])
          controller = IStorageController(controller)
          return controller
docs: Adds a new storage controller (SCSI, SAS or SATA controller) to the
          machine and returns it as an instance of
          :py:class:`IStorageController` .
          
          @a name identifies the controller for subsequent calls such as
          :py:func:`get_storage_controller_by_name` ,
          :py:func:`get_storage_controller_by_instance` ,
          :py:func:`remove_storage_controller` ,
          :py:func:`attach_device`  or :py:func:`mount_medium` .
          
          After the controller has been added, you can set its exact
          type by setting the :py:func:`IStorageController.controller_type` .
  
          in name of type str
  
          in connection_type of type :class:`StorageBus`
  
          return controller of type :class:`IStorageController`
  
          raises :class:`VBoxErrorObjectInUse`
              A storage controller with given name exists already.
          
          raises :class:`OleErrorInvalidarg`
              Invalid @a controllerType.