lib/kitsune/kit/commands/bootstrap_docker.rb
require "thor" require "open3" require_relative "../defaults" require_relative "../options_builder" module Kitsune module Kit module Commands class BootstrapDocker < Thor namespace "bootstrap_docker" class_option :server_ip, aliases: "-s", required: true, desc: "Server IP address or hostname" class_option :ssh_port, aliases: "-p", desc: "SSH port for server" class_option :ssh_key_path, aliases: "-k", desc: "SSH private key path" class_option :rollback, type: :boolean, default: false, desc: "Rollback Docker setup steps" desc "execute", "Run full Docker setup or rollback sequence" def execute filled_options = Kitsune::Kit::OptionsBuilder.build( options, required: [:server_ip], defaults: Kitsune::Kit::Defaults.ssh ) if filled_options[:rollback] say "🔄 Rolling back full Docker setup...", :yellow rollback_sequence(filled_options) else say "🐳 Running full Docker setup...", :green setup_sequence(filled_options) end say "🎉 Done!", :green end no_commands do def setup_sequence(filled_options) run_cli("setup_docker_prereqs create", filled_options) run_cli("install_docker_engine create", filled_options) run_cli("postinstall_docker create", filled_options) end def rollback_sequence(filled_options) run_cli("postinstall_docker rollback", filled_options) run_cli("install_docker_engine rollback", filled_options) run_cli("setup_docker_prereqs rollback", filled_options) end def run_cli(command, filled_options) say "\n▶️ Running: kitsune kit #{command} --server-ip #{filled_options[:server_ip]}", :blue subcommand, action = command.split(" ", 2) Kitsune::Kit::CLI.start([ subcommand, action, "--server-ip", filled_options[:server_ip], "--ssh-port", filled_options[:ssh_port], "--ssh-key-path", filled_options[:ssh_key_path] ]) rescue SystemExit => e abort "❌ Command failed: #{command} (exit #{e.status})" end end end end end end