DO este un gem Ruby care oferă un DSL curat și înlănțuibil pentru executarea comenzilor și gestionarea fișierelor prin SSH pe servere Linux la distanță.
Conectare la Server
require 'do'
# Inițializează conexiunea cu autentificare prin cheie SSH
server = DO::Server.new('srv1', 'node1.example.com', 'root', key: ['~/.ssh/id_rsa'])
Executarea Comenzilor
# Comandă unică
output = server.run 'uname -a'
# Argumente multiple de comandă
server.run 'apt-get', 'update', '-y'
# Comenzi cu răspunsuri stdin
server.run 'passwd user', 'newpassword', 'newpassword'
Verificare și Transfer de Fișiere
# Verifică existența fișierului
server.exist?('/etc/nginx/nginx.conf') # → true / false
# Citește conținutul fișierului de la distanță
content = server.read('/etc/os-release')
# Încarcă un fișier local pe serverul la distanță
server.upload('/local/app.tar.gz', '/var/www/app.tar.gz')
# Descarcă un fișier la distanță pe discul local
server.download('/var/log/nginx/access.log', './logs/access.log')
Manipularea Conținutului la Distanță
# Înlocuiește întregul conținut
server.replace :all, 'new configuration text', '/etc/app/config.env'
# Înlocuire prin expresie regulată
server.replace /^PORT=\d+$/, 'PORT=8080', '/etc/app/config.env'
# Adaugă conținut (la final implicit, sau la început)
server.append 'export PATH=$PATH:/opt/bin', '~/.bashrc'
server.append '# Autogenerated File', '/etc/motd', :top
Solicitări Interactive
# Cere date de la utilizator
answer = server.ask 'Enter deployment tag:'
# Confirmare Da/Nu
if server.yes? 'Do you want to run database migrations?'
server.run 'bundle exec rake db:migrate'
end
# Așteaptă apăsarea tastei Enter
server.wait