O Ansible não foi realmente destinado a resolver esse tipo de problema. Isso pode fazê-lo, mas seria complicado na melhor das hipóteses.
Algo como o Katello (o código-fonte aberto no qual o Red Hat Satellite 6 é baseado) pode lidar bem com esse tipo de coisa. Ele mantém os pacotes nas versões exatas que você testou e permite promovê-los, desde o desenvolvimento até a produção até a produção, ou definir o fluxo de trabalho que faça sentido para você. Para não mencionar o provisionamento de bare metal e muitas outras coisas. Sua única desvantagem nesse cenário é que ele está bem integrado ao Puppet, portanto, usá-lo com o Ansible pode ser um pouco menos automatizado em lugares do que poderia ser.