Skip to content

feat: Add transcript map migration script for v0.2.0 to v1.0.0 #85

@lykinsbd

Description

@lykinsbd

Overview

Create a Python script to automatically migrate transcript_map.yaml files from v0.2.0 list-of-maps format to v1.0.0 map format.

Requirements

Input Format (v0.2.0)

platforms:
  - csr1000v:
      vendor: "cisco"
      hostname: "device1"
  - ios:
      vendor: "cisco"
      hostname: "device2"

Output Format (v1.0.0)

platforms:
  csr1000v:
    vendor: "cisco"
    hostname: "device1"
  ios:
    vendor: "cisco"
    hostname: "device2"

Implementation

Create scripts/migrate_transcript_map.py:

#!/usr/bin/env python3
"""Migrate transcript_map.yaml from v0.2.0 to v1.0.0 format."""
import sys
import yaml

def migrate(old_data):
    if 'platforms' not in old_data:
        return old_data
    
    platforms = old_data['platforms']
    if isinstance(platforms, list):
        # Convert list-of-maps to map
        new_platforms = {}
        for item in platforms:
            for key, value in item.items():
                new_platforms[key] = value
        old_data['platforms'] = new_platforms
    
    return old_data

if __name__ == '__main__':
    data = yaml.safe_load(sys.stdin)
    migrated = migrate(data)
    yaml.dump(migrated, sys.stdout, default_flow_style=False)

Usage

python scripts/migrate_transcript_map.py < old_map.yaml > new_map.yaml

Deliverables

  • Create scripts/migrate_transcript_map.py
  • Make script executable (chmod +x)
  • Add usage documentation in script header
  • Test with example v0.2.0 transcript map
  • Handle edge cases (already migrated, missing platforms key)
  • Add error handling and validation

Testing

Test cases:

  • v0.2.0 format → v1.0.0 format
  • Already migrated (v1.0.0) → no change
  • Empty platforms list → empty map
  • Missing platforms key → no change

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions