Я могу выполнять тестирование только частично, так как передо мной нет машины на основе Debian.
Вы не обновили свой Q, чтобы показать точный формат вывода, поэтому я не уверенесли команда выводит все пакеты в одной строке или выводит по одному в каждой строке.
Если по одному в строке, попробуйте следующее:
- name: Install apt dependencies
apt:
name: "{{item.name}}{{item.version}}"
state: present
allow_unauthenticated: yes
force: yes
with_items:
- { name: 'python2.7', version: '' }
- { name: 'ruby', version: '' }
when: not (is_installed.stdout_lines| map('regex_search', '^' + item.name + '$') | select('string') | list | length)
Если в нескольких строках, то is_installed.stdout_lines
будет список, с одним пакетом на элемент.Поэтому мы ищем в списке точные совпадения и выводим общее количество совпадений.> 0 = true
.
Если все в одной строке, попробуйте вместо этого:
- name: Install apt dependencies
apt:
name: "{{item.name}}{{item.version}}"
state: present
allow_unauthenticated: yes
force: yes
with_items:
- { name: 'python2.7', version: '' }
- { name: 'ruby', version: '' }
when: not (is_installed.stdout | search('(^| )' + item.name + '( |$)')
В этом случае нам нужно найти name
либо вначало строки или предшествует пробел, а затем - пробел или конец строки для точного соответствия.