def volume_create(self, label, region=None, linode=None, size=<NUM_LIT:20>, **kwargs):
if not (region or linode):<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>params = {<EOL>"<STR_LIT:label>": label,<EOL>"<STR_LIT:size>": size,<EOL>"<STR_LIT>": region.id if issubclass(type(region), Base) else region,<EOL>"<STR_LIT>": linode.id if issubclass(type(linode), Base) else linode,<EOL>}<EOL>params.update(kwargs)<EOL>result = self.post('<STR_LIT>', data=params)<EOL>if not '<STR_LIT:id>' in result:<EOL><INDENT>raise UnexpectedResponseError('<STR_LIT>', json=result)<EOL><DEDENT>v = Volume(self, result['<STR_LIT:id>'], result)<EOL>return v<EOL>
Creates a new Block Storage Volume, either in the given Region or
attached to the given Instance.

:param label: The label for the new Volume.
:type label: str
:param region: The Region to create this Volume in.  Not required if
               `linode` is provided.
:type region: Region or str
:param linode: The Instance to attach this Volume to.  If not given, the
               new Volume will not be attached to anything.
:type linode: Instance or int
:param size: The size, in GB, of the new Volume.  Defaults to 20.
:type size: int

:returns: The new Volume.
:rtype: Volume