Build — NETLAB+ VE Python SDK 24.2.0 documentation

# Build

The build tool can be used to clone out pods from a manifest. The manifest is a toml file, that will be further explained below. Simply create a toml file and run `netlab build my_manifest_file.toml` to run it.

The build tool can be used to:

- Clone out pods.

- Delete pods.

- Rebuild pods.

- Bring pods online or take them offline.

Builder files can have any number of `[[range]]` blocks. This is the minimal example.

    [[range]]
    source_pod_id = 1000  # The pod to clone from. This can refer to pods in
                          # earlier ranges.

    start = 24000         # The first pod id to clone.
    number = 30           # The number of pods to create.

`[range.pc_clone_specs]` can take keys found in `netlab.datatypes.PCCloneSpec`

    [[range]]
    source_pod_id = 1200
    start = 23000
    number = 5

    [range.pc_clone_specs]
    clone_type = "FULL"      # Perform a 'FULL' clone type.
    clone_vh_id = 9          # Clone to this virtual host.
    clone_role = "TEMPLATE"  # The cloned pod will be a 'TEMPLATE'.

This is an advanced example.

    [system]                 #>  A system block can be used to select a system to
                             #   run the manifest against.
    name = "default"         #>  Select the 'default' system, the same as the
                             #   `--system` flag.

    [[range]]
    delete = true            #>  The pods from this range will be deleted. In this
                             #   example, the 'delete' range is unneeded. The build
                             #   tool will replace old pods if it detects a change.
    pod_online = true        #>  Many of these options are allowed, but unneeded.

    source_pod_id = 1000
    start = 1400
    number = 20
    clone_prefix = "pod-A"
    clone_suffix = "v1"

    [[range]]
    pod_online = true       #>  Bring these pods online after creating them.

    source_pod_id = 1000
    start = 1400
    number = 10
    step = 2                #>  Clone every 2 pod ids. 1400, 1402, 1404, ...
    clone_prefix = "pod-A"  #>  Add this prefix to every pod name.
    clone_suffix = "v2"     #>  Add this suffix to every pod name.

    clone_name_template = "{default}"  # See 'Using clone_name_template'

    [[range]]               #>  This range will create a second range, interspersed
                            #   with the one above.
    pod_online = true

    source_pod_id = 1000
    start = 1401
    number = 10
    step = 2
    clone_prefix = "pod-B"
    clone_suffix = "v2"

Running this manifest will result in this output:

    $ netlab build var/baz.toml
    Fetching pods ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
    var/baz.toml#0
       SUPERSEDED pod-A.H85.P1400.v2
       SUPERSEDED pod-B.H85.P1401.v2
       SUPERSEDED pod-A.H85.P1402.v2
       SUPERSEDED pod-B.H85.P1403.v2
       SUPERSEDED pod-A.H85.P1404.v2
       SUPERSEDED pod-B.H85.P1405.v2
       SUPERSEDED pod-A.H85.P1406.v2
       SUPERSEDED pod-B.H85.P1407.v2
       SUPERSEDED pod-A.H85.P1408.v2
       SUPERSEDED pod-B.H85.P1409.v2
       SUPERSEDED pod-A.H85.P1410.v2
       SUPERSEDED pod-B.H85.P1411.v2
       SUPERSEDED pod-A.H85.P1412.v2
       SUPERSEDED pod-B.H85.P1413.v2
       SUPERSEDED pod-A.H85.P1414.v2
       SUPERSEDED pod-B.H85.P1415.v2
       SUPERSEDED pod-A.H85.P1416.v2
       SUPERSEDED pod-B.H85.P1417.v2
       SUPERSEDED pod-A.H85.P1418.v2
       SUPERSEDED pod-B.H85.P1419.v2
    var/baz.toml#1
       CREATE pod-A.H85.P1400.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1402.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1404.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1406.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1408.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1410.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1412.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1414.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1416.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-A.H85.P1418.v2
               [state]    ABSENT -> EXISTS
    var/baz.toml#2
       CREATE pod-B.H85.P1401.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1403.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1405.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1407.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1409.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1411.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1413.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1415.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1417.v2
               [state]    ABSENT -> EXISTS
       CREATE pod-B.H85.P1419.v2
               [state]    ABSENT -> EXISTS
    Continue? [y/N]:

## Using clone_name_template

`clone_name_template` allows for more customization of the names of cloned pods. Variables inside curly braces will be replaced. These variables are allowed:

pod_id

  The id of the created pod.

pod_role

  The abbreviated role of the created pod.

vh_name

  The abbreviated name of the virtual host of the created pod.

pt_org

  The org name of the pod type.

pt_apdid

  The author pod designer id of the pod type.

default

  The default generated name of the created pod.