class Kitsune::Kit::Commands::PostinstallDocker
def create
def create filled_options = Kitsune::Kit::OptionsBuilder.build( options, required: [:server_ip], defaults: Kitsune::Kit::Defaults.ssh ) with_ssh_connection(filled_options) do |ssh| perform_setup(ssh) end end
def perform_rollback(ssh)
def perform_rollback(ssh) output = ssh.exec! <<~EOH set -e sudo mkdir -p /usr/local/backups sudo chown deploy:deploy /usr/local/backups BACKUP_DIR="/usr/local/backups" SCRIPT_ID="postinstall_docker" BEFORE_FILE="${BACKUP_DIR}/${SCRIPT_ID}.before" AFTER_FILE="${BACKUP_DIR}/${SCRIPT_ID}.after" echo "🔄 Rolling back post-install Docker tasks..." if [ -f "$AFTER_FILE" ]; then if grep -Fxq "docker.service enabled" "$AFTER_FILE"; then sudo systemctl disable docker echo " - Docker service disabled" fi if grep -Fxq "added docker group" "$AFTER_FILE"; then sudo gpasswd -d deploy docker || true echo " - Removed 'deploy' from docker group" fi if grep -Fxq "created network private" "$AFTER_FILE"; then sudo docker network rm private || true echo " - Removed Docker network 'private'" fi sudo rm -f "$BEFORE_FILE" "$AFTER_FILE" else echo " - no marker for $SCRIPT_ID, skipping rollback" fi echo "✅ Rollback complete" EOH say output say "✅ Post-install Docker rollback completed", :green end
def perform_setup(ssh)
def perform_setup(ssh) output = ssh.exec! <<~EOH set -e sudo mkdir -p /usr/local/backups sudo chown deploy:deploy /usr/local/backups BACKUP_DIR="/usr/local/backups" SCRIPT_ID="postinstall_docker" BEFORE_FILE="${BACKUP_DIR}/${SCRIPT_ID}.before" AFTER_FILE="${BACKUP_DIR}/${SCRIPT_ID}.after" echo "✍🏻 Performing post-install Docker tasks" if [ ! -f "$AFTER_FILE" ]; then # Record state systemctl is-enabled docker &>/dev/null && echo "docker.service enabled" >> "$BEFORE_FILE" || echo "docker.service disabled" >> "$BEFORE_FILE" groups deploy | grep -q docker && echo "deploy in docker group" >> "$BEFORE_FILE" || echo "deploy not in docker group" >> "$BEFORE_FILE" sudo docker network inspect private &>/dev/null && echo "network private exists" >> "$BEFORE_FILE" || echo "network private absent" >> "$BEFORE_FILE" # Start and enable Docker sudo systemctl start docker sudo systemctl enable docker echo "🚀 Docker service started and enabled" echo "docker.service enabled" >> "$AFTER_FILE" # Add deploy to docker group sudo usermod -aG docker deploy echo "👥 Added 'deploy' to docker group" echo "added docker group" >> "$AFTER_FILE" # Create private network if missing if ! sudo docker network inspect private &>/dev/null; then sudo docker network create -d bridge private echo "🌐 Created Docker network 'private'" echo "created network private" >> "$AFTER_FILE" fi echo "✅ Post-install Docker tasks complete" else echo "🔄 Post-install tasks already applied, skipping setup" fi EOH say output say "✅ Post-install Docker setup completed", :green end
def rollback
def rollback filled_options = Kitsune::Kit::OptionsBuilder.build( options, required: [:server_ip], defaults: Kitsune::Kit::Defaults.ssh ) with_ssh_connection(filled_options) do |ssh| perform_rollback(ssh) end end
def with_ssh_connection(filled_options)
def with_ssh_connection(filled_options) server = filled_options[:server_ip] port = filled_options[:ssh_port] key = File.expand_path(filled_options[:ssh_key_path]) say "🔑 Connecting as deploy@#{server}:#{port}", :green Net::SSH.start(server, "deploy", port: port, keys: [key], non_interactive: true, timeout: 5) do |ssh| yield ssh end end