Galera, eu estive enfrentando esse problema e consegui contornar a situação. Entrei via SSH na máquina e executei os comandos manualmente, então encontrei a seguinte mensagem:
nohup: ignoring input and appending output to 'nohup.out'
Isso por si só não é um erro, porém causa o travamento do processo no bash e impede que o Ansible encerre a task. Porém, se você analisar o server estará rodando normalmente no ip:8000, apesar de não ter o OK do Ansible.
Uma solução que encontrei na internet é forçar o Ansible a finalizar a task, utilizando os comandos async e poll, logo abaixo do shell:
shell: '. /home/ubuntu/tcc/venv/bin/activate; nohup python /home/ubuntu/tcc/manage.py runserver 0.0.0.0:8000 &'
async: 300
poll: 0
Outra forma (gambiarra) de resolver o problema é fazer o nohup abrir um novo shell para ele, liberando o fechamento pelo Ansible. Nesse caso, mudaria somente um detalhe na linha do shell:
shell: '. /home/ubuntu/tcc/venv/bin/activate; nohup bash -c "python /home/ubuntu/tcc/manage.py runserver 0.0.0.0:8000 &"'
Não esqueça das alternância entre as aspas, para não causar confusão na linha.
Espero ter ajudado!