# Buggy code
def run(self):
    """
    Execute the batch run
    """
    args = [
        [],
        self.opts["fun"],
        self.opts["arg"],
        self.opts["timeout"],
        "list",
    ]
    bnum = self.get_bnum()
    to_run = copy.deepcopy(self.minions)
    active = []
    ret = {}
    iters = []
    # wait the specified time before decide a job is actually done
    bwait = self.opts.get("batch_wait", 0)
    wait = []

    # the minion tracker keeps track of responses and iterators
    # - it removes finished iterators from iters[]
    # - if a previously detected minion does not respond, its
    #   added with an empty answer to ret{} once the timeout is reached
    # - unresponsive minions are removed from active[] to make
    #   sure that the main while loop finishes even with unresp minions
    minion_tracker = {}

    # Iterate while we still have things to execute
    while len(ret) < len(self.minions):
        next_ = []
        if bwait and wait:
            self.__update_wait(wait)
        if len(to_run) <= bnum - len(wait) and not active:
            # last bit of them, add them all to next iterator
            while to_run:
                next_.append(to_run.pop())
        else:
            for i in range(bnum - len(active) - len(wait)):
                if to_run:
                    minion_id = to_run.pop()
                    if isinstance(minion_id, dict):
                        next_.append(minion_id.keys()[0])
                    else:
                        next_.append(minion_id)

        active += next_
        args[0] = next_

        if next_:
            if not self.quiet:
                print_cli("\nExecuting run on {0}\n".format(next_))
            # create a new iterator for this batch of minions
            new_iter = self.local.cmd_iter_no_block(
                *args,
                raw=self.opts.get("raw", False),
                ret=self.opts.get("return", ""),
                **self.eauth,
            )
            # add it to our iterators and to the minion_tracker
            iters.append(new_iter)
            minion_tracker[new_iter] = {}
            # every iterator added is 'active' and has its set of minions
            minion_tracker[new_iter]["minions"] = next_
            minion_tracker[new_iter]["active"] = True

        else:
            time.sleep(0.02)
        parts = {}

        # see if we found more minions
        for ping_ret in self.ping_gen:
            if ping_ret is None:
                break
            m = next(ping_ret.iterkeys())
            if m not in self.minions:
                self.minions.append(m)
                to_run.append(m)

        for queue in iters:
            try:
                # Gather returns until we get to the bottom
                ncnt = 0
                while True:
                    part = next(queue)
                    if part is None:
                        time.sleep(0.01)
                        ncnt += 1
                        if ncnt > 5:
                            break
                        continue
                    if self.opts.get("raw"):
                        parts.update({part["id"]: part})
                        if part["id"] in minion_tracker[queue]["minions"]:
                            minion_tracker[queue]["minions"].remove(part["id"])
                        else:
                            print_cli(
                                "minion {0} was already deleted from tracker, probably a duplicate key".format(
                                    part["id"]
                                )
                            )
                    else:
                        parts.update(part)
                        for id in part.keys():
                            if id in minion_tracker[queue]["minions"]:
                                minion_tracker[queue]["minions"].remove(id)
                            else:
                                print_cli(
                                    "minion {0} was already deleted from tracker, probably a duplicate key".format(
                                        id
                                    )
                                )
            except StopIteration:
                # if a iterator is done:
                # - set it to inactive
                # - add minions that have not responded to parts{}

                # check if the tracker contains the iterator
                if queue in minion_tracker:
                    minion_tracker[queue]["active"] = False

                    # add all minions that belong to this iterator and
                    # that have not responded to parts{} with an empty response
                    for minion in minion_tracker[queue]["minions"]:
                        if minion not in parts:
                            parts[minion] = {}
                            parts[minion]["ret"] = {}

        for minion, data in six.iteritems(parts):
            if minion in active:
                active.remove(minion)
                if bwait:
                    wait.append(datetime.now() + timedelta(seconds=bwait))
            if self.opts.get("raw"):
                yield data
            else:
                ret[minion] = data["ret"]
                yield {minion: data["ret"]}
            if not self.quiet:
                ret[minion] = data["ret"]
                data[minion] = data.pop("ret")
                if "out" in data:
                    out = data.pop("out")
                else:
                    out = None
                salt.output.display_output(data, out, self.opts)

        # remove inactive iterators from the iters list
        for queue in minion_tracker:
            # only remove inactive queues
            if not minion_tracker[queue]["active"] and queue in iters:
                iters.remove(queue)
                # also remove the iterator's minions from the active list
                for minion in minion_tracker[queue]["minions"]:
                    if minion in active:
                        active.remove(minion)
                        if bwait:
                            wait.append(datetime.now() + timedelta(seconds=bwait))


