Краткий справочник

Шпаргалка по Ruby-гему Do для удалённого выполнения

Краткий справочник по Ruby-гему DO: SSH-подключения к серверам, удалённое выполнение команд, проверка и передача файлов, замена содержимого.

· Опубликовано

DO — Ruby-гем, предоставляющий лаконичный цепочечный DSL для выполнения команд и управления файлами по SSH на удалённых Linux-серверах.

Подключение к серверу

require 'do'

# Инициализация подключения с аутентификацией по SSH-ключу
server = DO::Server.new('srv1', 'node1.example.com', 'root', key: ['~/.ssh/id_rsa'])

Выполнение команд

# Одиночная команда
output = server.run 'uname -a'

# Несколько аргументов команды
server.run 'apt-get', 'update', '-y'

# Команды с вводом ответов в stdin
server.run 'passwd user', 'newpassword', 'newpassword'

Проверка и передача файлов

# Проверка существования файла
server.exist?('/etc/nginx/nginx.conf') # → true / false

# Чтение содержимого удалённого файла
content = server.read('/etc/os-release')

# Загрузка локального файла на удалённый сервер
server.upload('/local/app.tar.gz', '/var/www/app.tar.gz')

# Скачивание удалённого файла на локальный диск
server.download('/var/log/nginx/access.log', './logs/access.log')

Удалённое редактирование содержимого

# Замена всего содержимого
server.replace :all, 'new configuration text', '/etc/app/config.env'

# Замена по регулярному выражению
server.replace /^PORT=\d+$/, 'PORT=8080', '/etc/app/config.env'

# Добавление текста (в конец по умолчанию или в начало)
server.append 'export PATH=$PATH:/opt/bin', '~/.bashrc'
server.append '# Autogenerated File', '/etc/motd', :top

Интерактивные запросы

# Запрос ввода у пользователя
answer = server.ask 'Enter deployment tag:'

# Подтверждение Да/Нет
if server.yes? 'Do you want to run database migrations?'
  server.run 'bundle exec rake db:migrate'
end

# Ожидание нажатия Enter
server.wait

Связанные темы