Working with ZTP Scripts#

Author: Sam Eure

April 4, 2025

[1]:
# Imports (run once)
from air_sdk import AirApi
from air_sdk.endpoints import Simulation, ZTPScript
[ ]:
# Authentication (run once)
api = AirApi.with_ngc_config()
# OR api = AirApi.with_api_key(api_key="...")
# OR api = AirApi.with_device_login(email="...", org_num="...")
#    ^ use in terminal only — not supported in Jupyter notebooks

Basic info#

Simulation instances have a ztp_script property which accesses any ZTPScript associated with the simulation.

[ ]:
sim_without_ztp_script: Simulation = api.simulations.get(
    '...'
)  # replace with actual sim id
assert sim_without_ztp_script.ztp_script is None

sim_with_ztp_script: Simulation = api.simulations.get('...')  # replace with actual sim id
ztp_script: ZTPScript = sim_with_ztp_script.ztp_script
assert ztp_script.content is not None

Adding ZTP Scripts during import#

[3]:
ztp_script_path = '../files/ztp/basic_script.sh'
with open(ztp_script_path, 'r') as f:
    ztp_script_content = f.read()

json_data = {
    'format': 'JSON',
    'name': 'JSON Sim',
    'content': {
        'nodes': {
            'node1': {
                'cpu': 2,
                'memory': 1024,
                'storage': 10,
                'os': 'generic/ubuntu2204',
                'cpu_arch': 'x86',
            },
        },
        'oob': False,
    },
    'ztp': ztp_script_content,
}

sim: Simulation = api.simulations.import_from_data(**json_data)
assert isinstance(sim.ztp_script, ZTPScript)
assert sim.ztp_script.content == ztp_script_content

Adding ZTP Scripts after creation#

[3]:
sim: Simulation = api.simulations.create(name='Blank Sim')

assert sim.ztp_script is None

ztp_script_path = '../files/ztp/basic_script.sh'
with open(ztp_script_path, 'r') as f:
    ztp_script_content = f.read()
    sim.create_ztp_script(content=ztp_script_content)

assert isinstance(sim.ztp_script, ZTPScript)
assert sim.ztp_script.content == ztp_script_content

Updating ZTP Script content#

[ ]:
sim_id = '...'  # Replace with your simulation ID
sim_with_ztp_script: Simulation = api.simulations.get(sim_id)

assert isinstance(sim_with_ztp_script.ztp_script, ZTPScript)

ztp_script_path = '../files/ztp/basic_script.sh'
with open(ztp_script_path, 'r') as f:
    ztp_script_content = f.read()  # New content
    sim_with_ztp_script.ztp_script.update(content=ztp_script_content)

Deleting a ZTP Script from a simulation#

[ ]:
sim_id = '...'  # Replace with your simulation ID
sim_with_ztp_script: Simulation = api.simulations.get(sim_id)

ztp_script: ZTPScript = sim_with_ztp_script.ztp_script
ztp_script.delete()

assert sim_with_ztp_script.ztp_script is None