# Traceback (TypeError)
cent6_2:
provider: vcenter02
clonefrom: CentOS6.6_64bit
num_cpus: 2
memory: 2GB
domain: domain.com
dns_servers:
- 192.168.14.11
- 192.168.14.12
resourcepool: Resources
cluster: qa
datastore: datastore1
datacenter: dlsb
host: hostname
power_on: True
deploy: True
ssh_username: root
password: passwd
minion:
master: 192.168.40.43
grains:
location: ny
env: qa
role: web


cloud.maps.d]# cat map.conf
cent6_2:
- dlsbweb01:
devices:
network:
Network adapter 1:
name: Kickstart Network
switch_type: standard
ip: 192.168.40.248
gateway: [192.168.40.1]
subnet_mask: 255.255.255.0
- dlsbweb02:
devices:
network:
Network adapter 1:
name: Kickstart Network
switch_type: standard
ip: 192.168.40.249
gateway: [192.168.40.1]
subnet_mask: 255.255.255.0


[DEBUG   ] Connection to 192.168.40.249 closed.
[DEBUG   ]  *  INFO: Salt installed!
[DEBUG   ] Connection to 192.168.40.248 closed.
[DEBUG   ]  *  INFO: Salt installed!
[DEBUG   ] Executed command "/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/deploy.sh -c '/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74'"
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 rm -f '/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/deploy.sh'"
[DEBUG   ] Executed command "/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/deploy.sh -c '/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654'"
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 rm -f '/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/deploy.sh'"
[DEBUG   ] Child Forked! PID: 15369  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Child Forked! PID: 15370  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 'rm -f '"'"'/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/deploy.sh'"'"''
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 'rm -f '"'"'/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/deploy.sh'"'"''
[DEBUG   ] Warning: Permanently added '192.168.40.249' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.249's password:
[DEBUG   ] Warning: Permanently added '192.168.40.248' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.248's password:
[DEBUG   ] Connection to 192.168.40.249 closed.
[DEBUG   ] Connection to 192.168.40.248 closed.
[DEBUG   ] Removed /tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/deploy.sh
[DEBUG   ] Removed /tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/deploy.sh
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 rm -f '/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion.pub'"
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 rm -f '/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion.pub'"
[DEBUG   ] Child Forked! PID: 15372  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Child Forked! PID: 15373  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 'rm -f '"'"'/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion.pub'"'"''
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 'rm -f '"'"'/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion.pub'"'"''
[DEBUG   ] Warning: Permanently added '192.168.40.249' (RSA) to the list of known hosts.
[DEBUG   ] Warning: Permanently added '192.168.40.248' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.249's password:
[DEBUG   ] root@192.168.40.248's password:
[DEBUG   ] Connection to 192.168.40.249 closed.
[DEBUG   ] Connection to 192.168.40.248 closed.
[DEBUG   ] Removed /tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion.pub
[DEBUG   ] Removed /tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion.pub
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 rm -f '/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion.pem'"
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 rm -f '/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion.pem'"
[DEBUG   ] Child Forked! PID: 15374  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Child Forked! PID: 15375  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 'rm -f '"'"'/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion.pem'"'"''
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 'rm -f '"'"'/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion.pem'"'"''
[DEBUG   ] Warning: Permanently added '192.168.40.248' (RSA) to the list of known hosts.
[DEBUG   ] Warning: Permanently added '192.168.40.249' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.249's password:
[DEBUG   ] root@192.168.40.248's password:
[DEBUG   ] Connection to 192.168.40.249 closed.
[DEBUG   ] Connection to 192.168.40.248 closed.
[DEBUG   ] Removed /tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion.pem
[DEBUG   ] Removed /tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion.pem
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 rm -f '/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/grains'"
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 rm -f '/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/grains'"
[DEBUG   ] Child Forked! PID: 15376  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Child Forked! PID: 15377  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 'rm -f '"'"'/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/grains'"'"''
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 'rm -f '"'"'/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/grains'"'"''
[DEBUG   ] Warning: Permanently added '192.168.40.249' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.249's password:
[DEBUG   ] Warning: Permanently added '192.168.40.248' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.248's password:
[DEBUG   ] Connection to 192.168.40.249 closed.
[DEBUG   ] Connection to 192.168.40.248 closed.
[DEBUG   ] Removed /tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/grains
[DEBUG   ] Removed /tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/grains
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 rm -f '/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion'"
[DEBUG   ] SSH command: "ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 rm -f '/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion'"
[DEBUG   ] Child Forked! PID: 15378  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Child Forked! PID: 15379  STDOUT_FD: 21  STDERR_FD: 23
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.248 'rm -f '"'"'/tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion'"'"''
[DEBUG   ] Terminal Command: /bin/sh -c ssh -t -t -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 root@192.168.40.249 'rm -f '"'"'/tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion'"'"''
[DEBUG   ] Warning: Permanently added '192.168.40.248' (RSA) to the list of known hosts.
[DEBUG   ] Warning: Permanently added '192.168.40.249' (RSA) to the list of known hosts.
[DEBUG   ] root@192.168.40.248's password:
[DEBUG   ] root@192.168.40.249's password:
[DEBUG   ] Connection to 192.168.40.248 closed.
[DEBUG   ] Connection to 192.168.40.249 closed.
[DEBUG   ] Removed /tmp/.saltcloud-73e57e99-789c-4379-bc47-6410b7a78c74/minion
[DEBUG   ] Removed /tmp/.saltcloud-8f078916-9324-44ba-b4a9-c0db91995654/minion
[DEBUG   ] MasterEvent PUB socket URI: ipc:///var/run/salt/master/master_event_pub.ipc
[DEBUG   ] MasterEvent PUB socket URI: ipc:///var/run/salt/master/master_event_pub.ipc
[DEBUG   ] MasterEvent PULL socket URI: ipc:///var/run/salt/master/master_event_pull.ipc
[DEBUG   ] MasterEvent PULL socket URI: ipc:///var/run/salt/master/master_event_pull.ipc
[DEBUG   ] Sending event - data = {'host': '192.168.40.249', 'name': 'dlsbweb02', '_stamp': '2016-03-02T18:19:36.067144', 'event': 'dlsbweb02 has been deployed at 192.168.40.249'}
[DEBUG   ] Sending event - data = {'host': '192.168.40.248', 'name': 'dlsbweb01', '_stamp': '2016-03-02T18:19:36.067528', 'event': 'dlsbweb01 has been deployed at 192.168.40.248'}
[INFO    ] Salt installed on dlsbweb02
[INFO    ] Salt installed on dlsbweb01
[DEBUG   ] MasterEvent PUB socket URI: ipc:///var/run/salt/master/master_event_pub.ipc
[DEBUG   ] MasterEvent PULL socket URI: ipc:///var/run/salt/master/master_event_pull.ipc
[DEBUG   ] Sending event - data = {'profile': 'cent6_2', 'event': 'created instance', '_stamp': '2016-03-02T18:19:36.922794', 'name': 'dlsbweb01', 'provider': 'vcenter02:vmware'}
[DEBUG   ] MasterEvent PUB socket URI: ipc:///var/run/salt/master/master_event_pub.ipc
[DEBUG   ] MasterEvent PULL socket URI: ipc:///var/run/salt/master/master_event_pull.ipc
[DEBUG   ] Sending event - data = {'profile': 'cent6_2', 'event': 'created instance', '_stamp': '2016-03-02T18:19:36.932306', 'name': 'dlsbweb02', 'provider': 'vcenter02:vmware'}
[ERROR   ] There was a query error: itervalues() takes exactly 1 argument (2 given)
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/salt/cloud/cli.py", line 339, in run
ret = mapper.run_map(dmap)
File "/usr/lib/python2.6/site-packages/salt/cloud/__init__.py", line 2211, in run_map
lambda x: x['level']):
TypeError: itervalues() takes exactly 1 argument (2 given)

