Ansible wäre meine Empfehlung.
Es kann alles von Schritt 1 bis SSH ausführen, ohne dass ein Agent auf den Geräten installiert werden muss (Python inkl. JSON-Bibliothek wird empfohlen). Anstelle von Schritt 2 würde ich vorschlagen, Schritt 1 auf jedem Gerät auszuführen.
Puppet eignet sich hervorragend für Umgebungen mit einer großen Anzahl von Geräten. Es kann alles in Schritt 1 mindestens genauso gut wie Ansible ausführen, erfordert jedoch einen erheblichen Aufwand (Puppet Agent und Abhängigkeiten auf jedem Gerät installieren, Puppet Master einrichten, Geräte über HTTP mit Puppet Master verbinden.)
rsync
könnte sich zuerst wie eine einfache Lösung zusammenfügen. Sie werden jedoch wahrscheinlich viel Zeit damit verbringen, Probleme zu lösen, die andere Tools bereits lösen, oder die beim ersten Mal nicht auftreten.