Started by timer
Running as SYSTEM
[EnvInject] - Loading node environment variables.
Building remotely on prd-ubuntu1804-docker-8c-8g-1701 (ubuntu1804-docker-8c-8g) in workspace /w/workspace/integration-netconf-pnp-simulator-docker-merge-master
[ssh-agent] Looking for ssh-agent implementation...
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-PCE159u35NXM/agent.2110
SSH_AGENT_PID=2112
[ssh-agent] Started.
Running ssh-add (command line suppressed)
Identity added: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/private_key_9305478265354163721.key (/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/private_key_9305478265354163721.key)
[ssh-agent] Using credentials onap-jobbuiler (Gerrit user)
The recommended git tool is: NONE
using credential onap-jenkins-ssh
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository git://cloud.onap.org/mirror/integration
> git init /w/workspace/integration-netconf-pnp-simulator-docker-merge-master # timeout=10
Fetching upstream changes from git://cloud.onap.org/mirror/integration
> git --version # timeout=10
> git --version # 'git version 2.17.1'
using GIT_SSH to set credentials Gerrit user
Verifying host key using manually-configured host key entries
> git fetch --tags --progress -- git://cloud.onap.org/mirror/integration +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url git://cloud.onap.org/mirror/integration # timeout=10
> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 1b6b2af47270d637093330290479b71580554efe (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 1b6b2af47270d637093330290479b71580554efe # timeout=10
Commit message: "Bump lfreleng-actions/github2gerrit-action/.github/workflows/github2gerrit.yaml from 2.4.0 to 2.4.2"
> git rev-list --no-walk 1b6b2af47270d637093330290479b71580554efe # timeout=10
provisioning config files...
copy managed file [npmrc] to file:/home/jenkins/.npmrc
copy managed file [pipconf] to file:/home/jenkins/.config/pip/pip.conf
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins5064390153822836287.sh
---> python-tools-install.sh
Setup pyenv:
* system (set by /opt/pyenv/version)
* 3.8.13 (set by /opt/pyenv/version)
* 3.9.13 (set by /opt/pyenv/version)
* 3.10.6 (set by /opt/pyenv/version)
lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-gq3i
lf-activate-venv(): INFO: Save venv in file: /tmp/.os_lf_venv
lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)
lf-activate-venv(): INFO: Installing additional packages: lftools
lf-activate-venv(): INFO: Adding /tmp/venv-gq3i/bin to PATH
Generating Requirements File
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
httplib2 0.30.2 requires pyparsing<4,>=3.0.4, but you have pyparsing 2.4.7 which is incompatible.
Python 3.10.6
pip 26.2.1 from /tmp/venv-gq3i/lib/python3.10/site-packages/pip (python 3.10)
aiohappyeyeballs==2.7.1
aiohttp==3.14.5
aiosignal==1.4.0
appdirs==1.4.4
argcomplete==3.7.2
aspy.yaml==1.3.0
async-timeout==5.0.1
attrs==26.1.0
autopage==0.6.0
backports.strenum==1.3.1
beautifulsoup4==4.15.0
boto3==1.43.113
botocore==1.43.113
bs4==0.0.2
certifi==2026.7.22
cffi==2.1.1
cfgv==3.5.0
chardet==7.6.0
charset-normalizer==3.5.2
click==8.5.0
cliff==4.14.0
cmd2==3.5.1
cryptography==3.3.2
debtcollector==3.1.0
decorator==5.3.1
defusedxml==0.7.1
Deprecated==1.3.1
distlib==0.4.3
dnspython==2.8.0
docker==7.2.0
dogpile.cache==1.5.0
durationpy==0.11
email-validator==2.3.0
filelock==4.1.0
frozenlist==1.8.0
future==1.0.0
gitdb==4.0.12
GitPython==3.2.1
httplib2==0.30.2
identify==2.6.20
idna==3.20
importlib-resources==1.5.0
iso8601==2.1.0
Jinja2==3.1.6
jmespath==1.1.0
jsonpatch==1.35
jsonpointer==3.2.1
jsonschema==4.26.0
jsonschema-specifications==2025.9.1
keystoneauth1==5.14.0
kubernetes==36.0.3
lftools==0.37.24
lxml==6.1.3
markdown-it-py==4.2.0
MarkupSafe==3.0.4
mdurl==0.1.2
msgpack==1.2.3
multi_key_dict==2.0.3
multidict==7.1.0
munch==4.0.0
netaddr==1.3.0
niet==1.4.2
nodeenv==1.11.0
oauth2client==4.1.3
oauthlib==4.0.0
openstacksdk==4.13.0
os-service-types==1.8.2
osc-lib==4.6.0
oslo.config==10.4.0
oslo.context==6.4.0
oslo.i18n==6.8.0
oslo.log==8.2.0
oslo.serialization==5.10.0
oslo.utils==10.1.1
packaging==26.3
pbr==7.1.3
platformdirs==4.12.4
prettytable==3.18.0
propcache==0.5.4
psutil==7.2.2
pyasn1==0.6.4
pyasn1_modules==0.4.2
pycparser==3.11
pygerrit2==2.0.15
PyGithub==2.10.0
Pygments==2.21.0
PyJWT==2.15.1
PyNaCl==1.6.2
pyparsing==2.4.7
pyperclip==1.11.0
pyrsistent==0.20.0
python-cinderclient==9.9.0
python-dateutil==2.9.0.post0
python-discovery==1.6.2
python-heatclient==5.2.0
python-jenkins==1.8.3
python-keystoneclient==6.0.0
python-magnumclient==4.11.0
python-openstackclient==10.0.0
python-swiftclient==4.11.0
PyYAML==6.0.3
referencing==0.37.0
requests==2.34.2
requests-oauthlib==2.0.0
rfc3986==2.0.0
rich==15.0.0
rich-argparse==1.8.0
rpds-py==0.30.0
rsa==4.9.1
ruamel.yaml==0.19.1
ruamel.yaml.clib==0.2.15
s3transfer==0.19.2
simplejson==4.2.0
six==1.17.0
smmap==5.0.3
soupsieve==2.10
stevedore==5.8.0
tabulate==0.10.0
toml==0.10.2
tomlkit==0.15.1
tqdm==4.70.1
typing_extensions==4.16.0
urllib3==1.26.20
virtualenv==21.14.7
wcwidth==0.9.2
websocket-client==1.9.2
wrapt==2.5.1
xdg==6.0.0
xmltodict==1.0.4
yarl==1.25.1
yq==4.4.5
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/sh /tmp/jenkins16713521870005274715.sh
---> uv-install.sh
Installing uv/uvx (latest) using shell installer
2026-10-14 14:54:32 URL:https://releases.astral.sh/installers/uv/latest/uv-installer.sh [71300/71300] -> "/tmp/uv-install-tSl0wr.sh" [1]
downloading uv 0.13.1 x86_64-unknown-linux-gnu
installing to /home/jenkins/.local/bin
uv
uvx
everything's installed!
To add $HOME/.local/bin to your PATH, either restart your shell or run:
source $HOME/.local/bin/env (sh, bash, zsh)
source $HOME/.local/bin/env.fish (fish)
Adding install location to PATH
---> Validating uv/uvx install
uvx 0.13.1 (x86_64-unknown-linux-gnu)
provisioning config files...
copy managed file [global-settings] to file:/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/config11587868334961140191tmp
copy managed file [integration-settings] to file:/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/config18391846888299330373tmp
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins15681278596606451360.sh
---> docker-login.sh
nexus3.onap.org:10001
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
nexus3.onap.org:10002
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
nexus3.onap.org:10003
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
nexus3.onap.org:10004
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
docker.io
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
---> docker-login.sh ends
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins6896957073754496050.sh
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/sh -xe /tmp/jenkins7903307445039616569.sh
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties content
DOCKER_ROOT=test/mocks/netconf-pnp-simulator/engine
CONTAINER_TAG_YAML_DIR=
CONTAINER_TAG_METHOD=yaml-file
[EnvInject] - Variables injected successfully.
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash -l /tmp/jenkins219637843909295174.sh
---> docker-get-container-tag.sh
Setup pyenv:
system
3.8.13
3.9.13
* 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version)
lf-activate-venv(): INFO: Reuse venv:/tmp/venv-gq3i from file:/tmp/.os_lf_venv
lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)
lf-activate-venv(): INFO: Installing additional packages: yq
lf-activate-venv(): INFO: Adding /tmp/venv-gq3i/bin to PATH
---> Docker image tag found: 2.8.6
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path 'env_docker_inject.txt'
[EnvInject] - Variables injected successfully.
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties content
DOCKER_ARGS=
DOCKER_ROOT=test/mocks/netconf-pnp-simulator/engine
CONTAINER_PULL_REGISTRY=nexus3.onap.org:10001
CONTAINER_PUSH_REGISTRY=nexus3.onap.org:10003
DOCKER_NAME=onap/integration/simulators/netconf-pnp-simulator
[EnvInject] - Variables injected successfully.
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins14767773852861866128.sh
---> docker-build.sh
Docker version 20.10.18, build b40c2f6
Building image: nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6
docker build -t nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6 .
Sending build context to Docker daemon 145.9kB
Step 1/47 : FROM python:3.7.7-alpine3.11 as build
3.7.7-alpine3.11: Pulling from library/python
cbdbe7a5bc2a: Pulling fs layer
26ebcd19a4e3: Pulling fs layer
8341bd19193b: Pulling fs layer
ecc595bd65e1: Pulling fs layer
4b1c9d8f69d2: Pulling fs layer
ecc595bd65e1: Waiting
cbdbe7a5bc2a: Verifying Checksum
cbdbe7a5bc2a: Download complete
26ebcd19a4e3: Verifying Checksum
26ebcd19a4e3: Download complete
ecc595bd65e1: Download complete
cbdbe7a5bc2a: Pull complete
8341bd19193b: Verifying Checksum
8341bd19193b: Download complete
4b1c9d8f69d2: Verifying Checksum
4b1c9d8f69d2: Download complete
26ebcd19a4e3: Pull complete
8341bd19193b: Pull complete
ecc595bd65e1: Pull complete
4b1c9d8f69d2: Pull complete
Digest: sha256:778802b5b9797279772814fb15a7c6ee494848ced17965bb57092a0b900c0e4f
Status: Downloaded newer image for python:3.7.7-alpine3.11
---> e854017db514
Step 2/47 : ARG zlog_version=1.2.14
---> Running in bc8986eee9c2
Removing intermediate container bc8986eee9c2
---> 7dec03c14ecb
Step 3/47 : ARG libyang_version=v1.0-r5
---> Running in 518f6be608cf
Removing intermediate container 518f6be608cf
---> 80c838c3c2cd
Step 4/47 : ARG sysrepo_version=v0.7.9
---> Running in 2d5e80dc89ab
Removing intermediate container 2d5e80dc89ab
---> c891441ffe96
Step 5/47 : ARG libnetconf2_version=v0.12-r2
---> Running in 194e4968fee4
Removing intermediate container 194e4968fee4
---> 8fc845ab6b03
Step 6/47 : ARG netopeer2_version=v0.7-r2
---> Running in cfbbab0babee
Removing intermediate container cfbbab0babee
---> 90b0c01d7038
Step 7/47 : WORKDIR /usr/src
---> Running in 134543589ea5
Removing intermediate container 134543589ea5
---> 596b9de060d3
Step 8/47 : RUN set -eux && apk add autoconf bash build-base cmake curl-dev file git libev-dev libssh-dev openssh-keygen openssl openssl-dev pcre-dev pkgconfig protobuf-c-dev swig ctags the_silver_searcher vim
---> Running in d5576e9fc9a2
[91m+ apk add autoconf bash build-base cmake curl-dev file git libev-dev libssh-dev openssh-keygen openssl openssl-dev pcre-dev pkgconfig protobuf-c-dev swig ctags the_silver_searcher vim
[0mfetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/72) Upgrading musl (1.1.24-r2 -> 1.1.24-r3)
(2/72) Upgrading libcrypto1.1 (1.1.1g-r0 -> 1.1.1l-r0)
(3/72) Upgrading libssl1.1 (1.1.1g-r0 -> 1.1.1l-r0)
(4/72) Upgrading zlib (1.2.11-r3 -> 1.2.11-r5)
(5/72) Installing m4 (1.4.18-r1)
(6/72) Installing perl (5.30.3-r0)
(7/72) Installing autoconf (2.69-r2)
(8/72) Installing bash (5.0.11-r1)
Executing bash-5.0.11-r1.post-install
(9/72) Installing libgcc (9.3.0-r0)
(10/72) Installing libstdc++ (9.3.0-r0)
(11/72) Installing binutils (2.33.1-r1)
(12/72) Installing libmagic (5.37-r1)
(13/72) Installing file (5.37-r1)
(14/72) Installing gmp (6.1.2-r1)
(15/72) Installing isl (0.18-r0)
(16/72) Installing libgomp (9.3.0-r0)
(17/72) Installing libatomic (9.3.0-r0)
(18/72) Installing mpfr4 (4.0.2-r1)
(19/72) Installing mpc1 (1.1.0-r1)
(20/72) Installing gcc (9.3.0-r0)
(21/72) Installing musl-dev (1.1.24-r3)
(22/72) Installing libc-dev (0.7.2-r0)
(23/72) Installing g++ (9.3.0-r0)
(24/72) Installing make (4.2.1-r2)
(25/72) Installing fortify-headers (1.1-r0)
(26/72) Installing build-base (0.5-r1)
(27/72) Installing libacl (2.2.53-r0)
(28/72) Installing lz4-libs (1.9.2-r0)
(29/72) Installing zstd-libs (1.4.9-r0)
(30/72) Installing libarchive (3.4.2-r0)
(31/72) Installing nghttp2-libs (1.40.0-r1)
(32/72) Installing libcurl (7.79.1-r0)
(33/72) Installing rhash-libs (1.3.9-r0)
(34/72) Installing libuv (1.34.0-r0)
(35/72) Installing cmake (3.15.5-r0)
(36/72) Installing cmake-bash-completion (3.15.5-r0)
(37/72) Installing ctags (0_git20191207-r1)
(38/72) Installing pkgconf (1.6.3-r0)
(39/72) Installing openssl-dev (1.1.1l-r0)
(40/72) Installing nghttp2-dev (1.40.0-r1)
(41/72) Installing zlib-dev (1.2.11-r5)
(42/72) Installing curl-dev (7.79.1-r0)
(43/72) Installing pcre2 (10.34-r1)
(44/72) Installing git (2.24.4-r0)
(45/72) Installing perl-error (0.17028-r0)
(46/72) Installing perl-git (2.24.4-r0)
(47/72) Installing git-perl (2.24.4-r0)
(48/72) Installing libev (4.27-r0)
(49/72) Installing libev-dev (4.27-r0)
(50/72) Installing libssh (0.9.4-r1)
(51/72) Installing libssh-dev (0.9.4-r1)
(52/72) Installing openssh-keygen (8.1_p1-r1)
(53/72) Installing openssl (1.1.1l-r0)
(54/72) Installing libpcre16 (8.43-r1)
(55/72) Installing libpcre32 (8.43-r1)
(56/72) Installing pcre (8.43-r1)
(57/72) Installing libpcrecpp (8.43-r1)
(58/72) Installing pcre-dev (8.43-r1)
(59/72) Installing libprotobuf (3.11.2-r1)
(60/72) Installing libprotoc (3.11.2-r1)
(61/72) Installing protobuf-c (1.3.2-r3)
(62/72) Installing protobuf-c-dev (1.3.2-r3)
(63/72) Installing gc (8.0.4-r0)
(64/72) Installing libltdl (2.4.6-r7)
(65/72) Installing libunistring (0.9.10-r0)
(66/72) Installing guile-libs (2.0.14-r0)
(67/72) Installing guile (2.0.14-r0)
(68/72) Installing swig (3.0.12-r4)
(69/72) Installing the_silver_searcher (2.2.0-r0)
(70/72) Installing xxd (8.2.3437-r0)
(71/72) Installing lua5.3-libs (5.3.5-r2)
(72/72) Installing vim (8.2.3437-r0)
Executing busybox-1.31.1-r9.trigger
Executing ca-certificates-20191127-r1.trigger
OK: 329 MiB in 102 packages
Removing intermediate container d5576e9fc9a2
---> 6661f5c2aaee
Step 9/47 : RUN git config --global advice.detachedHead false
---> Running in fe469955954a
Removing intermediate container fe469955954a
---> 62e4d82b99fe
Step 10/47 : ENV PKG_CONFIG_PATH=/opt/lib64/pkgconfig
---> Running in 5a9502acf79b
Removing intermediate container 5a9502acf79b
---> 8b4a2f22d269
Step 11/47 : ENV LD_LIBRARY_PATH=/opt/lib:/opt/lib64
---> Running in 422e7d3c92bc
Removing intermediate container 422e7d3c92bc
---> 5ed16665ef52
Step 12/47 : COPY patches/libyang/ ./patches/libyang/
---> 56673fe20051
Step 13/47 : RUN set -eux && git clone --branch $libyang_version --depth 1 https://github.com/CESNET/libyang.git && cd libyang && for p in ../patches/libyang/*.patch; do patch -p1 -i $p; done && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX:PATH=/opt -DGEN_LANGUAGE_BINDINGS=OFF .. && make -j2 && make install
---> Running in aa01ee12b1a4
[91m+ git clone --branch v1.0-r5 --depth 1 https://github.com/CESNET/libyang.git
[0m[91mCloning into 'libyang'...
[0m[91m+ cd libyang
+ patch -p1 -i ../patches/libyang/01-configurable-PYTHON_MODULE_PATH.patch
[0mpatching file swig/python/CMakeLists.txt
[91m+ mkdir build
[0m[91m+ cd build
+ cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DENABLE_BUILD_TESTS=OFF' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DGEN_LANGUAGE_BINDINGS=OFF' ..
[0m-- The C compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Could NOT find FLEX (missing: FLEX_EXECUTABLE)
-- Could NOT find BISON (missing: BISON_EXECUTABLE)
[91mCMake Warning at CMakeLists.txt:115 (message):
Missing Bison.
You won't be able to generate source codes from changed flex/bison files.
Compiling libyang should still works fine.
[0m[91mCMake Warning at CMakeLists.txt:171 (message):
Missing tools (devscripts, debhelper package) for building deb package.
You won't be able to generate deb package from source code.
Compiling libyang should still works fine.
CMake Warning at CMakeLists.txt:182 (message):
Missing tools (rpm package) for building rpm package.
You won't be able to generate rpm package from source code.
Compiling libyang should still works fine.
[0m-- Looking for vdprintf
-- Looking for vdprintf - found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Found PCRE: /usr/lib/libpcre.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3")
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/libyang/build
[91m+ make -j2
[0mScanning dependencies of target yangobj
Scanning dependencies of target yangobj_tests
[ 1%] Building C object CMakeFiles/yangobj.dir/src/common.c.o
[ 2%] Building C object CMakeFiles/yangobj_tests.dir/src/common.c.o
[ 3%] Building C object CMakeFiles/yangobj_tests.dir/src/context.c.o
[ 5%] Building C object CMakeFiles/yangobj.dir/src/context.c.o
[ 6%] Building C object CMakeFiles/yangobj_tests.dir/src/log.c.o
[ 7%] Building C object CMakeFiles/yangobj.dir/src/log.c.o
[ 8%] Building C object CMakeFiles/yangobj_tests.dir/src/hash_table.c.o
[91m/usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_ht':
/usr/src/libyang/src/hash_table.c:634:17: warning: variable 'i_len' set but not used [-Wunused-but-set-variable]
634 | uint32_t i, i_len;
| ^~~~~
/usr/src/libyang/src/hash_table.c:631:53: warning: unused parameter 'info' [-Wunused-parameter]
631 | lyht_dbgprint_ht(struct hash_table *ht, const char *info)
| ~~~~~~~~~~~~^~~~
/usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_value':
/usr/src/libyang/src/hash_table.c:665:43: warning: unused parameter 'hash' [-Wunused-parameter]
665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation)
| ~~~~~~~~~^~~~
/usr/src/libyang/src/hash_table.c:665:80: warning: unused parameter 'operation' [-Wunused-parameter]
665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation)
| ~~~~~~~~~~~~^~~~~~~~~
[0m[ 10%] Building C object CMakeFiles/yangobj.dir/src/hash_table.c.o
[91m/usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_ht':
/usr/src/libyang/src/hash_table.c:634:17: warning: variable 'i_len' set but not used [-Wunused-but-set-variable]
634 | uint32_t i, i_len;
| ^~~~~
/usr/src/libyang/src/hash_table.c:631:53: warning: unused parameter 'info' [-Wunused-parameter]
631 | lyht_dbgprint_ht(struct hash_table *ht, const char *info)
| ~~~~~~~~~~~~^~~~
/usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_value':
/usr/src/libyang/src/hash_table.c:665:43: warning: unused parameter 'hash' [-Wunused-parameter]
665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation)
| ~~~~~~~~~^~~~
[0m[91m/usr/src/libyang/src/hash_table.c:665:80: warning: unused parameter 'operation' [-Wunused-parameter]
665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation)
| ~~~~~~~~~~~~^~~~~~~~~
[0m[ 11%] Building C object CMakeFiles/yangobj_tests.dir/src/resolve.c.o
[ 12%] Building C object CMakeFiles/yangobj.dir/src/resolve.c.o
[91m/usr/src/libyang/src/resolve.c: In function 'resolve_instid':
[0m[91m/usr/src/libyang/src/resolve.c:7869:9: warning: 'mod_len' may be used uninitialized in this function [-Wmaybe-uninitialized]
7869 | int mod_len, name_len, has_predicate;
| ^~~~~~~
[0m[91m/usr/src/libyang/src/resolve.c: In function 'resolve_instid':
[0m[91m/usr/src/libyang/src/resolve.c:7869:9: warning: 'mod_len' may be used uninitialized in this function [-Wmaybe-uninitialized]
7869 | int mod_len, name_len, has_predicate;
| ^~~~~~~
[0m[ 13%] Building C object CMakeFiles/yangobj_tests.dir/src/validation.c.o
[ 15%] Building C object CMakeFiles/yangobj.dir/src/validation.c.o
[ 16%] Building C object CMakeFiles/yangobj_tests.dir/src/xml.c.o
[ 17%] Building C object CMakeFiles/yangobj.dir/src/xml.c.o
[ 18%] Building C object CMakeFiles/yangobj_tests.dir/src/parser.c.o
[ 20%] Building C object CMakeFiles/yangobj.dir/src/parser.c.o
[ 21%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yin.c.o
[ 22%] Building C object CMakeFiles/yangobj.dir/src/parser_yin.c.o
[ 23%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_xml.c.o
[ 25%] Building C object CMakeFiles/yangobj.dir/src/parser_xml.c.o
[ 26%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_json.c.o
[ 27%] Building C object CMakeFiles/yangobj.dir/src/parser_json.c.o
[ 28%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_lyb.c.o
[ 30%] Building C object CMakeFiles/yangobj.dir/src/parser_lyb.c.o
[ 31%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yang_bis.c.o
[ 32%] Building C object CMakeFiles/yangobj.dir/src/parser_yang_bis.c.o
[ 33%] Building C object CMakeFiles/yangobj.dir/src/parser_yang_lex.c.o
[ 35%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yang_lex.c.o
[ 36%] Building C object CMakeFiles/yangobj.dir/src/parser_yang.c.o
[ 37%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yang.c.o
[ 38%] Building C object CMakeFiles/yangobj.dir/src/tree_schema.c.o
[ 40%] Building C object CMakeFiles/yangobj_tests.dir/src/tree_schema.c.o
[ 41%] Building C object CMakeFiles/yangobj.dir/src/tree_data.c.o
[ 42%] Building C object CMakeFiles/yangobj_tests.dir/src/tree_data.c.o
[ 43%] Building C object CMakeFiles/yangobj.dir/src/plugins.c.o
[ 45%] Building C object CMakeFiles/yangobj.dir/src/printer.c.o
[ 46%] Building C object CMakeFiles/yangobj_tests.dir/src/plugins.c.o
[ 47%] Building C object CMakeFiles/yangobj.dir/src/xpath.c.o
[ 48%] Building C object CMakeFiles/yangobj_tests.dir/src/printer.c.o
[ 50%] Building C object CMakeFiles/yangobj_tests.dir/src/xpath.c.o
[91m/usr/src/libyang/src/xpath.c: In function 'eval_predicate':
/usr/src/libyang/src/xpath.c:958:28: warning: 'end' may be used uninitialized in this function [-Wmaybe-uninitialized]
958 | uint16_t i, orig_used, end;
| ^~~
[0m[ 51%] Building C object CMakeFiles/yangobj.dir/src/printer_yang.c.o
[91m/usr/src/libyang/src/xpath.c: In function 'eval_predicate':
[0m[91m/usr/src/libyang/src/xpath.c:958:28: warning: 'end' may be used uninitialized in this function [-Wmaybe-uninitialized]
958 | uint16_t i, orig_used, end;
| ^~~
[0m[ 52%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_yang.c.o
[ 53%] Building C object CMakeFiles/yangobj.dir/src/printer_yin.c.o
[ 55%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_yin.c.o
[ 56%] Building C object CMakeFiles/yangobj.dir/src/printer_json_schema.c.o
[ 57%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_json_schema.c.o
[ 58%] Building C object CMakeFiles/yangobj.dir/src/printer_xml.c.o
[ 60%] Building C object CMakeFiles/yangobj.dir/src/printer_tree.c.o
[ 61%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_xml.c.o
[ 62%] Building C object CMakeFiles/yangobj.dir/src/printer_info.c.o
[ 63%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_tree.c.o
[ 65%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_info.c.o
[ 66%] Building C object CMakeFiles/yangobj.dir/src/printer_json.c.o
[ 67%] Building C object CMakeFiles/yangobj.dir/src/printer_lyb.c.o
[ 68%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_json.c.o
[ 70%] Building C object CMakeFiles/yangobj.dir/src/yang_types.c.o
[ 71%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_lyb.c.o
[ 71%] Built target yangobj
Scanning dependencies of target yang2yin
[ 72%] Building C object CMakeFiles/yang2yin.dir/tools/yang2yin/main.c.o
[ 73%] Building C object CMakeFiles/yangobj_tests.dir/src/yang_types.c.o
[ 73%] Built target yangobj_tests
Scanning dependencies of target yang
[ 75%] Linking C shared library libyang.so
[ 75%] Built target yang
Scanning dependencies of target yanglint
[ 76%] Building C object CMakeFiles/yanglint.dir/tools/lint/main.c.o
[ 77%] Building C object CMakeFiles/yanglint.dir/tools/lint/main_ni.c.o
[ 78%] Linking C executable yang2yin
[ 78%] Built target yang2yin
Scanning dependencies of target yangre
[ 80%] Building C object CMakeFiles/yangre.dir/tools/re/main.c.o
[ 81%] Linking C executable yangre
[ 81%] Built target yangre
Scanning dependencies of target metadata
[ 82%] Building C object src/extensions/CMakeFiles/metadata.dir/metadata.c.o
[ 83%] Linking C shared library metadata.so
[ 83%] Built target metadata
Scanning dependencies of target yangdata
[ 85%] Building C object src/extensions/CMakeFiles/yangdata.dir/yangdata.c.o
[ 86%] Linking C shared library yangdata.so
[ 86%] Built target yangdata
[ 88%] Building C object CMakeFiles/yanglint.dir/tools/lint/completion.c.o
[ 88%] Building C object CMakeFiles/yanglint.dir/tools/lint/commands.c.o
[ 90%] Building C object CMakeFiles/yanglint.dir/tools/lint/configuration.c.o
[ 91%] Building C object CMakeFiles/yanglint.dir/linenoise/linenoise.c.o
Scanning dependencies of target nacm
[ 92%] Building C object src/extensions/CMakeFiles/nacm.dir/nacm.c.o
[ 93%] Linking C shared library nacm.so
[ 95%] Linking C executable yanglint
[ 95%] Built target nacm
Scanning dependencies of target user_yang_types
[ 95%] Built target yanglint
[ 96%] Building C object src/user_types/CMakeFiles/user_yang_types.dir/user_yang_types.c.o
Scanning dependencies of target user_inet_types
[ 97%] Building C object src/user_types/CMakeFiles/user_inet_types.dir/user_inet_types.c.o
[ 98%] Linking C shared library user_yang_types.so
[100%] Linking C shared library user_inet_types.so
[100%] Built target user_yang_types
[100%] Built target user_inet_types
[91m+ make install
[0m[ 36%] Built target yangobj_tests
[ 72%] Built target yangobj
[ 73%] Built target yang
[ 82%] Built target yanglint
[ 85%] Built target yangre
[ 87%] Built target yang2yin
[ 90%] Built target metadata
[ 92%] Built target yangdata
[ 95%] Built target nacm
[ 97%] Built target user_yang_types
[100%] Built target user_inet_types
Install the project...
-- Install configuration: "Release"
-- Installing: /opt/lib64/libyang.so.1.4.1
-- Installing: /opt/lib64/libyang.so.1
-- Installing: /opt/lib64/libyang.so
-- Installing: /opt/include/libyang/tree_schema.h
-- Installing: /opt/include/libyang/tree_data.h
-- Installing: /opt/include/libyang/extensions.h
-- Installing: /opt/include/libyang/user_types.h
-- Installing: /opt/include/libyang/xml.h
-- Installing: /opt/include/libyang/dict.h
-- Installing: /opt/include/libyang/libyang.h
-- Installing: /opt/lib64/pkgconfig/libyang.pc
-- Installing: /opt/bin/yanglint
-- Set runtime path of "/opt/bin/yanglint" to ""
-- Installing: /opt/share/man/man1/yanglint.1
-- Installing: /opt/bin/yangre
-- Set runtime path of "/opt/bin/yangre" to ""
-- Installing: /opt/share/man/man1/yangre.1
-- Installing: /opt/lib64/libyang/extensions/nacm.so
-- Set runtime path of "/opt/lib64/libyang/extensions/nacm.so" to ""
-- Installing: /opt/lib64/libyang/extensions/metadata.so
-- Set runtime path of "/opt/lib64/libyang/extensions/metadata.so" to ""
-- Installing: /opt/lib64/libyang/extensions/yangdata.so
-- Set runtime path of "/opt/lib64/libyang/extensions/yangdata.so" to ""
-- Installing: /opt/lib64/libyang/user_types/user_yang_types.so
-- Set runtime path of "/opt/lib64/libyang/user_types/user_yang_types.so" to ""
-- Installing: /opt/lib64/libyang/user_types/user_inet_types.so
-- Set runtime path of "/opt/lib64/libyang/user_types/user_inet_types.so" to ""
Removing intermediate container aa01ee12b1a4
---> bbdbc9c14c58
Step 14/47 : RUN set -eux && git clone --depth 1 https://github.com/sysrepo/libredblack.git && cd libredblack && ./configure --prefix=/opt --without-rbgen && make && make install
---> Running in e76417c06cdb
[91m+ git clone --depth 1 https://github.com/sysrepo/libredblack.git
[0m[91mCloning into 'libredblack'...
[0m[91m+ cd libredblack
+ ./configure '--prefix=/opt' --without-rbgen
[0mchecking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for a BSD-compatible install... /usr/bin/install -c
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for ld used by GCC... /usr/x86_64-alpine-linux-musl/bin/ld
checking if the linker (/usr/x86_64-alpine-linux-musl/bin/ld) is GNU ld... yes
checking for /usr/x86_64-alpine-linux-musl/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking for a sed that does not truncate output... /bin/sed
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking command to parse /usr/bin/nm -B output... ok
checking how to run the C preprocessor... gcc -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for ranlib... ranlib
checking for strip... strip
checking for objdir... .libs
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.lo... yes
checking if gcc supports -fno-rtti -fno-exceptions... yes
checking whether the linker (/usr/x86_64-alpine-linux-musl/bin/ld) supports shared libraries... yes
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether -lc should be explicitly linked in... no
creating libtool
checking for ANSI C header files... (cached) yes
checking for an ANSI C-conforming const... yes
checking for strdup... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating libredblack.spec
config.status: creating rbgen
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default commands
[91m+ make
[0mcd . && /bin/sh /usr/src/libredblack/missing --run aclocal-1.6
[91m/usr/src/libredblack/missing: [0m[91mline 46: [0m[91maclocal-1.6: not found[0m[91m
[0m[91mWARNING: `aclocal-1.6' is missing on your system. You should only need it if
you modified `acinclude.m4' or `configure.in'. You might want
to install the `Automake' and `Perl' packages. Grab them from
any GNU archive site.
[0mcd . && \
/bin/sh /usr/src/libredblack/missing --run automake-1.6 --gnu Makefile
[91m/usr/src/libredblack/missing: line 46: automake-1.6: not found
[0m[91mWARNING: `automake-1.6' is missing on your system. You should only need it if
you modified `Makefile.am', `acinclude.m4' or `configure.in'.
You might want to install the `Automake' and `Perl' packages.
Grab them from any GNU archive site.
[0mcd . && /bin/sh /usr/src/libredblack/missing --run autoconf
/bin/sh ./config.status --recheck
running /bin/sh ./configure --prefix=/opt --without-rbgen --no-create --no-recursion
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for ld used by GCC... /usr/x86_64-alpine-linux-musl/bin/ld
checking if the linker (/usr/x86_64-alpine-linux-musl/bin/ld) is GNU ld... yes
checking for /usr/x86_64-alpine-linux-musl/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking for a sed that does not truncate output... /bin/sed
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking command to parse /usr/bin/nm -B output... ok
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for ranlib... ranlib
checking for strip... strip
checking for objdir... .libs
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.lo... yes
checking if gcc supports -fno-rtti -fno-exceptions... no
checking whether the linker (/usr/x86_64-alpine-linux-musl/bin/ld) supports shared libraries... yes
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether -lc should be explicitly linked in... no
creating libtool
checking for ANSI C header files... (cached) yes
checking for an ANSI C-conforming const... yes
checking for strdup... yes
configure: creating ./config.status
cd . && /bin/sh ./config.status Makefile depfiles
config.status: creating Makefile
[91mconfig.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting
[0mconfig.status: executing depfiles commands
cd . && /bin/sh /usr/src/libredblack/missing --run autoheader
touch ./config.h.in
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
make all-am
make[1]: Entering directory '/usr/src/libredblack'
source='redblack.c' object='redblack.lo' libtool=yes \
depfile='.deps/redblack.Plo' tmpdepfile='.deps/redblack.TPlo' \
depmode=gcc3 /bin/sh ./depcomp \
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c -o redblack.lo `test -f 'redblack.c' || echo './'`redblack.c
mkdir .libs
gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c redblack.c -MT redblack.lo -MD -MP -MF .deps/redblack.TPlo -fPIC -DPIC -o .libs/redblack.lo
[91mredblack.c: In function 'rbinit':
redblack.c:143:7: warning: variable 'c' set but not used [-Wunused-but-set-variable]
143 | char c;
| ^
[0mgcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c redblack.c -MT redblack.lo -MD -MP -MF .deps/redblack.TPlo -o redblack.o >/dev/null 2>&1
mv -f .libs/redblack.lo redblack.lo
/bin/sh ./libtool --mode=link gcc -Wall -o libredblack.la -rpath /opt/lib -version-info 2:3:2 redblack.lo
rm -fr .libs/libredblack.la .libs/libredblack.* .libs/libredblack.*
gcc -shared redblack.lo -Wl,-soname -Wl,libredblack.so.0 -o .libs/libredblack.so.0.2.3
(cd .libs && rm -f libredblack.so.0 && ln -s libredblack.so.0.2.3 libredblack.so.0)
(cd .libs && rm -f libredblack.so && ln -s libredblack.so.0.2.3 libredblack.so)
ar cru .libs/libredblack.a redblack.o
[91mar: `u' modifier ignored since `D' is the default (see `U')
[0mranlib .libs/libredblack.a
creating libredblack.la
(cd .libs && rm -f libredblack.la && ln -s ../libredblack.la libredblack.la)
source='example.c' object='example.o' libtool=no \
depfile='.deps/example.Po' tmpdepfile='.deps/example.TPo' \
depmode=gcc3 /bin/sh ./depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example.c' || echo './'`example.c
/bin/sh ./libtool --mode=link gcc -Wall -o example example.o libredblack.la
gcc -Wall -o .libs/example example.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib
creating example
source='example1.c' object='example1.o' libtool=no \
depfile='.deps/example1.Po' tmpdepfile='.deps/example1.TPo' \
depmode=gcc3 /bin/sh ./depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example1.c' || echo './'`example1.c
/bin/sh ./libtool --mode=link gcc -Wall -o example1 example1.o libredblack.la
gcc -Wall -o .libs/example1 example1.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib
creating example1
source='example2.c' object='example2.o' libtool=no \
depfile='.deps/example2.Po' tmpdepfile='.deps/example2.TPo' \
depmode=gcc3 /bin/sh ./depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example2.c' || echo './'`example2.c
/bin/sh ./libtool --mode=link gcc -Wall -o example2 example2.o libredblack.la
gcc -Wall -o .libs/example2 example2.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib
creating example2
source='example3.c' object='example3.o' libtool=no \
depfile='.deps/example3.Po' tmpdepfile='.deps/example3.TPo' \
depmode=gcc3 /bin/sh ./depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example3.c' || echo './'`example3.c
/bin/sh ./libtool --mode=link gcc -Wall -o example3 example3.o libredblack.la
gcc -Wall -o .libs/example3 example3.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib
creating example3
echo 'int main() { return(0); }' > example4.c
source='example4.c' object='example4.o' libtool=no \
depfile='.deps/example4.Po' tmpdepfile='.deps/example4.TPo' \
depmode=gcc3 /bin/sh ./depcomp \
gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example4.c' || echo './'`example4.c
/bin/sh ./libtool --mode=link gcc -Wall -o example4 example4.o
gcc -Wall -o example4 example4.o
make[1]: Leaving directory '/usr/src/libredblack'
[91m+ make install
[0mmake[1]: Entering directory '/usr/src/libredblack'
/bin/sh ./mkinstalldirs /opt/bin
/bin/sh ./mkinstalldirs /opt/lib
mkdir -p -- /opt/lib
/bin/sh ./libtool --mode=install /usr/bin/install -c libredblack.la /opt/lib/libredblack.la
/usr/bin/install -c .libs/libredblack.so.0.2.3 /opt/lib/libredblack.so.0.2.3
(cd /opt/lib && rm -f libredblack.so.0 && ln -s libredblack.so.0.2.3 libredblack.so.0)
(cd /opt/lib && rm -f libredblack.so && ln -s libredblack.so.0.2.3 libredblack.so)
/usr/bin/install -c .libs/libredblack.lai /opt/lib/libredblack.la
/usr/bin/install -c .libs/libredblack.a /opt/lib/libredblack.a
ranlib /opt/lib/libredblack.a
chmod 644 /opt/lib/libredblack.a
PATH="$PATH:/sbin" ldconfig -n /opt/lib
----------------------------------------------------------------------
Libraries have been installed in:
/opt/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/bin/sh ./mkinstalldirs /opt/include
/usr/bin/install -c -m 644 redblack.h /opt/include/redblack.h
/bin/sh ./mkinstalldirs /opt/share/man/man1
/usr/bin/install -c -m 644 ./rbgen.1 /opt/share/man/man1/rbgen.1
/bin/sh ./mkinstalldirs /opt/share/man/man3
mkdir -p -- /opt/share/man/man3
/usr/bin/install -c -m 644 ./rbdelete.3 /opt/share/man/man3/rbdelete.3
/usr/bin/install -c -m 644 ./rbdestroy.3 /opt/share/man/man3/rbdestroy.3
/usr/bin/install -c -m 644 ./rbfind.3 /opt/share/man/man3/rbfind.3
/usr/bin/install -c -m 644 ./rbinit.3 /opt/share/man/man3/rbinit.3
/usr/bin/install -c -m 644 ./rbsearch.3 /opt/share/man/man3/rbsearch.3
/usr/bin/install -c -m 644 ./rblookup.3 /opt/share/man/man3/rblookup.3
/usr/bin/install -c -m 644 ./rbwalk.3 /opt/share/man/man3/rbwalk.3
/usr/bin/install -c -m 644 ./rbopenlist.3 /opt/share/man/man3/rbopenlist.3
/usr/bin/install -c -m 644 ./rbreadlist.3 /opt/share/man/man3/rbreadlist.3
/usr/bin/install -c -m 644 ./rbcloselist.3 /opt/share/man/man3/rbcloselist.3
/bin/sh ./mkinstalldirs /opt/share/libredblack
mkdir -p -- /opt/share/libredblack
/usr/bin/install -c -m 644 redblack.c /opt/share/libredblack/redblack.c
/usr/bin/install -c -m 644 redblack.h /opt/share/libredblack/redblack.h
make[1]: Leaving directory '/usr/src/libredblack'
Removing intermediate container e76417c06cdb
---> f6891a48edeb
Step 15/47 : RUN set -eux && git clone --branch $zlog_version --depth 1 https://github.com/HardySimpson/zlog && cd zlog/src && make PREFIX=/opt && make install PREFIX=/opt
---> Running in eef81572a29e
[91m+ git clone --branch 1.2.14 --depth 1 https://github.com/HardySimpson/zlog
[0m[91mCloning into 'zlog'...
[0m[91m+ cd zlog/src
+ [0m[91mmake 'PREFIX=/opt'
[0mcc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb buf.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb category.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb category_table.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb conf.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb event.c
[91mevent.c: In function 'zlog_event_new':
event.c:91:65: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
91 | a_event->tid_hex_str_len = sprintf(a_event->tid_hex_str, "%x", (unsigned int)a_event->tid);
| ^
[0mcc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb format.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb level.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb level_list.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb mdc.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb record.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb record_table.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb rotater.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb rule.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb spec.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb thread.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_arraylist.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_hashtable.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_profile.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_util.c
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zlog.c
cc -shared -Wl,-soname,libzlog.so.1.2 -o libzlog.so buf.o category.o category_table.o conf.o event.o format.o level.o level_list.o mdc.o record.o record_table.o rotater.o rule.o spec.o thread.o zc_arraylist.o zc_hashtable.o zc_profile.o zc_util.o zlog.o -pthread
# for use in test folder - linux and requirement for aix runtime
# resolving
cp -f libzlog.so libzlog.so.1
cp -f libzlog.so libzlog.so.1.2
cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zlog-chk-conf.c
ar rcs libzlog.a buf.o category.o category_table.o conf.o event.o format.o level.o level_list.o mdc.o record.o record_table.o rotater.o rule.o spec.o thread.o zc_arraylist.o zc_hashtable.o zc_profile.o zc_util.o zlog.o
cc -o zlog-chk-conf zlog-chk-conf.o -L. -lzlog -pthread
[91m+ make install[0m[91m 'PREFIX=/opt'
[0mmkdir -p /opt/include /opt/lib /opt/bin
cp -a zlog.h /opt/include
cp -a zlog-chk-conf /opt/bin
cp -a libzlog.so /opt/lib/libzlog.so.1.2
cd /opt/lib && ln -sf libzlog.so.1.2 libzlog.so.1
cd /opt/lib && ln -sf libzlog.so.1 libzlog.so
cp -a libzlog.a /opt/lib
Removing intermediate container eef81572a29e
---> 11ce469c116a
Step 16/47 : COPY patches/sysrepo/ ./patches/sysrepo/
---> 24683e6965d1
Step 17/47 : RUN set -eux && git clone --branch $sysrepo_version --depth 1 https://github.com/sysrepo/sysrepo.git && cd sysrepo && for p in ../patches/sysrepo/*.patch; do patch -p1 -i $p; done && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_TESTS=OFF -DREPOSITORY_LOC:PATH=/opt/etc/sysrepo -DCMAKE_INSTALL_PREFIX:PATH=/opt -DGEN_PYTHON_VERSION=3 -DPYTHON_MODULE_PATH:PATH=/opt/lib/python3.7/site-packages -DBUILD_EXAMPLES=0 -DBUILD_CPP_EXAMPLES=0 .. && make -j2 && make install
---> Running in 1c52fa9c6af4
[91m+ git clone --branch v0.7.9 --depth 1 https://github.com/sysrepo/sysrepo.git
[0m[91mCloning into 'sysrepo'...
[0m[91m+ cd sysrepo
+ patch -p1 -i ../patches/sysrepo/01-configurable-PYTHON_MODULE_PATH.patch
[0mpatching file swig/python/CMakeLists.txt
[91m+ patch -p1 -i ../patches/sysrepo/02-zlog.patch
[0mpatching file CMakeLists.txt
patching file src/CMakeLists.txt
patching file src/common/sr_logger.c
patching file src/common/sr_logger.h
patching file src/executables/sysrepocfg.c
patching file src/executables/sysrepoctl.c
patching file src/clientlib/client_library.c
[91m+ mkdir build
[0m[91m+ cd build
+ cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DENABLE_TESTS=OFF' '-DREPOSITORY_LOC:PATH=/opt/etc/sysrepo' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DGEN_PYTHON_VERSION=3' '-DPYTHON_MODULE_PATH:PATH=/opt/lib/python3.7/site-packages' '-DBUILD_EXAMPLES=0' '-DBUILD_CPP_EXAMPLES=0' ..
[0m-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Preparing systemwide build of sysrepo v. 0.7.8
-- sysrepo repository location: /opt/etc/sysrepo
-- Found ev: /usr/lib/libev.so
-- Found yang: /opt/lib64/libyang.so
-- Found protobuf-c: /usr/lib/libprotobuf-c.so
-- Could NOT find avl (missing: AVL_LIBRARY AVL_INCLUDE_DIR)
-- Found redblack: /opt/lib/libredblack.so
-- libredblack will be used for binary tree manipulations.
-- Looking for stdatomic.h
-- Looking for stdatomic.h - found
-- Looking for pthread_rwlockattr_setkind_np
-- Looking for pthread_rwlockattr_setkind_np - not found
-- Looking for getpeereid
-- Looking for getpeereid - not found
-- Looking for getpeerucred
-- Looking for getpeerucred - not found
-- Looking for include file ucred.h
-- Looking for include file ucred.h - not found
-- Looking for pthread_mutex_timedlock
-- Looking for pthread_mutex_timedlock - found
-- Looking for setfsuid
-- Looking for setfsuid - found
-- Looking for fsetxattr
-- Looking for fsetxattr - found
-- Looking for mkstemps
-- Looking for mkstemps - found
-- Performing Test HAVE_STAT_ST_MTIM
-- Performing Test HAVE_STAT_ST_MTIM - Success
-- Looking for F_OFD_SETLKW
-- Looking for F_OFD_SETLKW - found
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Found SWIG: /usr/bin/swig (found suitable version "3.0.12", minimum required is "3.0.12")
-- Python version 3 was selected
-- Found PythonLibs: /usr/local/lib/libpython3.7m.so (found suitable version "3.7.7", minimum required is "3")
-- Found PythonInterp: /usr/local/bin/python3.7 (found version "3.7.7")
-- Found SWIG: /usr/bin/swig (found suitable version "3.0.12", minimum required is "3.0.5")
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/sysrepo/build
[91m+ make -j2
[0m[ 1%] Running C protocol buffer compiler on /usr/src/sysrepo/src/sysrepo.proto
Scanning dependencies of target sysrepo_swig_compilation
[ 3%] Swig compile sysrepo.i for python
Scanning dependencies of target COMMON
[ 5%] Building C object src/CMakeFiles/COMMON.dir/common/sysrepo.pb-c.c.o
[ 7%] Building C object src/CMakeFiles/COMMON.dir/common/sr_common.c.o
[ 9%] Building C object src/CMakeFiles/COMMON.dir/common/sr_utils.c.o
[ 9%] Built target sysrepo_swig_compilation
[ 11%] Building C object src/CMakeFiles/COMMON.dir/common/sr_data_structs.c.o
[ 13%] Building C object src/CMakeFiles/COMMON.dir/common/sr_logger.c.o
[ 15%] Building C object src/CMakeFiles/COMMON.dir/common/sr_protobuf.c.o
[ 17%] Building C object src/CMakeFiles/COMMON.dir/common/sr_mem_mgmt.c.o
[ 19%] Building C object src/CMakeFiles/COMMON.dir/utils/plugins.c.o
[ 21%] Building C object src/CMakeFiles/COMMON.dir/utils/trees.c.o
[ 23%] Building C object src/CMakeFiles/COMMON.dir/utils/values.c.o
[ 25%] Building C object src/CMakeFiles/COMMON.dir/utils/xpath.c.o
[ 25%] Built target COMMON
Scanning dependencies of target SR_SRC
Scanning dependencies of target SR_ENGINE
[ 27%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/client_library.c.o
[ 29%] Building C object src/CMakeFiles/SR_ENGINE.dir/access_control.c.o
[ 31%] Building C object src/CMakeFiles/SR_ENGINE.dir/connection_manager.c.o
[ 33%] Building C object src/CMakeFiles/SR_ENGINE.dir/cm_session_manager.c.o
[ 35%] Building C object src/CMakeFiles/SR_ENGINE.dir/request_processor.c.o
[ 37%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/cl_subscription_manager.c.o
[ 39%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/cl_common.c.o
[ 41%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/cl_trees.c.o
[ 41%] Built target SR_SRC
[ 43%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_xpath.c.o
[ 45%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_lookup.c.o
[ 47%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_get.c.o
[ 49%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_edit.c.o
[ 50%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_filter.c.o
[ 52%] Building C object src/CMakeFiles/SR_ENGINE.dir/data_manager.c.o
[ 54%] Building C object src/CMakeFiles/SR_ENGINE.dir/notification_processor.c.o
[ 56%] Building C object src/CMakeFiles/SR_ENGINE.dir/persistence_manager.c.o
[ 58%] Building C object src/CMakeFiles/SR_ENGINE.dir/module_dependencies.c.o
[ 60%] Building C object src/CMakeFiles/SR_ENGINE.dir/nacm.c.o
[ 60%] Built target SR_ENGINE
Scanning dependencies of target sysrepo
Scanning dependencies of target sysrepo_a
[ 62%] Linking C shared library libsysrepo.so
[ 64%] Linking C static library libsysrepo.a
[ 64%] Built target sysrepo_a
[ 64%] Built target sysrepo
Scanning dependencies of target sysrepod
Scanning dependencies of target sysrepoctl
[ 66%] Building C object src/CMakeFiles/sysrepod.dir/executables/sysrepod.c.o
[ 68%] Building C object src/CMakeFiles/sysrepoctl.dir/executables/sysrepoctl.c.o
[ 70%] Linking C executable sysrepod
[ 70%] Built target sysrepod
Scanning dependencies of target sysrepo-plugind
[ 72%] Building C object src/CMakeFiles/sysrepo-plugind.dir/executables/sysrepo-plugind.c.o
[ 74%] Linking C executable sysrepo-plugind
[ 74%] Built target sysrepo-plugind
Scanning dependencies of target sysrepocfg
[ 76%] Building C object src/CMakeFiles/sysrepocfg.dir/executables/sysrepocfg.c.o
[ 78%] Linking C executable sysrepoctl
[ 78%] Built target sysrepoctl
Scanning dependencies of target Sysrepo-cpp
[ 80%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Sysrepo.cpp.o
[ 82%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Connection.cpp.o
[ 84%] Linking C executable sysrepocfg
[ 84%] Built target sysrepocfg
[ 86%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Session.cpp.o
[ 88%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Struct.cpp.o
[ 90%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Xpath.cpp.o
[ 92%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Tree.cpp.o
[ 94%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Internal.cpp.o
[ 96%] Linking CXX shared library libSysrepo-cpp.so
[ 96%] Built target Sysrepo-cpp
Scanning dependencies of target _sysrepo
[ 98%] Building CXX object swig/python/CMakeFiles/_sysrepo.dir/sysrepoPYTHON_wrap.cxx.o
[100%] Linking CXX shared module _sysrepo.so
[100%] Built target _sysrepo
[91m+ make install
[0m[ 23%] Built target COMMON
[ 50%] Built target SR_ENGINE
[ 58%] Built target SR_SRC
[ 60%] Built target sysrepo
[ 62%] Built target sysrepo_a
[ 66%] Built target sysrepoctl
[ 70%] Built target sysrepod
[ 74%] Built target sysrepo-plugind
[ 78%] Built target sysrepocfg
[ 94%] Built target Sysrepo-cpp
[ 96%] Built target sysrepo_swig_compilation
[100%] Built target _sysrepo
Install the project...
-- Install configuration: "Release"
-- Installing: /opt/etc/sysrepo
-- Installing: /opt/etc/sysrepo/yang/
-- Installing: /opt/etc/sysrepo/data/
-- Installing: /opt/etc/sysrepo/data/internal/
-- Installing: /var/run/sysrepo-subscriptions
-- Installing: /opt/lib64/sysrepo/plugins
-- Installing: /opt/etc/sysrepo/yang/internal/sysrepo-persistent-data.yang
-- Installing: /opt/etc/sysrepo/yang/internal/sysrepo-module-dependencies.yang
-- Installing: /opt/etc/sysrepo/yang/internal/sysrepo-notification-store.yang
-- Installing: /opt/lib64/pkgconfig/libsysrepo.pc
-- Installing: /opt/share/man/man1/sysrepoctl.1
-- Installing: /opt/share/man/man1/sysrepocfg.1
-- Exec: /usr/src/sysrepo/build/src/sysrepoctl --install --yang=/usr/src/sysrepo/yang/ietf-netconf-notifications.yang --permissions=666
-- Exec: /usr/src/sysrepo/build/src/sysrepoctl --install --yang=/usr/src/sysrepo/yang/nc-notifications.yang --permissions=666
-- Exec: /usr/src/sysrepo/build/src/sysrepoctl --install --yang=/usr/src/sysrepo/yang/notifications.yang --permissions=666
-- Installing: /opt/lib64/libsysrepo.so.0.7.8
-- Installing: /opt/lib64/libsysrepo.so.0.7
-- Set runtime path of "/opt/lib64/libsysrepo.so.0.7.8" to ""
-- Installing: /opt/lib64/libsysrepo.so
-- Installing: /opt/lib64/libsysrepo.a
-- Installing: /opt/bin/sysrepod
-- Set runtime path of "/opt/bin/sysrepod" to ""
-- Installing: /opt/bin/sysrepo-plugind
-- Set runtime path of "/opt/bin/sysrepo-plugind" to ""
-- Installing: /opt/bin/sysrepoctl
-- Set runtime path of "/opt/bin/sysrepoctl" to ""
-- Installing: /opt/bin/sysrepocfg
-- Set runtime path of "/opt/bin/sysrepocfg" to ""
-- Up-to-date: /opt/include
-- Installing: /opt/include/sysrepo
-- Installing: /opt/include/sysrepo/values.h
-- Installing: /opt/include/sysrepo/trees.h
-- Installing: /opt/include/sysrepo/plugins.h
-- Installing: /opt/include/sysrepo/xpath.h
-- Installing: /opt/include/sysrepo.h
-- Installing: /opt/lib64/libSysrepo-cpp.so.0.7.8
-- Installing: /opt/lib64/libSysrepo-cpp.so.0.7
-- Set runtime path of "/opt/lib64/libSysrepo-cpp.so.0.7.8" to ""
-- Installing: /opt/lib64/libSysrepo-cpp.so
-- Installing: /opt/include/sysrepo-cpp/Sysrepo.hpp
-- Installing: /opt/include/sysrepo-cpp/Connection.hpp
-- Installing: /opt/include/sysrepo-cpp/Session.hpp
-- Installing: /opt/include/sysrepo-cpp/Struct.hpp
-- Installing: /opt/include/sysrepo-cpp/Xpath.hpp
-- Installing: /opt/include/sysrepo-cpp/Tree.hpp
-- Installing: /opt/include/sysrepo-cpp/Internal.hpp
-- Installing: /opt/lib64/pkgconfig/libSysrepo-cpp.pc
-- Installing: /opt/lib/python3.7/site-packages/_sysrepo.so
-- Installing: /opt/lib/python3.7/site-packages/sysrepo.py
Removing intermediate container 1c52fa9c6af4
---> 0e50bba8875e
Step 18/47 : COPY patches/libnetconf2/ ./patches/libnetconf2/
---> 93083acdc3cc
Step 19/47 : RUN set -eux && git clone --branch $libnetconf2_version --depth 1 https://github.com/CESNET/libnetconf2.git && cd libnetconf2 && for p in ../patches/libnetconf2/*.patch; do patch -p1 -i $p; done && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX:PATH=/opt -DENABLE_PYTHON=OFF .. && make && make install
---> Running in 4a4157cba271
[91m+ git clone --branch v0.12-r2 --depth 1 https://github.com/CESNET/libnetconf2.git
[0m[91mCloning into 'libnetconf2'...
[0m[91m+ cd libnetconf2
[0m[91m+ patch -p1 -i ../patches/libnetconf2/01-configurable-PYTHON_MODULE_PATH.patch
[0mpatching file python/CMakeLists.txt
[91m+ patch -p1 -i ../patches/libnetconf2/02-fix-missing-include-dir.patch
[0mpatching file python/setup.py.in
[91m+ patch -p1 -i ../patches/libnetconf2/03-fix-missing-pthread_rwlockattr_setkind_np.patch
[0mpatching file src/session_server.c
[91m+ patch -p1 -i ../patches/libnetconf2/04-io-log.patch
[0mpatching file src/io.c
[91m+ mkdir build
[0m[91m+ cd build
+ cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DENABLE_BUILD_TESTS=OFF' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DENABLE_PYTHON=OFF' ..
[0m-- The C compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
[91mCMake Warning at CMakeLists.txt:98 (message):
Missing tools (devscripts, debhelper package) for building deb package.
You won't be able to generate deb package from source code.
Compiling libnetconf2 should still works fine.
[0m[91mCMake Warning at CMakeLists.txt:109 (message):
Missing tools (rpm package) for building rpm package.
You won't be able to generate rpm package from source code.
Compiling libnetconf2 should still works fine.
[0m-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Looking for stdatomic.h
[91mCMake Warning (dev) at /usr/share/cmake/Modules/CheckIncludeFile.cmake:80 (message):
Policy CMP0075 is not set: Include file check macros honor
CMAKE_REQUIRED_LIBRARIES. Run "cmake --help-policy CMP0075" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
CMAKE_REQUIRED_LIBRARIES is set to:
pthread
For compatibility with CMake 3.11 and below this check is ignoring it.
Call Stack (most recent call first):
CMakeLists.txt:177 (check_include_file)
This warning is for project developers. Use -Wno-dev to suppress it.
[0m-- Looking for stdatomic.h - found
-- Looking for pthread_mutex_timedlock
-- Looking for pthread_mutex_timedlock - found
-- Found OpenSSL: /usr/lib/libcrypto.so (found version "1.1.1l")
-- Found LibSSH: /usr/lib/ (Required is at least version "0.7.0")
-- Performing Test HAVE_LIBSSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES
-- Performing Test HAVE_LIBSSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES - Success
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3")
[91mCMake Warning at CMakeLists.txt:267 (message):
pkg-config will not detect the new package after installation, adjust
PKG_CONFIG_PATH using "export
PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:lib64/pkgconfig".
[0m-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/libnetconf2/build
[91m+ make
[0mScanning dependencies of target netconf2
[ 7%] Building C object CMakeFiles/netconf2.dir/src/io.c.o
[ 15%] Building C object CMakeFiles/netconf2.dir/src/log.c.o
[ 23%] Building C object CMakeFiles/netconf2.dir/src/messages_client.c.o
[ 30%] Building C object CMakeFiles/netconf2.dir/src/messages_server.c.o
[ 38%] Building C object CMakeFiles/netconf2.dir/src/session.c.o
[91m/usr/src/libnetconf2/src/session.c:1368:1: warning: 'nc_ssh_destroy' defined but not used [-Wunused-function]
1368 | nc_ssh_destroy(void)
| ^~~~~~~~~~~~~~
/usr/src/libnetconf2/src/session.c:1361:1: warning: 'nc_ssh_init' defined but not used [-Wunused-function]
1361 | nc_ssh_init(void)
| ^~~~~~~~~~~
[0m[ 46%] Building C object CMakeFiles/netconf2.dir/src/session_client.c.o
[ 53%] Building C object CMakeFiles/netconf2.dir/src/session_server.c.o
[ 61%] Building C object CMakeFiles/netconf2.dir/src/time.c.o
[ 69%] Building C object CMakeFiles/netconf2.dir/src/session_client_ssh.c.o
[91m/usr/src/libnetconf2/src/session_client_ssh.c: In function 'sshauth_hostkey_check':
/usr/src/libnetconf2/src/session_client_ssh.c:284:5: warning: 'ssh_is_server_known' is deprecated [-Wdeprecated-declarations]
284 | state = ssh_is_server_known(session);
| ^~~~~
[0m[91mIn file included from /usr/src/libnetconf2/src/session_client_ssh.c:40:
/usr/include/libssh/libssh.h:561:31: note: declared here
561 | SSH_DEPRECATED LIBSSH_API int ssh_is_server_known(ssh_session session);
| ^~~~~~~~~~~~~~~~~~~
/usr/src/libnetconf2/src/session_client_ssh.c:286:5: warning: 'ssh_get_publickey' is deprecated [-Wdeprecated-declarations]
286 | ret = ssh_get_publickey(session, &srv_pubkey);
| ^~~
In file included from /usr/src/libnetconf2/src/session_client_ssh.c:40:
/usr/include/libssh/libssh.h:558:31: note: declared here
558 | SSH_DEPRECATED LIBSSH_API int ssh_get_publickey(ssh_session session, ssh_key *key);
| ^~~~~~~~~~~~~~~~~
[0m[91m/usr/src/libnetconf2/src/session_client_ssh.c:388:17: warning: 'ssh_write_knownhost' is deprecated [-Wdeprecated-declarations]
388 | ret = ssh_write_knownhost(session);
| ^~~
In file included from /usr/src/libnetconf2/src/session_client_ssh.c:40:
/usr/include/libssh/libssh.h:559:31: note: declared here
559 | SSH_DEPRECATED LIBSSH_API int ssh_write_knownhost(ssh_session session);
| ^~~~~~~~~~~~~~~~~~~
[0m[ 76%] Building C object CMakeFiles/netconf2.dir/src/session_server_ssh.c.o
[ 84%] Building C object CMakeFiles/netconf2.dir/src/session_client_tls.c.o
[ 92%] Building C object CMakeFiles/netconf2.dir/src/session_server_tls.c.o
[100%] Linking C shared library libnetconf2.so
[100%] Built target netconf2
[91m+ make install
[0m[100%] Built target netconf2
Install the project...
-- Install configuration: "Release"
-- Installing: /opt/lib64/libnetconf2.so.0.12.55
-- Installing: /opt/lib64/libnetconf2.so.0.12
-- Set runtime path of "/opt/lib64/libnetconf2.so.0.12.55" to ""
-- Installing: /opt/lib64/libnetconf2.so
-- Installing: /opt/include/nc_client.h
-- Installing: /opt/include/nc_server.h
-- Installing: /opt/include/libnetconf2/log.h
-- Installing: /opt/include/libnetconf2/netconf.h
-- Installing: /opt/include/libnetconf2/session.h
-- Installing: /opt/include/libnetconf2/messages_client.h
-- Installing: /opt/include/libnetconf2/messages_server.h
-- Installing: /opt/include/libnetconf2/session_client.h
-- Installing: /opt/include/libnetconf2/session_client_ch.h
-- Installing: /opt/include/libnetconf2/session_server.h
-- Installing: /opt/include/libnetconf2/session_server_ch.h
-- Installing: /opt/share/libnetconf2/ietf-inet-types.yin
-- Installing: /opt/share/libnetconf2/ietf-netconf-acm.yin
-- Installing: /opt/share/libnetconf2/ietf-netconf-monitoring.yin
-- Installing: /opt/share/libnetconf2/ietf-netconf-notifications.yin
-- Installing: /opt/share/libnetconf2/ietf-netconf-with-defaults.yin
-- Installing: /opt/share/libnetconf2/ietf-netconf.yin
-- Installing: /opt/share/libnetconf2/nc-notifications.yin
-- Installing: /opt/share/libnetconf2/notifications.yin
-- Installing: /opt/lib64/pkgconfig/libnetconf2.pc
Removing intermediate container 4a4157cba271
---> e69cfd7ceedb
Step 20/47 : COPY patches/Netopeer2/ ./patches/Netopeer2/
---> a0bce62edca3
Step 21/47 : RUN set -eux && git clone --branch $netopeer2_version --depth 1 https://github.com/CESNET/Netopeer2.git && cd Netopeer2 && for p in ../patches/Netopeer2/*.patch; do patch -p1 -i $p; done && cd keystored && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE:String="Release" -DCMAKE_INSTALL_PREFIX:PATH=/opt -DMODEL_INSTALL=ON .. && make -j2 && make install
---> Running in 11ca0f3d371f
[91m+ git clone --branch v0.7-r2 --depth 1 https://github.com/CESNET/Netopeer2.git
[0m[91mCloning into 'Netopeer2'...
[0m[91m+ cd Netopeer2
+ patch -p1 -i ../patches/Netopeer2/01-fix-grep-count.patch
[0mpatching file keystored/scripts/model-install.sh
patching file server/scripts/model-install.sh.in
[91m+ patch -p1 -i ../patches/Netopeer2/02-zlog.patch
[0mpatching file server/CMakeLists.txt
patching file server/log.c
patching file server/main.c
[91m+ cd keystored
+ mkdir build
[0m[91m+ cd build
+ cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DMODEL_INSTALL=ON' ..
[0m-- The C compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3")
[91mCMake Warning at CMakeLists.txt:58 (message):
keystored pkg-config file copied into a directory not searched by
pkg-config.
CMake Warning at CMakeLists.txt:59 (message):
For netopeer2-server configuration to work, pkg-config search path must
include "/opt/lib64/pkgconfig" or keystored keys directory will have to be
set manually to "/opt/etc/keystored/keys".
[0m-- Found sysrepo: /opt/lib64/libsysrepo.so
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/Netopeer2/keystored/build
[91m+ make -j2
[0mScanning dependencies of target keystored
[ 50%] Building C object CMakeFiles/keystored.dir/keystored.c.o
[100%] Linking C shared library libkeystored.so
[100%] Built target keystored
[91m+ make install
[0m[100%] Built target keystored
Install the project...
-- Install configuration: "Release"
-- Installing: /opt/lib64/pkgconfig/keystored.pc
-- Installing: /opt/etc/keystored/keys
- Installing module ietf-x509-cert-to-name...
Installing a new module from file '/usr/src/Netopeer2/keystored/scripts/../../modules/ietf-x509-cert-to-name.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang'...
Skipping installation of data files for module 'ietf-x509-cert-to-name'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Installing module ietf-keystore...
Installing a new module from file '/usr/src/Netopeer2/keystored/scripts/../../modules/ietf-keystore.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang'...
Installing data files for module 'ietf-keystore'...
Notifying sysrepo about the change...
Install operation completed successfully.
- SSH hostkey not found, generating a new one...
- Importing ietf-keystore stock key configuration...
The new configuration was successfully applied.
-- Installing: /opt/lib64/sysrepo/plugins/libkeystored.so
-- Set runtime path of "/opt/lib64/sysrepo/plugins/libkeystored.so" to ""
Removing intermediate container 11ca0f3d371f
---> 0a869cf1748f
Step 22/47 : RUN set -eux && cd Netopeer2/server && mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE:String="Release" -DCMAKE_INSTALL_PREFIX:PATH=/opt .. && make -j2 && make install
---> Running in a243383f1944
[91m+ cd Netopeer2/server
+ mkdir build
[0m[91m+ cd build
+ cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' ..
[0m-- The C compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found CURL: /usr/lib/libcurl.so (found version "7.79.1")
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3")
-- keystored keys directory is "/opt/etc/keystored/keys".
-- Found libcurl 7.79.1
-- Enabling URL capability
-- libnetconf2 was compiled with support of up to 6 threads
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Looking for pthread_rwlockattr_setkind_np
-- Looking for pthread_rwlockattr_setkind_np - not found
-- Looking for stdatomic.h
-- Looking for stdatomic.h - found
-- Looking for NC_ENABLED_SSH
-- Looking for NC_ENABLED_SSH - found
-- Looking for NC_ENABLED_TLS
-- Looking for NC_ENABLED_TLS - found
-- Found sysrepo: /opt/lib64/libsysrepo.so
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/src/Netopeer2/server/build
[91m+ make -j2
[0mScanning dependencies of target serverobj
[ 11%] Building C object CMakeFiles/serverobj.dir/ietf_netconf_server.c.o
[ 11%] Building C object CMakeFiles/serverobj.dir/ietf_system.c.o
[ 16%] Building C object CMakeFiles/serverobj.dir/ietf_keystore.c.o
[ 22%] Building C object CMakeFiles/serverobj.dir/netconf_monitoring.c.o
[ 27%] Building C object CMakeFiles/serverobj.dir/operations.c.o
[ 33%] Building C object CMakeFiles/serverobj.dir/op_get_config.c.o
[ 38%] Building C object CMakeFiles/serverobj.dir/op_editconfig.c.o
[ 44%] Building C object CMakeFiles/serverobj.dir/op_copyconfig.c.o
[91m/usr/src/Netopeer2/server/op_copyconfig.c: In function 'op_copyconfig':
/usr/src/Netopeer2/server/op_copyconfig.c:477:13: warning: 'ly_wd' may be used uninitialized in this function [-Wmaybe-uninitialized]
477 | if (op_url_export(target_url, LYP_FORMAT | LYP_WITHSIBLINGS | opcopy_wd_nc2ly(nc_wd), root, &ereply) == 0) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[0m[ 50%] Building C object CMakeFiles/serverobj.dir/op_deleteconfig.c.o
[ 55%] Building C object CMakeFiles/serverobj.dir/op_candidate.c.o
[ 61%] Building C object CMakeFiles/serverobj.dir/op_validate.c.o
[ 66%] Building C object CMakeFiles/serverobj.dir/op_un_lock.c.o
[ 72%] Building C object CMakeFiles/serverobj.dir/op_generic.c.o
[ 77%] Building C object CMakeFiles/serverobj.dir/op_notifications.c.o
[ 83%] Building C object CMakeFiles/serverobj.dir/op_kill.c.o
[ 88%] Building C object CMakeFiles/serverobj.dir/log.c.o
[ 88%] Built target serverobj
Scanning dependencies of target netopeer2-server
[ 94%] Building C object CMakeFiles/netopeer2-server.dir/main.c.o
[100%] Linking C executable netopeer2-server
[100%] Built target netopeer2-server
[91m+ make install
[0m[ 88%] Built target serverobj
[100%] Built target netopeer2-server
Install the project...
-- Install configuration: "Release"
-- Installing: /opt/bin/netopeer2-server
-- Set runtime path of "/opt/bin/netopeer2-server" to ""
- Installing module ietf-netconf...
Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf@2011-06-01.yang'...
Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang'...
Installing data files for module 'ietf-netconf'...
Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'...
Skipping installation of data files for module 'ietf-netconf-acm'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Enabling feature writable-running in ietf-netconf...
Enabling feature 'writable-running' in the module 'ietf-netconf'.
Operation completed successfully.
- Enabling feature candidate in ietf-netconf...
Enabling feature 'candidate' in the module 'ietf-netconf'.
Operation completed successfully.
- Enabling feature rollback-on-error in ietf-netconf...
Enabling feature 'rollback-on-error' in the module 'ietf-netconf'.
Operation completed successfully.
- Enabling feature validate in ietf-netconf...
Enabling feature 'validate' in the module 'ietf-netconf'.
Operation completed successfully.
- Enabling feature startup in ietf-netconf...
Enabling feature 'startup' in the module 'ietf-netconf'.
Operation completed successfully.
- Enabling feature xpath in ietf-netconf...
Enabling feature 'xpath' in the module 'ietf-netconf'.
Operation completed successfully.
- Enabling feature url in ietf-netconf...
Enabling feature 'url' in the module 'ietf-netconf'.
Operation completed successfully.
- Installing module ietf-netconf-with-defaults...
Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf-with-defaults.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-with-defaults@2011-06-01.yang'...
Resolving dependency: 'ietf-netconf-with-defaults' imports 'ietf-netconf'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf@2011-06-01.yang'...
Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang'...
Skipping installation of data files for module 'ietf-netconf-with-defaults'...
Resolving dependency: 'ietf-netconf-with-defaults' imports 'ietf-netconf'...
Installing data files for module 'ietf-netconf'...
Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'...
Skipping installation of data files for module 'ietf-netconf-acm'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Installing module ietf-netconf-monitoring...
Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf-monitoring.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-monitoring@2010-10-04.yang'...
Installing data files for module 'ietf-netconf-monitoring'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Module notifications already installed.
- Module nc-notifications already installed.
- Module ietf-netconf-notifications already installed.
- Installing module ietf-yang-library...
Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-yang-library.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-yang-library@2018-01-17.yang'...
Resolving dependency: 'ietf-yang-library' imports 'ietf-datastores'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-datastores@2017-08-17.yang'...
Installing data files for module 'ietf-yang-library'...
Resolving dependency: 'ietf-yang-library' imports 'ietf-datastores'...
Skipping installation of data files for module 'ietf-datastores'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Installing module ietf-netconf-server...
Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf-server.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-server@2016-11-02.yang'...
Resolving dependency: 'ietf-netconf-server' imports 'ietf-x509-cert-to-name'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang'...
Resolving dependency: 'ietf-netconf-server' imports 'ietf-ssh-server'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-ssh-server@2016-11-02.yang'...
Resolving dependency: 'ietf-ssh-server' imports 'ietf-keystore'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang'...
Resolving dependency: 'ietf-netconf-server' imports 'ietf-tls-server'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-tls-server@2016-11-02.yang'...
Resolving dependency: 'ietf-tls-server' imports 'ietf-keystore'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang'...
Installing data files for module 'ietf-netconf-server'...
Resolving dependency: 'ietf-netconf-server' imports 'ietf-x509-cert-to-name'...
Skipping installation of data files for module 'ietf-x509-cert-to-name'...
Resolving dependency: 'ietf-netconf-server' imports 'ietf-ssh-server'...
Skipping installation of data files for module 'ietf-ssh-server'...
Resolving dependency: 'ietf-ssh-server' imports 'ietf-keystore'...
Installing data files for module 'ietf-keystore'...
Resolving dependency: 'ietf-netconf-server' imports 'ietf-tls-server'...
Skipping installation of data files for module 'ietf-tls-server'...
Resolving dependency: 'ietf-tls-server' imports 'ietf-keystore'...
Installing data files for module 'ietf-keystore'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Enabling feature listen in ietf-netconf-server...
Enabling feature 'listen' in the module 'ietf-netconf-server'.
Operation completed successfully.
- Enabling feature ssh-listen in ietf-netconf-server...
Enabling feature 'ssh-listen' in the module 'ietf-netconf-server'.
Operation completed successfully.
- Enabling feature tls-listen in ietf-netconf-server...
Enabling feature 'tls-listen' in the module 'ietf-netconf-server'.
Operation completed successfully.
- Enabling feature call-home in ietf-netconf-server...
Enabling feature 'call-home' in the module 'ietf-netconf-server'.
Operation completed successfully.
- Enabling feature ssh-call-home in ietf-netconf-server...
Enabling feature 'ssh-call-home' in the module 'ietf-netconf-server'.
Operation completed successfully.
- Enabling feature tls-call-home in ietf-netconf-server...
Enabling feature 'tls-call-home' in the module 'ietf-netconf-server'.
Operation completed successfully.
- Installing module ietf-system...
Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-system.yang'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-system@2014-08-06.yang'...
Resolving dependency: 'ietf-system' imports 'ietf-netconf-acm'...
Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang'...
Resolving dependency: 'ietf-system' imports 'iana-crypt-hash'...
Installing the YANG file to '/opt/etc/sysrepo/yang/iana-crypt-hash@2014-08-06.yang'...
Installing data files for module 'ietf-system'...
Resolving dependency: 'ietf-system' imports 'ietf-netconf-acm'...
Skipping installation of data files for module 'ietf-netconf-acm'...
Resolving dependency: 'ietf-system' imports 'iana-crypt-hash'...
Skipping installation of data files for module 'iana-crypt-hash'...
Notifying sysrepo about the change...
Install operation completed successfully.
- Enabling feature authentication in ietf-system...
Enabling feature 'authentication' in the module 'ietf-system'.
Operation completed successfully.
- Enabling feature local-users in ietf-system...
Enabling feature 'local-users' in the module 'ietf-system'.
Operation completed successfully.
The new configuration was successfully applied.
Removing intermediate container a243383f1944
---> b653c79b6185
Step 23/47 : FROM python:3.7.7-alpine3.11 as stage0
---> e854017db514
Step 24/47 : RUN apk upgrade --no-cache --available
---> Running in e94e4f0a4bdf
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
Upgrading critical system libraries and apk-tools:
(1/1) Upgrading apk-tools (2.10.5-r0 -> 2.10.8-r0)
Executing busybox-1.31.1-r9.trigger
Continuing the upgrade transaction with new apk-tools:
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/10) Upgrading musl (1.1.24-r2 -> 1.1.24-r3)
(2/10) Upgrading libcrypto1.1 (1.1.1g-r0 -> 1.1.1l-r0)
(3/10) Upgrading libssl1.1 (1.1.1g-r0 -> 1.1.1l-r0)
(4/10) Upgrading krb5-libs (1.17.1-r0 -> 1.17.2-r0)
(5/10) Upgrading zlib (1.2.11-r3 -> 1.2.11-r5)
(6/10) Upgrading busybox (1.31.1-r9 -> 1.31.1-r11)
Executing busybox-1.31.1-r11.post-upgrade
(7/10) Upgrading ca-certificates-cacert (20191127-r1 -> 20191127-r2)
(8/10) Upgrading ssl_client (1.31.1-r9 -> 1.31.1-r11)
(9/10) Upgrading ca-certificates (20191127-r1 -> 20191127-r2)
(10/10) Upgrading musl-utils (1.1.24-r2 -> 1.1.24-r3)
Executing busybox-1.31.1-r11.trigger
Executing ca-certificates-20191127-r2.trigger
OK: 11 MiB in 34 packages
Removing intermediate container e94e4f0a4bdf
---> 9c6cf5defc18
Step 25/47 : FROM scratch
--->
Step 26/47 : LABEL authors="eliezio.oliveira@est.tech"
---> Running in b7d8b318983b
Removing intermediate container b7d8b318983b
---> d61f917b9663
Step 27/47 : COPY --from=stage0 / /
---> 9a2de38ce7df
Step 28/47 : RUN set -eux && apk add --no-cache coreutils libcurl libev libssh openssl pcre protobuf-c xmlstarlet
---> Running in ecef0e5a9475
[91m+ apk add --no-cache coreutils libcurl libev libssh openssl pcre protobuf-c xmlstarlet
[0mfetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
(1/19) Installing libacl (2.2.53-r0)
(2/19) Installing libattr (2.4.48-r0)
(3/19) Installing coreutils (8.31-r0)
(4/19) Installing nghttp2-libs (1.40.0-r1)
(5/19) Installing libcurl (7.79.1-r0)
(6/19) Installing libev (4.27-r0)
(7/19) Installing libssh (0.9.4-r1)
(8/19) Installing openssl (1.1.1l-r0)
(9/19) Installing pcre (8.43-r1)
(10/19) Installing libgcc (9.3.0-r0)
(11/19) Installing libstdc++ (9.3.0-r0)
(12/19) Installing libprotobuf (3.11.2-r1)
(13/19) Installing libprotoc (3.11.2-r1)
(14/19) Installing protobuf-c (1.3.2-r3)
(15/19) Installing libgpg-error (1.36-r2)
(16/19) Installing libgcrypt (1.8.8-r1)
(17/19) Installing libxml2 (2.9.12-r0)
(18/19) Installing libxslt (1.1.34-r0)
(19/19) Installing xmlstarlet (1.6.1-r0)
Executing busybox-1.31.1-r11.trigger
OK: 23 MiB in 53 packages
Removing intermediate container ecef0e5a9475
---> c74d0a7df149
Step 29/47 : COPY --from=build /opt/ /opt/
---> e44ac9edc2ac
Step 30/47 : ENV LD_LIBRARY_PATH=/opt/lib:/opt/lib64
---> Running in 9f5fc1791fad
Removing intermediate container 9f5fc1791fad
---> b9f71762c945
Step 31/47 : ENV PYTHONPATH=/opt/lib/python3.7/site-packages
---> Running in c5847d52854c
Removing intermediate container c5847d52854c
---> 3b2b2bac66fa
Step 32/47 : COPY patches/supervisor/ /usr/src/patches/supervisor/
---> ee8e7b92db21
Step 33/47 : RUN set -eux && pip install --no-cache-dir loguru supervisor==4.1.0 virtualenv && cd /usr/local/lib/python3.7/site-packages && for p in /usr/src/patches/supervisor/*.patch; do patch -p1 -i $p; done
---> Running in 7af777f71df9
[91m+ pip install --no-cache-dir loguru 'supervisor==4.1.0' virtualenv
[0mCollecting loguru
Downloading loguru-0.7.3-py3-none-any.whl (61 kB)
Collecting supervisor==4.1.0
Downloading supervisor-4.1.0-py2.py3-none-any.whl (318 kB)
Collecting virtualenv
Downloading virtualenv-20.26.6-py3-none-any.whl (6.0 MB)
Collecting platformdirs<5,>=3.9.1
Downloading platformdirs-4.0.0-py3-none-any.whl (17 kB)
Collecting filelock<4,>=3.12.2
Downloading filelock-3.12.2-py3-none-any.whl (10 kB)
Collecting importlib-metadata>=6.6; python_version < "3.8"
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Collecting distlib<1,>=0.3.7
Downloading distlib-0.4.3-py2.py3-none-any.whl (470 kB)
Collecting typing-extensions>=4.7.1; python_version < "3.8"
Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Collecting zipp>=0.5
Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
Installing collected packages: loguru, supervisor, typing-extensions, platformdirs, filelock, zipp, importlib-metadata, distlib, virtualenv
Successfully installed distlib-0.4.3 filelock-3.12.2 importlib-metadata-6.7.0 loguru-0.7.3 platformdirs-4.0.0 supervisor-4.1.0 typing-extensions-4.7.1 virtualenv-20.26.6 zipp-3.15.0
[91mWARNING: You are using pip version 20.1.1; however, version 24.0 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
[0m[91m+ cd /usr/local/lib/python3.7/site-packages
+ patch -p1 -i /usr/src/patches/supervisor/01-std-log-format.patch
[0mpatching file supervisor/loggers.py
patching file supervisor/options.py
Removing intermediate container 7af777f71df9
---> 280bf2b4b5af
Step 34/47 : COPY config/ /config
---> 5a89e230416f
Step 35/47 : VOLUME /config
---> Running in 0d5f3382374d
Removing intermediate container 0d5f3382374d
---> 157c18e7378a
Step 36/47 : COPY templates/ /templates
---> 4d108cd664de
Step 37/47 : RUN adduser --system --disabled-password --gecos 'Netconf User' netconf
---> Running in 5126f873fa6a
Removing intermediate container 5126f873fa6a
---> b81248b440c4
Step 38/47 : HEALTHCHECK --interval=1s --start-period=2s --retries=10 CMD test -f /run/netopeer2-server.pid
---> Running in a875662a6327
Removing intermediate container a875662a6327
---> 4659fa4a9e0a
Step 39/47 : EXPOSE 830
---> Running in 0b8204fc67e3
Removing intermediate container 0b8204fc67e3
---> f6205b4d7647
Step 40/47 : EXPOSE 6513
---> Running in 6cbac16b64d8
Removing intermediate container 6cbac16b64d8
---> 245417ecc69d
Step 41/47 : COPY supervisord.conf /etc/supervisord.conf
---> 05b046838689
Step 42/47 : RUN mkdir /etc/supervisord.d
---> Running in bc86e26ec439
Removing intermediate container bc86e26ec439
---> 66d9d3af4d37
Step 43/47 : COPY zlog.conf /opt/etc/
---> 2b6ff8730429
Step 44/47 : ENV LOGURU_FORMAT="{time:YYYY-DD-MM HH:mm:ss.SSS} {level: <5} [{module}] {message}"
---> Running in 17c74d0d7a53
Removing intermediate container 17c74d0d7a53
---> 08cfed1b3f7f
Step 45/47 : ENV LOGURU_COLORIZE=True
---> Running in 3f14aa7a96c6
Removing intermediate container 3f14aa7a96c6
---> 228527a401e1
Step 46/47 : COPY entrypoint.sh common.sh configure-*.sh reconfigure-*.sh generic_subscriber.py /opt/bin/
---> 771b2542b9f3
Step 47/47 : CMD /opt/bin/entrypoint.sh
---> Running in 974b0311f822
Removing intermediate container 974b0311f822
---> 942de7d6273c
Successfully built 942de7d6273c
Successfully tagged nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6
---> docker-build.sh ends
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins9405477668402549887.sh
+ cd test/mocks/netconf-pnp-simulator/engine
+ docker tag nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6 netconf-pnp-simulator:latest
+ tox
No handlers could be found for logger "tox_pyenv"
.tox create: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/.tox
.tox installdeps: tox-docker == 1.7.0, tox >= 3.26.0
py3 create: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3
No handlers could be found for logger "filelock"
py3 installdeps: pytest == 6.2.2, docker == 4.4.4, lxml == 4.6.2, ncclient == 0.6.9
py3 installed: attrs==22.2.0,bcrypt==4.0.1,certifi==2025.4.26,cffi==1.15.1,charset-normalizer==2.0.12,cryptography==40.0.2,docker==4.4.4,idna==3.10,importlib-metadata==4.8.3,iniconfig==1.1.1,lxml==4.6.2,ncclient==0.6.9,packaging==21.3,paramiko==3.5.1,pluggy==0.13.1,py==1.11.0,pycparser==2.21,PyNaCl==1.5.0,pyparsing==3.1.4,pytest==6.2.2,requests==2.27.1,six==1.17.0,toml==0.10.2,typing_extensions==4.1.1,urllib3==1.26.20,websocket-client==1.3.1,zipp==3.6.0
py3 docker: run 'netconf-pnp-simulator:latest'
py3 docker: health check: u'netconf-pnp-simulator:latest'
py3 run-test-pre: PYTHONHASHSEED='4053256274'
py3 run-test: commands[0] | pytest -v
============================= test session starts ==============================
platform linux -- Python 3.6.9, pytest-6.2.2, py-1.11.0, pluggy-0.13.1 -- /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/bin/python
cachedir: .tox/py3/.pytest_cache
rootdir: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine, configfile: tox.ini
collecting ... collected 20 items
test_basic_operations.py::TestBasicOperations::test_capabilities PASSED [ 5%]
test_basic_operations.py::TestBasicOperations::test_get PASSED [ 10%]
test_basic_operations.py::TestBasicOperations::test_get_config_startup PASSED [ 15%]
test_basic_operations.py::TestBasicOperations::test_get_config_running PASSED [ 20%]
test_basic_operations.py::TestBasicOperations::test_copy_config PASSED [ 25%]
test_basic_operations.py::TestBasicOperations::test_neg_filter PASSED [ 30%]
test_basic_operations.py::TestBasicOperations::test_lock PASSED [ 35%]
test_tls.py::TestTLS::test_tls_connect FAILED [ 40%]
test_tls.py::TestTLS::test_tls_reconfiguration[round #1] FAILED [ 45%]
test_tls.py::TestTLS::test_tls_reconfiguration[round #2] FAILED [ 50%]
test_tls.py::TestTLS::test_tls_reconfiguration[round #3] FAILED [ 55%]
test_tls.py::TestTLS::test_tls_reconfiguration[round #4] FAILED [ 60%]
test_tls.py::TestTLS::test_tls_reconfiguration[round #5] FAILED [ 65%]
test_tls.py::TestTLS::test_tls_reconfiguration[round #6] FAILED [ 70%]
test_turing_machine.py::TestTuringMachine::test_get ERROR [ 75%]
test_turing_machine.py::TestTuringMachine::test_get_config_startup ERROR [ 80%]
test_turing_machine.py::TestTuringMachine::test_get_config_running ERROR [ 85%]
test_turing_machine.py::TestTuringMachine::test_get_subtree_filter ERROR [ 90%]
test_turing_machine.py::TestTuringMachine::test_get_xpath_filter ERROR [ 95%]
test_turing_machine.py::TestTuringMachine::test_edit_config ERROR [100%]
==================================== ERRORS ====================================
_________________ ERROR at setup of TestTuringMachine.test_get _________________
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
> buf = self.packetizer.readline(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def readline(self, timeout):
"""
Read a line from the socket. We assume no data is pending after the
line, so it's okay to attempt large reads.
"""
buf = self.__remainder
while linefeed_byte not in buf:
> buf += self._read_timeout(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def _read_timeout(self, timeout):
start = time.time()
while True:
try:
> x = self.__socket.recv(128)
E ConnectionResetError: [Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:663: ConnectionResetError
During handling of the above exception, another exception occurred:
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
> self._transport.start_client()
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
event = , timeout = None
def start_client(self, event=None, timeout=None):
"""
Negotiate a new SSH2 session as a client. This is the first step after
creating a new `.Transport`. A separate thread is created for protocol
negotiation.
If an event is passed in, this method returns immediately. When
negotiation is done (successful or not), the given ``Event`` will
be triggered. On failure, `is_active` will return ``False``.
(Since 1.4) If ``event`` is ``None``, this method will not return until
negotiation is done. On success, the method returns normally.
Otherwise an SSHException is raised.
After a successful negotiation, you will usually want to authenticate,
calling `auth_password ` or
`auth_publickey `.
.. note:: `connect` is a simpler method for connecting as a client.
.. note::
After calling this method (or `start_server` or `connect`), you
should no longer directly read from or write to the original socket
object.
:param .threading.Event event:
an event to trigger when negotiation is complete (optional)
:param float timeout:
a timeout, in seconds, for SSH2 session negotiation (optional)
:raises:
`.SSHException` -- if negotiation fails (and no ``event`` was
passed in)
"""
self.active = True
if event is not None:
# async, return immediately and let the app poll for completion
self.completion_event = event
self.start()
return
# synchronous, wait for a result
self.completion_event = event = threading.Event()
self.start()
max_time = time.time() + timeout if timeout is not None else None
while True:
event.wait(0.1)
if not self.active:
e = self.get_exception()
if e is not None:
> raise e
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def run(self):
# (use the exposed "run" method, because if we specify a thread target
# of a private method, threading.Thread will keep a reference to it
# indefinitely, creating a GC cycle and not letting Transport ever be
# GC'd. it's a bug in Thread.)
# Hold reference to 'sys' so we can test sys.modules to detect
# interpreter shutdown.
self.sys = sys
# active=True occurs before the thread is launched, to avoid a race
_active_threads.append(self)
tid = hex(id(self) & xffffffff)
if self.server_mode:
self._log(DEBUG, "starting thread (server mode): {}".format(tid))
else:
self._log(DEBUG, "starting thread (client mode): {}".format(tid))
try:
try:
self.packetizer.write_all(b(self.local_version + "\r\n"))
self._log(
DEBUG,
"Local version/idstring: {}".format(self.local_version),
) # noqa
> self._check_banner()
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
buf = self.packetizer.readline(timeout)
except ProxyCommandFailure:
raise
except Exception as e:
raise SSHException(
> "Error reading SSH protocol banner" + str(e)
)
E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException
During handling of the above exception, another exception occurred:
self =
def setup(self):
self.nc = manager.connect(
host=settings.HOST,
port=settings.SSH_PORT,
username=settings.USERNAME,
key_filename=settings.SSH_KEY_FILENAME,
allow_agent=False,
look_for_keys=False,
> hostkey_verify=False)
nctest.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect
return connect_ssh(*args, **kwds)
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh
session.connect(*args, **kwds)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
self._transport.start_client()
except paramiko.SSHException as e:
> raise SSHError('Negotiation failed: %s' % e)
E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner[Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError
------------------------------ Captured log setup ------------------------------
14:59:16.399 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner[Errno 104] Connection reset by peer
14:59:16.401 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.401 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2369, in _check_banner
14:59:16.401 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout)
14:59:16.401 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 395, in readline
14:59:16.401 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout)
14:59:16.401 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 663, in _read_timeout
14:59:16.401 ERROR [ncclient.transport.ssh] x = self.__socket.recv(128)
14:59:16.401 ERROR [ncclient.transport.ssh] ConnectionResetError: [Errno 104] Connection reset by peer
14:59:16.401 ERROR [ncclient.transport.ssh]
14:59:16.401 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred:
14:59:16.401 ERROR [ncclient.transport.ssh]
14:59:16.401 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.401 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2185, in run
14:59:16.401 ERROR [ncclient.transport.ssh] self._check_banner()
14:59:16.401 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2374, in _check_banner
14:59:16.401 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e)
14:59:16.401 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer
14:59:16.402 ERROR [ncclient.transport.ssh]
_________ ERROR at setup of TestTuringMachine.test_get_config_startup __________
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
> buf = self.packetizer.readline(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def readline(self, timeout):
"""
Read a line from the socket. We assume no data is pending after the
line, so it's okay to attempt large reads.
"""
buf = self.__remainder
while linefeed_byte not in buf:
> buf += self._read_timeout(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def _read_timeout(self, timeout):
start = time.time()
while True:
try:
x = self.__socket.recv(128)
if len(x) == 0:
> raise EOFError()
E EOFError
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError
During handling of the above exception, another exception occurred:
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
> self._transport.start_client()
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
event = , timeout = None
def start_client(self, event=None, timeout=None):
"""
Negotiate a new SSH2 session as a client. This is the first step after
creating a new `.Transport`. A separate thread is created for protocol
negotiation.
If an event is passed in, this method returns immediately. When
negotiation is done (successful or not), the given ``Event`` will
be triggered. On failure, `is_active` will return ``False``.
(Since 1.4) If ``event`` is ``None``, this method will not return until
negotiation is done. On success, the method returns normally.
Otherwise an SSHException is raised.
After a successful negotiation, you will usually want to authenticate,
calling `auth_password ` or
`auth_publickey `.
.. note:: `connect` is a simpler method for connecting as a client.
.. note::
After calling this method (or `start_server` or `connect`), you
should no longer directly read from or write to the original socket
object.
:param .threading.Event event:
an event to trigger when negotiation is complete (optional)
:param float timeout:
a timeout, in seconds, for SSH2 session negotiation (optional)
:raises:
`.SSHException` -- if negotiation fails (and no ``event`` was
passed in)
"""
self.active = True
if event is not None:
# async, return immediately and let the app poll for completion
self.completion_event = event
self.start()
return
# synchronous, wait for a result
self.completion_event = event = threading.Event()
self.start()
max_time = time.time() + timeout if timeout is not None else None
while True:
event.wait(0.1)
if not self.active:
e = self.get_exception()
if e is not None:
> raise e
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def run(self):
# (use the exposed "run" method, because if we specify a thread target
# of a private method, threading.Thread will keep a reference to it
# indefinitely, creating a GC cycle and not letting Transport ever be
# GC'd. it's a bug in Thread.)
# Hold reference to 'sys' so we can test sys.modules to detect
# interpreter shutdown.
self.sys = sys
# active=True occurs before the thread is launched, to avoid a race
_active_threads.append(self)
tid = hex(id(self) & xffffffff)
if self.server_mode:
self._log(DEBUG, "starting thread (server mode): {}".format(tid))
else:
self._log(DEBUG, "starting thread (client mode): {}".format(tid))
try:
try:
self.packetizer.write_all(b(self.local_version + "\r\n"))
self._log(
DEBUG,
"Local version/idstring: {}".format(self.local_version),
) # noqa
> self._check_banner()
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
buf = self.packetizer.readline(timeout)
except ProxyCommandFailure:
raise
except Exception as e:
raise SSHException(
> "Error reading SSH protocol banner" + str(e)
)
E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException
During handling of the above exception, another exception occurred:
self =
def setup(self):
self.nc = manager.connect(
host=settings.HOST,
port=settings.SSH_PORT,
username=settings.USERNAME,
key_filename=settings.SSH_KEY_FILENAME,
allow_agent=False,
look_for_keys=False,
> hostkey_verify=False)
nctest.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect
return connect_ssh(*args, **kwds)
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh
session.connect(*args, **kwds)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
self._transport.start_client()
except paramiko.SSHException as e:
> raise SSHError('Negotiation failed: %s' % e)
E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError
------------------------------ Captured log setup ------------------------------
14:59:16.522 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner
14:59:16.523 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.523 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2369, in _check_banner
14:59:16.523 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout)
14:59:16.523 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 395, in readline
14:59:16.523 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout)
14:59:16.523 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 665, in _read_timeout
14:59:16.523 ERROR [ncclient.transport.ssh] raise EOFError()
14:59:16.523 ERROR [ncclient.transport.ssh] EOFError
14:59:16.524 ERROR [ncclient.transport.ssh]
14:59:16.524 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred:
14:59:16.524 ERROR [ncclient.transport.ssh]
14:59:16.524 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.524 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2185, in run
14:59:16.524 ERROR [ncclient.transport.ssh] self._check_banner()
14:59:16.524 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2374, in _check_banner
14:59:16.524 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e)
14:59:16.524 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
14:59:16.524 ERROR [ncclient.transport.ssh]
_________ ERROR at setup of TestTuringMachine.test_get_config_running __________
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
> buf = self.packetizer.readline(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def readline(self, timeout):
"""
Read a line from the socket. We assume no data is pending after the
line, so it's okay to attempt large reads.
"""
buf = self.__remainder
while linefeed_byte not in buf:
> buf += self._read_timeout(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def _read_timeout(self, timeout):
start = time.time()
while True:
try:
x = self.__socket.recv(128)
if len(x) == 0:
> raise EOFError()
E EOFError
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError
During handling of the above exception, another exception occurred:
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
> self._transport.start_client()
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
event = , timeout = None
def start_client(self, event=None, timeout=None):
"""
Negotiate a new SSH2 session as a client. This is the first step after
creating a new `.Transport`. A separate thread is created for protocol
negotiation.
If an event is passed in, this method returns immediately. When
negotiation is done (successful or not), the given ``Event`` will
be triggered. On failure, `is_active` will return ``False``.
(Since 1.4) If ``event`` is ``None``, this method will not return until
negotiation is done. On success, the method returns normally.
Otherwise an SSHException is raised.
After a successful negotiation, you will usually want to authenticate,
calling `auth_password ` or
`auth_publickey `.
.. note:: `connect` is a simpler method for connecting as a client.
.. note::
After calling this method (or `start_server` or `connect`), you
should no longer directly read from or write to the original socket
object.
:param .threading.Event event:
an event to trigger when negotiation is complete (optional)
:param float timeout:
a timeout, in seconds, for SSH2 session negotiation (optional)
:raises:
`.SSHException` -- if negotiation fails (and no ``event`` was
passed in)
"""
self.active = True
if event is not None:
# async, return immediately and let the app poll for completion
self.completion_event = event
self.start()
return
# synchronous, wait for a result
self.completion_event = event = threading.Event()
self.start()
max_time = time.time() + timeout if timeout is not None else None
while True:
event.wait(0.1)
if not self.active:
e = self.get_exception()
if e is not None:
> raise e
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def run(self):
# (use the exposed "run" method, because if we specify a thread target
# of a private method, threading.Thread will keep a reference to it
# indefinitely, creating a GC cycle and not letting Transport ever be
# GC'd. it's a bug in Thread.)
# Hold reference to 'sys' so we can test sys.modules to detect
# interpreter shutdown.
self.sys = sys
# active=True occurs before the thread is launched, to avoid a race
_active_threads.append(self)
tid = hex(id(self) & xffffffff)
if self.server_mode:
self._log(DEBUG, "starting thread (server mode): {}".format(tid))
else:
self._log(DEBUG, "starting thread (client mode): {}".format(tid))
try:
try:
self.packetizer.write_all(b(self.local_version + "\r\n"))
self._log(
DEBUG,
"Local version/idstring: {}".format(self.local_version),
) # noqa
> self._check_banner()
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
buf = self.packetizer.readline(timeout)
except ProxyCommandFailure:
raise
except Exception as e:
raise SSHException(
> "Error reading SSH protocol banner" + str(e)
)
E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException
During handling of the above exception, another exception occurred:
self =
def setup(self):
self.nc = manager.connect(
host=settings.HOST,
port=settings.SSH_PORT,
username=settings.USERNAME,
key_filename=settings.SSH_KEY_FILENAME,
allow_agent=False,
look_for_keys=False,
> hostkey_verify=False)
nctest.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect
return connect_ssh(*args, **kwds)
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh
session.connect(*args, **kwds)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
self._transport.start_client()
except paramiko.SSHException as e:
> raise SSHError('Negotiation failed: %s' % e)
E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError
------------------------------ Captured log setup ------------------------------
14:59:16.632 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner
14:59:16.633 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.633 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2369, in _check_banner
14:59:16.633 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout)
14:59:16.633 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 395, in readline
14:59:16.633 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout)
14:59:16.633 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 665, in _read_timeout
14:59:16.633 ERROR [ncclient.transport.ssh] raise EOFError()
14:59:16.633 ERROR [ncclient.transport.ssh] EOFError
14:59:16.634 ERROR [ncclient.transport.ssh]
14:59:16.634 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred:
14:59:16.634 ERROR [ncclient.transport.ssh]
14:59:16.634 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.634 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2185, in run
14:59:16.634 ERROR [ncclient.transport.ssh] self._check_banner()
14:59:16.634 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2374, in _check_banner
14:59:16.634 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e)
14:59:16.634 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
14:59:16.634 ERROR [ncclient.transport.ssh]
_________ ERROR at setup of TestTuringMachine.test_get_subtree_filter __________
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
> buf = self.packetizer.readline(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def readline(self, timeout):
"""
Read a line from the socket. We assume no data is pending after the
line, so it's okay to attempt large reads.
"""
buf = self.__remainder
while linefeed_byte not in buf:
> buf += self._read_timeout(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def _read_timeout(self, timeout):
start = time.time()
while True:
try:
> x = self.__socket.recv(128)
E ConnectionResetError: [Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:663: ConnectionResetError
During handling of the above exception, another exception occurred:
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
> self._transport.start_client()
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
event = , timeout = None
def start_client(self, event=None, timeout=None):
"""
Negotiate a new SSH2 session as a client. This is the first step after
creating a new `.Transport`. A separate thread is created for protocol
negotiation.
If an event is passed in, this method returns immediately. When
negotiation is done (successful or not), the given ``Event`` will
be triggered. On failure, `is_active` will return ``False``.
(Since 1.4) If ``event`` is ``None``, this method will not return until
negotiation is done. On success, the method returns normally.
Otherwise an SSHException is raised.
After a successful negotiation, you will usually want to authenticate,
calling `auth_password ` or
`auth_publickey `.
.. note:: `connect` is a simpler method for connecting as a client.
.. note::
After calling this method (or `start_server` or `connect`), you
should no longer directly read from or write to the original socket
object.
:param .threading.Event event:
an event to trigger when negotiation is complete (optional)
:param float timeout:
a timeout, in seconds, for SSH2 session negotiation (optional)
:raises:
`.SSHException` -- if negotiation fails (and no ``event`` was
passed in)
"""
self.active = True
if event is not None:
# async, return immediately and let the app poll for completion
self.completion_event = event
self.start()
return
# synchronous, wait for a result
self.completion_event = event = threading.Event()
self.start()
max_time = time.time() + timeout if timeout is not None else None
while True:
event.wait(0.1)
if not self.active:
e = self.get_exception()
if e is not None:
> raise e
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def run(self):
# (use the exposed "run" method, because if we specify a thread target
# of a private method, threading.Thread will keep a reference to it
# indefinitely, creating a GC cycle and not letting Transport ever be
# GC'd. it's a bug in Thread.)
# Hold reference to 'sys' so we can test sys.modules to detect
# interpreter shutdown.
self.sys = sys
# active=True occurs before the thread is launched, to avoid a race
_active_threads.append(self)
tid = hex(id(self) & xffffffff)
if self.server_mode:
self._log(DEBUG, "starting thread (server mode): {}".format(tid))
else:
self._log(DEBUG, "starting thread (client mode): {}".format(tid))
try:
try:
self.packetizer.write_all(b(self.local_version + "\r\n"))
self._log(
DEBUG,
"Local version/idstring: {}".format(self.local_version),
) # noqa
> self._check_banner()
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
buf = self.packetizer.readline(timeout)
except ProxyCommandFailure:
raise
except Exception as e:
raise SSHException(
> "Error reading SSH protocol banner" + str(e)
)
E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException
During handling of the above exception, another exception occurred:
self =
def setup(self):
self.nc = manager.connect(
host=settings.HOST,
port=settings.SSH_PORT,
username=settings.USERNAME,
key_filename=settings.SSH_KEY_FILENAME,
allow_agent=False,
look_for_keys=False,
> hostkey_verify=False)
nctest.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect
return connect_ssh(*args, **kwds)
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh
session.connect(*args, **kwds)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
self._transport.start_client()
except paramiko.SSHException as e:
> raise SSHError('Negotiation failed: %s' % e)
E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner[Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError
------------------------------ Captured log setup ------------------------------
14:59:16.769 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner[Errno 104] Connection reset by peer
14:59:16.769 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.769 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2369, in _check_banner
14:59:16.770 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout)
14:59:16.770 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 395, in readline
14:59:16.770 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout)
14:59:16.770 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 663, in _read_timeout
14:59:16.770 ERROR [ncclient.transport.ssh] x = self.__socket.recv(128)
14:59:16.770 ERROR [ncclient.transport.ssh] ConnectionResetError: [Errno 104] Connection reset by peer
14:59:16.770 ERROR [ncclient.transport.ssh]
14:59:16.770 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred:
14:59:16.770 ERROR [ncclient.transport.ssh]
14:59:16.770 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.770 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2185, in run
14:59:16.770 ERROR [ncclient.transport.ssh] self._check_banner()
14:59:16.770 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2374, in _check_banner
14:59:16.771 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e)
14:59:16.771 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer
14:59:16.771 ERROR [ncclient.transport.ssh]
__________ ERROR at setup of TestTuringMachine.test_get_xpath_filter ___________
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
> buf = self.packetizer.readline(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def readline(self, timeout):
"""
Read a line from the socket. We assume no data is pending after the
line, so it's okay to attempt large reads.
"""
buf = self.__remainder
while linefeed_byte not in buf:
> buf += self._read_timeout(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def _read_timeout(self, timeout):
start = time.time()
while True:
try:
> x = self.__socket.recv(128)
E ConnectionResetError: [Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:663: ConnectionResetError
During handling of the above exception, another exception occurred:
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
> self._transport.start_client()
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
event = , timeout = None
def start_client(self, event=None, timeout=None):
"""
Negotiate a new SSH2 session as a client. This is the first step after
creating a new `.Transport`. A separate thread is created for protocol
negotiation.
If an event is passed in, this method returns immediately. When
negotiation is done (successful or not), the given ``Event`` will
be triggered. On failure, `is_active` will return ``False``.
(Since 1.4) If ``event`` is ``None``, this method will not return until
negotiation is done. On success, the method returns normally.
Otherwise an SSHException is raised.
After a successful negotiation, you will usually want to authenticate,
calling `auth_password ` or
`auth_publickey `.
.. note:: `connect` is a simpler method for connecting as a client.
.. note::
After calling this method (or `start_server` or `connect`), you
should no longer directly read from or write to the original socket
object.
:param .threading.Event event:
an event to trigger when negotiation is complete (optional)
:param float timeout:
a timeout, in seconds, for SSH2 session negotiation (optional)
:raises:
`.SSHException` -- if negotiation fails (and no ``event`` was
passed in)
"""
self.active = True
if event is not None:
# async, return immediately and let the app poll for completion
self.completion_event = event
self.start()
return
# synchronous, wait for a result
self.completion_event = event = threading.Event()
self.start()
max_time = time.time() + timeout if timeout is not None else None
while True:
event.wait(0.1)
if not self.active:
e = self.get_exception()
if e is not None:
> raise e
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def run(self):
# (use the exposed "run" method, because if we specify a thread target
# of a private method, threading.Thread will keep a reference to it
# indefinitely, creating a GC cycle and not letting Transport ever be
# GC'd. it's a bug in Thread.)
# Hold reference to 'sys' so we can test sys.modules to detect
# interpreter shutdown.
self.sys = sys
# active=True occurs before the thread is launched, to avoid a race
_active_threads.append(self)
tid = hex(id(self) & xffffffff)
if self.server_mode:
self._log(DEBUG, "starting thread (server mode): {}".format(tid))
else:
self._log(DEBUG, "starting thread (client mode): {}".format(tid))
try:
try:
self.packetizer.write_all(b(self.local_version + "\r\n"))
self._log(
DEBUG,
"Local version/idstring: {}".format(self.local_version),
) # noqa
> self._check_banner()
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
buf = self.packetizer.readline(timeout)
except ProxyCommandFailure:
raise
except Exception as e:
raise SSHException(
> "Error reading SSH protocol banner" + str(e)
)
E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException
During handling of the above exception, another exception occurred:
self =
def setup(self):
self.nc = manager.connect(
host=settings.HOST,
port=settings.SSH_PORT,
username=settings.USERNAME,
key_filename=settings.SSH_KEY_FILENAME,
allow_agent=False,
look_for_keys=False,
> hostkey_verify=False)
nctest.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect
return connect_ssh(*args, **kwds)
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh
session.connect(*args, **kwds)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
self._transport.start_client()
except paramiko.SSHException as e:
> raise SSHError('Negotiation failed: %s' % e)
E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner[Errno 104] Connection reset by peer
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError
------------------------------ Captured log setup ------------------------------
14:59:16.881 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner[Errno 104] Connection reset by peer
14:59:16.884 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.884 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2369, in _check_banner
14:59:16.884 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout)
14:59:16.884 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 395, in readline
14:59:16.884 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout)
14:59:16.884 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 663, in _read_timeout
14:59:16.884 ERROR [ncclient.transport.ssh] x = self.__socket.recv(128)
14:59:16.884 ERROR [ncclient.transport.ssh] ConnectionResetError: [Errno 104] Connection reset by peer
14:59:16.884 ERROR [ncclient.transport.ssh]
14:59:16.884 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred:
14:59:16.884 ERROR [ncclient.transport.ssh]
14:59:16.885 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.885 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2185, in run
14:59:16.885 ERROR [ncclient.transport.ssh] self._check_banner()
14:59:16.885 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2374, in _check_banner
14:59:16.885 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e)
14:59:16.885 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer
14:59:16.885 ERROR [ncclient.transport.ssh]
_____________ ERROR at setup of TestTuringMachine.test_edit_config _____________
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
> buf = self.packetizer.readline(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def readline(self, timeout):
"""
Read a line from the socket. We assume no data is pending after the
line, so it's okay to attempt large reads.
"""
buf = self.__remainder
while linefeed_byte not in buf:
> buf += self._read_timeout(timeout)
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , timeout = 15
def _read_timeout(self, timeout):
start = time.time()
while True:
try:
x = self.__socket.recv(128)
if len(x) == 0:
> raise EOFError()
E EOFError
../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError
During handling of the above exception, another exception occurred:
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
> self._transport.start_client()
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
event = , timeout = None
def start_client(self, event=None, timeout=None):
"""
Negotiate a new SSH2 session as a client. This is the first step after
creating a new `.Transport`. A separate thread is created for protocol
negotiation.
If an event is passed in, this method returns immediately. When
negotiation is done (successful or not), the given ``Event`` will
be triggered. On failure, `is_active` will return ``False``.
(Since 1.4) If ``event`` is ``None``, this method will not return until
negotiation is done. On success, the method returns normally.
Otherwise an SSHException is raised.
After a successful negotiation, you will usually want to authenticate,
calling `auth_password ` or
`auth_publickey `.
.. note:: `connect` is a simpler method for connecting as a client.
.. note::
After calling this method (or `start_server` or `connect`), you
should no longer directly read from or write to the original socket
object.
:param .threading.Event event:
an event to trigger when negotiation is complete (optional)
:param float timeout:
a timeout, in seconds, for SSH2 session negotiation (optional)
:raises:
`.SSHException` -- if negotiation fails (and no ``event`` was
passed in)
"""
self.active = True
if event is not None:
# async, return immediately and let the app poll for completion
self.completion_event = event
self.start()
return
# synchronous, wait for a result
self.completion_event = event = threading.Event()
self.start()
max_time = time.time() + timeout if timeout is not None else None
while True:
event.wait(0.1)
if not self.active:
e = self.get_exception()
if e is not None:
> raise e
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def run(self):
# (use the exposed "run" method, because if we specify a thread target
# of a private method, threading.Thread will keep a reference to it
# indefinitely, creating a GC cycle and not letting Transport ever be
# GC'd. it's a bug in Thread.)
# Hold reference to 'sys' so we can test sys.modules to detect
# interpreter shutdown.
self.sys = sys
# active=True occurs before the thread is launched, to avoid a race
_active_threads.append(self)
tid = hex(id(self) & xffffffff)
if self.server_mode:
self._log(DEBUG, "starting thread (server mode): {}".format(tid))
else:
self._log(DEBUG, "starting thread (client mode): {}".format(tid))
try:
try:
self.packetizer.write_all(b(self.local_version + "\r\n"))
self._log(
DEBUG,
"Local version/idstring: {}".format(self.local_version),
) # noqa
> self._check_banner()
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def _check_banner(self):
# this is slow, but we only have to do it once
for i in range(100):
# give them 15 seconds for the first line, then just 2 seconds
# each additional line. (some sites have very high latency.)
if i == 0:
timeout = self.banner_timeout
else:
timeout = 2
try:
buf = self.packetizer.readline(timeout)
except ProxyCommandFailure:
raise
except Exception as e:
raise SSHException(
> "Error reading SSH protocol banner" + str(e)
)
E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException
During handling of the above exception, another exception occurred:
self =
def setup(self):
self.nc = manager.connect(
host=settings.HOST,
port=settings.SSH_PORT,
username=settings.USERNAME,
key_filename=settings.SSH_KEY_FILENAME,
allow_agent=False,
look_for_keys=False,
> hostkey_verify=False)
nctest.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect
return connect_ssh(*args, **kwds)
../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh
session.connect(*args, **kwds)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , host = '127.0.0.1', port = 49154
timeout = None
unknown_host_cb =
username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa'
allow_agent = False, hostkey_verify = False, hostkey_b64 = None
look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None
def connect(
self,
host,
port = PORT_NETCONF_DEFAULT,
timeout = None,
unknown_host_cb = default_unknown_host_cb,
username = None,
password = None,
key_filename = None,
allow_agent = True,
hostkey_verify = True,
hostkey_b64 = None,
look_for_keys = True,
ssh_config = None,
sock_fd = None,
bind_addr = None):
"""Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication.
To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`.
*host* is the hostname or IP address to connect to
*port* is by default 830 (PORT_NETCONF_DEFAULT), but some devices use the default SSH port of 22 so this may need to be specified
*timeout* is an optional timeout for socket connect
*unknown_host_cb* is called when the server host key is not recognized. It takes two arguments, the hostname and the fingerprint (see the signature of :func:`default_unknown_host_cb`)
*username* is the username to use for SSH authentication
*password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it
*key_filename* is a filename where a the private key to be used can be found
*allow_agent* enables querying SSH agent (if found) for keys
*hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts
*hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan)
*look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`)
*ssh_config* enables parsing of an OpenSSH configuration file, if set to its path, e.g. :file:`~/.ssh/config` or to True (in this case, use :file:`~/.ssh/config`).
*sock_fd* is an already open socket which shall be used for this connection. Useful for NETCONF outbound ssh. Use host=None together with a valid sock_fd number
*bind_addr* is a (local) source IP address to use, must be reachable from the remote device.
"""
if not (host or sock_fd):
raise SSHError("Missing host or socket fd")
self._host = host
# Optionally, parse .ssh/config
config = {}
if ssh_config is True:
ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config"
if ssh_config is not None:
config = paramiko.SSHConfig()
with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj:
config.parse(ssh_config_file_obj)
# Save default Paramiko SSH port so it can be reverted
paramiko_default_ssh_port = paramiko.config.SSH_PORT
# Change the default SSH port to the port specified by the user so expand_variables
# replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT)
paramiko.config.SSH_PORT = port
config = config.lookup(host)
# paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port
# back to the default
paramiko.config.SSH_PORT = paramiko_default_ssh_port
host = config.get("hostname", host)
if username is None:
username = config.get("user")
if key_filename is None:
key_filename = config.get("identityfile")
if hostkey_verify:
userknownhostsfile = config.get("userknownhostsfile")
if userknownhostsfile:
self.load_known_hosts(os.path.expanduser(userknownhostsfile))
if timeout is None:
timeout = config.get("connecttimeout")
if timeout:
timeout = int(timeout)
if username is None:
username = getpass.getuser()
if sock_fd is None:
proxycommand = config.get("proxycommand")
if proxycommand:
self.logger.debug("Configuring Proxy. %s", proxycommand)
if not isinstance(proxycommand, six.string_types):
proxycommand = [os.path.expanduser(elem) for elem in proxycommand]
else:
proxycommand = os.path.expanduser(proxycommand)
sock = paramiko.proxy.ProxyCommand(proxycommand)
else:
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
sock = socket.socket(af, socktype, proto)
sock.settimeout(timeout)
except socket.error:
continue
try:
if bind_addr:
sock.bind((bind_addr, 0))
sock.connect(sa)
except socket.error:
sock.close()
continue
break
else:
raise SSHError("Could not open socket to %s:%s" % (host, port))
else:
if sys.version_info[0] < 3:
s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s)
else:
sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
self._transport = paramiko.Transport(sock)
self._transport.set_log_channel(logger.name)
if config.get("compression") == 'yes':
self._transport.use_compression()
if hostkey_b64:
# If we need to connect with a specific hostkey, negotiate for only its type
hostkey_obj = None
for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]:
try:
hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64))
except paramiko.SSHException:
# Not a key of this type - try the next
pass
if not hostkey_obj:
# We've tried all known host key types and haven't found a suitable one to use - bail
raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64)
self._transport._preferred_keys = [hostkey_obj.get_name()]
elif self._host_keys:
# Else set preferred host keys to those we possess for the host
# (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation)
known_host_keys_for_this_host = self._host_keys.lookup(host) or {}
host_port = '[%s]:%s' % (host, port)
known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {})
if known_host_keys_for_this_host:
self._transport._preferred_keys = list(known_host_keys_for_this_host)
# Connect
try:
self._transport.start_client()
except paramiko.SSHException as e:
> raise SSHError('Negotiation failed: %s' % e)
E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner
../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError
------------------------------ Captured log setup ------------------------------
14:59:16.991 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner
14:59:16.992 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.992 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2369, in _check_banner
14:59:16.992 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout)
14:59:16.992 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 395, in readline
14:59:16.992 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout)
14:59:16.992 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/packet.py", line 665, in _read_timeout
14:59:16.992 ERROR [ncclient.transport.ssh] raise EOFError()
14:59:16.992 ERROR [ncclient.transport.ssh] EOFError
14:59:16.992 ERROR [ncclient.transport.ssh]
14:59:16.993 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred:
14:59:16.993 ERROR [ncclient.transport.ssh]
14:59:16.993 ERROR [ncclient.transport.ssh] Traceback (most recent call last):
14:59:16.993 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2185, in run
14:59:16.993 ERROR [ncclient.transport.ssh] self._check_banner()
14:59:16.993 ERROR [ncclient.transport.ssh] File "/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py", line 2374, in _check_banner
14:59:16.993 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e)
14:59:16.993 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
14:59:16.993 ERROR [ncclient.transport.ssh]
=================================== FAILURES ===================================
___________________________ TestTLS.test_tls_connect ___________________________
self =
def test_tls_connect(self):
> nc_connect(INITIAL_CONFIG_DIR)
test_tls.py:41:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)
/usr/lib/python3.6/ssl.py:689: SSLError
__________________ TestTLS.test_tls_reconfiguration[round #1] __________________
self = , round_id = 'round #1'
@pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)])
def test_tls_reconfiguration(self, round_id):
# pylint: disable=W0613
> self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR)
test_tls.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:60: in reconfigure_and_check
nc_connect(good_config_dir)
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ConnectionResetError: [Errno 104] Connection reset by peer
/usr/lib/python3.6/ssl.py:689: ConnectionResetError
__________________ TestTLS.test_tls_reconfiguration[round #2] __________________
self = , round_id = 'round #2'
@pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)])
def test_tls_reconfiguration(self, round_id):
# pylint: disable=W0613
> self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR)
test_tls.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:60: in reconfigure_and_check
nc_connect(good_config_dir)
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ConnectionResetError: [Errno 104] Connection reset by peer
/usr/lib/python3.6/ssl.py:689: ConnectionResetError
__________________ TestTLS.test_tls_reconfiguration[round #3] __________________
self = , round_id = 'round #3'
@pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)])
def test_tls_reconfiguration(self, round_id):
# pylint: disable=W0613
> self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR)
test_tls.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:60: in reconfigure_and_check
nc_connect(good_config_dir)
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ConnectionResetError: [Errno 104] Connection reset by peer
/usr/lib/python3.6/ssl.py:689: ConnectionResetError
__________________ TestTLS.test_tls_reconfiguration[round #4] __________________
self = , round_id = 'round #4'
@pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)])
def test_tls_reconfiguration(self, round_id):
# pylint: disable=W0613
> self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR)
test_tls.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:60: in reconfigure_and_check
nc_connect(good_config_dir)
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ConnectionResetError: [Errno 104] Connection reset by peer
/usr/lib/python3.6/ssl.py:689: ConnectionResetError
__________________ TestTLS.test_tls_reconfiguration[round #5] __________________
self = , round_id = 'round #5'
@pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)])
def test_tls_reconfiguration(self, round_id):
# pylint: disable=W0613
> self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR)
test_tls.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:60: in reconfigure_and_check
nc_connect(good_config_dir)
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ConnectionResetError: [Errno 104] Connection reset by peer
/usr/lib/python3.6/ssl.py:689: ConnectionResetError
__________________ TestTLS.test_tls_reconfiguration[round #6] __________________
self = , round_id = 'round #6'
@pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)])
def test_tls_reconfiguration(self, round_id):
# pylint: disable=W0613
> self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR)
test_tls.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_tls.py:60: in reconfigure_and_check
nc_connect(good_config_dir)
test_tls.py:93: in nc_connect
conn.connect((settings.HOST, settings.TLS_PORT))
/usr/lib/python3.6/ssl.py:1109: in connect
self._real_connect(addr, False)
/usr/lib/python3.6/ssl.py:1100: in _real_connect
self.do_handshake()
/usr/lib/python3.6/ssl.py:1077: in do_handshake
self._sslobj.do_handshake()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def do_handshake(self):
"""Start the SSL/TLS handshake."""
> self._sslobj.do_handshake()
E ConnectionResetError: [Errno 104] Connection reset by peer
/usr/lib/python3.6/ssl.py:689: ConnectionResetError
=============================== warnings summary ===============================
../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:32
/w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography. The next release of cryptography will remove support for Python 3.6.
from cryptography.hazmat.backends import default_backend
-- Docs: https://docs.pytest.org/en/stable/warnings.html
=========================== short test summary info ============================
FAILED test_tls.py::TestTLS::test_tls_connect - ssl.SSLError: [SSL: CERTIFICA...
FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #1] - ConnectionR...
FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #2] - ConnectionR...
FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #3] - ConnectionR...
FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #4] - ConnectionR...
FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #5] - ConnectionR...
FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #6] - ConnectionR...
ERROR test_turing_machine.py::TestTuringMachine::test_get - ncclient.transpor...
ERROR test_turing_machine.py::TestTuringMachine::test_get_config_startup - nc...
ERROR test_turing_machine.py::TestTuringMachine::test_get_config_running - nc...
ERROR test_turing_machine.py::TestTuringMachine::test_get_subtree_filter - nc...
ERROR test_turing_machine.py::TestTuringMachine::test_get_xpath_filter - nccl...
ERROR test_turing_machine.py::TestTuringMachine::test_edit_config - ncclient....
============== 7 failed, 7 passed, 1 warning, 6 errors in 32.01s ===============
ERROR: InvocationError for command /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3/bin/pytest -v (exited with code 1)
py3 docker: remove 'b0c5933253' (forced)
___________________________________ summary ____________________________________
ERROR: py3: commands failed
Build step 'Execute shell' marked build as failure
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 2112 killed;
[ssh-agent] Stopped.
[PostBuildScript] - [INFO] Executing post build scripts.
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins3769186877869902900.sh
---> sysstat.sh
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins5512283266989281918.sh
---> package-listing.sh
++ facter osfamily
++ tr '[:upper:]' '[:lower:]'
+ OS_FAMILY=debian
+ workspace=/w/workspace/integration-netconf-pnp-simulator-docker-merge-master
+ START_PACKAGES=/tmp/packages_start.txt
+ END_PACKAGES=/tmp/packages_end.txt
+ DIFF_PACKAGES=/tmp/packages_diff.txt
+ PACKAGES=/tmp/packages_start.txt
+ '[' /w/workspace/integration-netconf-pnp-simulator-docker-merge-master ']'
+ PACKAGES=/tmp/packages_end.txt
+ case "${OS_FAMILY}" in
+ dpkg -l
+ grep '^ii'
+ '[' -f /tmp/packages_start.txt ']'
+ '[' -f /tmp/packages_end.txt ']'
+ diff /tmp/packages_start.txt /tmp/packages_end.txt
+ '[' /w/workspace/integration-netconf-pnp-simulator-docker-merge-master ']'
+ mkdir -p /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/
+ cp -f /tmp/packages_diff.txt /tmp/packages_end.txt /tmp/packages_start.txt /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins12728133764222552743.sh
---> capture-instance-metadata.sh
Setup pyenv:
system
3.8.13
3.9.13
* 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version)
lf-activate-venv(): INFO: Reuse venv:/tmp/venv-gq3i from file:/tmp/.os_lf_venv
lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)
lf-activate-venv(): INFO: Installing additional packages: lftools
lf-activate-venv(): INFO: Adding /tmp/venv-gq3i/bin to PATH
INFO: Running in OpenStack, capturing instance metadata
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins10257785777795875990.sh
provisioning config files...
copy managed file [jenkins-log-archives-settings] to file:/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/config5004618570943141130tmp
Regular expression run condition: Expression=[^.*logs-s3.*], Label=[]
Run condition [Regular expression match] preventing perform for step [Provide Configuration files]
[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties content
SERVER_ID=logs
[EnvInject] - Variables injected successfully.
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins16399767022457061699.sh
---> create-netrc.sh
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins16086577942000238704.sh
---> python-tools-install.sh
Setup pyenv:
system
3.8.13
3.9.13
* 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version)
lf-activate-venv(): INFO: Reuse venv:/tmp/venv-gq3i from file:/tmp/.os_lf_venv
lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)
lf-activate-venv(): INFO: Installing additional packages: lftools
lf-activate-venv(): INFO: Adding /tmp/venv-gq3i/bin to PATH
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/sh /tmp/jenkins11522923492823168223.sh
---> uv-install.sh
uv 0.13.1 is already installed
uvx 0.13.1 (x86_64-unknown-linux-gnu)
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins9729082308111916455.sh
---> sudo-logs.sh
Archiving 'sudo' log..
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins5789456750002359610.sh
---> job-cost.sh
INFO: Activating Python virtual environment...
Setup pyenv:
system
3.8.13
3.9.13
* 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version)
lf-activate-venv(): INFO: Reuse venv:/tmp/venv-gq3i from file:/tmp/.os_lf_venv
lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)
lf-activate-venv(): INFO: Installing additional packages: zipp==1.1.0 python-openstackclient urllib3~=1.26.15
lf-activate-venv(): INFO: Adding /tmp/venv-gq3i/bin to PATH
INFO: No stack-cost file found
INFO: Instance uptime: 442s
INFO: Fetching instance metadata (attempt 1 of 3)...
DEBUG: URL: http://169.254.169.254/latest/meta-data/instance-type
INFO: Successfully fetched instance metadata
INFO: Instance type: v3-standard-8
INFO: Retrieving pricing info for: v3-standard-8
INFO: Fetching Vexxhost pricing API (attempt 1 of 3)...
DEBUG: URL: https://pricing.vexxhost.net/v1/pricing/v3-standard-8/cost?seconds=442
INFO: Successfully fetched Vexxhost pricing API
INFO: Retrieved cost: 0.22
INFO: Retrieved resource: v3-standard-8
INFO: Creating archive directory: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/cost
INFO: Archiving costs to: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/cost.csv
INFO: Successfully archived job cost data
DEBUG: Cost data: integration-netconf-pnp-simulator-docker-merge-master,356,2026-10-14 14:59:47,v3-standard-8,442,0.22,0.00,FAILURE
[integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash -l /tmp/jenkins7282786842412236197.sh
---> logs-deploy.sh
Setup pyenv:
system
3.8.13
3.9.13
* 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version)
lf-activate-venv(): INFO: Reuse venv:/tmp/venv-gq3i from file:/tmp/.os_lf_venv
lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)
lf-activate-venv(): INFO: Installing additional packages: lftools urllib3~=1.26.15
lf-activate-venv(): INFO: Adding /tmp/venv-gq3i/bin to PATH
INFO: Nexus URL https://nexus.onap.org path production/vex-yul-ecomp-jenkins-1/integration-netconf-pnp-simulator-docker-merge-master/356
INFO: archiving workspace using pattern(s):
Archives upload complete.
INFO: archiving logs to Nexus
---> uname -a:
Linux prd-ubuntu1804-docker-8c-8g-1701 4.15.0-192-generic #203-Ubuntu SMP Wed Aug 10 17:40:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
---> lscpu:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 8
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 23
Model: 49
Model name: AMD EPYC-Rome Processor
Stepping: 0
CPU MHz: 2800.000
BogoMIPS: 5600.00
Virtualization: AMD-V
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 512K
L3 cache: 16384K
NUMA node0 CPU(s): 0-7
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl xtopology cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero xsaveerptr arat npt lbrv nrip_save tsc_scale vmcb_clean flushbyasid pausefilter pfthreshold v_vmsave_vmload vgif umip rdpid arch_capabilities
---> nproc:
8
---> df -h:
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 712K 3.2G 1% /run
/dev/vda1 155G 11G 145G 7% /
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 3.2G 0 3.2G 0% /run/user/1001
---> free -m:
total used free shared buff/cache available
Mem: 32167 829 28143 0 3194 30882
Swap: 1023 0 1023
---> ip addr:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: mtu 1458 qdisc mq state UP group default qlen 1000
link/ether fa:16:3e:13:c9:30 brd ff:ff:ff:ff:ff:ff
inet 10.30.107.137/23 brd 10.30.107.255 scope global dynamic ens3
valid_lft 85957sec preferred_lft 85957sec
inet6 fe80::f816:3eff:fe13:c930/64 scope link
valid_lft forever preferred_lft forever
3: docker0: mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:0b:8e:a0:84 brd ff:ff:ff:ff:ff:ff
inet 10.250.0.254/24 brd 10.250.0.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:bff:fe8e:a084/64 scope link
valid_lft forever preferred_lft forever
---> sar -b -r -n DEV:
Linux 4.15.0-192-generic (prd-ubuntu1804-docker-8c-8g-1701) 10/14/26 _x86_64_ (8 CPU)
14:52:38 LINUX RESTART (8 CPU)
14:53:02 tps rtps wtps bread/s bwrtn/s
14:54:01 193.19 66.53 126.66 4321.17 57380.11
14:55:01 194.68 9.48 185.20 1702.92 54893.65
14:56:01 101.75 0.13 101.62 18.93 41658.92
14:57:01 73.49 0.08 73.40 9.60 29079.82
14:58:01 43.95 0.07 43.89 8.66 16831.72
14:59:01 180.47 33.34 147.13 1501.95 34301.15
Average: 131.09 18.14 112.95 1252.01 38971.97
14:53:02 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
14:54:01 30035380 31682928 2903840 8.82 65640 1892816 1459624 4.29 908208 1708276 204108
14:55:01 29300564 31708504 3638656 11.05 88460 2599180 1665624 4.90 967628 2314248 68236
14:56:01 29308656 31703504 3630564 11.02 94724 2576680 1584680 4.66 986080 2276816 9564
14:57:01 29277452 31711688 3661768 11.12 96268 2611340 1522568 4.48 990728 2297100 1184
14:58:01 29152656 31704048 3786564 11.50 100960 2719604 1497344 4.41 1079956 2323492 17040
14:59:01 28787984 31582540 4151236 12.60 114136 2924908 1955832 5.75 1246448 2482224 2924
Average: 29310449 31682202 3628771 11.02 93365 2554088 1614279 4.75 1029841 2233693 50509
14:53:02 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
14:54:01 lo 1.22 1.22 0.14 0.14 0.00 0.00 0.00 0.00
14:54:01 ens3 345.62 250.65 2368.65 62.38 0.00 0.00 0.00 0.00
14:54:01 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
14:55:01 lo 3.20 3.20 0.37 0.37 0.00 0.00 0.00 0.00
14:55:01 ens3 243.48 130.04 2893.63 15.20 0.00 0.00 0.00 0.00
14:55:01 docker0 51.07 103.17 2.75 1751.57 0.00 0.00 0.00 0.00
14:56:01 veth7fbba54 3.17 5.37 0.23 64.36 0.00 0.00 0.00 0.01
14:56:01 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
14:56:01 ens3 42.58 34.23 108.36 5.94 0.00 0.00 0.00 0.00
14:56:01 docker0 14.53 21.38 0.84 102.94 0.00 0.00 0.00 0.00
14:57:01 lo 0.20 0.20 0.01 0.01 0.00 0.00 0.00 0.00
14:57:01 ens3 18.53 17.13 22.13 3.94 0.00 0.00 0.00 0.00
14:57:01 docker0 2.90 3.73 0.20 18.81 0.00 0.00 0.00 0.00
14:58:01 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
14:58:01 ens3 20.23 10.13 214.90 1.25 0.00 0.00 0.00 0.00
14:58:01 docker0 8.03 18.19 0.48 214.42 0.00 0.00 0.00 0.00
14:59:01 lo 8.14 8.14 2.48 2.48 0.00 0.00 0.00 0.00
14:59:01 ens3 40.05 32.81 559.68 4.75 0.00 0.00 0.00 0.00
14:59:01 veth12c4726 4.35 4.18 1.75 0.78 0.00 0.00 0.00 0.00
14:59:01 docker0 9.34 10.12 2.15 118.54 0.00 0.00 0.00 0.00
Average: lo 2.13 2.13 0.50 0.50 0.00 0.00 0.00 0.00
Average: ens3 117.77 78.68 1024.08 15.44 0.00 0.00 0.00 0.00
Average: veth12c4726 0.73 0.70 0.29 0.13 0.00 0.00 0.00 0.00
Average: docker0 14.35 26.17 1.07 368.71 0.00 0.00 0.00 0.00
---> sar -P ALL:
Linux 4.15.0-192-generic (prd-ubuntu1804-docker-8c-8g-1701) 10/14/26 _x86_64_ (8 CPU)
14:52:38 LINUX RESTART (8 CPU)
14:53:02 CPU %user %nice %system %iowait %steal %idle
14:54:01 all 9.41 0.00 0.99 4.44 0.05 85.11
14:54:01 0 14.27 0.00 0.95 1.37 0.05 83.36
14:54:01 1 10.88 0.00 1.29 2.54 0.07 85.22
14:54:01 2 1.85 0.00 0.34 5.68 0.03 92.09
14:54:01 3 17.70 0.00 2.21 15.43 0.07 64.59
14:54:01 4 5.28 0.00 0.76 2.68 0.05 91.22
14:54:01 5 4.90 0.00 0.46 1.07 0.03 93.54
14:54:01 6 9.55 0.00 0.78 1.30 0.03 88.34
14:54:01 7 10.90 0.00 1.19 5.44 0.05 82.42
14:55:01 all 6.79 0.00 1.21 4.47 0.04 87.49
14:55:01 0 25.90 0.00 2.05 2.53 0.05 69.47
14:55:01 1 4.43 0.00 0.78 0.27 0.02 94.51
14:55:01 2 0.80 0.00 0.69 8.54 0.03 89.94
14:55:01 3 4.06 0.00 0.92 7.29 0.05 87.67
14:55:01 4 2.50 0.00 0.67 0.60 0.03 96.20
14:55:01 5 1.09 0.00 1.09 5.25 0.03 92.54
14:55:01 6 7.10 0.00 2.23 10.15 0.05 80.47
14:55:01 7 8.37 0.00 1.27 1.16 0.05 89.15
14:56:01 all 15.22 0.00 2.04 1.76 0.05 80.93
14:56:01 0 10.30 0.00 2.75 0.95 0.05 85.95
14:56:01 1 19.81 0.00 1.70 0.08 0.07 78.33
14:56:01 2 10.19 0.00 1.96 2.08 0.02 85.75
14:56:01 3 18.16 0.00 2.42 5.81 0.03 73.57
14:56:01 4 14.36 0.00 1.52 0.13 0.03 83.95
14:56:01 5 20.65 0.00 2.21 0.20 0.05 76.90
14:56:01 6 8.24 0.00 1.54 4.61 0.05 85.56
14:56:01 7 20.01 0.00 2.19 0.22 0.05 77.53
14:57:01 all 12.44 0.00 1.31 2.93 0.04 83.29
14:57:01 0 8.67 0.00 1.32 0.15 0.05 89.81
14:57:01 1 33.44 0.00 1.49 5.69 0.05 59.34
14:57:01 2 3.93 0.00 0.84 8.17 0.03 87.03
14:57:01 3 15.49 0.00 1.24 0.12 0.03 83.12
14:57:01 4 10.48 0.00 1.47 2.04 0.03 85.98
14:57:01 5 8.73 0.00 1.42 0.28 0.03 89.53
14:57:01 6 10.28 0.00 1.32 6.46 0.03 81.91
14:57:01 7 8.44 0.00 1.40 0.53 0.03 89.59
14:58:01 all 0.82 0.00 0.50 17.76 0.01 80.91
14:58:01 0 1.88 0.00 0.67 9.09 0.00 88.36
14:58:01 1 0.52 0.00 0.43 20.75 0.02 78.28
14:58:01 2 0.70 0.00 0.55 25.17 0.02 73.55
14:58:01 3 0.60 0.00 0.42 18.40 0.00 80.58
14:58:01 4 1.10 0.00 0.65 40.53 0.02 57.69
14:58:01 5 0.58 0.00 0.45 3.14 0.00 95.83
14:58:01 6 0.57 0.00 0.52 18.40 0.00 80.52
14:58:01 7 0.58 0.00 0.32 6.71 0.02 92.37
14:59:01 all 7.40 0.00 1.46 5.42 0.06 85.66
14:59:01 0 2.67 0.00 1.37 1.77 0.07 94.12
14:59:01 1 1.91 0.00 1.07 0.62 0.05 96.36
14:59:01 2 3.11 0.00 1.20 2.48 0.07 93.14
14:59:01 3 3.59 0.00 1.42 1.80 0.07 93.12
14:59:01 4 26.65 0.00 2.33 1.10 0.07 69.86
14:59:01 5 7.18 0.00 1.18 0.75 0.05 90.84
14:59:01 6 2.65 0.00 1.34 30.85 0.05 65.11
14:59:01 7 11.45 0.00 1.77 4.00 0.07 82.72
Average: all 8.68 0.00 1.25 6.14 0.04 83.90
Average: 0 10.61 0.00 1.52 2.65 0.04 85.18
Average: 1 11.84 0.00 1.13 5.00 0.04 81.99
Average: 2 3.43 0.00 0.93 8.69 0.03 86.91
Average: 3 9.91 0.00 1.44 8.12 0.04 80.49
Average: 4 10.07 0.00 1.23 7.86 0.04 80.79
Average: 5 7.19 0.00 1.14 1.78 0.03 89.86
Average: 6 6.39 0.00 1.29 11.99 0.04 80.30
Average: 7 9.95 0.00 1.36 3.00 0.04 85.64