salt --versions-report
Salt Version:
Salt: 2015.8.5

Dependency Versions:
Jinja2: 2.2.1
M2Crypto: 0.20.2
Mako: Not Installed
PyYAML: 3.11
PyZMQ: 14.5.0
Python: 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
RAET: Not Installed
Tornado: 4.2.1
ZMQ: 4.0.5
cffi: Not Installed
cherrypy: Not Installed
dateutil: 1.4.1
gitdb: Not Installed
gitpython: Not Installed
ioflo: Not Installed
libgit2: Not Installed
libnacl: Not Installed
msgpack-pure: Not Installed
msgpack-python: 0.4.6
mysql-python: Not Installed
pycparser: Not Installed
pycrypto: 2.6.1
pygit2: Not Installed
python-gnupg: Not Installed
smmap: Not Installed
timelib: Not Installed

System Versions:
dist: centos 6.7 Final
machine: x86_64
release: 2.6.32-504.el6.x86_64
system: CentOS 6.7 Final

# Fixed code
def run(self):
    """
    Execute the batch run
    """
    args = [
        [],
        self.opts["fun"],
        self.opts["arg"],
        self.opts["timeout"],
        "list",
    ]
    bnum = self.get_bnum()
    to_run = copy.deepcopy(self.minions)
    active = []
    ret = {}
    iters = []
    # wait the specified time before decide a job is actually done
    bwait = self.opts.get("batch_wait", 0)
    wait = []

    if self.options:
        show_jid = self.options.show_jid
    else:
        show_jid = False

    # the minion tracker keeps track of responses and iterators
    # - it removes finished iterators from iters[]
    # - if a previously detected minion does not respond, its
    #   added with an empty answer to ret{} once the timeout is reached
    # - unresponsive minions are removed from active[] to make
    #   sure that the main while loop finishes even with unresp minions
    minion_tracker = {}

    # Iterate while we still have things to execute
    while len(ret) < len(self.minions):
        next_ = []
        if bwait and wait:
            self.__update_wait(wait)
        if len(to_run) <= bnum - len(wait) and not active:
            # last bit of them, add them all to next iterator
            while to_run:
                next_.append(to_run.pop())
        else:
            for i in range(bnum - len(active) - len(wait)):
                if to_run:
                    minion_id = to_run.pop()
                    if isinstance(minion_id, dict):
                        next_.append(minion_id.keys()[0])
                    else:
                        next_.append(minion_id)

        active += next_
        args[0] = next_

        if next_:
            if not self.quiet:
                print_cli("\nExecuting run on {0}\n".format(next_))
            # create a new iterator for this batch of minions
            new_iter = self.local.cmd_iter_no_block(
                *args,
                raw=self.opts.get("raw", False),
                ret=self.opts.get("return", ""),
                show_jid=show_jid,
                **self.eauth,
            )
            # add it to our iterators and to the minion_tracker
            iters.append(new_iter)
            minion_tracker[new_iter] = {}
            # every iterator added is 'active' and has its set of minions
            minion_tracker[new_iter]["minions"] = next_
            minion_tracker[new_iter]["active"] = True

        else:
            time.sleep(0.02)
        parts = {}

        # see if we found more minions
        for ping_ret in self.ping_gen:
            if ping_ret is None:
                break
            m = next(ping_ret.iterkeys())
            if m not in self.minions:
                self.minions.append(m)
                to_run.append(m)

        for queue in iters:
            try:
                # Gather returns until we get to the bottom
                ncnt = 0
                while True:
                    part = next(queue)
                    if part is None:
                        time.sleep(0.01)
                        ncnt += 1
                        if ncnt > 5:
                            break
                        continue
                    if self.opts.get("raw"):
                        parts.update({part["id"]: part})
                        if part["id"] in minion_tracker[queue]["minions"]:
                            minion_tracker[queue]["minions"].remove(part["id"])
                        else:
                            print_cli(
                                "minion {0} was already deleted from tracker, probably a duplicate key".format(
                                    part["id"]
                                )
                            )
                    else:
                        parts.update(part)
                        for id in part.keys():
                            if id in minion_tracker[queue]["minions"]:
                                minion_tracker[queue]["minions"].remove(id)
                            else:
                                print_cli(
                                    "minion {0} was already deleted from tracker, probably a duplicate key".format(
                                        id
                                    )
                                )
            except StopIteration:
                # if a iterator is done:
                # - set it to inactive
                # - add minions that have not responded to parts{}

                # check if the tracker contains the iterator
                if queue in minion_tracker:
                    minion_tracker[queue]["active"] = False

                    # add all minions that belong to this iterator and
                    # that have not responded to parts{} with an empty response
                    for minion in minion_tracker[queue]["minions"]:
                        if minion not in parts:
                            parts[minion] = {}
                            parts[minion]["ret"] = {}

        for minion, data in six.iteritems(parts):
            if minion in active:
                active.remove(minion)
                if bwait:
                    wait.append(datetime.now() + timedelta(seconds=bwait))
            if self.opts.get("raw"):
                yield data
            else:
                ret[minion] = data["ret"]
                yield {minion: data["ret"]}
            if not self.quiet:
                ret[minion] = data["ret"]
                data[minion] = data.pop("ret")
                if "out" in data:
                    out = data.pop("out")
                else:
                    out = None
                salt.output.display_output(data, out, self.opts)

        # remove inactive iterators from the iters list
        for queue in minion_tracker:
            # only remove inactive queues
            if not minion_tracker[queue]["active"] and queue in iters:
                iters.remove(queue)
                # also remove the iterator's minions from the active list
                for minion in minion_tracker[queue]["minions"]:
                    if minion in active:
                        active.remove(minion)
                        if bwait:
                            wait.append(datetime.now() + timedelta(seconds=bwait))