Introduction

The pyATS Manifest is a file with YAML syntax describing how and where to execute a script. It is intended to formally describe the execution of a single script, the runtime environment, script arguments and profile which includes the test topology and related parameters.

A script can be executed via the manifest using the pyats run manifest command. Manifest files use the file extension .tem which stands for Test Execution Manifest.

Command line execution examples:

$ pyats run manifest job.tem
$ pyats run manifest job.tem --profile sanity

Command line manifest validation:

$ pyats validate manifest job.tem

The manifest defines the script execution arguments, runtime environment and the profile(s) that define environment specific settings and arguments. Profiles allow the same script to be run against multiple environments or run with different input parameters, e.g. local testbed, orchestrated testbed, production environment, different scaling numbers, or purposes like regression runs. Each profile can have its own specific script arguments and runtime specific settings.

Warning

Passing the job filename as an argument is not supported. See note below.

Note

The associated script file that the manifest refers to is inferred based on the manifest filename with the extension py. E.g. the script filename for a manifest with filename of job.tem is job.py in the same directory as the manifest file.

Script types

The manifest defines a type for the script that is associated with the manifest. Currently, the supported types for the manifest are:

  • easypy

Only supported script types have an execution runtime that allows the manifest to execute the script.

Script arguments

One of the primary definitions in the manifest is the arguments key in the manifest.

The arguments are defined as a set of key value pairs to be used as execution options. These arguments are translated to shell command arguments for script execution.

Arguments defined for the script can be superseded by arguments defined in a profile. Any arguments specified on the command line will override arguments defined in the profile.

Arguments are transformed into a command line argument string by combining the script arguments, profile arguments and command line arguments and translating those using below rules.

The transformation of arguments is done in steps:

  • Arguments are translated from command line, manifest script arguments and profile arguments into internal argument structures

  • Internal argument structures are combined using the priority: command line > profile > script.

  • Internal argument structure is translated to the command line argument string

The internal argument structure is translated to the command line argument string using the following rules:

  • Arguments that do not start with - are assumed to be double dash arguments and -- will be prepended to the key in the command line argument string.

  • Arguments may explicitly define dash syntax, e.g "-key": value

  • Argument values are quoted using double quotes, e.g. val1 will translate to "val1"

  • Arguments specified as a list will translate to --key "val1" "val2"

  • If the value is *N, repeat the argument key N number of times (e.g. "-v": "*3" translates to -v -v -v)

  • If the value is a boolean, leave out the value and only add the key to the argument string, e.g. flag: True translates to --flag. Note: if the boolean needs to be explicitly added to the argument string, the value must be explicitly specified as a string, e.g. key: "True" (not as a boolean value). See below for overriding boolean arguments.

  • If the meta argument is used on the command line, it will be prepended as an additional meta argument.

For example, the script arguments defined in the manifest could look like this:

arguments:
    mail-html: True
    configuration: easypy_config.yaml

profile:
    local:
        arguments:
            testbed-file: testbed.yaml

The arguments will be combined from the profile arguments and script arguments and translated to command arguments for execution. Adding command line arguments will add or override these.

For example running the manifest execution with the above arguments and adding the testbed-file argument on the command line will override the profile argument.

$ pyats validate manifest job.tem --profile local --testbed-file testbed2.yaml

Meta argument handling

If the meta argument is used on the command line, it will be prepended as an additional meta argument. Note, the value for the meta argument provided via a profile argument will override the default value (same as for any other argument).

arguments:
    meta: key1=value1
$ pyats validate manifest job.tem --meta key2=value2

The above will result in the following command line arguments to be used:

pyats run job job.py --meta key2=value2 --meta key1=value1

Overriding boolean arguments

You can override boolean arguments by specifying the boolean string value after the argument on the command line, i.e. "False" or "True".

With below example, the no-mail: True argument specified in the manifest can be overriden by specifying the argument on the manifest command line with value False. This combination will result in the --no-mail argument not to be added to the pyats run job command.

arguments:
    no-mail: True
$ pyats validate manifest job.tem --no-mail False

runtimes

The manifest can define zero or more runtime environments that can be used to execute the script. Runtimes are defined as named entries under the runtimes key in the manifest.

A runtime environment is used to execute the script and provides the shell environment and related libraries to be able to execute the script. If no runtime environment is defined, it is assumed the script is intended to run in the ‘current’ system environment.

The supported runtime types are:

  • system

  • virtualenv

profiles

The manifest can define zero or more profiles that contain environment specific settings and arguments. Profiles are defined as named entries under the profiles key in the manifest.

The arguments defined in the profile override the arguments specified for the script. Profiles specify a runtime to be used to execute the script and any additional settings relevant for that specific environment and runtime combination.

Examples

Minimal manifest to run a easypy job script using the ‘system’ runtime.

version: 1

type: easypy

arguments:
    configuration: easypy_config.yaml
    mail-html: True

Manifest with runtime and profile.

version: 1

type: easypy

runtimes:
    venv:
        type: virtualenv
        source:
            - /var/pyenv/venv/bin/activate
        environment:
            PYTHONPATH: /var/pyenv/libs
            TEST: "%ENV{VARNAME}"

arguments:
    configuration: easypy_config.yaml
    mail-html: True
    devices:
    - rtr1
    - rtr2

profiles:
    local:
        description: |
            Local run using virtual environment, send plain text email
        runtime: venv
        arguments:
            mail-html: False
            testbed-file: testbed.yaml