def list_servers(self, nicknames=None):
        """
        Iterate through the servers of the server group with the specified
        nicknames, or the single server with the specified nickname, and yield
        a `ServerDefinition` object for each server.

        nicknames may be: None, string defining a nickname or list of nicknames
        """
        if not nicknames:
            return self.list_all_servers()

        if isinstance(nicknames, six.string_types):
            nicknames = [nicknames]

        sd_list = []
        sd_nick_list = []
        for nickname in nicknames:
            if nickname in self._servers:
                sd_list.append(self.get_server(nickname))
            elif nickname in self._server_groups:
                for item_nick in self._server_groups[nickname]:
                    for sd in self.list_servers(item_nick):
                        if sd.nickname not in sd_nick_list:
                            sd_nick_list.append(sd.nickname)
                            sd_list.append(sd)
            else:
                raise ValueError(
                    "Server group or server nickname {0!r} not found in WBEM "
                    "server definition file {1!r}".
                    format(nickname, self._filepath))
        return sd_list
Iterate through the servers of the server group with the specified
        nicknames, or the single server with the specified nickname, and yield
        a `ServerDefinition` object for each server.

        nicknames may be: None, string defining a nickname or list of nicknames