Liongard Roar

Roar Users Guide & Documentation

Welcome! You'll find comprehensive guides and documentation to help MSPs start working with Liongard's Roar as quickly as possible, as well as support if you get stuck. Let's go #MakeITRoar!

Get Started    

Deployment via Continuum

On-Premise Agent Overview

On-Premise Agent Installation Best Practices

  1. Install On-Premise Agents on Domain Controllers
  • We support On-Premise Agents being installed on servers; however, installing an On-Premise Agent on a Domain Controller will result in more Inspector Auto-Discovery, and therefore, less manual work.
  1. Generally, Install One On-Premise Agent per Network
  • Our Agents speak across VPN tunnels
  • Our Agents DO NOT speak across Active Directory Domains, so if you have two Active Directory Domains in one network, then you'll need an Agent within each Active Directory Domain.
  1. Install an Additional On-Premise Agent on any Server NOT Tied to an Active Directory Domain
  • The additional Agent will auto-activate an Inspector for the local Windows server, and that Inspector will auto-discover a Hyper-V or SQL Server Inspector if either system is present
  1. Agent Names must be unique. Include a unique identifier in the Agent script to ensure all Agents will have a unique name.

👍

On-Premise Agent Installation = Inspector Auto-Discovery

When you roll out an On-Premise Agent, there is a potential for the Auto-Discovery of four Inspectors:

  1. Upon install, an On-Premise Agent will auto-activate an Inspector for the local Windows Server
  2. After the Windows Inspector runs, it will auto-discover an Active Directory Inspector
  3. Once activated and successfully run, the Active Directory Inspector will auto-discover Inspectors for any additional Windows servers within its Domain
  4. Once activated and successfully run, the Windows Inspectors will Auto-Discover Inspectors for any Hyper-V or SQL Server Inspectors installed

Script Overview

The script below provides for a basic install of the Roar Windows Agent via Continuum RMM using our MSI Installer. It takes in variables associated with your Roar instance, such as the URL and Access Key ID and Secret, to complete the install.

  • This script will be supported on a best-effort basis.

This script can:

  • Install an On-Premise Agent
  • (Optionally) Assign the Agent to it's Associated Environment
  • (Optionally) Assign the Agent to "Run As" a Domain Admin User

This script can not:

  • Create a Domain Admin User

Step 1: Create a Service Account

🚧

"Run As" a System Account

If you would like to set this Agent to "run as" the Local System user rather than a specific user account, then skip this step.

In order to run remote inspections, On-Premise Agents must be set to "Run As" an Active Directory user with Domain Admin credentials.

Follow Step 1 in our Deployment via MSI Installer documentation to create a Domain Admin Active Directory user for this Agent to "Run As".

Step 2: Import the Script

Initially, you will need to import the script by saving it as a Custom Task.

Part 1: Import the Script

In Continuum, navigate to Quick Access drop down menu > select Devices

  • Select the Run drop down menu > (+) Powershell script
  • Select a target (any target) > Continue to setup
  • Paste the powershell script (below) into the Powershell Script field
<#
.SYNOPSIS
    Installs the Roar Agent via the Continuum RMM.

.DESCRIPTION
    Provides a paramaterized script that lets you install the Roar Agent based on the specific setup you want.

.PARAMETER RoarUrl
  The Roar url for your instance, e.g. us1.app.liongard.com
  
  $RoarUrl = 'xxxxx.app.liongard.com'

.PARAMETER RoarAccessKey
  The Roar API access key generated from Roar
  
  $RoarAccessKey = "xxxxxx"

.PARAMETER RoarAccessSecret
  The Roar API secret generated from Roar
  
  $RoarAccessSecret = "xxxxxx"

.PARAMETER RoarSvcUsername
  The username of the Roar service account to use associate the service with, i.e. "Run As"

  $RoarSvcUsername = "DOMAIN\RoarSvcAccount"

.PARAMETER RoarSvcPassword
  The password of the Roar service account to use associate the service with, i.e. "Run As"

  $RoarSvcPassword = "xxxxxx"

.PARAMETER UseSiteName
    Default to False. If set it will associate the agent to the Environment which matches the site name. Change this to $True if and only if the Roar Environment names EXACTLY MATCH the Continuum Site names. We recommend you model Roar environment names after your Continuum site names as they are easy to change and Continuum is not.
NOTE: The Continuum agent does not produce the 'SITENAME' registry key for ~30 minutes after initial Continuum agent installation. You will need to run this script after the Continuum agent has properly registered and the registry key for the site name is populated if you use this feature.

    $UseSiteName= "$True"

.PARAMETER Environment
    If you want to manually specify the Environment in Roar to associate the agent with.

    $Environment = "Liongard"

