Ansible: Multiple and/or conditionals in when clause

It was such a simple answer!

The following works:

when: not (security is defined or kernel is defined or specified_packages is defined) and ansible_os_family == "RedHat"

As @techraf noted in comments, defined/undefined is a nasty test...

Refactor like this:

when:
  - ansible_os_family == "RedHat"
  - security|d('') != '' or kernel|d('') != '' or specified_packages|d('') != ''

Update. Reproducible example:

- hosts: localhost
  gather_facts: no
  tasks:
    - debug:
        msg: hello
      when:
        - '"RedHat" == "RedHat"'
        - security|d('') != '' or kernel|d('') != '' or specified_packages|d('') != ''

execution:

ansible-playbook -e kernel=true playbook.yml

PLAY [localhost] ***************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "hello"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

versions:

$ pip list | grep -iP 'ansible|jinja'
ansible (2.2.1.0)
Jinja2 (2.8)