# Buggy code
def __query_node_data(vm_, data):
    running = False
    try:
        node = show_instance(vm_["name"], "action")
        running = node["state"] == NodeState.RUNNING
        log.debug(
            "Loaded node data for {0}:\nname: {1}\nstate: {2}".format(
                vm_["name"], pprint.pformat(node["name"]), node["state"]
            )
        )
    except Exception as err:
        log.error(
            "Failed to get nodes list: {0}".format(err),
            # Show the traceback if the debug logging level is enabled
            exc_info_on_loglevel=logging.DEBUG,
        )
        # Trigger a failure in the wait for IP function
        return False

    if not running:
        # Still not running, trigger another iteration
        return

    private = node["private_ips"]
    public = node["public_ips"]

    if private and not public:
        log.warn(
            "Private IPs returned, but not public... Checking for misidentified IPs"
        )
        for private_ip in private:
            private_ip = preferred_ip(vm_, [private_ip])
            if salt.utils.cloud.is_public_ip(private_ip):
                log.warn("{0} is a public IP".format(private_ip))
                data.public_ips.append(private_ip)
            else:
                log.warn("{0} is a private IP".format(private_ip))
                if private_ip not in data.private_ips:
                    data.private_ips.append(private_ip)

        if ssh_interface(vm_) == "private_ips" and data.private_ips:
            return data

    if private:
        data.private_ips = private
        if ssh_interface(vm_) == "private_ips":
            return data

    if public:
        data.public_ips = public
        if ssh_interface(vm_) != "private_ips":
            return data


# Traceback (TypeError)
'private_ips': ['an:ip:v6', 'an.ip.v4'],
'public_ips': [],
'size': None,
'state': 0}
[WARNING ] Private IPs returned, but not public... Checking for misidentified IPs
[ERROR   ] There was a profile error: argument of type 'bool' is not iterable
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/salt/cloud/cli.py", line 284, in run
self.config.get('names')
File "/usr/lib/python2.7/dist-packages/salt/cloud/__init__.py", line 1458, in run_profile
ret[name] = self.create(vm_)
File "/usr/lib/python2.7/dist-packages/salt/cloud/__init__.py", line 1288, in create
output = self.clouds[func](vm_)
File "/usr/lib/python2.7/dist-packages/salt/cloud/clouds/openstack.py", line 774, in create
'wait_for_ip_interval', vm_, __opts__, default=10),
File "/usr/lib/python2.7/dist-packages/salt/utils/cloud.py", line 2371, in wait_for_ip
data = update_callback(*update_args, **update_kwargs)
File "/usr/lib/python2.7/dist-packages/salt/cloud/clouds/openstack.py", line 730, in __query_node_data
if salt.utils.cloud.is_public_ip(private_ip):
File "/usr/lib/python2.7/dist-packages/salt/utils/cloud.py", line 2266, in is_public_ip
if ':' in ip:
TypeError: argument of type 'bool' is not iterable

# Fixed code
def __query_node_data(vm_, data):
    running = False
    try:
        node = show_instance(vm_["name"], "action")
        running = node["state"] == NodeState.RUNNING
        log.debug(
            "Loaded node data for {0}:\nname: {1}\nstate: {2}".format(
                vm_["name"], pprint.pformat(node["name"]), node["state"]
            )
        )
    except Exception as err:
        log.error(
            "Failed to get nodes list: {0}".format(err),
            # Show the traceback if the debug logging level is enabled
            exc_info_on_loglevel=logging.DEBUG,
        )
        # Trigger a failure in the wait for IP function
        return False

    if not running:
        # Still not running, trigger another iteration
        return

    private = node["private_ips"]
    public = node["public_ips"]

    if private and not public:
        log.warn(
            "Private IPs returned, but not public... Checking for misidentified IPs"
        )
        for private_ip in private:
            private_ip = preferred_ip(vm_, [private_ip])
            if private_ip is False:
                continue
            if salt.utils.cloud.is_public_ip(private_ip):
                log.warn("{0} is a public IP".format(private_ip))
                data.public_ips.append(private_ip)
            else:
                log.warn("{0} is a private IP".format(private_ip))
                if private_ip not in data.private_ips:
                    data.private_ips.append(private_ip)

        if ssh_interface(vm_) == "private_ips" and data.private_ips:
            return data

    if private:
        data.private_ips = private
        if ssh_interface(vm_) == "private_ips":
            return data

    if public:
        data.public_ips = public
        if ssh_interface(vm_) != "private_ips":
            return data