Skip to content

Bulk Import (CSV and JSON)

This app follows Nautobot standard import workflows:

  • CSV import via the built-in Import Objects system Job.
  • JSON ingestion via Nautobot REST API automation.

Why this approach

Nautobot core standardizes UI-based data import through the Import Objects Job. This keeps validation, permissions, and serializer behavior consistent with the rest of Nautobot.

  1. Go to Jobs.
  2. Run System Jobs -> Import Objects.
  3. Select a content type from this app, for example:
  4. Frequency Management -> Frequency
  5. Frequency Management -> Mission Frequency Set
  6. Frequency Management -> Satellite
  7. Upload a CSV file.
  8. Enable rollback on error when you want all-or-nothing behavior.

CSV templates

Example templates are included in this repository:

  • docs/media/import_templates/frequencies.csv
  • docs/media/import_templates/frequency_sets.csv

CSV field guidance

  • Use exact field names from the model/serializer.
  • For choice fields, use internal values, not display labels.
  • transport_type values: circuit, satcom, cellular, los, manet, other
  • SATCOM-only fields should use values such as fdma/tdma/ofdm and qpsk/16qam/64qam.
  • For foreign-key fields, use stable identifiers consistently (for example name where unique, or UUID where required by serializer behavior).

JSON Import (automation workflow)

Nautobot's built-in Import Objects Job is CSV-based. For JSON, use the REST API in automation pipelines.

Example JSON templates are included in this repository:

  • docs/media/import_templates/frequencies.json
  • docs/media/import_templates/frequency_sets.json
  • Validate/transform JSON in your pipeline.
  • POST records to API endpoints with token authentication.
  • Use idempotent logic in your tooling (for example, check before create or use update semantics where available).

Example endpoints:

  • /api/plugins/frequency-management/frequencies/
  • /api/plugins/frequency-management/frequency-sets/
  • /api/plugins/frequency-management/satellites/

Example JSON payload (frequency set)

{
  "mission_number": "FS-1001",
  "transport_type": "satcom",
  "transport_subtype": "",
  "band": "<band-uuid-or-serializer-accepted-reference>",
  "tx_frequency_mhz": "14000.125",
  "rx_frequency_mhz": "11700.875",
  "status": "<status-uuid>",
  "tenant": "<tenant-uuid>",
  "access_method": "fdma",
  "modulation": "qpsk",
  "polarization": "rhcp",
  "notes": "Imported by pipeline"
}

Validation expectations

Frequency Set validation is enforced on import the same as UI/API create:

  • TX/RX must be within selected band.
  • SATCOM transport_type requires access_method, modulation, and polarization.
  • transport_type=other requires transport_subtype.

Operational best practices

  • Start with small files and test in non-production.
  • Keep rollback enabled for initial imports.
  • Normalize references (Status/Tenant/Provider/Band/Satellite) before import.
  • Track source file checksum and import run logs for auditability.