Você precisa apontar para um arquivo de inventário (mesmo que vazio), porque o manual diz apenas para quais hosts a peça se aplica, mas não fornece os meios para definir essa lista, o inventário o faz. Por sorte, localhost
está disponível por padrão:
$ cat playbook.yml
---
- hosts: localhost
connection: local
gather_facts: no
tasks:
- shell: echo foo
$ ansible-playbook -i /dev/null playbook.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [localhost] **************************************************************
TASK: [shell echo foo] ********************************************************
changed: [localhost]
PLAY RECAP ********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0