<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def create( cls, *, type: str, power_address: str, power_user: str = None, power_pass: str = None, name: str = None, zone: typing.Union[str, Zone] = None, tags: typing.Sequence[str] = None):
 """Create a `Pod` in MAAS. :param type: Type of pod to create (rsd, virsh) (required). :type name: `str` :param power_address: Address for power control of the pod (required). :type power_address: `str` :param power_user: User for power control of the pod (required for rsd). :type power_user: `str` :param power_pass: Password for power control of the pod (required for rsd). :type power_pass: `str` :param name: Name for the pod (optional). :type name: `str` :param zone: Name of the zone for the pod (optional). :type zone: `str` or `Zone` :param tags: A tag or tags (separated by comma) for the pod. :type tags: `str` :returns: The created Pod. :rtype: `Pod` """

        params = remove_None({
            'type': type,
            'power_address': power_address,
            'power_user': power_user,
            'power_pass': power_pass,
            'name': name,
            'tags': tags,
        })
        if type == 'rsd' and power_user is None:
            message = "'power_user' is required for pod type `rsd`"
            raise OperationNotAllowed(message)
        if type == 'rsd' and power_pass is None:
            message = "'power_pass' is required for pod type `rsd`"
            raise OperationNotAllowed(message)
        if zone is not None:
            if isinstance(zone, Zone):
                params["zone"] = zone.name
            elif isinstance(zone, str):
                params["zone"] = zone
            else:
                raise TypeError(
                    "zone must be a str or Zone, not %s" % type(zone).__name__)
        return cls._object(await cls._handler.create(**params))