OpsGenie Configuration Backup

OpsGenie customers can back up their account configuration and restore it later using this script.

You can download the executable jars from releases.

Parameters

Options:

Possible run configurations for OpsGenieExportUtil:

1. Run only with apiKey parameter.
This option simply exports the OpsGenie configuration to run path (the directory which the jar file is located in) in a folder named OpsGenieBackups.

java -jar OpsGenieExportUtil-*.jar --apiKey YOUR_API_KEY

2. Run with apiKey and backupPath parameters.
This option extracts the OpsGenie configuration to the given path.

java -jar OpsGenieExportUtil-*.jar --apiKey YOUR_API_KEY --backupPath EXTRACT_PATH

3. Run with apiKey, git sshUrl and  sshKeyPath parameters.
This command clones the remote repository into a directory called OpsGenieBackupGitRepository.
After the cloning process the export jar backs up the data into this directory under a folder called OpsGenieBackups.

java -jar OpsGenieExportUtil-*.jar --apiKey YOUR_API_KEY --sshUrl GIT_SSH_URL -sshKeyPath GIT_SSH_PATH 

4. Run with apiKey, git sshUrl,  sshKeyPath and backupPAth parameters.
This option clones the remote git to the given path.

java -jar OpsGenieExportUtil-*.jar --apiKey YOUR_API_KEY --sshUrl GIT_SSH_URL -sshKeyPath GIT_SSH_PATH --backupPath EXTRACT_PATH

Possible run configurations for OpsGenieImportUtil:

1. Run only with apiKey parameter.
This option searches for OpsGenieBackups folder in run path (the directory which the jar file is located in)
If it finds the folder it restores the configurations to the OpsGenie account whose API key is given.

java -jar OpsGenieImportUtil-*.jar --apiKey YOUR_API_KEY

2. Run with apiKey and backupPath parameters.
This option searches for OpsGenieBackup folder in given path
If it finds the folder named OpsGenieBackups it restores the configurations to the OpsGenie account whose API key is given.

java -jar OpsGenieImportUtil-*.jar --apiKey YOUR_API_KEY --backupPath EXTRACT_PATH

3. Run with apiKey, sshUrl and  sshKeyPath parameters.
This option clones the remote git to the run path.
After cloning it searches the folder named OpsGenieBackups
If it finds the folder, the restore operation  is performed

java -jar OpsGenieImportUtil-*.jar --apiKey YOUR_API_KEY --sshUrl GIT_SSH_URL -sshKeyPath GIT_SSH_PATH 

4. Run with apiKey, sshUrl,  sshKeyPath and  backupPath parameters.
This configuration clones the remote git to a folder named OpsGenieBackupGitRepository under the given path.

java -jar OpsGenieImportUtil-*.jar --apiKey YOUR_API_KEY --sshUrl GIT_SSH_URL -sshKeyPath GIT_SSH_PATH --backupPath EXTRACT_PATH

Export

During export, these features are exported to a local directory or a git repository:

* Custom User Roles
* Users and Notification Rules
* Forwarding Rules
* Teams
* Escalations
* Schedules and Schedule Overrides
* Alert Policies (old version)
* Integrations and Integration Actions
* Policies

The script exports data to a folder named OpsGenieBackups. There are 9 sub-folders inside this main folder.

* customUserRoles
* users
* forwardings
* teams
* escalations
* schedules
* policies
* orders
* integrations
*policiesV2

Separate Files

The script uses separate files for each entity. The reason is when the script tries to update the file, it only updates the modified entity’s file. For example if an account has 80 users in the system and the script already took backup for all the system to the remote git. After the backup is complete, if the owner updates 2 users from the OpsGenie system and tries to backup to the same git repository again, the script updates only 2 of the user files. This helps users to keep track of the entities.

Backup Over Another Backup

The script deletes old backup files in order to backup current system configurations. This provides the ability to delete old entity files and automatically update current entities.

File Format

The script uses OpsGenie Java SDK and Integrations API to export and import. When it exports, it stores the entities as JSON and saves those as separate files. When it imports, it reads the JSON files and imports them to the given API key’s OpsGenie account.

Git Limitations

Currently Git does not allow to push empty directories. For example, if the system does not have any schedules there will be no schedule file under schedule directory. When the script tries to push the schedule directory to the remote Git, it won’t be pushed. Another word, empty directories won’t be pushed to Git.

Import

While importing, the script reads the data from remote Git repository or local path.

The file formats should be the same as export file formats. Since entities data is stored in JSON format, users can change it manually but they should not change the file format.

The default restore operation imports everything in your backup folder to your OpsGenie account. In order to configure your restore settings you can use restoreConfig.properties file. OpsGenieImportUtil uses restoreConfig.properties file if there is any in run directory (the directory which the jar file is located in).

Update current data

The script adds missing entities or updates current entities. This can be set by user by using the import configs. For example if OpsGenie account owner or admin deletes a user after the backup, the script detects this deleted user and adds it to the current system, if addNewUsers parameter is set to true. If the addNewUsers parameter is set to false, the script won't add the deleted users. If the updateExistUsers parameter is set to false, the script won't update the modified users.

Relation Between Entities

If the owner does not import missing users (which he/she can do it with ImportConfig) and tries to add a team or schedule which includes those users, the script will give an error message. Therefore, the owner should be careful about changing ImportConfig. Another word, if the owner only imports some entities, he/she should consider the relations with the other entities. If the script encounters such an error, it will generate a logger error and simply skip this entity and continue to import other entities.

Entity Orders

Orders are preserved while importing Alert Policies. If new alert policies were added after the backup, then the imported ones are added to the end with their orders preserved.

Current Limitations

Transient Data

Exporting dynamic data like alerts, incidents, alert and customer logs, notifications etc. is not possible and will not be implemented.

Account Configuration

Exporting account configuration like sso settings, password policy, central notification template is not supported since there are no public api endpoints for them

Heartbeats

Exporting heartbeats is not possible since listing heartbeats is not possible at api level and will not be implemented.

Services

Exporting services is not supported right now but it will be implemented eventually

Integrations

Exporting some integration types is not possible since they are not supported at api level.

Not supported: Incoming Call, PingdomWebHook, Nagios, Observium, Hipchat Update Only: Slack, HipChat, FlowDockV2