[ Applies to ] StorageGuard 9.2.7 and later / Storage and backup assets / Comparison tab
Golden image comparison lets you benchmark each asset's configuration against a reference asset that you designate as the golden image. StorageGuard compares the output of the same commands on both assets and highlights the differences that matter. Use it to spot and fix configuration drift, and to keep configurations and security posture consistent across your environment.
In this article
How golden image comparison works
Comparison is built from three pieces:
| Term | Meaning |
|---|---|
| Golden image | The reference asset whose configuration represents your approved baseline. |
| Comparison group | A golden image plus the assets you compare against it, all of the same system type. |
| Text normalizer | A set of rules that cleans and standardizes command output before comparison, so that expected differences such as system names, IP addresses, serial numbers, and timestamps are not reported as drift. |
You work with all three on the Comparison tab.
Create a comparison group
- In the StorageGuard web UI, click the Comparison tab at the top of the page.
-
Click Add new (+) to create a comparison group.
Figure 2. The new comparison group window
- Enter a Name and a Group Description.
- Select a Default Text Normalizer. Leave it empty to let StorageGuard select one automatically. For details, see Manage text normalizers.
- Select the System Type.
-
Under the golden image, click Select, choose the reference asset, and then click Apply.
Figure 3. Selecting the golden image asset
-
Choose the assets to compare: click Select, choose the assets, and then click Apply.
Figure 4. Selecting the assets to compare
Alternatively, select a predefined asset group, if one exists.
Figure 5. Selecting a predefined asset group
- Click Apply to create the group, or click X to cancel.
Edit or delete a comparison group
Edit a group
-
In the Groups table, double-click the group.
Figure 6. Editing a comparison group
- Make your changes, and then click Apply to save them, or click X to close without saving.
Delete a group
-
In the Groups table, select the group, and then click the Delete icon.
Figure 7. Deleting a comparison group
- Click Delete to confirm, or click Cancel.
Review comparison results
To open a group's results, click … next to the group, and then select Summary View or Detailed View.
Figure 8. The group menu with Summary View and Detailed View
Summary view
The summary view shows, for every asset in the group, whether each command's output matches the golden image. Use it to see at a glance which assets have drifted.
Figure 9. Summary view
| Element | What it shows |
|---|---|
| Rows | One command or configuration item each. |
| Columns | One asset in the group each. |
| ✓ | The output matches the golden image. |
| ✗ | The output differs from the golden image. |
| N/A | No data is available for this command on this asset. |
| Asset list (top right) | All assets in the group. Remove assets to focus on specific ones, and add them back when needed. |
| Navigation arrows | Scroll horizontally between assets. |
| Filters (top) | Limit the view by result type, or search for a specific command. |
Detailed view
The detailed view shows the configuration differences between an asset and the golden image side by side. You can browse it By Commands or By Systems.
Figure 10. Detailed view, by commands
Figure 11. Detailed view, by systems
| Element | What it does |
|---|---|
| Left panel | Lists the systems and commands in the comparison. Select a command to show its comparison in the main area. |
| Comparison panes | The left pane shows the golden image output, and the right pane shows the compared asset. |
| Highlighting | Red marks removed or mismatched values. Green marks added or differing values. |
| View toggles | Switch between Normalized and Original output, and between Split and Unified layouts. |
| Show Differences Only | Hides identical lines so you can focus on deviations. |
| Show Ignored Commands | Includes commands that text normalizer rules exclude from comparison. |
Icons next to commands
| Icon | Meaning |
|---|---|
| ≠ | The command output for this asset differs from the golden image. |
| A | The Automatic (default) text normalizer was applied. |
| T | The Text normalizer was applied. |
| Y | The YAML/JSON normalizer was applied. |
| X | The XML normalizer was applied. |
Command options menu
In the detailed view, click … next to a command to control how its output is compared.
Figure 12. The command options menu
| Option | What it does |
|---|---|
| Edit Normalizer | Opens the text normalizer for this command so you can adjust its rules. |
| Switch Normalizer | Applies a different built-in or custom normalizer, for example one for Unity, NetBackup, or ONTAP systems. |
| Ignore in current group | Excludes the command from results in this comparison group only. |
| Ignore globally | Excludes the command from results in all comparison groups. |
Ignore a difference by creating a normalization rule
If a highlighted difference is expected noise, you can create a rule that hides it from future comparisons. In the detailed view, right-click the difference, and then select an option:
Figure 13. The right-click menu in the detailed view
| Option | What it does |
|---|---|
| Copy | Copies the selected text. |
| Add to ignored fields by name | Hides differences in fields with this exact name. |
| Add to ignored fields by name regex | Hides differences in fields whose names match a regex pattern. |
| Add to ignored values by regex | Hides values that match a regex pattern, regardless of field name. |
| Add to ignored paths | Hides differences at this full JSON path. |
Note: These options create or update the text normalizer for the selected command. To review or remove the rules later, open the normalizer from Text Normalizers.
Manage text normalizers
Text normalizers clean and standardize command output before comparison, so only meaningful differences are shown. Default normalizers are applied automatically: they hide unique identifiers, align formats, and filter noisy patterns. You can customize them or add your own to match your environment.
Add a text normalizer
- Click the Comparison tab.
- On the left, click Text Normalizers, and then click +.
- Enter a Name for the normalizer.
- Select the data format in Type (JSON, Text, YAML, or XML), or keep Auto Detect.
- Configure the system identity settings, which apply to all data formats.
- Configure the settings on the tab for your data format. See Text normalizer settings reference.
- Click Apply to save the normalizer.
Customize a text normalizer
-
In the Text Normalizers table, double-click the normalizer.
Figure 14. Editing a text normalizer
- Make your changes, and then click Apply to save them, or click X to close without saving.
Delete a text normalizer
-
In the Text Normalizers table, select the normalizer, and then click the Delete icon.
Figure 15. Deleting a text normalizer
- Click Delete to confirm, or click Cancel.
Text normalizer settings reference
Settings for all data formats
| Setting | What it does |
|---|---|
| [ General ] | |
| Name | A clear name for the normalizer. |
| Type | The data format: JSON, Text, YAML, or XML. Auto Detect lets StorageGuard determine the format. |
| [ System identity ] | |
| Replace System Name | Replaces real system names with the system name placeholder. |
| System Name Placeholder | The token that replaces system names, for example [SYSTEM_NAME]. |
| Replace System IP Address | Replaces IP addresses with the IP address placeholder. |
| IP Address Placeholder | The token that replaces IP addresses, for example [SYSTEM_IP_ADDRESS]. |
| Replace System Serial | Replaces system serial numbers with the serial placeholder. |
| Serial Placeholder | The token that replaces serial numbers, for example [SYSTEM_SERIAL_NUM]. |
JSON and YAML tab
Figure 16. The JSON and YAML tab
| Setting | What it does |
|---|---|
| [ General ] | |
| Ignore Whitespace and Formatting | Ignores differences in spacing and line breaks. |
| Sort Object Keys Alphabetically | Orders object keys consistently. |
| Remove Empty Strings | Removes fields with empty string values. |
| Remove Null Values | Removes fields with null values. |
| [ Coerce data types ] | |
| Numbers to Strings | Converts numbers to strings. |
| Strings to Numbers | Converts numeric strings to numbers. |
| Booleans to Strings | Converts true and false to strings. |
| [ Field exclusions ] | |
| Ignore Paths | Full JSON paths to exclude from comparison. |
| Ignore Fields By Name | Field names to exclude, matched exactly. |
| Ignore Fields By Name Regexp | Regex patterns for field names to exclude, for example (?i)(date|time). |
| Ignore Values Regexp | Regex patterns for dynamic values to exclude, such as timestamps. For example, \d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})? matches ISO 8601 timestamps. |
| [ Array comparison ] | |
| Ignore Array Order | Treats arrays with the same elements in a different order as identical. |
| Sort Array Elements by Key | The key used to sort array elements before comparison. |
| Ignore Extra Array Items | Ignores array items that don't exist in the golden image. |
| Require All Array Items Present | Requires every item in the golden image to be present in the compared output. |
| Strict Equality | Compares array items exactly, including data type and value. |
| Fuzzy Match | Allows minor variations between array items. |
| Unique Key | A key that uniquely identifies array elements, for more accurate matching. |
| [ Numerical comparison ] | |
| Floating Point Tolerance | The acceptable difference between two floating-point numbers. For example, 0.01 ignores minor rounding differences. |
| [ String comparison ] | |
| Ignore Case | Treats uppercase and lowercase letters as equal. |
| Normalize Unicode | Handles special and accented characters consistently. |
| Trim Whitespace | Removes leading and trailing spaces. |
Text tab
Figure 17. The Text tab
| Setting | What it does |
|---|---|
| [ General ] | |
| Normalize Line Endings To | Converts all line endings to one format, for example LF. |
| Ignore Empty Lines | Skips blank lines. |
| Ignore Trailing Whitespace | Ignores spaces and tabs at the end of lines. |
| Ignore Leading Whitespace | Ignores spaces and tabs at the start of lines. |
| Normalize Unicode | Handles special and accented characters consistently. |
| Ignore Text Case | Treats uppercase and lowercase text as equal. |
| Sort Lines | Compares lines in alphabetical order instead of their original order. |
| [ Exclusions ] | |
| Exclude Lines Matching Regex | Removes lines that match a regex pattern. For example, ^\s*$ removes empty lines. |
| Redaction Patterns Regex | Regex patterns for sensitive or dynamic values, such as timestamps, IDs, or serial numbers. |
| Redaction Placeholder | The token that replaces redacted content, for example [REDACTED]. |
| [ Line content ] | |
| Trim Line Whitespace | Removes leading and trailing whitespace on each line. |
| Normalize Internal Whitespace | Replaces multiple spaces or tabs within a line with a single space. |
| Convert Tabs to Spaces | Converts tabs to spaces, using the tab width. |
| Tab Width | The number of spaces that replace each tab. The default is 4. |
| [ Comments ] | |
| Ignore Full Line Comments | Skips lines that contain only a comment. |
| Full Line Comment Prefixes | The characters that start a full-line comment, for example #, ;, or //. |
| Ignore Inline Comments | Removes comments at the end of a line. |
| Inline Comment Delimiters | The characters that start an inline comment, for example # or //. |
| [ Key-value pairs ] | |
| Enable Key Value Pair Parsing | Parses output with a key-value structure, for example key=value. |
| Key Value Separators | The characters that separate keys and values, for example = or :. |
| Trim Keys | Removes extra spaces around keys. |
| Trim Values | Removes extra spaces around values. |
| Ignore Case for Keys | Treats keys as equal regardless of letter case. |
| Ignore Case for Values | Treats values as equal regardless of letter case. |
XML tab
Figure 18. The XML tab
| Setting | What it does |
|---|---|
| [ General ] | |
| Ignore Comments | Skips XML comment nodes. |
| Ignore Processing Instructions | Excludes processing instructions such as <?xml ...?>. |
| Ignore Doctype Declaration | Ignores <!DOCTYPE> declarations. |
| Normalize Empty Elements | Treats <tag/> and <tag></tag> as identical. |
| Normalize CDATA Sections | Handles CDATA content consistently. |
| Remove Default Attributes | Removes attributes that XML parsers add automatically. |
| [ Exclusions ] | |
| Ignore Elements by XPath | Excludes elements that match XPath expressions. |
| Ignore Element Values Regex | Excludes element text values that match regex patterns. |
| Ignore Attributes by XPath | Excludes attributes identified by XPath. |
| Ignore Attribute Values Regex | Excludes attribute values that match regex patterns, such as timestamps or dynamic IDs. |
| [ Element comparison ] | |
| Ignore Child Element Order | Treats elements as equal even if their children are in a different order. |
| Sort Child Elements by XPath | Defines how to reorder child elements before comparison. |
| Ignore Extra Child Elements | Ignores child elements that appear on only one side. |
| Require All Child Elements Present | Requires all expected child elements to exist in the compared XML. |
| [ Attribute comparison ] | |
| Sort Attributes by Name | Orders attributes alphabetically. |
| Trim Attribute Values | Removes leading and trailing spaces from attribute values. |
| Ignore Case for Attribute Values | Treats attribute values as equal regardless of letter case. |
| Normalize Unicode for Attribute Values | Handles special and accented characters in attribute values consistently. |
| [ Text content ] | |
| Trim Text Content | Removes leading and trailing whitespace in text nodes. |
| Normalize Whitespace in Text Content | Replaces multiple spaces or tabs with a single space. |
| Ignore Case for Text Content | Treats text content as equal regardless of letter case. |
| Normalize Unicode for Text Content | Handles special and accented characters consistently. |
| Normalize Character Entities | Compares entities such as & and < consistently. |
| [ Namespaces ] | |
| Ignore Namespace Prefixes | Ignores differences in namespace prefixes, for example ns1: and ns2:. |
| Ignore Namespace URIs | Ignores differences in namespace URIs. |
| Canonicalize Namespace Declarations | Standardizes how namespace declarations are represented. |
Troubleshooting
| Symptom | Likely cause | What to do |
|---|---|---|
| Many differences that aren't real drift | Output includes system-specific or dynamic values such as names, IPs, serials, or timestamps. | Enable the system identity settings in the normalizer, or right-click the difference and create a normalization rule. |
| N/A appears for an asset | No data was collected for that command on that asset. | Confirm that the asset has been scanned successfully, and then review the results again. |
| A command is missing from the results | The command is ignored in this group or globally. | In the detailed view, select Show Ignored Commands. To include it again, remove the ignore rule. |
| The wrong normalizer is applied to a command | Automatic detection picked a different data format. | Click … next to the command, and then select Switch Normalizer. |
[ Still need help? ]
Our support team is here for you. Submit a request
Comments
0 comments
Please sign in to leave a comment.