'Validate any of the provided params.'

def validate(self):

    res = super(Instance, self).validate()
    if res:
        return res
    security_groups = self._get_security_groups()
    network_interfaces = self.properties.get(self.NETWORK_INTERFACES)
    if (security_groups and network_interfaces):
        raise exception.ResourcePropertyConflict('/'.join([self.SECURITY_GROUPS, self.SECURITY_GROUP_IDS]), self.NETWORK_INTERFACES)
    bdm = self.properties.get(self.BLOCK_DEVICE_MAPPINGS)
    if bdm:
        for mapping in bdm:
            ebs = mapping.get(self.EBS)
            if ebs:
                snapshot_id = ebs.get(self.SNAPSHOT_ID)
                if (not snapshot_id):
                    msg = _('SnapshotId    is    missing,    this    is    required    when    specifying    BlockDeviceMappings.')
                    raise exception.StackValidationFailed(message=msg)
            else:
                msg = _('Ebs    is    missing,    this    is    required    when    specifying    BlockDeviceMappings.')
                raise exception.StackValidationFailed(message=msg)
    subnet_id = self.properties.get(self.SUBNET_ID)
    if (network_interfaces and subnet_id):
        LOG.warning('"%(subnet)s"    will    be    ignored    if    specified    "%(net_interfaces)s".    So    if    you    specified    the    "%(net_interfaces)s"    property,    do    not    specify    "%(subnet)s"    property.', {'subnet': self.SUBNET_ID, 'net_interfaces': self.NETWORK_INTERFACES})