.NOTES
    Version: 1.0.0
    Date: 09/05/2019
#>
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$X64 = 64
$X86 = 32
$InstallerName = "RoarAgent.msi"
$DownloadURL = "https://agents.static.liongard.com/" + $InstallerName
$InstallerPath = Join-Path $Env:TMP $InstallerName
$DebugLog = Join-Path $Env:TMP RoarDebug.log
$MsiLog = Join-Path $Env:TMP install.log


<#
Edit the following parameters to include your Roar URL, Access Key and Secret, (optionally) the Username and Password to a Service Account, and (optionally) the name of the Environment that you would like this Agent to be associated to in Roar
#>

$RoarURL = 'xxxxx.app.liongard.com'
$RoarAccessKey = "xxxxxx"
$RoarAccessSecret = "xxxxxx"
$RoarSvcUsername = "DOMAIN\RoarSvcAccount"
$RoarSvcPassword = "xxxxxx"
$Environment = "xxxxxx" 


function Get-TimeStamp {
    return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)   
}
function Get-WindowsArchitecture {
    If ($env:ProgramW6432) {
        $WindowsArchitecture = $X64
    } Else {
        $WindowsArchitecture = $X86
    }
    return $WindowsArchitecture
}
function Get-ContinuumKeyPath {
    $WindowsArchitecture = Get-WindowsArchitecture
    If ($WindowsArchitecture -eq $X86) {
        $ContinuumKeyPath = "HKLM:\SOFTWARE\SAAZOD"
    } ElseIf ($WindowsArchitecture -eq $X64) {
        $ContinuumKeyPath = "HKLM:\SOFTWARE\WOW6432Node\SAAZOD"
    } Else {
        $ArchitectureError = "Failed to determine the Windows Architecture. Received $WindowsArchitecure."
        Add-Content $DebugLog "$(Get-TimeStamp) $ArchitectureError"
        throw $ArchitectureError
    }
    return $ContinuumKeyPath
}
function Get-ContinuumKeyObject {
    $ContinuumKeyPath = Get-ContinuumKeyPath
    If ( ! (Test-Path $ContinuumKeyPath)) {
        $ContinuumRegistryError = "The expected Continuum registry key $ContinuumKeyPath did not exist."
        Add-Content $DebugLog "$(Get-TimeStamp) $ContinuumRegistryError"
        throw $ContinuumRegistryError
    }
    
    $ContinuumKeyObject = Get-ItemProperty $ContinuumKeyPath
    
    If ( ! ($ContinuumKeyObject)) {
        $ContinuumRegistryError = "The Continuum registry key was empty."
        Add-Content $DebugLog "$(Get-TimeStamp) $ContinuumRegistryError"
        throw $ContinuumRegistryError
    }
    return $ContinuumKeyObject
}
function Get-SiteCode {
    $ContinuumValueName = "SiteCode"
    $ContinuumKeyObject = Get-ContinuumKeyObject
    If ( ! (Get-Member -inputobject $ContinuumKeyObject -name $ContinuumValueName -Membertype Properties)) {
        $ContinuumKeyPath = Get-ContinuumKeyPath
        $ContinuumRegistryError = ("The expected Continuum registry value $ContinuumValueName did not exist within " +
                                   "$ContinuumKeyPath")
        Add-Content $DebugLog "$(Get-TimeStamp) $ContinuumRegistryError"
        throw $ContinuumRegistryError
    }
    $SiteCode = $ContinuumKeyObject.$ContinuumValueName
    return $SiteCode
}

function Get-SiteName {
    $ContinuumValueName = "SITENAME"
    $ContinuumKeyObject = Get-ContinuumKeyObject
    If ( ! (Get-Member -inputobject $ContinuumKeyObject -name $ContinuumValueName -Membertype Properties)) {
        $ContinuumKeyPath = Get-ContinuumKeyPath
        $ContinuumRegistryError = ("The expected Continuum registry value $ContinuumValueName did not exist within " +
                                   "$ContinuumKeyPath")
        Add-Content $DebugLog "$(Get-TimeStamp) $ContinuumRegistryError"
        throw $ContinuumRegistryError
    }
    $SiteName = $ContinuumKeyObject.$ContinuumValueName
    return $SiteName
}
function Get-Installer {
    $WebClient = New-Object System.Net.WebClient
    try {
        $WebClient.DownloadFile($DownloadURL, $InstallerPath)
    } catch {
        Add-Content $DebugLog "$(Get-TimeStamp) $_.Exception.Message"
    }
    If ( ! (Test-Path $InstallerPath)) {
        $DownloadError = "Failed to download the Roar Agent Installer from $DownloadURL"
        Add-Content $DebugLog "$(Get-TimeStamp) $DownloadError"
        throw $DownloadError
    }
}

