def adapter_port(self):
        """
        :class:`~zhmcclient.Port`: The storage adapter port associated with
        this virtual storage resource, once discovery has determined which
        port to use for this virtual storage resource.

        This applies to both, FCP and FICON/ECKD typed storage groups.

        The returned adapter port object has only a minimal set of properties
        set ('object-id', 'object-uri', 'class', 'parent').

        Authorization requirements:

        * Object-access permission to the storage group owning this
          virtual storage resource.
        * Object-access permission to the CPC of the storage adapter.
        * Object-access permission to the storage adapter.

        Raises:

          :exc:`~zhmcclient.HTTPError`
          :exc:`~zhmcclient.ParseError`
          :exc:`~zhmcclient.AuthError`
          :exc:`~zhmcclient.ConnectionError`
        """
        if self._adapter_port is None:
            port_uri = self.get_property('adapter-port-uri')
            assert port_uri is not None
            m = re.match(r'^(/api/adapters/[^/]+)/.*', port_uri)
            adapter_uri = m.group(1)
            adapter_mgr = self.manager.storage_group.manager.cpc.adapters
            filter_args = {'object-uri': adapter_uri}
            adapter = adapter_mgr.find(**filter_args)
            port_mgr = adapter.ports
            port = port_mgr.resource_object(port_uri)
            self._adapter_port = port
        return self._adapter_port