DO est une gem Ruby offrant un DSL clair et chaînable pour exécuter des commandes et gérer des fichiers en SSH sur des serveurs Linux distants.
Connexion au serveur
require 'do'
# Initialiser la connexion par clé SSH
server = DO::Server.new('srv1', 'node1.example.com', 'root', key: ['~/.ssh/id_rsa'])
Exécuter des commandes
# Commande unique
output = server.run 'uname -a'
# Plusieurs arguments de commande
server.run 'apt-get', 'update', '-y'
# Commandes avec réponses sur stdin
server.run 'passwd user', 'newpassword', 'newpassword'
Inspection et transfert de fichiers
# Vérifier l’existence d’un fichier
server.exist?('/etc/nginx/nginx.conf') # → true / false
# Lire le contenu d’un fichier distant
content = server.read('/etc/os-release')
# Téléverser un fichier local vers le serveur
server.upload('/local/app.tar.gz', '/var/www/app.tar.gz')
# Télécharger un fichier distant sur le disque local
server.download('/var/log/nginx/access.log', './logs/access.log')
Manipulation distante de contenu
# Remplacer tout le contenu
server.replace :all, 'new configuration text', '/etc/app/config.env'
# Remplacement par expression régulière
server.replace /^PORT=\d+$/, 'PORT=8080', '/etc/app/config.env'
# Ajouter du contenu (en bas par défaut, ou en haut)
server.append 'export PATH=$PATH:/opt/bin', '~/.bashrc'
server.append '# Autogenerated File', '/etc/motd', :top
Invites interactives
# Demander une saisie à l’utilisateur
answer = server.ask 'Enter deployment tag:'
# Confirmation Oui/Non
if server.yes? 'Do you want to run database migrations?'
server.run 'bundle exec rake db:migrate'
end
# Attendre l’appui sur Entrée
server.wait