# Generate the agent name here. We use Continuum SiteCode + Name of the computer to ensure uniqueness
function Get-AgentName {
    $SiteCode = Get-SiteCode
    $AgentName = $SiteCode + "-" + $env:computername
    return $AgentName
}

function Install-Roar {
    $AgentName = Get-AgentName
    If ( ! (Test-Path $InstallerPath)) {
        $InstallerError = "The installer was unexpectedly removed from $InstallerPath"
        Add-Content $DebugLog "$(Get-TimeStamp) $InstallerError"
        throw $InstallerError
    }
   
    $RoarArgs = "ROARURL=" + $RoarURL + " ROARACCESSKEY=" + $RoarAccessKey + " ROARACCESSSECRET=" + $RoarAccessSecret + " ROARAGENTNAME=" + "`"$AgentName`""
    If ($RoarSvcUsername -and $RoarSvcUsername.Length -gt 0) {
        $RoarArgs += " ROARAGENTSERVICEACCOUNT=" + "`"$RoarSvcUsername`"" + " ROARAGENTSERVICEPASSWORD=" + "`"$RoarSvcPassword`""
    }
    
    If ($UseSiteName) {
      $SiteName = Get-SiteName
      $RoarArgs += " ROARENVIRONMENT=" + "`"$SiteName`""
    } ElseIf ($Environment) {
        $RoarArgs += " ROARENVIRONMENT=" + "`"$Environment`""
    }

    $InstallArgs = @(
        "/i"
        "`"$InstallerPath`""
        $RoarArgs
        "/qn"
        "/L*V"
        "`"$MsiLog`""
        "/norestart"
    )

    Start-Process msiexec.exe -ArgumentList $InstallArgs -Wait -PassThru
}
function main {
    If (!(Get-Service "Roar Agent" -ErrorAction SilentlyContinue)) {
        Get-Installer # Download the MSI
      Install-Roar # Install the MSI
    }
}
main
  • Set Expected time of script execution in seconds to 300

Part 2: Customize the Parameter Block

Towards the top of this script you'll find a block of parameters.

This block can be customized and edited to include your information. Below are examples of how you might customize the install via the command line parameters:

Entering your Information

Certain information in this parameter block will not change between runs, such as your Roar URL, and Access Key and Secret, so you can edit this parameter block to include these details.

Associating the Agent to an Environment

  • If your Site Names in Continuum RMM exactly match the name of your Environments in Roar, then you can add in the parameter $UseSiteName = "$True", and take out the parameter $Environment = "xxxxxx"
  • If you would NOT like to associate the Agent(s) to an Environment in Roar upon install, then you can take out the parameter $Environment = "xxxxxx"
  • If your Site Names in Continuum RMM do NOT exactly match the name of your Environments in Roar, and you would like to associate the Agent to an Environment in Roar upon install, then you can leave the parameter $Environment = "xxxxxx" and edit this to include a Roar Environment name (this must exactly match the associated Environment's name in Roar).

🚧

Associating the Agent to an Environment in Roar

If you do NOT associate the Agent to an Environment in Roar upon install, then you will need to do this after the installation.

You can do this in Roar by navigating to Admin > Agents > Select the Agent installed > Fill the Environment field with the associated Environment.

Assigning the Agent to "Run As" a Specific User

  • If you would like the Agent(s) to "Run As" a local system user, then you can take out the $RoarSvcUsername = "DOMAIN\RoarSvcAccount" $RoarSvcPassword = "xxxxxx"
  • If you would like the Agent(s) to "Run As" a Domain Admin user, but would not like to include this as part of this script, then please follow our Agent Service Permissions Documentation.

Select Save as Custom Task (Optional)

  1. Task Name: Roar Agent MSI
  • Select Save

Once you see the Your setup has been saved as a Custom Task successfully message > select Cancel

This will serve as a generic task that you can further edit upon install.

Step 3: Run the Script

Part 1: Select Devices

Run > Custom > select your Roar MSI Agent custom task

Select the Sites that you would like to roll out the Roar MSI Agent to on this run of the script > Continue to Setup

Part 2: Edit Parameter Block

Depending on how you customized the parameter block, will change what information you will need to enter at this stage, if any. If there are any remaining parameters in this block that need to be edited, now is when you will do so.

Select Continue to Scheduling > select when you would like this script to run > Run Task

Agent Fail Logs

If this script fails, you can find an install log in the temporary folder c:\Windows\Temp, called install.log.

Using Automation with Roar

Thanks to one of our Roar partners for sharing the above Continuum script. If you'd like to share how your team is using automation with Roar, email us at [email protected]

Last Updated: 2020-07-21

Updated 20 days ago


Deployment via Continuum


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.