Skip to main content

Advanced Topics

The scm CLI supports advanced workflows including multi-folder operations, bulk loading, mock mode testing, debug output, environment variable configuration, and script integration. This guide covers techniques for power users and automation scenarios.

Overview​

This guide covers advanced CLI capabilities:

  • Work with objects across multiple configuration folders
  • Perform bulk operations using YAML files
  • Test commands safely with mock mode
  • Enable debug output for troubleshooting
  • Configure the CLI with environment variables
  • Integrate the CLI into scripts and automation pipelines

Prerequisites​

Before using these advanced features, ensure you have:

  • The scm CLI installed and authenticated (see Getting Started)
  • Familiarity with basic CLI operations (see Configuration Objects)
  • For scripting: a POSIX-compatible shell (bash, zsh) or PowerShell

Core Concepts​

Folder-Based Organization​

Object-related commands require exactly one container option — --folder, --snippet, or --device — to specify where objects should be created, updated, or retrieved from. SCM uses folders to organize configurations hierarchically; snippets and devices hold shared and device-level configuration.

Mock Mode​

Setting the SCM_MOCK=1 environment variable allows you to run any command without making actual API calls. This is useful for validating syntax, testing YAML files, and developing scripts.

Debug Output​

The global --debug flag (or SCM_LOG_LEVEL=DEBUG) provides detailed information about API requests, responses, timing, and errors. Use it when troubleshooting unexpected behavior.

Examples​

Working with Multiple Folders​

Specifying Folders​

$ scm set object address web-server \
--folder Shared \
--ip-netmask 10.1.1.10/32
---> 100%
Created address: web-server in folder Shared

Listing Objects Across Folders​

$ scm show object address --folder Shared
---> 100%
Addresses in folder 'Shared':
------------------------------------------------------------
Name: web-server
IP Netmask: 10.1.1.10/32
------------------------------------------------------------
$ scm show object address --folder Branch-Office-1
---> 100%
Addresses in folder 'Branch-Office-1':
------------------------------------------------------------
Name: branch-server
IP Netmask: 10.2.1.10/32
------------------------------------------------------------

Bulk Operations​

Loading Multiple Objects​

Load multiple objects of the same type from a YAML file:

$ scm load object address --file addresses.yaml --folder Shared
---> 100%
✓ Loaded address: web-server-1
✓ Loaded address: web-server-2

Successfully loaded 2 out of 2 addresses from 'addresses.yaml'

YAML Structure for Bulk Loading​

Each resource type has a specific YAML structure:

---
addresses:
- name: web-server-1
description: "Web server 1"
ip_netmask: 192.168.1.100/32
tags:
- web
- production

- name: web-server-2
description: "Web server 2"
ip_netmask: 192.168.1.101/32
tags:
- web
- production
tip

Use YAML files for complex or repeatable configurations. Store them in version control to track changes over time.

Mock Mode​

Testing Commands Safely​

Set SCM_MOCK=1 to run any command without API calls:

$ SCM_MOCK=1 scm set object address test-server \
--folder Shared \
--ip-netmask 10.1.1.10/32
---> 100%
Created address: test-server in folder Shared (mock mode)

Mock mode is useful for:

  • Testing command syntax without making changes
  • Validating YAML files before bulk loading
  • Script development and testing

Debug Output​

Troubleshooting with Debug Mode​

Add the global --debug flag to see detailed operation information:

$ scm --debug set object address test-server \
--folder Shared \
--ip-netmask 10.1.1.10/32

Debug output includes:

  • API request details
  • Response data
  • Timing information
  • Error details (when failures occur)

Environment Variables​

Available Environment Variables​

VariableDescriptionExample
SCM_CLIENT_IDClient ID for authenticationexport SCM_CLIENT_ID=client-id-value
SCM_CLIENT_SECRETClient secret for authenticationexport SCM_CLIENT_SECRET=client-secret-value
SCM_TSG_IDTenant Service Group IDexport SCM_TSG_ID=tsg-id-value
SCM_LOG_LEVELLogging level (DEBUG, INFO, etc.)export SCM_LOG_LEVEL=DEBUG
SCM_MOCKRun in mock mode without API callsexport SCM_MOCK=1
info

For full details on configuration sources and precedence, see Configuration Management.

Script Integration​

Exit Codes​

The CLI uses standard exit codes for scripting:

Exit CodeMeaning
0Success
1Error (details printed to stderr)
info

Success output (e.g., "Created address: test-server") goes to stdout. Error output (e.g., "Error creating address: ...") goes to stderr. This separation allows clean output parsing in scripts.

Error Checking in Scripts​

#!/bin/bash
# Create an address and check if successful
scm set object address test-server \
--folder Shared \
--ip-netmask 10.1.1.10/32 2>error.log

if [ $? -eq 0 ]; then
echo "Address created successfully"
else
echo "Failed to create address:"
cat error.log
exit 1
fi

Parsing CLI Output​

# Get a list of addresses and process with jq
ADDRESSES=$(scm show object address \
--folder Shared \
--output json | jq '.[] | select(.name | startswith("web-"))')

Best Practices​

  1. Use mock mode for development: Always test new scripts and YAML files with SCM_MOCK=1 before running against production.
  2. Organize objects by folder: Use SCM folders to logically separate configurations by environment or location.
  3. Store YAML files in version control: Track configuration changes alongside your infrastructure code.
  4. Use debug mode for troubleshooting: Enable --debug (or SCM_LOG_LEVEL=DEBUG) when troubleshooting unexpected behavior.
  5. Handle exit codes in scripts: Always check return codes when integrating the CLI into automation pipelines.
  6. Use environment variables for CI/CD: Set credentials via environment variables in automated workflows rather than hardcoding them.

Next Steps​