db708f36cb
Use a path short enough that we don't run into length limits when building command lines using the full path. Change-Id: Id4e28e343e9e38317b58c5ee7ee7bf5a1c953de7 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
801 lines
18 KiB
YAML
801 lines
18 KiB
YAML
- job-template:
|
|
name: '{name}-coverage-{node}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- coverage:
|
|
env: cover
|
|
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'cover/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: '{name}-coverage-db-{node}'
|
|
description: 'Same job as {name}-coverage but sets up databases.'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- coverage:
|
|
env: cover
|
|
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'cover/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-compare-coverage-{node}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 75
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- coverage:
|
|
env: compare-cover
|
|
|
|
publishers:
|
|
- scp:
|
|
site: 'static.openstack.org'
|
|
files:
|
|
- target: 'logs/$LOG_PATH'
|
|
source: 'cover/**'
|
|
keep-hierarchy: true
|
|
copy-after-failure: true
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-pep8-{node}'
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
# We force the removal of our wheel mirrors from pip.conf to ensure we can
|
|
# build the required wheels if needed. This helps to ensure that
|
|
# bindep.txt is up-to-date.
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
# Write global pip configuration minus wheel mirror.
|
|
awk '!/extra-index-url/' /etc/pip.conf > /tmp/pip.conf
|
|
sudo mv /tmp/pip.conf /etc/
|
|
sudo chown root:root /etc/pip.conf
|
|
sudo chmod 0644 /etc/pip.conf
|
|
- revoke-sudo
|
|
- pep8:
|
|
env: pep8
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-pylint'
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- pylint:
|
|
env: pylint
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-trusty
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-python27-{node}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 50
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- python27
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-python27-db-{node}'
|
|
description: 'Same job as gate-{name}-python27 but sets up databases.'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 50
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- python27
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-cross-{name}-python27-{node}'
|
|
description: 'Same job as gate-{name}-python27 but clones {name}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 50
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints-cross:
|
|
project: openstack/{name}
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- python27
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-cross-{name}-python27-db-{node}'
|
|
description: 'Same job as gate-cross-{name}-python27 but sets up databases.'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 50
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints-cross:
|
|
project: openstack/{name}
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- python27
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'periodic-{name}-{python}-with-oslo-master'
|
|
node: ubuntu-xenial
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 50
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-branch-prep-upper-constraints:
|
|
branch: master
|
|
- install-distro-packages
|
|
# The job runs with different repositories and invokes unittests, some
|
|
# of these repositories need a database set up.
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- shell: "/usr/local/jenkins/slave_scripts/run-tox-with-oslo-master.sh {python}"
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-python34'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- python34
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-trusty
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-python34-db'
|
|
description: 'Same job as gate-{name}-python34 but sets up databases.'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- python34
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-trusty
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-python35{suffix}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- python35
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-xenial
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-python35-db{suffix}'
|
|
description: 'Same job as gate-{name}-python35{suffix} but sets up databases.'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- python35
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-xenial
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-pypy'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- pypy
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-xenial
|
|
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-pypy-db'
|
|
description: 'Same job as gate-{name}-pypy but sets up databases.'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- pypy
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
node: ubuntu-xenial
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-docs-{node}'
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- docs
|
|
|
|
publishers:
|
|
- upload-sphinx-draft
|
|
- test-results
|
|
- console-log
|
|
|
|
node: '{node}'
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-tox-{envlist}-{node}'
|
|
description: 'Runs tox, does not set up any databases.'
|
|
node: '{node}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- run-tox:
|
|
envlist: '{envlist}'
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-tox-with-sudo-{envlist}'
|
|
description: 'Same job as gate-{name}-tox-{envlist}, allows sudo access.'
|
|
node: ubuntu-trusty
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- run-tox:
|
|
envlist: '{envlist}'
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-tox-xfs-tmp-{envlist}-{node}'
|
|
description: 'Same job as gate-{name}-tox-{envlist}, but with TMPDIR set to an xfs mount point.'
|
|
node: '{node}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mount-xfs-tmp-space:
|
|
xfs_mount_point: "$HOME/xfstmp"
|
|
xfs_file: "$HOME/1G_xfs_file"
|
|
- revoke-sudo
|
|
- tox-with-tmpdir-passed-in:
|
|
new_tmpdir_loc: "$HOME/xfstmp"
|
|
envlist: '{envlist}'
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-tox-db-{envlist}-{node}'
|
|
description: 'Same job as gate-{name}-tox-db-{envlist} but on node {node}'
|
|
node: '{node}'
|
|
|
|
wrappers:
|
|
- build-timeout:
|
|
timeout: 40
|
|
- timestamps
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- mysql-prep
|
|
- pgsql-prep
|
|
- mysql-db:
|
|
db_name: openstack_citest
|
|
- pgsql-db:
|
|
db_name: openstack_citest
|
|
- revoke-sudo
|
|
- run-tox:
|
|
envlist: '{envlist}'
|
|
- assert-no-extra-files
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: '{name}-tarball'
|
|
node: ubuntu-xenial
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-release-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- tarball:
|
|
env: venv
|
|
|
|
publishers:
|
|
- tarball:
|
|
project: '{name}'
|
|
site: '{tarball-site}'
|
|
- wheel:
|
|
project: '{name}'
|
|
site: '{tarball-site}'
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: '{name}-branch-tarball'
|
|
node: ubuntu-xenial
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- zuul-git-prep-upper-constraints
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- tarball:
|
|
env: venv
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
BRANCH=$ZUUL_REFNAME
|
|
BRANCH_PATH=`echo $BRANCH | tr / -`
|
|
mv dist/*.tar.gz dist/{name}-$BRANCH_PATH.tar.gz
|
|
|
|
publishers:
|
|
- tarball:
|
|
project: '{name}'
|
|
site: '{tarball-site}'
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-template:
|
|
name: 'gate-{name}-requirements'
|
|
node: ubuntu-xenial
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- gerrit-git-prep
|
|
- install-distro-packages
|
|
- revoke-sudo
|
|
- shell: |
|
|
#!/bin/bash -xe
|
|
/usr/local/jenkins/slave_scripts/project-requirements-change.py $ZUUL_BRANCH
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
|
|
- job-template:
|
|
name: '{name}-announce-release'
|
|
node: ubuntu-trusty
|
|
|
|
builders:
|
|
- print-template-name:
|
|
template-name: "{template-name}"
|
|
- gerrit-git-prep
|
|
- install-distro-packages
|
|
- shell: |
|
|
#!/bin/bash
|
|
|
|
set -x
|
|
|
|
TOOLS_TMP=$HOME/release-tools
|
|
mkdir -p $TOOLS_TMP
|
|
|
|
# Report on the ZUUL settings.
|
|
env | grep '^ZUUL_'
|
|
|
|
# Check out the release-tools, ignoring any other ZUUL
|
|
# variables that might confuse the cloner and cause it to
|
|
# try to check out anything like the commit that was just
|
|
# tagged or to look for a branch (we always want the master
|
|
# version of the tools).
|
|
for v in $(env | grep '^ZUUL_' | cut -f1 -d=); do
|
|
unset $v
|
|
done
|
|
|
|
/usr/zuul-env/bin/zuul-cloner \
|
|
--cache-dir /opt/git \
|
|
--workspace $TOOLS_TMP \
|
|
git://git.openstack.org \
|
|
openstack-infra/release-tools
|
|
TOOLS_DIR=$TOOLS_TMP/openstack-infra/release-tools
|
|
|
|
# Install the distro packages needed by the release
|
|
# tools. These won't necessarily be included in the set
|
|
# installed by the builder step above, so we have to do it
|
|
# explicitly by changing to the tools directory and then
|
|
# running the same script.
|
|
(cd $TOOLS_DIR &&
|
|
/usr/local/jenkins/slave_scripts/install-distro-packages.sh)
|
|
|
|
- revoke-sudo
|
|
- shell: |
|
|
#!/bin/bash
|
|
|
|
set -x
|
|
|
|
TOOLS_TMP=$HOME/release-tools
|
|
TOOLS_DIR=$TOOLS_TMP/openstack-infra/release-tools
|
|
|
|
# Save the version that was just tagged by parsing
|
|
# ref/tags/VALUE to get VALUE.
|
|
VERSION=$(echo $ZUUL_REF | cut -f3 -d/)
|
|
|
|
# Run the announce script.
|
|
$TOOLS_DIR/announce.sh $WORKSPACE $VERSION
|
|
|
|
publishers:
|
|
- test-results
|
|
- console-log
|
|
|
|
- job-group:
|
|
name: periodic-python-jobs-with-oslo-master
|
|
jobs:
|
|
- 'periodic-{name}-{python}-with-oslo-master':
|
|
python:
|
|
- py27
|
|
- py35
|
|
|
|
- job-group:
|
|
name: periodic-python-jobs-with-neutron-lib-master
|
|
jobs:
|
|
- 'periodic-{name}-{python}-with-neutron-lib-master':
|
|
python:
|
|
- py35
|
|
|
|
- job-group:
|
|
name: python-jobs
|
|
node:
|
|
- ubuntu-trusty
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- 'gate-{name}-pep8-{node}'
|
|
- 'gate-{name}-python27-{node}'
|
|
- 'gate-{name}-python34'
|
|
- 'gate-{name}-docs-{node}'
|
|
- 'gate-{name}-requirements'
|
|
- '{name}-branch-tarball'
|
|
# pylint isn't standard
|
|
# pypy isn't standard
|
|
# gate-{name}-tox-{envlist} also isn't standard, but is reserved for
|
|
# projects that want to run specific jobs via tox
|
|
|
|
- job-group:
|
|
name: cross-python-jobs
|
|
node:
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- 'gate-cross-{name}-python27-{node}'
|
|
|
|
- job-group:
|
|
name: python-db-jobs
|
|
node:
|
|
- ubuntu-trusty
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- 'gate-{name}-pep8-{node}'
|
|
- 'gate-{name}-python27-db-{node}'
|
|
- 'gate-{name}-python34-db'
|
|
- 'gate-{name}-docs-{node}'
|
|
- 'gate-{name}-requirements'
|
|
- '{name}-branch-tarball'
|
|
# pylint isn't standard
|
|
# pypy isn't standard
|
|
# gate-{name}-tox-{envlist} also isn't standard, but is reserved for
|
|
# projects that want to run specific jobs via tox
|
|
|
|
- job-group:
|
|
name: cross-python-db-jobs
|
|
node:
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- 'gate-cross-{name}-python27-db-{node}'
|
|
|
|
- job-group:
|
|
name: python-jobs-searchlight
|
|
node:
|
|
- ubuntu-trusty
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- 'gate-{name}-pep8-{node}'
|
|
- 'gate-{name}-python27-searchlight'
|
|
- 'gate-{name}-python27-searchlight-es1'
|
|
- 'gate-{name}-python34-searchlight'
|
|
- 'gate-{name}-docs-{node}'
|
|
- 'gate-{name}-requirements'
|
|
- '{name}-branch-tarball'
|
|
# pylint isn't standard
|
|
# pypy isn't standard
|
|
# gate-{name}-tox-{envlist} also isn't standard, but is reserved for
|
|
# projects that want to run specific jobs via tox
|
|
|
|
- job-group:
|
|
name: openstack-server-release-jobs
|
|
jobs:
|
|
- '{name}-announce-release'
|
|
- '{name}-tarball'
|
|
- '{name}-tarball-signing'
|
|
|
|
- job-group:
|
|
name: coverage-jobs
|
|
node:
|
|
- ubuntu-trusty
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- '{name}-coverage-{node}'
|
|
|
|
- job-group:
|
|
name: coverage-db-jobs
|
|
node:
|
|
- ubuntu-trusty
|
|
- ubuntu-xenial
|
|
jobs:
|
|
- '{name}-coverage-db-{node}'
|