Rollback Netprobe

The RollbackNetprobe.yaml CloudFormation template rolls back Netprobe on existing EC2 instances using AWS Systems Manager (SSM) by restoring the most recent backup archive created under <NetprobeInstallDirectory>/backup/netprobe/ and restarting netprobe.service.

Prerequisites Copied

Input Parameters Copied

Parameter Description Default Required
Target EC2 Configuration
InstanceIds Comma-separated list of existing EC2 Instance IDs -
AWS Credentials
AWSRegion AWS Region (e.g., ap-southeast-1, us-west-2) ap-southeast-1
Netprobe Configuration
NetprobeInstallDirectory Directory where Netprobe is installed ~/geneos

Configuration Copied

AWSTemplateFormatVersion: '2010-09-09'
Description: Roll back Netprobe on existing EC2 instances by restoring the latest backup using AWS Systems Manager

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: "Target EC2 Configuration"
      Parameters:
      - InstanceIds
    - Label:
        default: "AWS Credentials"
      Parameters:
      - AWSRegion
    - Label:
        default: "Netprobe Configuration"
      Parameters:
      - NetprobeInstallDirectory
    ParameterLabels:
      InstanceIds:
        default: "Target EC2 Instance IDs"
      AWSRegion:
        default: "AWS Region"
      NetprobeInstallDirectory:
        default: "Netprobe Installation Directory"

Parameters:
  InstanceIds:
    Type: CommaDelimitedList
    Description: Comma-separated list of existing EC2 Instance IDs

  AWSRegion:
    Type: String
    Description: AWS Region for CLI configuration (e.g., ap-southeast-1, us-west-2)
    Default: ap-southeast-1

  NetprobeInstallDirectory:
    Type: String
    Description: Directory where Netprobe was installed
    Default: "~/geneos"

Resources:
  NetprobeRollbackDocument:
    Type: AWS::SSM::Document
    Properties:
      DocumentType: Command
      DocumentFormat: YAML
      Content:
        schemaVersion: '2.2'
        description: Roll back Netprobe by restoring the most recent backup
        parameters:
          AWSRegion:
            type: String
            description: AWS Region
          NetprobeInstallDirectory:
            type: String
            description: Netprobe installation directory
        mainSteps:
        - action: aws:runShellScript
          name: rollbackNetprobe
          inputs:
            timeoutSeconds: '3600'
            runCommand:
            - |
              #!/bin/bash
              set -e
              
              echo "=== Starting Netprobe Rollback ==="
              
              # Identify OS and version
              echo "--- Identifying OS and version ---"
              if [ -f /etc/os-release ]; then
                . /etc/os-release
                OS=$ID
                VERSION_ID=$VERSION_ID
              elif [ -f /etc/redhat-release ]; then
                OS=$(awk '{print tolower($1)}' /etc/redhat-release)
                VERSION_ID=$(awk '{print $3}' /etc/redhat-release)
              else
                echo "ERROR: Unsupported OS"
                exit 1
              fi
              echo "Detected OS: $OS $VERSION_ID"
              
              # Detect default user
              if [ "$OS" = "ubuntu" ]; then
                DEFAULT_USER="ubuntu"
              else
                DEFAULT_USER="ec2-user"
              fi
              echo "Default user: $DEFAULT_USER"
              
              # Check if SSM agent user exists, fallback to detected user
              if id "ssm-user" &>/dev/null; then
                INSTALL_USER="ssm-user"
              else
                INSTALL_USER="$DEFAULT_USER"
              fi
              echo "Installation user: $INSTALL_USER"
              
              # Set default values for optional parameters if they're empty
              AWS_REGION="{{AWSRegion}}"
              if [ -z "$AWS_REGION" ]; then
                AWS_REGION="ap-southeast-1"
              fi
              export AWS_DEFAULT_REGION="$AWS_REGION"
              
              # Parse the netprobe install directory (handle ~ expansion)
              NETPROBE_DIR="{{NetprobeInstallDirectory}}"
              if [ -z "$NETPROBE_DIR" ]; then
                NETPROBE_DIR="~/geneos"
              fi
              if [[ "$NETPROBE_DIR" == ~* ]]; then
                NETPROBE_DIR=${NETPROBE_DIR:1}
                NETPROBE_DIR="/home/$INSTALL_USER$NETPROBE_DIR"
              fi
              
              echo "--- Locating latest backup archive ---"
              BACKUP_DIR="$NETPROBE_DIR/backup/netprobe"
              if [ ! -d "$BACKUP_DIR" ]; then
                echo "ERROR: Backup directory '$BACKUP_DIR' not found. Cannot rollback."
                exit 1
              fi
              LATEST_BACKUP=$(ls -1t "$BACKUP_DIR"/netprobe-*.tar.gz 2>/dev/null | head -n 1 || true)
              if [ -z "$LATEST_BACKUP" ]; then
                echo "ERROR: No backup archives found in '$BACKUP_DIR'. Cannot rollback."
                exit 1
              fi
              echo "Found backup: $LATEST_BACKUP"
              
              echo "--- Stopping netprobe service ---"
              sudo systemctl stop netprobe.service || true
              
              echo "--- Removing current netprobe directory ---"
              sudo rm -rf "$NETPROBE_DIR/netprobe"
              
              echo "--- Restoring netprobe from backup ---"
              sudo tar -xzf "$LATEST_BACKUP" -C "$NETPROBE_DIR"
              sudo chown -R $INSTALL_USER:$INSTALL_USER "$NETPROBE_DIR/"
              
              echo "--- Restarting netprobe service ---"
              sudo systemctl daemon-reload
              sudo systemctl enable netprobe.service || true
              sudo systemctl restart netprobe.service || true
              
              sleep 3
              if sudo systemctl is-active --quiet netprobe.service; then
                echo "SUCCESS: Netprobe service is running after rollback"
              else
                echo "WARNING: Netprobe service is not active after rollback"
                sudo systemctl status netprobe.service || true
              fi
              
              echo "=== Netprobe Rollback Complete ==="

  NetprobeRollbackByInstanceIds:
    Type: AWS::SSM::Association
    Properties:
      Name: !Ref NetprobeRollbackDocument
      Targets:
      - Key: InstanceIds
        Values: !Ref InstanceIds
      Parameters:
        AWSRegion:
        - !Ref AWSRegion
        NetprobeInstallDirectory:
        - !Ref NetprobeInstallDirectory

Outputs:
  SSMDocumentName:
    Description: Name of the SSM Document created for Netprobe rollback
    Value: !Ref NetprobeRollbackDocument
    Export:
      Name: !Sub "${AWS::StackName}-RollbackSSMDocument"

  AssociationId:
    Description: SSM Association ID for the Netprobe rollback
    Value: !Ref NetprobeRollbackByInstanceIds
    Export:
      Name: !Sub "${AWS::StackName}-RollbackAssociationId"
["Geneos"] ["Geneos > Netprobe"] ["User Guide"]

Was this topic helpful?