Returns any servers in the region that have tags that match the
        key-value pairs in :attr:`tags`.

        :param Mapping tags:  A mapping object in which the keys are the tag
            names and the values are the tag values.

        :param bool running:  A flag to limit server list to instances that are
            actually *running*.

        :rtype:  :class:`list` of :class:`dict` objects.  Each :class:`dict`
            describes a single server instance.

def find_servers(self, tags, running=True):
        """
        Returns any servers in the region that have tags that match the
        key-value pairs in :attr:`tags`.

        :param Mapping tags:  A mapping object in which the keys are the tag
            names and the values are the tag values.

        :param bool running:  A flag to limit server list to instances that are
            actually *running*.

        :rtype:  :class:`list` of :class:`dict` objects.  Each :class:`dict`
            describes a single server instance.

        """
        log.debug("Finding instances with tags: %s" % tags)
        search_opts = {}
        if running:
            search_opts['status'] = 'ACTIVE'
        all_servers = self.nova.servers.list(search_opts=search_opts)
        servers = []
        for s in all_servers:
            md = s.metadata
            mismatches = [k for k, v in tags.items() if v != md.get(k)]
            if mismatches:
                continue
            servers.append(server_to_dict(s))
        return servers