15:03:07 Started by timer 15:03:07 Running as SYSTEM 15:03:07 [EnvInject] - Loading node environment variables. 15:03:07 Building remotely on prd-ubuntu1804-docker-8c-8g-2838 (ubuntu1804-docker-8c-8g) in workspace /w/workspace/integration-netconf-pnp-simulator-docker-merge-master 15:03:08 [ssh-agent] Looking for ssh-agent implementation... 15:03:08 $ ssh-agent 15:03:08 SSH_AUTH_SOCK=/tmp/ssh-ylEDeJdmyQUK/agent.2065 15:03:08 SSH_AGENT_PID=2067 15:03:08 [ssh-agent] Started. 15:03:08 Running ssh-add (command line suppressed) 15:03:08 Identity added: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/private_key_15670567823787817816.key (/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/private_key_15670567823787817816.key) 15:03:08 [ssh-agent] Using credentials onap-jobbuiler (Gerrit user) 15:03:08 The recommended git tool is: NONE 15:03:09 using credential onap-jenkins-ssh 15:03:09 Wiping out workspace first. 15:03:09 Cloning the remote Git repository 15:03:09 Cloning repository git://cloud.onap.org/mirror/integration 15:03:09 > git init /w/workspace/integration-netconf-pnp-simulator-docker-merge-master # timeout=10 15:03:09 Fetching upstream changes from git://cloud.onap.org/mirror/integration 15:03:09 > git --version # timeout=10 15:03:09 > git --version # 'git version 2.17.1' 15:03:09 using GIT_SSH to set credentials Gerrit user 15:03:09 Verifying host key using manually-configured host key entries 15:03:09 > git fetch --tags --progress -- git://cloud.onap.org/mirror/integration +refs/heads/*:refs/remotes/origin/* # timeout=10 15:03:20 > git config remote.origin.url git://cloud.onap.org/mirror/integration # timeout=10 15:03:20 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 15:03:20 Avoid second fetch 15:03:20 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 15:03:20 Checking out Revision bfd5e41b62421c2d51b39371a2dd3b8535b1f635 (refs/remotes/origin/master) 15:03:20 > git config core.sparsecheckout # timeout=10 15:03:20 > git checkout -f bfd5e41b62421c2d51b39371a2dd3b8535b1f635 # timeout=10 15:03:21 Commit message: "Chore: Update RTD config for ubuntu-24.04 and Python 3.13" 15:03:21 > git rev-list --no-walk d76298b1c7f3bb21c724c4b9b133fd5b79422110 # timeout=10 15:03:24 provisioning config files... 15:03:24 copy managed file [npmrc] to file:/home/jenkins/.npmrc 15:03:24 copy managed file [pipconf] to file:/home/jenkins/.config/pip/pip.conf 15:03:24 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins17911824444451733386.sh 15:03:24 ---> python-tools-install.sh 15:03:24 Setup pyenv: 15:03:24 * system (set by /opt/pyenv/version) 15:03:24 * 3.8.13 (set by /opt/pyenv/version) 15:03:24 * 3.9.13 (set by /opt/pyenv/version) 15:03:24 * 3.10.6 (set by /opt/pyenv/version) 15:03:28 lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-dOcM 15:03:28 lf-activate-venv(): INFO: Save venv in file: /tmp/.os_lf_venv 15:03:28 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 15:03:28 lf-activate-venv(): INFO: Attempting to install with network-safe options... 15:03:33 lf-activate-venv(): INFO: Base packages installed successfully 15:03:33 lf-activate-venv(): INFO: Installing additional packages: lftools 15:03:56 lf-activate-venv(): INFO: Adding /tmp/venv-dOcM/bin to PATH 15:03:56 Generating Requirements File 15:04:14 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. 15:04:14 httplib2 0.30.2 requires pyparsing<4,>=3.0.4, but you have pyparsing 2.4.7 which is incompatible. 15:04:14 Python 3.10.6 15:04:14 pip 26.0.1 from /tmp/venv-dOcM/lib/python3.10/site-packages/pip (python 3.10) 15:04:15 appdirs==1.4.4 15:04:15 argcomplete==3.6.3 15:04:15 aspy.yaml==1.3.0 15:04:15 attrs==26.1.0 15:04:15 autopage==0.6.0 15:04:15 backports.strenum==1.3.1 15:04:15 beautifulsoup4==4.14.3 15:04:15 boto3==1.42.80 15:04:15 botocore==1.42.80 15:04:15 bs4==0.0.2 15:04:15 certifi==2026.2.25 15:04:15 cffi==2.0.0 15:04:15 cfgv==3.5.0 15:04:15 chardet==7.4.0.post2 15:04:15 charset-normalizer==3.4.6 15:04:15 click==8.3.1 15:04:15 cliff==4.13.2 15:04:15 cmd2==3.4.0 15:04:15 cryptography==3.3.2 15:04:15 debtcollector==3.1.0 15:04:15 decorator==5.2.1 15:04:15 defusedxml==0.7.1 15:04:15 Deprecated==1.3.1 15:04:15 distlib==0.4.0 15:04:15 dnspython==2.8.0 15:04:15 docker==7.1.0 15:04:15 dogpile.cache==1.5.0 15:04:15 durationpy==0.10 15:04:15 email-validator==2.3.0 15:04:15 filelock==3.25.2 15:04:15 future==1.0.0 15:04:15 gitdb==4.0.12 15:04:15 GitPython==3.1.46 15:04:15 httplib2==0.30.2 15:04:15 identify==2.6.18 15:04:15 idna==3.11 15:04:15 importlib-resources==1.5.0 15:04:15 iso8601==2.1.0 15:04:15 Jinja2==3.1.6 15:04:15 jmespath==1.1.0 15:04:15 jsonpatch==1.33 15:04:15 jsonpointer==3.1.1 15:04:15 jsonschema==4.26.0 15:04:15 jsonschema-specifications==2025.9.1 15:04:15 keystoneauth1==5.13.1 15:04:15 kubernetes==35.0.0 15:04:15 lftools==0.37.22 15:04:15 lxml==6.0.2 15:04:15 markdown-it-py==4.0.0 15:04:15 MarkupSafe==3.0.3 15:04:15 mdurl==0.1.2 15:04:15 msgpack==1.1.2 15:04:15 multi_key_dict==2.0.3 15:04:15 munch==4.0.0 15:04:15 netaddr==1.3.0 15:04:15 niet==1.4.2 15:04:15 nodeenv==1.10.0 15:04:15 oauth2client==4.1.3 15:04:15 oauthlib==3.3.1 15:04:15 openstacksdk==4.10.0 15:04:15 os-service-types==1.8.2 15:04:15 osc-lib==4.4.0 15:04:15 oslo.config==10.3.0 15:04:15 oslo.context==6.3.0 15:04:15 oslo.i18n==6.7.2 15:04:15 oslo.log==8.1.0 15:04:15 oslo.serialization==5.9.1 15:04:15 oslo.utils==10.0.0 15:04:15 packaging==26.0 15:04:15 pbr==7.0.3 15:04:15 platformdirs==4.9.4 15:04:15 prettytable==3.17.0 15:04:15 psutil==7.2.2 15:04:15 pyasn1==0.6.3 15:04:15 pyasn1_modules==0.4.2 15:04:15 pycparser==3.0 15:04:15 pygerrit2==2.0.15 15:04:15 PyGithub==2.9.0 15:04:15 Pygments==2.20.0 15:04:15 PyJWT==2.12.1 15:04:15 PyNaCl==1.6.2 15:04:15 pyparsing==2.4.7 15:04:15 pyperclip==1.11.0 15:04:15 pyrsistent==0.20.0 15:04:15 python-cinderclient==9.9.0 15:04:15 python-dateutil==2.9.0.post0 15:04:15 python-discovery==1.2.1 15:04:15 python-heatclient==5.1.0 15:04:15 python-jenkins==1.8.3 15:04:15 python-keystoneclient==5.8.0 15:04:15 python-magnumclient==4.10.0 15:04:15 python-openstackclient==9.0.0 15:04:15 python-swiftclient==4.10.0 15:04:15 PyYAML==6.0.3 15:04:15 referencing==0.37.0 15:04:15 requests==2.33.1 15:04:15 requests-oauthlib==2.0.0 15:04:15 requestsexceptions==1.4.0 15:04:15 rfc3986==2.0.0 15:04:15 rich==14.3.3 15:04:15 rich-argparse==1.7.2 15:04:15 rpds-py==0.30.0 15:04:15 rsa==4.9.1 15:04:15 ruamel.yaml==0.19.1 15:04:15 ruamel.yaml.clib==0.2.15 15:04:15 s3transfer==0.16.0 15:04:15 simplejson==3.20.2 15:04:15 six==1.17.0 15:04:15 smmap==5.0.3 15:04:15 soupsieve==2.8.3 15:04:15 stevedore==5.7.0 15:04:15 tabulate==0.10.0 15:04:15 toml==0.10.2 15:04:15 tomlkit==0.14.0 15:04:15 tqdm==4.67.3 15:04:15 typing_extensions==4.15.0 15:04:15 urllib3==1.26.20 15:04:15 virtualenv==21.2.0 15:04:15 wcwidth==0.6.0 15:04:15 websocket-client==1.9.0 15:04:15 wrapt==2.1.2 15:04:15 xdg==6.0.0 15:04:15 xmltodict==1.0.4 15:04:15 yq==3.4.3 15:04:15 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/sh /tmp/jenkins15303889218251976889.sh 15:04:15 ---> uv-install.sh 15:04:15 Installing uv/uvx (latest) using shell installer 15:04:15 2026-04-01 15:04:15 URL:https://release-assets.githubusercontent.com/github-production-release-asset/699532645/23829516-dcc2-44de-97ee-6c98471a68af?sp=r&sv=2018-11-09&sr=b&spr=https&se=2026-04-01T15%3A36%3A27Z&rscd=attachment%3B+filename%3Duv-installer.sh&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2026-04-01T14%3A35%3A42Z&ske=2026-04-01T15%3A36%3A27Z&sks=b&skv=2018-11-09&sig=3NDzZLSG8knDg%2FbaJBLZAA2qID%2B5eloBtbqiWKV%2BbIA%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc3NTA1NjA1NSwibmJmIjoxNzc1MDU1NzU1LCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.48KB6aVnhe9vlDFWzDFvbchIqbq1Cws3L__U56t4cHw&response-content-disposition=attachment%3B%20filename%3Duv-installer.sh&response-content-type=application%2Foctet-stream [72114/72114] -> "/tmp/uv-install-68GsgC.sh" [1] 15:04:15 downloading uv 0.11.2 x86_64-unknown-linux-gnu 15:04:16 installing to /home/jenkins/.local/bin 15:04:16 uv 15:04:16 uvx 15:04:16 everything's installed! 15:04:16 15:04:16 To add $HOME/.local/bin to your PATH, either restart your shell or run: 15:04:16 15:04:16 source $HOME/.local/bin/env (sh, bash, zsh) 15:04:16 source $HOME/.local/bin/env.fish (fish) 15:04:16 Adding install location to PATH 15:04:16 ---> Validating uv/uvx install 15:04:16 uvx 0.11.2 (x86_64-unknown-linux-gnu) 15:04:16 provisioning config files... 15:04:16 copy managed file [global-settings] to file:/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/config12066926374450091465tmp 15:04:16 copy managed file [integration-settings] to file:/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/config3231453422809464522tmp 15:04:16 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins13165339558079577801.sh 15:04:16 ---> docker-login.sh 15:04:16 nexus3.onap.org:10001 15:04:16 WARNING! Using --password via the CLI is insecure. Use --password-stdin. 15:04:16 WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json. 15:04:16 Configure a credential helper to remove this warning. See 15:04:16 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 15:04:16 15:04:16 Login Succeeded 15:04:16 nexus3.onap.org:10002 15:04:16 WARNING! Using --password via the CLI is insecure. Use --password-stdin. 15:04:16 WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json. 15:04:16 Configure a credential helper to remove this warning. See 15:04:16 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 15:04:16 15:04:16 Login Succeeded 15:04:16 nexus3.onap.org:10003 15:04:17 WARNING! Using --password via the CLI is insecure. Use --password-stdin. 15:04:17 WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json. 15:04:17 Configure a credential helper to remove this warning. See 15:04:17 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 15:04:17 15:04:17 Login Succeeded 15:04:17 nexus3.onap.org:10004 15:04:17 WARNING! Using --password via the CLI is insecure. Use --password-stdin. 15:04:17 WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json. 15:04:17 Configure a credential helper to remove this warning. See 15:04:17 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 15:04:17 15:04:17 Login Succeeded 15:04:17 docker.io 15:04:17 WARNING! Using --password via the CLI is insecure. Use --password-stdin. 15:04:17 WARNING! Your password will be stored unencrypted in /home/jenkins/.docker/config.json. 15:04:17 Configure a credential helper to remove this warning. See 15:04:17 https://docs.docker.com/engine/reference/commandline/login/#credentials-store 15:04:17 15:04:17 Login Succeeded 15:04:17 ---> docker-login.sh ends 15:04:17 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins7136343673891895685.sh 15:04:17 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/sh -xe /tmp/jenkins12770408525730488986.sh 15:04:17 [EnvInject] - Injecting environment variables from a build step. 15:04:17 [EnvInject] - Injecting as environment variables the properties content 15:04:17 DOCKER_ROOT=test/mocks/netconf-pnp-simulator/engine 15:04:17 CONTAINER_TAG_YAML_DIR= 15:04:17 CONTAINER_TAG_METHOD=yaml-file 15:04:17 15:04:17 [EnvInject] - Variables injected successfully. 15:04:17 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash -l /tmp/jenkins9078773447417122868.sh 15:04:17 ---> docker-get-container-tag.sh 15:04:17 Setup pyenv: 15:04:17 system 15:04:17 3.8.13 15:04:17 3.9.13 15:04:17 * 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version) 15:04:17 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-dOcM from file:/tmp/.os_lf_venv 15:04:17 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 15:04:17 lf-activate-venv(): INFO: Attempting to install with network-safe options... 15:04:19 lf-activate-venv(): INFO: Base packages installed successfully 15:04:19 lf-activate-venv(): INFO: Installing additional packages: yq 15:04:20 lf-activate-venv(): INFO: Adding /tmp/venv-dOcM/bin to PATH 15:04:20 ---> Docker image tag found: 2.8.6 15:04:20 [EnvInject] - Injecting environment variables from a build step. 15:04:20 [EnvInject] - Injecting as environment variables the properties file path 'env_docker_inject.txt' 15:04:20 [EnvInject] - Variables injected successfully. 15:04:20 [EnvInject] - Injecting environment variables from a build step. 15:04:20 [EnvInject] - Injecting as environment variables the properties content 15:04:20 DOCKER_ARGS= 15:04:20 DOCKER_ROOT=test/mocks/netconf-pnp-simulator/engine 15:04:20 CONTAINER_PULL_REGISTRY=nexus3.onap.org:10001 15:04:20 CONTAINER_PUSH_REGISTRY=nexus3.onap.org:10003 15:04:20 DOCKER_NAME=onap/integration/simulators/netconf-pnp-simulator 15:04:20 15:04:20 [EnvInject] - Variables injected successfully. 15:04:20 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins14538310099871616518.sh 15:04:20 ---> docker-build.sh 15:04:20 Docker version 20.10.18, build b40c2f6 15:04:20 Building image: nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6 15:04:20 docker build -t nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6 . 15:04:20 Sending build context to Docker daemon 145.9kB 15:04:20 Step 1/47 : FROM python:3.7.7-alpine3.11 as build 15:04:21 3.7.7-alpine3.11: Pulling from library/python 15:04:21 cbdbe7a5bc2a: Pulling fs layer 15:04:21 26ebcd19a4e3: Pulling fs layer 15:04:21 8341bd19193b: Pulling fs layer 15:04:21 ecc595bd65e1: Pulling fs layer 15:04:21 4b1c9d8f69d2: Pulling fs layer 15:04:21 ecc595bd65e1: Waiting 15:04:21 4b1c9d8f69d2: Waiting 15:04:21 26ebcd19a4e3: Verifying Checksum 15:04:21 26ebcd19a4e3: Download complete 15:04:21 cbdbe7a5bc2a: Verifying Checksum 15:04:21 cbdbe7a5bc2a: Download complete 15:04:21 ecc595bd65e1: Download complete 15:04:21 cbdbe7a5bc2a: Pull complete 15:04:21 4b1c9d8f69d2: Verifying Checksum 15:04:21 4b1c9d8f69d2: Download complete 15:04:22 26ebcd19a4e3: Pull complete 15:04:23 8341bd19193b: Verifying Checksum 15:04:23 8341bd19193b: Download complete 15:04:23 8341bd19193b: Pull complete 15:04:23 ecc595bd65e1: Pull complete 15:04:24 4b1c9d8f69d2: Pull complete 15:04:24 Digest: sha256:778802b5b9797279772814fb15a7c6ee494848ced17965bb57092a0b900c0e4f 15:04:24 Status: Downloaded newer image for python:3.7.7-alpine3.11 15:04:24 ---> e854017db514 15:04:24 Step 2/47 : ARG zlog_version=1.2.14 15:04:25 ---> Running in b549ece15574 15:04:25 Removing intermediate container b549ece15574 15:04:25 ---> 075c413a476f 15:04:25 Step 3/47 : ARG libyang_version=v1.0-r5 15:04:25 ---> Running in 63b1f6b39f4b 15:04:25 Removing intermediate container 63b1f6b39f4b 15:04:25 ---> 9ef08c6ef96d 15:04:25 Step 4/47 : ARG sysrepo_version=v0.7.9 15:04:25 ---> Running in dc4977f61acd 15:04:25 Removing intermediate container dc4977f61acd 15:04:25 ---> 9c52bc6dd68d 15:04:25 Step 5/47 : ARG libnetconf2_version=v0.12-r2 15:04:25 ---> Running in 29f81062060a 15:04:26 Removing intermediate container 29f81062060a 15:04:26 ---> d8d96c532dc2 15:04:26 Step 6/47 : ARG netopeer2_version=v0.7-r2 15:04:26 ---> Running in c2c4d57d95e6 15:04:26 Removing intermediate container c2c4d57d95e6 15:04:26 ---> 80685ea83528 15:04:26 Step 7/47 : WORKDIR /usr/src 15:04:26 ---> Running in 2e697c4866ab 15:04:26 Removing intermediate container 2e697c4866ab 15:04:26 ---> 2fa4b345f2e9 15:04:26 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 15:04:26 ---> Running in df3ff5b4f53f 15:04:26 + 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 15:04:26 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz 15:04:29 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz 15:04:29 (1/72) Upgrading musl (1.1.24-r2 -> 1.1.24-r3) 15:04:29 (2/72) Upgrading libcrypto1.1 (1.1.1g-r0 -> 1.1.1l-r0) 15:04:29 (3/72) Upgrading libssl1.1 (1.1.1g-r0 -> 1.1.1l-r0) 15:04:29 (4/72) Upgrading zlib (1.2.11-r3 -> 1.2.11-r5) 15:04:29 (5/72) Installing m4 (1.4.18-r1) 15:04:29 (6/72) Installing perl (5.30.3-r0) 15:04:29 (7/72) Installing autoconf (2.69-r2) 15:04:29 (8/72) Installing bash (5.0.11-r1) 15:04:29 Executing bash-5.0.11-r1.post-install 15:04:29 (9/72) Installing libgcc (9.3.0-r0) 15:04:29 (10/72) Installing libstdc++ (9.3.0-r0) 15:04:29 (11/72) Installing binutils (2.33.1-r1) 15:04:30 (12/72) Installing libmagic (5.37-r1) 15:04:30 (13/72) Installing file (5.37-r1) 15:04:30 (14/72) Installing gmp (6.1.2-r1) 15:04:30 (15/72) Installing isl (0.18-r0) 15:04:30 (16/72) Installing libgomp (9.3.0-r0) 15:04:30 (17/72) Installing libatomic (9.3.0-r0) 15:04:30 (18/72) Installing mpfr4 (4.0.2-r1) 15:04:30 (19/72) Installing mpc1 (1.1.0-r1) 15:04:30 (20/72) Installing gcc (9.3.0-r0) 15:04:30 (21/72) Installing musl-dev (1.1.24-r3) 15:04:30 (22/72) Installing libc-dev (0.7.2-r0) 15:04:30 (23/72) Installing g++ (9.3.0-r0) 15:04:31 (24/72) Installing make (4.2.1-r2) 15:04:31 (25/72) Installing fortify-headers (1.1-r0) 15:04:31 (26/72) Installing build-base (0.5-r1) 15:04:31 (27/72) Installing libacl (2.2.53-r0) 15:04:31 (28/72) Installing lz4-libs (1.9.2-r0) 15:04:31 (29/72) Installing zstd-libs (1.4.9-r0) 15:04:31 (30/72) Installing libarchive (3.4.2-r0) 15:04:31 (31/72) Installing nghttp2-libs (1.40.0-r1) 15:04:31 (32/72) Installing libcurl (7.79.1-r0) 15:04:31 (33/72) Installing rhash-libs (1.3.9-r0) 15:04:31 (34/72) Installing libuv (1.34.0-r0) 15:04:31 (35/72) Installing cmake (3.15.5-r0) 15:04:32 (36/72) Installing cmake-bash-completion (3.15.5-r0) 15:04:32 (37/72) Installing ctags (0_git20191207-r1) 15:04:32 (38/72) Installing pkgconf (1.6.3-r0) 15:04:32 (39/72) Installing openssl-dev (1.1.1l-r0) 15:04:32 (40/72) Installing nghttp2-dev (1.40.0-r1) 15:04:32 (41/72) Installing zlib-dev (1.2.11-r5) 15:04:32 (42/72) Installing curl-dev (7.79.1-r0) 15:04:32 (43/72) Installing pcre2 (10.34-r1) 15:04:32 (44/72) Installing git (2.24.4-r0) 15:04:32 (45/72) Installing perl-error (0.17028-r0) 15:04:32 (46/72) Installing perl-git (2.24.4-r0) 15:04:33 (47/72) Installing git-perl (2.24.4-r0) 15:04:33 (48/72) Installing libev (4.27-r0) 15:04:33 (49/72) Installing libev-dev (4.27-r0) 15:04:33 (50/72) Installing libssh (0.9.4-r1) 15:04:33 (51/72) Installing libssh-dev (0.9.4-r1) 15:04:33 (52/72) Installing openssh-keygen (8.1_p1-r1) 15:04:33 (53/72) Installing openssl (1.1.1l-r0) 15:04:33 (54/72) Installing libpcre16 (8.43-r1) 15:04:33 (55/72) Installing libpcre32 (8.43-r1) 15:04:33 (56/72) Installing pcre (8.43-r1) 15:04:33 (57/72) Installing libpcrecpp (8.43-r1) 15:04:33 (58/72) Installing pcre-dev (8.43-r1) 15:04:33 (59/72) Installing libprotobuf (3.11.2-r1) 15:04:34 (60/72) Installing libprotoc (3.11.2-r1) 15:04:34 (61/72) Installing protobuf-c (1.3.2-r3) 15:04:34 (62/72) Installing protobuf-c-dev (1.3.2-r3) 15:04:34 (63/72) Installing gc (8.0.4-r0) 15:04:34 (64/72) Installing libltdl (2.4.6-r7) 15:04:34 (65/72) Installing libunistring (0.9.10-r0) 15:04:34 (66/72) Installing guile-libs (2.0.14-r0) 15:04:34 (67/72) Installing guile (2.0.14-r0) 15:04:35 (68/72) Installing swig (3.0.12-r4) 15:04:35 (69/72) Installing the_silver_searcher (2.2.0-r0) 15:04:35 (70/72) Installing xxd (8.2.3437-r0) 15:04:35 (71/72) Installing lua5.3-libs (5.3.5-r2) 15:04:35 (72/72) Installing vim (8.2.3437-r0) 15:04:35 Executing busybox-1.31.1-r9.trigger 15:04:35 Executing ca-certificates-20191127-r1.trigger 15:04:35 OK: 329 MiB in 102 packages 15:04:41 Removing intermediate container df3ff5b4f53f 15:04:41 ---> 37811ae3b1c5 15:04:41 Step 9/47 : RUN git config --global advice.detachedHead false 15:04:41 ---> Running in 002bc2c3ce63 15:04:42 Removing intermediate container 002bc2c3ce63 15:04:42 ---> 52e799166c74 15:04:42 Step 10/47 : ENV PKG_CONFIG_PATH=/opt/lib64/pkgconfig 15:04:42 ---> Running in 7e3ecb160549 15:04:42 Removing intermediate container 7e3ecb160549 15:04:42 ---> e04e37b6116d 15:04:42 Step 11/47 : ENV LD_LIBRARY_PATH=/opt/lib:/opt/lib64 15:04:42 ---> Running in a5bd251b62fe 15:04:42 Removing intermediate container a5bd251b62fe 15:04:42 ---> 9fe1732d419e 15:04:42 Step 12/47 : COPY patches/libyang/ ./patches/libyang/ 15:04:43 ---> dd0c426b48fd 15:04:43 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 15:04:43 ---> Running in 0c07b83647c7 15:04:43 + git clone --branch v1.0-r5 --depth 1 https://github.com/CESNET/libyang.git 15:04:43 Cloning into 'libyang'... 15:04:44 + cd libyang 15:04:44 + patch -p1 -i ../patches/libyang/01-configurable-PYTHON_MODULE_PATH.patch 15:04:44 patching file swig/python/CMakeLists.txt 15:04:44 + mkdir build 15:04:44 + cd build 15:04:44 + cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DENABLE_BUILD_TESTS=OFF' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DGEN_LANGUAGE_BINDINGS=OFF' .. 15:04:44 -- The C compiler identification is GNU 9.3.0 15:04:44 -- Check for working C compiler: /usr/bin/cc 15:04:44 -- Check for working C compiler: /usr/bin/cc -- works 15:04:44 -- Detecting C compiler ABI info 15:04:44 -- Detecting C compiler ABI info - done 15:04:44 -- Detecting C compile features 15:04:44 -- Detecting C compile features - done 15:04:44 -- Could NOT find FLEX (missing: FLEX_EXECUTABLE) 15:04:44 -- Could NOT find BISON (missing: BISON_EXECUTABLE) 15:04:44 CMake Warning at CMakeLists.txt:115 (message): 15:04:44 Missing Bison. 15:04:44 15:04:44 You won't be able to generate source codes from changed flex/bison files. 15:04:44 15:04:44 Compiling libyang should still works fine. 15:04:44 15:04:44 15:04:44 CMake Warning at CMakeLists.txt:171 (message): 15:04:44 Missing tools (devscripts, debhelper package) for building deb package. 15:04:44 15:04:44 You won't be able to generate deb package from source code. 15:04:44 15:04:44 Compiling libyang should still works fine. 15:04:44 15:04:44 15:04:44 CMake Warning at CMakeLists.txt:182 (message): 15:04:44 Missing tools (rpm package) for building rpm package. 15:04:44 15:04:44 You won't be able to generate rpm package from source code. 15:04:44 15:04:44 Compiling libyang should still works fine. 15:04:44 15:04:44 15:04:44 -- Looking for vdprintf 15:04:44 -- Looking for vdprintf - found 15:04:44 -- Looking for pthread.h 15:04:44 -- Looking for pthread.h - found 15:04:44 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD 15:04:44 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success 15:04:44 -- Found Threads: TRUE 15:04:44 -- Found PCRE: /usr/lib/libpcre.so 15:04:44 -- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 15:04:44 -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 15:04:44 -- Configuring done 15:04:44 -- Generating done 15:04:44 -- Build files have been written to: /usr/src/libyang/build 15:04:44 + make -j2 15:04:44 Scanning dependencies of target yangobj_tests 15:04:44 Scanning dependencies of target yangobj 15:04:44 [ 1%] Building C object CMakeFiles/yangobj_tests.dir/src/common.c.o 15:04:44 [ 2%] Building C object CMakeFiles/yangobj.dir/src/common.c.o 15:04:45 [ 3%] Building C object CMakeFiles/yangobj_tests.dir/src/context.c.o 15:04:45 [ 5%] Building C object CMakeFiles/yangobj.dir/src/context.c.o 15:04:46 [ 6%] Building C object CMakeFiles/yangobj_tests.dir/src/log.c.o 15:04:46 [ 7%] Building C object CMakeFiles/yangobj.dir/src/log.c.o 15:04:46 [ 8%] Building C object CMakeFiles/yangobj_tests.dir/src/hash_table.c.o 15:04:46 /usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_ht': 15:04:46 /usr/src/libyang/src/hash_table.c:634:17: warning: variable 'i_len' set but not used [-Wunused-but-set-variable] 15:04:46 634 | uint32_t i, i_len; 15:04:46 | ^~~~~ 15:04:46 /usr/src/libyang/src/hash_table.c:631:53: warning: unused parameter 'info' [-Wunused-parameter] 15:04:46 631 | lyht_dbgprint_ht(struct hash_table *ht, const char *info) 15:04:46 | ~~~~~~~~~~~~^~~~ 15:04:46 /usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_value': 15:04:46 /usr/src/libyang/src/hash_table.c:665:43: warning: unused parameter 'hash' [-Wunused-parameter] 15:04:46 665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation) 15:04:46 | ~~~~~~~~~^~~~ 15:04:46 /usr/src/libyang/src/hash_table.c:665:80: warning: unused parameter 'operation' [-Wunused-parameter] 15:04:46 665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation) 15:04:46 | ~~~~~~~~~~~~^~~~~~~~~ 15:04:46 [ 10%] Building C object CMakeFiles/yangobj.dir/src/hash_table.c.o 15:04:46 /usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_ht': 15:04:46 /usr/src/libyang/src/hash_table.c:634:17: warning: variable 'i_len' set but not used [-Wunused-but-set-variable] 15:04:46 634 | uint32_t i, i_len; 15:04:46 | ^~~~~ 15:04:46 /usr/src/libyang/src/hash_table.c:631:53: warning: unused parameter 'info' [-Wunused-parameter] 15:04:46 631 | lyht_dbgprint_ht(struct hash_table *ht, const char *info) 15:04:46 | ~~~~~~~~~~~~^~~~ 15:04:46 /usr/src/libyang/src/hash_table.c: In function 'lyht_dbgprint_value': 15:04:46 /usr/src/libyang/src/hash_table.c:665:43: warning: unused parameter 'hash' [-Wunused-parameter] 15:04:46 665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation) 15:04:46 | ~~~~~~~~~^~~~ 15:04:46 /usr/src/libyang/src/hash_table.c:665:80: warning: unused parameter 'operation' [-Wunused-parameter] 15:04:46 665 | lyht_dbgprint_value(void *val_p, uint32_t hash, uint16_t rec_size, const char *operation) 15:04:46 | ~~~~~~~~~~~~^~~~~~~~~ 15:04:46 [ 11%] Building C object CMakeFiles/yangobj_tests.dir/src/resolve.c.o 15:04:46 [ 12%] Building C object CMakeFiles/yangobj.dir/src/resolve.c.o 15:04:47 /usr/src/libyang/src/resolve.c: In function 'resolve_instid': 15:04:47 /usr/src/libyang/src/resolve.c:7869:9: warning: 'mod_len' may be used uninitialized in this function [-Wmaybe-uninitialized] 15:04:47 7869 | int mod_len, name_len, has_predicate; 15:04:47 | ^~~~~~~ 15:04:47 /usr/src/libyang/src/resolve.c: In function 'resolve_instid': 15:04:47 /usr/src/libyang/src/resolve.c:7869:9: warning: 'mod_len' may be used uninitialized in this function [-Wmaybe-uninitialized] 15:04:47 7869 | int mod_len, name_len, has_predicate; 15:04:47 | ^~~~~~~ 15:04:48 [ 13%] Building C object CMakeFiles/yangobj_tests.dir/src/validation.c.o 15:04:49 [ 15%] Building C object CMakeFiles/yangobj.dir/src/validation.c.o 15:04:49 [ 16%] Building C object CMakeFiles/yangobj_tests.dir/src/xml.c.o 15:04:49 [ 17%] Building C object CMakeFiles/yangobj.dir/src/xml.c.o 15:04:49 [ 18%] Building C object CMakeFiles/yangobj_tests.dir/src/parser.c.o 15:04:49 [ 20%] Building C object CMakeFiles/yangobj.dir/src/parser.c.o 15:04:50 [ 21%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yin.c.o 15:04:50 [ 22%] Building C object CMakeFiles/yangobj.dir/src/parser_yin.c.o 15:04:54 [ 23%] Building C object CMakeFiles/yangobj.dir/src/parser_xml.c.o 15:04:54 [ 25%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_xml.c.o 15:04:54 [ 26%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_json.c.o 15:04:54 [ 27%] Building C object CMakeFiles/yangobj.dir/src/parser_json.c.o 15:04:55 [ 28%] Building C object CMakeFiles/yangobj.dir/src/parser_lyb.c.o 15:04:55 [ 30%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_lyb.c.o 15:04:55 [ 31%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yang_bis.c.o 15:04:55 [ 32%] Building C object CMakeFiles/yangobj.dir/src/parser_yang_bis.c.o 15:04:58 [ 33%] Building C object CMakeFiles/yangobj.dir/src/parser_yang_lex.c.o 15:04:58 [ 35%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yang_lex.c.o 15:04:58 [ 36%] Building C object CMakeFiles/yangobj.dir/src/parser_yang.c.o 15:04:59 [ 37%] Building C object CMakeFiles/yangobj_tests.dir/src/parser_yang.c.o 15:05:00 [ 38%] Building C object CMakeFiles/yangobj.dir/src/tree_schema.c.o 15:05:00 [ 40%] Building C object CMakeFiles/yangobj_tests.dir/src/tree_schema.c.o 15:05:01 [ 41%] Building C object CMakeFiles/yangobj.dir/src/tree_data.c.o 15:05:02 [ 42%] Building C object CMakeFiles/yangobj_tests.dir/src/tree_data.c.o 15:05:03 [ 43%] Building C object CMakeFiles/yangobj.dir/src/plugins.c.o 15:05:04 [ 45%] Building C object CMakeFiles/yangobj_tests.dir/src/plugins.c.o 15:05:04 [ 46%] Building C object CMakeFiles/yangobj.dir/src/printer.c.o 15:05:04 [ 47%] Building C object CMakeFiles/yangobj_tests.dir/src/printer.c.o 15:05:04 [ 48%] Building C object CMakeFiles/yangobj.dir/src/xpath.c.o 15:05:04 [ 50%] Building C object CMakeFiles/yangobj_tests.dir/src/xpath.c.o 15:05:06 /usr/src/libyang/src/xpath.c: In function 'eval_predicate': 15:05:06 /usr/src/libyang/src/xpath.c:958:28: warning: 'end' may be used uninitialized in this function [-Wmaybe-uninitialized] 15:05:06 958 | uint16_t i, orig_used, end; 15:05:06 | ^~~ 15:05:06 /usr/src/libyang/src/xpath.c: In function 'eval_predicate': 15:05:06 /usr/src/libyang/src/xpath.c:958:28: warning: 'end' may be used uninitialized in this function [-Wmaybe-uninitialized] 15:05:06 958 | uint16_t i, orig_used, end; 15:05:06 | ^~~ 15:05:06 [ 51%] Building C object CMakeFiles/yangobj.dir/src/printer_yang.c.o 15:05:06 [ 52%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_yang.c.o 15:05:07 [ 53%] Building C object CMakeFiles/yangobj.dir/src/printer_yin.c.o 15:05:07 [ 55%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_yin.c.o 15:05:08 [ 56%] Building C object CMakeFiles/yangobj.dir/src/printer_json_schema.c.o 15:05:09 [ 57%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_json_schema.c.o 15:05:09 [ 58%] Building C object CMakeFiles/yangobj.dir/src/printer_xml.c.o 15:05:09 [ 60%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_xml.c.o 15:05:09 [ 61%] Building C object CMakeFiles/yangobj.dir/src/printer_tree.c.o 15:05:09 [ 62%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_tree.c.o 15:05:09 [ 63%] Building C object CMakeFiles/yangobj.dir/src/printer_info.c.o 15:05:10 [ 65%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_info.c.o 15:05:10 [ 66%] Building C object CMakeFiles/yangobj.dir/src/printer_json.c.o 15:05:10 [ 67%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_json.c.o 15:05:10 [ 68%] Building C object CMakeFiles/yangobj.dir/src/printer_lyb.c.o 15:05:10 [ 70%] Building C object CMakeFiles/yangobj_tests.dir/src/printer_lyb.c.o 15:05:10 [ 71%] Building C object CMakeFiles/yangobj.dir/src/yang_types.c.o 15:05:10 [ 71%] Built target yangobj 15:05:10 Scanning dependencies of target yang2yin 15:05:10 [ 72%] Building C object CMakeFiles/yang2yin.dir/tools/yang2yin/main.c.o 15:05:11 [ 73%] Building C object CMakeFiles/yangobj_tests.dir/src/yang_types.c.o 15:05:11 [ 73%] Built target yangobj_tests 15:05:11 Scanning dependencies of target yang 15:05:11 [ 75%] Linking C shared library libyang.so 15:05:11 [ 75%] Built target yang 15:05:11 Scanning dependencies of target yanglint 15:05:11 [ 76%] Building C object CMakeFiles/yanglint.dir/tools/lint/main.c.o 15:05:11 [ 77%] Building C object CMakeFiles/yanglint.dir/tools/lint/main_ni.c.o 15:05:11 [ 78%] Linking C executable yang2yin 15:05:11 [ 78%] Built target yang2yin 15:05:11 Scanning dependencies of target yangre 15:05:11 [ 80%] Building C object CMakeFiles/yangre.dir/tools/re/main.c.o 15:05:11 [ 81%] Linking C executable yangre 15:05:11 [ 81%] Built target yangre 15:05:11 Scanning dependencies of target metadata 15:05:11 [ 82%] Building C object CMakeFiles/yanglint.dir/tools/lint/commands.c.o 15:05:11 [ 83%] Building C object src/extensions/CMakeFiles/metadata.dir/metadata.c.o 15:05:11 [ 85%] Linking C shared library metadata.so 15:05:11 [ 85%] Built target metadata 15:05:11 Scanning dependencies of target yangdata 15:05:11 [ 86%] Building C object src/extensions/CMakeFiles/yangdata.dir/yangdata.c.o 15:05:11 [ 87%] Linking C shared library yangdata.so 15:05:11 [ 87%] Built target yangdata 15:05:11 Scanning dependencies of target nacm 15:05:11 [ 88%] Building C object src/extensions/CMakeFiles/nacm.dir/nacm.c.o 15:05:11 [ 90%] Linking C shared library nacm.so 15:05:11 [ 90%] Built target nacm 15:05:11 Scanning dependencies of target user_yang_types 15:05:11 [ 91%] Building C object src/user_types/CMakeFiles/user_yang_types.dir/user_yang_types.c.o 15:05:12 [ 92%] Linking C shared library user_yang_types.so 15:05:12 [ 93%] Building C object CMakeFiles/yanglint.dir/tools/lint/completion.c.o 15:05:12 [ 93%] Built target user_yang_types 15:05:12 Scanning dependencies of target user_inet_types 15:05:12 [ 95%] Building C object src/user_types/CMakeFiles/user_inet_types.dir/user_inet_types.c.o 15:05:12 [ 96%] Building C object CMakeFiles/yanglint.dir/tools/lint/configuration.c.o 15:05:12 [ 97%] Linking C shared library user_inet_types.so 15:05:12 [ 98%] Building C object CMakeFiles/yanglint.dir/linenoise/linenoise.c.o 15:05:12 [ 98%] Built target user_inet_types 15:05:12 [100%] Linking C executable yanglint 15:05:12 [100%] Built target yanglint 15:05:12 + make install 15:05:12 [ 36%] Built target yangobj_tests 15:05:12 [ 72%] Built target yangobj 15:05:12 [ 73%] Built target yang 15:05:12 [ 82%] Built target yanglint 15:05:12 [ 85%] Built target yangre 15:05:12 [ 87%] Built target yang2yin 15:05:12 [ 90%] Built target metadata 15:05:12 [ 92%] Built target yangdata 15:05:12 [ 95%] Built target nacm 15:05:12 [ 97%] Built target user_yang_types 15:05:12 [100%] Built target user_inet_types 15:05:12 Install the project... 15:05:12 -- Install configuration: "Release" 15:05:12 -- Installing: /opt/lib64/libyang.so.1.4.1 15:05:12 -- Installing: /opt/lib64/libyang.so.1 15:05:12 -- Installing: /opt/lib64/libyang.so 15:05:12 -- Installing: /opt/include/libyang/tree_schema.h 15:05:12 -- Installing: /opt/include/libyang/tree_data.h 15:05:12 -- Installing: /opt/include/libyang/extensions.h 15:05:12 -- Installing: /opt/include/libyang/user_types.h 15:05:12 -- Installing: /opt/include/libyang/xml.h 15:05:12 -- Installing: /opt/include/libyang/dict.h 15:05:12 -- Installing: /opt/include/libyang/libyang.h 15:05:12 -- Installing: /opt/lib64/pkgconfig/libyang.pc 15:05:12 -- Installing: /opt/bin/yanglint 15:05:12 -- Set runtime path of "/opt/bin/yanglint" to "" 15:05:12 -- Installing: /opt/share/man/man1/yanglint.1 15:05:12 -- Installing: /opt/bin/yangre 15:05:12 -- Set runtime path of "/opt/bin/yangre" to "" 15:05:12 -- Installing: /opt/share/man/man1/yangre.1 15:05:12 -- Installing: /opt/lib64/libyang/extensions/nacm.so 15:05:12 -- Set runtime path of "/opt/lib64/libyang/extensions/nacm.so" to "" 15:05:12 -- Installing: /opt/lib64/libyang/extensions/metadata.so 15:05:12 -- Set runtime path of "/opt/lib64/libyang/extensions/metadata.so" to "" 15:05:12 -- Installing: /opt/lib64/libyang/extensions/yangdata.so 15:05:12 -- Set runtime path of "/opt/lib64/libyang/extensions/yangdata.so" to "" 15:05:12 -- Installing: /opt/lib64/libyang/user_types/user_yang_types.so 15:05:12 -- Set runtime path of "/opt/lib64/libyang/user_types/user_yang_types.so" to "" 15:05:12 -- Installing: /opt/lib64/libyang/user_types/user_inet_types.so 15:05:12 -- Set runtime path of "/opt/lib64/libyang/user_types/user_inet_types.so" to "" 15:05:13 Removing intermediate container 0c07b83647c7 15:05:13 ---> 49a9efeb6d15 15:05:13 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 15:05:13 ---> Running in eb53a6c11716 15:05:14 + git clone --depth 1 https://github.com/sysrepo/libredblack.git 15:05:14 Cloning into 'libredblack'... 15:05:14 + cd libredblack 15:05:14 + ./configure '--prefix=/opt' --without-rbgen 15:05:14 checking for a BSD-compatible install... /usr/bin/install -c 15:05:15 checking whether build environment is sane... yes 15:05:15 checking for gawk... no 15:05:15 checking for mawk... no 15:05:15 checking for nawk... no 15:05:15 checking for awk... awk 15:05:15 checking whether make sets $(MAKE)... yes 15:05:15 checking for gcc... gcc 15:05:15 checking for C compiler default output... a.out 15:05:15 checking whether the C compiler works... yes 15:05:15 checking whether we are cross compiling... no 15:05:15 checking for suffix of executables... 15:05:15 checking for suffix of object files... o 15:05:15 checking whether we are using the GNU C compiler... yes 15:05:15 checking whether gcc accepts -g... yes 15:05:15 checking for gcc option to accept ANSI C... none needed 15:05:15 checking for style of include used by make... GNU 15:05:15 checking dependency style of gcc... gcc3 15:05:15 checking for a BSD-compatible install... /usr/bin/install -c 15:05:15 checking build system type... x86_64-unknown-linux-gnu 15:05:15 checking host system type... x86_64-unknown-linux-gnu 15:05:15 checking for ld used by GCC... /usr/x86_64-alpine-linux-musl/bin/ld 15:05:15 checking if the linker (/usr/x86_64-alpine-linux-musl/bin/ld) is GNU ld... yes 15:05:15 checking for /usr/x86_64-alpine-linux-musl/bin/ld option to reload object files... -r 15:05:15 checking for BSD-compatible nm... /usr/bin/nm -B 15:05:15 checking for a sed that does not truncate output... /bin/sed 15:05:15 checking whether ln -s works... yes 15:05:15 checking how to recognise dependent libraries... pass_all 15:05:16 checking command to parse /usr/bin/nm -B output... ok 15:05:16 checking how to run the C preprocessor... gcc -E 15:05:16 checking for egrep... grep -E 15:05:16 checking for ANSI C header files... yes 15:05:16 checking for sys/types.h... yes 15:05:16 checking for sys/stat.h... yes 15:05:16 checking for stdlib.h... yes 15:05:16 checking for string.h... yes 15:05:16 checking for memory.h... yes 15:05:16 checking for strings.h... yes 15:05:16 checking for inttypes.h... yes 15:05:16 checking for stdint.h... yes 15:05:16 checking for unistd.h... yes 15:05:16 checking dlfcn.h usability... yes 15:05:16 checking dlfcn.h presence... yes 15:05:16 checking for dlfcn.h... yes 15:05:16 checking for ranlib... ranlib 15:05:16 checking for strip... strip 15:05:16 checking for objdir... .libs 15:05:16 checking for gcc option to produce PIC... -fPIC 15:05:16 checking if gcc PIC flag -fPIC works... yes 15:05:16 checking if gcc static flag -static works... yes 15:05:16 checking if gcc supports -c -o file.o... yes 15:05:16 checking if gcc supports -c -o file.lo... yes 15:05:16 checking if gcc supports -fno-rtti -fno-exceptions... yes 15:05:16 checking whether the linker (/usr/x86_64-alpine-linux-musl/bin/ld) supports shared libraries... yes 15:05:16 checking how to hardcode library paths into programs... immediate 15:05:16 checking whether stripping libraries is possible... yes 15:05:16 checking dynamic linker characteristics... GNU/Linux ld.so 15:05:16 checking if libtool supports shared libraries... yes 15:05:16 checking whether to build shared libraries... yes 15:05:16 checking whether to build static libraries... yes 15:05:16 checking whether -lc should be explicitly linked in... no 15:05:16 creating libtool 15:05:16 checking for ANSI C header files... (cached) yes 15:05:16 checking for an ANSI C-conforming const... yes 15:05:16 checking for strdup... yes 15:05:16 configure: creating ./config.status 15:05:17 config.status: creating Makefile 15:05:17 config.status: creating libredblack.spec 15:05:17 config.status: creating rbgen 15:05:17 config.status: creating config.h 15:05:17 config.status: executing depfiles commands 15:05:17 config.status: executing default commands 15:05:17 + make 15:05:17 cd . && /bin/sh /usr/src/libredblack/missing --run aclocal-1.6 15:05:17 /usr/src/libredblack/missing: line 46: aclocal-1.6: not found 15:05:17 WARNING: `aclocal-1.6' is missing on your system. You should only need it if 15:05:17 you modified `acinclude.m4' or `configure.in'. You might want 15:05:17 to install the `Automake' and `Perl' packages. Grab them from 15:05:17 any GNU archive site. 15:05:17 cd . && \ 15:05:17 /bin/sh /usr/src/libredblack/missing --run automake-1.6 --gnu Makefile 15:05:17 /usr/src/libredblack/missing: line 46: automake-1.6: not found 15:05:17 WARNING: `automake-1.6' is missing on your system. You should only need it if 15:05:17 you modified `Makefile.am', `acinclude.m4' or `configure.in'. 15:05:17 You might want to install the `Automake' and `Perl' packages. 15:05:17 Grab them from any GNU archive site. 15:05:17 cd . && /bin/sh /usr/src/libredblack/missing --run autoconf 15:05:17 /bin/sh ./config.status --recheck 15:05:17 running /bin/sh ./configure --prefix=/opt --without-rbgen --no-create --no-recursion 15:05:17 checking for a BSD-compatible install... /usr/bin/install -c 15:05:18 checking whether build environment is sane... yes 15:05:18 checking for gawk... no 15:05:18 checking for mawk... no 15:05:18 checking for nawk... no 15:05:18 checking for awk... awk 15:05:18 checking whether make sets $(MAKE)... yes 15:05:18 checking for gcc... gcc 15:05:18 checking whether the C compiler works... yes 15:05:18 checking for C compiler default output file name... a.out 15:05:18 checking for suffix of executables... 15:05:18 checking whether we are cross compiling... no 15:05:18 checking for suffix of object files... o 15:05:18 checking whether we are using the GNU C compiler... yes 15:05:18 checking whether gcc accepts -g... yes 15:05:18 checking for gcc option to accept ISO C89... none needed 15:05:18 checking for style of include used by make... GNU 15:05:18 checking dependency style of gcc... gcc3 15:05:18 checking build system type... x86_64-unknown-linux-gnu 15:05:18 checking host system type... x86_64-unknown-linux-gnu 15:05:18 checking for ld used by GCC... /usr/x86_64-alpine-linux-musl/bin/ld 15:05:18 checking if the linker (/usr/x86_64-alpine-linux-musl/bin/ld) is GNU ld... yes 15:05:18 checking for /usr/x86_64-alpine-linux-musl/bin/ld option to reload object files... -r 15:05:18 checking for BSD-compatible nm... /usr/bin/nm -B 15:05:18 checking for a sed that does not truncate output... /bin/sed 15:05:18 checking whether ln -s works... yes 15:05:18 checking how to recognise dependent libraries... pass_all 15:05:19 checking command to parse /usr/bin/nm -B output... ok 15:05:19 checking how to run the C preprocessor... gcc -E 15:05:19 checking for grep that handles long lines and -e... /bin/grep 15:05:19 checking for egrep... /bin/grep -E 15:05:19 checking for ANSI C header files... yes 15:05:19 checking for sys/types.h... yes 15:05:19 checking for sys/stat.h... yes 15:05:19 checking for stdlib.h... yes 15:05:19 checking for string.h... yes 15:05:19 checking for memory.h... yes 15:05:19 checking for strings.h... yes 15:05:19 checking for inttypes.h... yes 15:05:19 checking for stdint.h... yes 15:05:19 checking for unistd.h... yes 15:05:19 checking dlfcn.h usability... yes 15:05:19 checking dlfcn.h presence... yes 15:05:19 checking for dlfcn.h... yes 15:05:19 checking for ranlib... ranlib 15:05:19 checking for strip... strip 15:05:19 checking for objdir... .libs 15:05:19 checking for gcc option to produce PIC... -fPIC 15:05:19 checking if gcc PIC flag -fPIC works... yes 15:05:19 checking if gcc static flag -static works... yes 15:05:19 checking if gcc supports -c -o file.o... yes 15:05:19 checking if gcc supports -c -o file.lo... yes 15:05:19 checking if gcc supports -fno-rtti -fno-exceptions... no 15:05:19 checking whether the linker (/usr/x86_64-alpine-linux-musl/bin/ld) supports shared libraries... yes 15:05:19 checking how to hardcode library paths into programs... immediate 15:05:19 checking whether stripping libraries is possible... yes 15:05:19 checking dynamic linker characteristics... GNU/Linux ld.so 15:05:19 checking if libtool supports shared libraries... yes 15:05:19 checking whether to build shared libraries... yes 15:05:19 checking whether to build static libraries... yes 15:05:19 checking whether -lc should be explicitly linked in... no 15:05:19 creating libtool 15:05:19 checking for ANSI C header files... (cached) yes 15:05:19 checking for an ANSI C-conforming const... yes 15:05:19 checking for strdup... yes 15:05:19 configure: creating ./config.status 15:05:19 cd . && /bin/sh ./config.status Makefile depfiles 15:05:20 config.status: creating Makefile 15:05:20 config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir setting 15:05:20 config.status: executing depfiles commands 15:05:20 cd . && /bin/sh /usr/src/libredblack/missing --run autoheader 15:05:20 touch ./config.h.in 15:05:20 cd . && /bin/sh ./config.status config.h 15:05:20 config.status: creating config.h 15:05:20 make all-am 15:05:20 make[1]: Entering directory '/usr/src/libredblack' 15:05:20 source='redblack.c' object='redblack.lo' libtool=yes \ 15:05:20 depfile='.deps/redblack.Plo' tmpdepfile='.deps/redblack.TPlo' \ 15:05:20 depmode=gcc3 /bin/sh ./depcomp \ 15:05:20 /bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c -o redblack.lo `test -f 'redblack.c' || echo './'`redblack.c 15:05:20 mkdir .libs 15:05:20 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 15:05:20 redblack.c: In function 'rbinit': 15:05:20 redblack.c:143:7: warning: variable 'c' set but not used [-Wunused-but-set-variable] 15:05:20 143 | char c; 15:05:20 | ^ 15:05:20 gcc -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 15:05:20 mv -f .libs/redblack.lo redblack.lo 15:05:20 /bin/sh ./libtool --mode=link gcc -Wall -o libredblack.la -rpath /opt/lib -version-info 2:3:2 redblack.lo 15:05:20 rm -fr .libs/libredblack.la .libs/libredblack.* .libs/libredblack.* 15:05:20 gcc -shared redblack.lo -Wl,-soname -Wl,libredblack.so.0 -o .libs/libredblack.so.0.2.3 15:05:20 (cd .libs && rm -f libredblack.so.0 && ln -s libredblack.so.0.2.3 libredblack.so.0) 15:05:20 (cd .libs && rm -f libredblack.so && ln -s libredblack.so.0.2.3 libredblack.so) 15:05:20 ar cru .libs/libredblack.a redblack.o 15:05:20 ar: `u' modifier ignored since `D' is the default (see `U') 15:05:20 ranlib .libs/libredblack.a 15:05:20 creating libredblack.la 15:05:20 (cd .libs && rm -f libredblack.la && ln -s ../libredblack.la libredblack.la) 15:05:20 source='example.c' object='example.o' libtool=no \ 15:05:20 depfile='.deps/example.Po' tmpdepfile='.deps/example.TPo' \ 15:05:20 depmode=gcc3 /bin/sh ./depcomp \ 15:05:20 gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example.c' || echo './'`example.c 15:05:20 /bin/sh ./libtool --mode=link gcc -Wall -o example example.o libredblack.la 15:05:20 gcc -Wall -o .libs/example example.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib 15:05:20 creating example 15:05:20 source='example1.c' object='example1.o' libtool=no \ 15:05:20 depfile='.deps/example1.Po' tmpdepfile='.deps/example1.TPo' \ 15:05:20 depmode=gcc3 /bin/sh ./depcomp \ 15:05:20 gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example1.c' || echo './'`example1.c 15:05:20 /bin/sh ./libtool --mode=link gcc -Wall -o example1 example1.o libredblack.la 15:05:20 gcc -Wall -o .libs/example1 example1.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib 15:05:20 creating example1 15:05:20 source='example2.c' object='example2.o' libtool=no \ 15:05:20 depfile='.deps/example2.Po' tmpdepfile='.deps/example2.TPo' \ 15:05:20 depmode=gcc3 /bin/sh ./depcomp \ 15:05:20 gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example2.c' || echo './'`example2.c 15:05:20 /bin/sh ./libtool --mode=link gcc -Wall -o example2 example2.o libredblack.la 15:05:20 gcc -Wall -o .libs/example2 example2.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib 15:05:20 creating example2 15:05:20 source='example3.c' object='example3.o' libtool=no \ 15:05:20 depfile='.deps/example3.Po' tmpdepfile='.deps/example3.TPo' \ 15:05:20 depmode=gcc3 /bin/sh ./depcomp \ 15:05:20 gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example3.c' || echo './'`example3.c 15:05:20 /bin/sh ./libtool --mode=link gcc -Wall -o example3 example3.o libredblack.la 15:05:20 gcc -Wall -o .libs/example3 example3.o ./.libs/libredblack.so -Wl,--rpath -Wl,/opt/lib 15:05:20 creating example3 15:05:20 echo 'int main() { return(0); }' > example4.c 15:05:20 source='example4.c' object='example4.o' libtool=no \ 15:05:20 depfile='.deps/example4.Po' tmpdepfile='.deps/example4.TPo' \ 15:05:20 depmode=gcc3 /bin/sh ./depcomp \ 15:05:20 gcc -DHAVE_CONFIG_H -I. -I. -I. -Wall -c `test -f 'example4.c' || echo './'`example4.c 15:05:20 /bin/sh ./libtool --mode=link gcc -Wall -o example4 example4.o 15:05:20 gcc -Wall -o example4 example4.o 15:05:20 make[1]: Leaving directory '/usr/src/libredblack' 15:05:20 + make install 15:05:20 make[1]: Entering directory '/usr/src/libredblack' 15:05:20 /bin/sh ./mkinstalldirs /opt/bin 15:05:20 /bin/sh ./mkinstalldirs /opt/lib 15:05:20 mkdir -p -- /opt/lib 15:05:20 /bin/sh ./libtool --mode=install /usr/bin/install -c libredblack.la /opt/lib/libredblack.la 15:05:20 /usr/bin/install -c .libs/libredblack.so.0.2.3 /opt/lib/libredblack.so.0.2.3 15:05:20 (cd /opt/lib && rm -f libredblack.so.0 && ln -s libredblack.so.0.2.3 libredblack.so.0) 15:05:20 (cd /opt/lib && rm -f libredblack.so && ln -s libredblack.so.0.2.3 libredblack.so) 15:05:20 /usr/bin/install -c .libs/libredblack.lai /opt/lib/libredblack.la 15:05:20 /usr/bin/install -c .libs/libredblack.a /opt/lib/libredblack.a 15:05:20 ranlib /opt/lib/libredblack.a 15:05:20 chmod 644 /opt/lib/libredblack.a 15:05:20 PATH="$PATH:/sbin" ldconfig -n /opt/lib 15:05:20 ---------------------------------------------------------------------- 15:05:20 Libraries have been installed in: 15:05:20 /opt/lib 15:05:20 15:05:20 If you ever happen to want to link against installed libraries 15:05:20 in a given directory, LIBDIR, you must either use libtool, and 15:05:20 specify the full pathname of the library, or use the `-LLIBDIR' 15:05:20 flag during linking and do at least one of the following: 15:05:20 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable 15:05:20 during execution 15:05:20 - add LIBDIR to the `LD_RUN_PATH' environment variable 15:05:20 during linking 15:05:20 - use the `-Wl,--rpath -Wl,LIBDIR' linker flag 15:05:20 15:05:20 See any operating system documentation about shared libraries for 15:05:20 more information, such as the ld(1) and ld.so(8) manual pages. 15:05:20 ---------------------------------------------------------------------- 15:05:20 /bin/sh ./mkinstalldirs /opt/include 15:05:20 /usr/bin/install -c -m 644 redblack.h /opt/include/redblack.h 15:05:20 /bin/sh ./mkinstalldirs /opt/share/man/man1 15:05:20 /usr/bin/install -c -m 644 ./rbgen.1 /opt/share/man/man1/rbgen.1 15:05:20 /bin/sh ./mkinstalldirs /opt/share/man/man3 15:05:20 mkdir -p -- /opt/share/man/man3 15:05:20 /usr/bin/install -c -m 644 ./rbdelete.3 /opt/share/man/man3/rbdelete.3 15:05:20 /usr/bin/install -c -m 644 ./rbdestroy.3 /opt/share/man/man3/rbdestroy.3 15:05:20 /usr/bin/install -c -m 644 ./rbfind.3 /opt/share/man/man3/rbfind.3 15:05:20 /usr/bin/install -c -m 644 ./rbinit.3 /opt/share/man/man3/rbinit.3 15:05:20 /usr/bin/install -c -m 644 ./rbsearch.3 /opt/share/man/man3/rbsearch.3 15:05:20 /usr/bin/install -c -m 644 ./rblookup.3 /opt/share/man/man3/rblookup.3 15:05:20 /usr/bin/install -c -m 644 ./rbwalk.3 /opt/share/man/man3/rbwalk.3 15:05:20 /usr/bin/install -c -m 644 ./rbopenlist.3 /opt/share/man/man3/rbopenlist.3 15:05:20 /usr/bin/install -c -m 644 ./rbreadlist.3 /opt/share/man/man3/rbreadlist.3 15:05:21 /usr/bin/install -c -m 644 ./rbcloselist.3 /opt/share/man/man3/rbcloselist.3 15:05:21 /bin/sh ./mkinstalldirs /opt/share/libredblack 15:05:21 mkdir -p -- /opt/share/libredblack 15:05:21 /usr/bin/install -c -m 644 redblack.c /opt/share/libredblack/redblack.c 15:05:21 /usr/bin/install -c -m 644 redblack.h /opt/share/libredblack/redblack.h 15:05:21 make[1]: Leaving directory '/usr/src/libredblack' 15:05:21 Removing intermediate container eb53a6c11716 15:05:21 ---> e0c55f482e1a 15:05:21 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 15:05:21 ---> Running in 00119ecda402 15:05:21 + git clone --branch 1.2.14 --depth 1 https://github.com/HardySimpson/zlog 15:05:21 Cloning into 'zlog'... 15:05:22 + cd zlog/src 15:05:22 + make 'PREFIX=/opt' 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb buf.c 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb category.c 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb category_table.c 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb conf.c 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb event.c 15:05:22 event.c: In function 'zlog_event_new': 15:05:22 event.c:91:65: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 15:05:22 91 | a_event->tid_hex_str_len = sprintf(a_event->tid_hex_str, "%x", (unsigned int)a_event->tid); 15:05:22 | ^ 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb format.c 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb level.c 15:05:22 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb level_list.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb mdc.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb record.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb record_table.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb rotater.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb rule.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb spec.c 15:05:23 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb thread.c 15:05:24 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_arraylist.c 15:05:24 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_hashtable.c 15:05:24 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_profile.c 15:05:24 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zc_util.c 15:05:24 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zlog.c 15:05:24 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 15:05:24 # for use in test folder - linux and requirement for aix runtime 15:05:24 # resolving 15:05:24 cp -f libzlog.so libzlog.so.1 15:05:24 cp -f libzlog.so libzlog.so.1.2 15:05:24 cc -std=c99 -pedantic -c -O2 -fPIC -pthread -Wall -Wstrict-prototypes -fwrapv -g -ggdb zlog-chk-conf.c 15:05:24 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 15:05:24 cc -o zlog-chk-conf zlog-chk-conf.o -L. -lzlog -pthread 15:05:24 + make install 'PREFIX=/opt' 15:05:24 mkdir -p /opt/include /opt/lib /opt/bin 15:05:24 cp -a zlog.h /opt/include 15:05:24 cp -a zlog-chk-conf /opt/bin 15:05:24 cp -a libzlog.so /opt/lib/libzlog.so.1.2 15:05:24 cd /opt/lib && ln -sf libzlog.so.1.2 libzlog.so.1 15:05:24 cd /opt/lib && ln -sf libzlog.so.1 libzlog.so 15:05:24 cp -a libzlog.a /opt/lib 15:05:25 Removing intermediate container 00119ecda402 15:05:25 ---> 5921b5fd231a 15:05:25 Step 16/47 : COPY patches/sysrepo/ ./patches/sysrepo/ 15:05:25 ---> 42a4ca9e7a97 15:05:25 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 15:05:25 ---> Running in 05f24ef5a86f 15:05:25 + git clone --branch v0.7.9 --depth 1 https://github.com/sysrepo/sysrepo.git 15:05:25 Cloning into 'sysrepo'... 15:05:26 + cd sysrepo 15:05:26 + patch -p1 -i ../patches/sysrepo/01-configurable-PYTHON_MODULE_PATH.patch 15:05:26 + patch -p1 -i ../patches/sysrepo/02-zlog.patch 15:05:26 patching file swig/python/CMakeLists.txt 15:05:26 patching file CMakeLists.txt 15:05:26 patching file src/CMakeLists.txt 15:05:26 patching file src/common/sr_logger.c 15:05:26 patching file src/common/sr_logger.h 15:05:26 patching file src/executables/sysrepocfg.c 15:05:26 patching file src/executables/sysrepoctl.c 15:05:26 patching file src/clientlib/client_library.c 15:05:26 + mkdir build 15:05:26 + cd build 15:05:26 + 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' .. 15:05:26 -- The C compiler identification is GNU 9.3.0 15:05:26 -- The CXX compiler identification is GNU 9.3.0 15:05:26 -- Check for working C compiler: /usr/bin/cc 15:05:26 -- Check for working C compiler: /usr/bin/cc -- works 15:05:26 -- Detecting C compiler ABI info 15:05:26 -- Detecting C compiler ABI info - done 15:05:26 -- Detecting C compile features 15:05:26 -- Detecting C compile features - done 15:05:26 -- Check for working CXX compiler: /usr/bin/c++ 15:05:27 -- Check for working CXX compiler: /usr/bin/c++ -- works 15:05:27 -- Detecting CXX compiler ABI info 15:05:27 -- Detecting CXX compiler ABI info - done 15:05:27 -- Detecting CXX compile features 15:05:27 -- Detecting CXX compile features - done 15:05:27 -- Preparing systemwide build of sysrepo v. 0.7.8 15:05:27 -- sysrepo repository location: /opt/etc/sysrepo 15:05:27 -- Found ev: /usr/lib/libev.so 15:05:27 -- Found yang: /opt/lib64/libyang.so 15:05:27 -- Found protobuf-c: /usr/lib/libprotobuf-c.so 15:05:27 -- Could NOT find avl (missing: AVL_LIBRARY AVL_INCLUDE_DIR) 15:05:27 -- Found redblack: /opt/lib/libredblack.so 15:05:27 -- libredblack will be used for binary tree manipulations. 15:05:27 -- Looking for stdatomic.h 15:05:27 -- Looking for stdatomic.h - found 15:05:27 -- Looking for pthread_rwlockattr_setkind_np 15:05:27 -- Looking for pthread_rwlockattr_setkind_np - not found 15:05:27 -- Looking for getpeereid 15:05:27 -- Looking for getpeereid - not found 15:05:27 -- Looking for getpeerucred 15:05:27 -- Looking for getpeerucred - not found 15:05:27 -- Looking for include file ucred.h 15:05:27 -- Looking for include file ucred.h - not found 15:05:27 -- Looking for pthread_mutex_timedlock 15:05:27 -- Looking for pthread_mutex_timedlock - found 15:05:27 -- Looking for setfsuid 15:05:27 -- Looking for setfsuid - found 15:05:27 -- Looking for fsetxattr 15:05:27 -- Looking for fsetxattr - found 15:05:27 -- Looking for mkstemps 15:05:27 -- Looking for mkstemps - found 15:05:27 -- Performing Test HAVE_STAT_ST_MTIM 15:05:27 -- Performing Test HAVE_STAT_ST_MTIM - Success 15:05:27 -- Looking for F_OFD_SETLKW 15:05:27 -- Looking for F_OFD_SETLKW - found 15:05:28 -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 15:05:28 -- Found SWIG: /usr/bin/swig (found suitable version "3.0.12", minimum required is "3.0.12") 15:05:28 -- Python version 3 was selected 15:05:28 -- Found PythonLibs: /usr/local/lib/libpython3.7m.so (found suitable version "3.7.7", minimum required is "3") 15:05:28 -- Found PythonInterp: /usr/local/bin/python3.7 (found version "3.7.7") 15:05:28 -- Found SWIG: /usr/bin/swig (found suitable version "3.0.12", minimum required is "3.0.5") 15:05:28 -- Configuring done 15:05:28 -- Generating done 15:05:28 -- Build files have been written to: /usr/src/sysrepo/build 15:05:28 + make -j2 15:05:28 [ 1%] Running C protocol buffer compiler on /usr/src/sysrepo/src/sysrepo.proto 15:05:28 Scanning dependencies of target sysrepo_swig_compilation 15:05:28 [ 3%] Swig compile sysrepo.i for python 15:05:28 Scanning dependencies of target COMMON 15:05:28 [ 5%] Building C object src/CMakeFiles/COMMON.dir/common/sysrepo.pb-c.c.o 15:05:29 [ 7%] Building C object src/CMakeFiles/COMMON.dir/common/sr_common.c.o 15:05:29 [ 9%] Building C object src/CMakeFiles/COMMON.dir/common/sr_utils.c.o 15:05:29 [ 9%] Built target sysrepo_swig_compilation 15:05:29 [ 11%] Building C object src/CMakeFiles/COMMON.dir/common/sr_data_structs.c.o 15:05:29 [ 13%] Building C object src/CMakeFiles/COMMON.dir/common/sr_logger.c.o 15:05:30 [ 15%] Building C object src/CMakeFiles/COMMON.dir/common/sr_protobuf.c.o 15:05:30 [ 17%] Building C object src/CMakeFiles/COMMON.dir/common/sr_mem_mgmt.c.o 15:05:30 [ 19%] Building C object src/CMakeFiles/COMMON.dir/utils/plugins.c.o 15:05:30 [ 21%] Building C object src/CMakeFiles/COMMON.dir/utils/trees.c.o 15:05:30 [ 23%] Building C object src/CMakeFiles/COMMON.dir/utils/values.c.o 15:05:30 [ 25%] Building C object src/CMakeFiles/COMMON.dir/utils/xpath.c.o 15:05:31 [ 25%] Built target COMMON 15:05:31 Scanning dependencies of target SR_ENGINE 15:05:31 Scanning dependencies of target SR_SRC 15:05:31 [ 27%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/client_library.c.o 15:05:31 [ 29%] Building C object src/CMakeFiles/SR_ENGINE.dir/access_control.c.o 15:05:31 [ 31%] Building C object src/CMakeFiles/SR_ENGINE.dir/connection_manager.c.o 15:05:31 [ 33%] Building C object src/CMakeFiles/SR_ENGINE.dir/cm_session_manager.c.o 15:05:32 [ 35%] Building C object src/CMakeFiles/SR_ENGINE.dir/request_processor.c.o 15:05:32 [ 37%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/cl_subscription_manager.c.o 15:05:32 [ 39%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/cl_common.c.o 15:05:33 [ 41%] Building C object src/CMakeFiles/SR_SRC.dir/clientlib/cl_trees.c.o 15:05:33 [ 41%] Built target SR_SRC 15:05:33 [ 43%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_xpath.c.o 15:05:33 [ 45%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_lookup.c.o 15:05:33 [ 47%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_get.c.o 15:05:33 [ 49%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_edit.c.o 15:05:33 [ 50%] Building C object src/CMakeFiles/SR_ENGINE.dir/rp_dt_filter.c.o 15:05:34 [ 52%] Building C object src/CMakeFiles/SR_ENGINE.dir/data_manager.c.o 15:05:34 [ 54%] Building C object src/CMakeFiles/SR_ENGINE.dir/notification_processor.c.o 15:05:34 [ 56%] Building C object src/CMakeFiles/SR_ENGINE.dir/persistence_manager.c.o 15:05:35 [ 58%] Building C object src/CMakeFiles/SR_ENGINE.dir/module_dependencies.c.o 15:05:36 [ 60%] Building C object src/CMakeFiles/SR_ENGINE.dir/nacm.c.o 15:05:37 [ 60%] Built target SR_ENGINE 15:05:37 Scanning dependencies of target sysrepo_a 15:05:37 Scanning dependencies of target sysrepo 15:05:37 [ 62%] Linking C static library libsysrepo.a 15:05:37 [ 64%] Linking C shared library libsysrepo.so 15:05:37 [ 64%] Built target sysrepo_a 15:05:37 [ 64%] Built target sysrepo 15:05:37 Scanning dependencies of target sysrepoctl 15:05:37 Scanning dependencies of target sysrepod 15:05:37 [ 66%] Building C object src/CMakeFiles/sysrepoctl.dir/executables/sysrepoctl.c.o 15:05:37 [ 68%] Building C object src/CMakeFiles/sysrepod.dir/executables/sysrepod.c.o 15:05:37 [ 70%] Linking C executable sysrepod 15:05:37 [ 70%] Built target sysrepod 15:05:37 Scanning dependencies of target sysrepo-plugind 15:05:37 [ 72%] Building C object src/CMakeFiles/sysrepo-plugind.dir/executables/sysrepo-plugind.c.o 15:05:37 [ 74%] Linking C executable sysrepo-plugind 15:05:37 [ 74%] Built target sysrepo-plugind 15:05:37 Scanning dependencies of target sysrepocfg 15:05:37 [ 76%] Building C object src/CMakeFiles/sysrepocfg.dir/executables/sysrepocfg.c.o 15:05:37 [ 78%] Linking C executable sysrepoctl 15:05:37 [ 78%] Built target sysrepoctl 15:05:37 Scanning dependencies of target Sysrepo-cpp 15:05:37 [ 80%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Sysrepo.cpp.o 15:05:38 [ 82%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Connection.cpp.o 15:05:38 [ 84%] Linking C executable sysrepocfg 15:05:38 [ 84%] Built target sysrepocfg 15:05:38 [ 86%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Session.cpp.o 15:05:38 [ 88%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Struct.cpp.o 15:05:39 [ 90%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Xpath.cpp.o 15:05:39 [ 92%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Tree.cpp.o 15:05:39 [ 94%] Building CXX object swig/CMakeFiles/Sysrepo-cpp.dir/cpp/src/Internal.cpp.o 15:05:40 [ 96%] Linking CXX shared library libSysrepo-cpp.so 15:05:40 [ 96%] Built target Sysrepo-cpp 15:05:40 Scanning dependencies of target _sysrepo 15:05:40 [ 98%] Building CXX object swig/python/CMakeFiles/_sysrepo.dir/sysrepoPYTHON_wrap.cxx.o 15:05:56 [100%] Linking CXX shared module _sysrepo.so 15:05:56 [100%] Built target _sysrepo 15:05:56 + make install 15:05:56 [ 23%] Built target COMMON 15:05:56 [ 50%] Built target SR_ENGINE 15:05:56 [ 58%] Built target SR_SRC 15:05:56 [ 60%] Built target sysrepo 15:05:56 [ 62%] Built target sysrepo_a 15:05:56 [ 66%] Built target sysrepoctl 15:05:56 [ 70%] Built target sysrepod 15:05:56 [ 74%] Built target sysrepo-plugind 15:05:56 [ 78%] Built target sysrepocfg 15:05:56 [ 94%] Built target Sysrepo-cpp 15:05:56 [ 96%] Built target sysrepo_swig_compilation 15:05:56 [100%] Built target _sysrepo 15:05:56 Install the project... 15:05:56 -- Install configuration: "Release" 15:05:56 -- Installing: /opt/etc/sysrepo 15:05:56 -- Installing: /opt/etc/sysrepo/yang/ 15:05:56 -- Installing: /opt/etc/sysrepo/data/ 15:05:56 -- Installing: /opt/etc/sysrepo/data/internal/ 15:05:56 -- Installing: /var/run/sysrepo-subscriptions 15:05:56 -- Installing: /opt/lib64/sysrepo/plugins 15:05:56 -- Installing: /opt/etc/sysrepo/yang/internal/sysrepo-persistent-data.yang 15:05:56 -- Installing: /opt/etc/sysrepo/yang/internal/sysrepo-module-dependencies.yang 15:05:56 -- Installing: /opt/etc/sysrepo/yang/internal/sysrepo-notification-store.yang 15:05:56 -- Installing: /opt/lib64/pkgconfig/libsysrepo.pc 15:05:56 -- Installing: /opt/share/man/man1/sysrepoctl.1 15:05:56 -- Installing: /opt/share/man/man1/sysrepocfg.1 15:05:56 -- Exec: /usr/src/sysrepo/build/src/sysrepoctl --install --yang=/usr/src/sysrepo/yang/ietf-netconf-notifications.yang --permissions=666 15:05:56 -- Exec: /usr/src/sysrepo/build/src/sysrepoctl --install --yang=/usr/src/sysrepo/yang/nc-notifications.yang --permissions=666 15:05:56 -- Exec: /usr/src/sysrepo/build/src/sysrepoctl --install --yang=/usr/src/sysrepo/yang/notifications.yang --permissions=666 15:05:56 -- Installing: /opt/lib64/libsysrepo.so.0.7.8 15:05:56 -- Installing: /opt/lib64/libsysrepo.so.0.7 15:05:56 -- Set runtime path of "/opt/lib64/libsysrepo.so.0.7.8" to "" 15:05:56 -- Installing: /opt/lib64/libsysrepo.so 15:05:56 -- Installing: /opt/lib64/libsysrepo.a 15:05:56 -- Installing: /opt/bin/sysrepod 15:05:56 -- Set runtime path of "/opt/bin/sysrepod" to "" 15:05:56 -- Installing: /opt/bin/sysrepo-plugind 15:05:56 -- Set runtime path of "/opt/bin/sysrepo-plugind" to "" 15:05:56 -- Installing: /opt/bin/sysrepoctl 15:05:56 -- Set runtime path of "/opt/bin/sysrepoctl" to "" 15:05:56 -- Installing: /opt/bin/sysrepocfg 15:05:56 -- Set runtime path of "/opt/bin/sysrepocfg" to "" 15:05:56 -- Up-to-date: /opt/include 15:05:56 -- Installing: /opt/include/sysrepo 15:05:56 -- Installing: /opt/include/sysrepo/values.h 15:05:56 -- Installing: /opt/include/sysrepo/trees.h 15:05:56 -- Installing: /opt/include/sysrepo/plugins.h 15:05:56 -- Installing: /opt/include/sysrepo/xpath.h 15:05:56 -- Installing: /opt/include/sysrepo.h 15:05:56 -- Installing: /opt/lib64/libSysrepo-cpp.so.0.7.8 15:05:56 -- Installing: /opt/lib64/libSysrepo-cpp.so.0.7 15:05:56 -- Set runtime path of "/opt/lib64/libSysrepo-cpp.so.0.7.8" to "" 15:05:56 -- Installing: /opt/lib64/libSysrepo-cpp.so 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Sysrepo.hpp 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Connection.hpp 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Session.hpp 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Struct.hpp 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Xpath.hpp 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Tree.hpp 15:05:56 -- Installing: /opt/include/sysrepo-cpp/Internal.hpp 15:05:56 -- Installing: /opt/lib64/pkgconfig/libSysrepo-cpp.pc 15:05:56 -- Installing: /opt/lib/python3.7/site-packages/_sysrepo.so 15:05:56 -- Installing: /opt/lib/python3.7/site-packages/sysrepo.py 15:05:57 Removing intermediate container 05f24ef5a86f 15:05:57 ---> a0da05cdaf04 15:05:57 Step 18/47 : COPY patches/libnetconf2/ ./patches/libnetconf2/ 15:05:57 ---> 54138495f26b 15:05:57 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 15:05:58 ---> Running in a5a52d1a8a12 15:05:58 + git clone --branch v0.12-r2 --depth 1 https://github.com/CESNET/libnetconf2.git 15:05:58 Cloning into 'libnetconf2'... 15:05:58 + cd libnetconf2 15:05:58 + patch -p1 -i ../patches/libnetconf2/01-configurable-PYTHON_MODULE_PATH.patch 15:05:58 patching file python/CMakeLists.txt 15:05:58 + patch -p1 -i ../patches/libnetconf2/02-fix-missing-include-dir.patch 15:05:58 patching file python/setup.py.in 15:05:58 + patch -p1 -i ../patches/libnetconf2/03-fix-missing-pthread_rwlockattr_setkind_np.patch 15:05:58 patching file src/session_server.c 15:05:58 + patch -p1 -i ../patches/libnetconf2/04-io-log.patch 15:05:58 patching file src/io.c 15:05:58 + mkdir build 15:05:58 + cd build 15:05:58 + cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DENABLE_BUILD_TESTS=OFF' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DENABLE_PYTHON=OFF' .. 15:05:58 -- The C compiler identification is GNU 9.3.0 15:05:58 -- Check for working C compiler: /usr/bin/cc 15:05:59 -- Check for working C compiler: /usr/bin/cc -- works 15:05:59 -- Detecting C compiler ABI info 15:05:59 -- Detecting C compiler ABI info - done 15:05:59 -- Detecting C compile features 15:05:59 -- Detecting C compile features - done 15:05:59 CMake Warning at CMakeLists.txt:98 (message): 15:05:59 Missing tools (devscripts, debhelper package) for building deb package. 15:05:59 15:05:59 You won't be able to generate deb package from source code. 15:05:59 15:05:59 Compiling libnetconf2 should still works fine. 15:05:59 15:05:59 15:05:59 CMake Warning at CMakeLists.txt:109 (message): 15:05:59 Missing tools (rpm package) for building rpm package. 15:05:59 15:05:59 You won't be able to generate rpm package from source code. 15:05:59 15:05:59 Compiling libnetconf2 should still works fine. 15:05:59 15:05:59 15:05:59 -- Looking for pthread.h 15:05:59 -- Looking for pthread.h - found 15:05:59 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD 15:05:59 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success 15:05:59 -- Found Threads: TRUE 15:05:59 -- Looking for stdatomic.h 15:05:59 CMake Warning (dev) at /usr/share/cmake/Modules/CheckIncludeFile.cmake:80 (message): 15:05:59 Policy CMP0075 is not set: Include file check macros honor 15:05:59 CMAKE_REQUIRED_LIBRARIES. Run "cmake --help-policy CMP0075" for policy 15:05:59 details. Use the cmake_policy command to set the policy and suppress this 15:05:59 warning. 15:05:59 15:05:59 CMAKE_REQUIRED_LIBRARIES is set to: 15:05:59 15:05:59 pthread 15:05:59 15:05:59 For compatibility with CMake 3.11 and below this check is ignoring it. 15:05:59 Call Stack (most recent call first): 15:05:59 CMakeLists.txt:177 (check_include_file) 15:05:59 This warning is for project developers. Use -Wno-dev to suppress it. 15:05:59 15:05:59 -- Looking for stdatomic.h - found 15:05:59 -- Looking for pthread_mutex_timedlock 15:05:59 -- Looking for pthread_mutex_timedlock - found 15:05:59 -- Found OpenSSL: /usr/lib/libcrypto.so (found version "1.1.1l") 15:05:59 -- Found LibSSH: /usr/lib/ (Required is at least version "0.7.0") 15:05:59 -- Performing Test HAVE_LIBSSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES 15:05:59 -- Performing Test HAVE_LIBSSH_OPTIONS_PUBLICKEY_ACCEPTED_TYPES - Success 15:05:59 -- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 15:05:59 -- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 15:05:59 CMake Warning at CMakeLists.txt:267 (message): 15:05:59 pkg-config will not detect the new package after installation, adjust 15:05:59 PKG_CONFIG_PATH using "export 15:05:59 PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:lib64/pkgconfig". 15:05:59 15:05:59 15:05:59 -- Configuring done 15:05:59 -- Generating done 15:05:59 -- Build files have been written to: /usr/src/libnetconf2/build 15:05:59 + make 15:05:59 Scanning dependencies of target netconf2 15:05:59 [ 7%] Building C object CMakeFiles/netconf2.dir/src/io.c.o 15:06:00 [ 15%] Building C object CMakeFiles/netconf2.dir/src/log.c.o 15:06:00 [ 23%] Building C object CMakeFiles/netconf2.dir/src/messages_client.c.o 15:06:00 [ 30%] Building C object CMakeFiles/netconf2.dir/src/messages_server.c.o 15:06:00 [ 38%] Building C object CMakeFiles/netconf2.dir/src/session.c.o 15:06:00 /usr/src/libnetconf2/src/session.c:1368:1: warning: 'nc_ssh_destroy' defined but not used [-Wunused-function] 15:06:00 1368 | nc_ssh_destroy(void) 15:06:00 | ^~~~~~~~~~~~~~ 15:06:00 /usr/src/libnetconf2/src/session.c:1361:1: warning: 'nc_ssh_init' defined but not used [-Wunused-function] 15:06:00 1361 | nc_ssh_init(void) 15:06:00 | ^~~~~~~~~~~ 15:06:01 [ 46%] Building C object CMakeFiles/netconf2.dir/src/session_client.c.o 15:06:02 [ 53%] Building C object CMakeFiles/netconf2.dir/src/session_server.c.o 15:06:02 [ 61%] Building C object CMakeFiles/netconf2.dir/src/time.c.o 15:06:03 [ 69%] Building C object CMakeFiles/netconf2.dir/src/session_client_ssh.c.o 15:06:03 /usr/src/libnetconf2/src/session_client_ssh.c: In function 'sshauth_hostkey_check': 15:06:03 /usr/src/libnetconf2/src/session_client_ssh.c:284:5: warning: 'ssh_is_server_known' is deprecated [-Wdeprecated-declarations] 15:06:03 284 | state = ssh_is_server_known(session); 15:06:03 | ^~~~~ 15:06:03 In file included from /usr/src/libnetconf2/src/session_client_ssh.c:40: 15:06:03 /usr/include/libssh/libssh.h:561:31: note: declared here 15:06:03 561 | SSH_DEPRECATED LIBSSH_API int ssh_is_server_known(ssh_session session); 15:06:03 | ^~~~~~~~~~~~~~~~~~~ 15:06:03 /usr/src/libnetconf2/src/session_client_ssh.c:286:5: warning: 'ssh_get_publickey' is deprecated [-Wdeprecated-declarations] 15:06:03 286 | ret = ssh_get_publickey(session, &srv_pubkey); 15:06:03 | ^~~ 15:06:03 In file included from /usr/src/libnetconf2/src/session_client_ssh.c:40: 15:06:03 /usr/include/libssh/libssh.h:558:31: note: declared here 15:06:03 558 | SSH_DEPRECATED LIBSSH_API int ssh_get_publickey(ssh_session session, ssh_key *key); 15:06:03 | ^~~~~~~~~~~~~~~~~ 15:06:03 /usr/src/libnetconf2/src/session_client_ssh.c:388:17: warning: 'ssh_write_knownhost' is deprecated [-Wdeprecated-declarations] 15:06:03 388 | ret = ssh_write_knownhost(session); 15:06:03 | ^~~ 15:06:03 In file included from /usr/src/libnetconf2/src/session_client_ssh.c:40: 15:06:03 /usr/include/libssh/libssh.h:559:31: note: declared here 15:06:03 559 | SSH_DEPRECATED LIBSSH_API int ssh_write_knownhost(ssh_session session); 15:06:03 | ^~~~~~~~~~~~~~~~~~~ 15:06:03 [ 76%] Building C object CMakeFiles/netconf2.dir/src/session_server_ssh.c.o 15:06:04 [ 84%] Building C object CMakeFiles/netconf2.dir/src/session_client_tls.c.o 15:06:04 [ 92%] Building C object CMakeFiles/netconf2.dir/src/session_server_tls.c.o 15:06:04 [100%] Linking C shared library libnetconf2.so 15:06:04 [100%] Built target netconf2 15:06:04 + make install 15:06:04 [100%] Built target netconf2 15:06:04 Install the project... 15:06:05 -- Install configuration: "Release" 15:06:05 -- Installing: /opt/lib64/libnetconf2.so.0.12.55 15:06:05 -- Installing: /opt/lib64/libnetconf2.so.0.12 15:06:05 -- Set runtime path of "/opt/lib64/libnetconf2.so.0.12.55" to "" 15:06:05 -- Installing: /opt/lib64/libnetconf2.so 15:06:05 -- Installing: /opt/include/nc_client.h 15:06:05 -- Installing: /opt/include/nc_server.h 15:06:05 -- Installing: /opt/include/libnetconf2/log.h 15:06:05 -- Installing: /opt/include/libnetconf2/netconf.h 15:06:05 -- Installing: /opt/include/libnetconf2/session.h 15:06:05 -- Installing: /opt/include/libnetconf2/messages_client.h 15:06:05 -- Installing: /opt/include/libnetconf2/messages_server.h 15:06:05 -- Installing: /opt/include/libnetconf2/session_client.h 15:06:05 -- Installing: /opt/include/libnetconf2/session_client_ch.h 15:06:05 -- Installing: /opt/include/libnetconf2/session_server.h 15:06:05 -- Installing: /opt/include/libnetconf2/session_server_ch.h 15:06:05 -- Installing: /opt/share/libnetconf2/ietf-inet-types.yin 15:06:05 -- Installing: /opt/share/libnetconf2/ietf-netconf-acm.yin 15:06:05 -- Installing: /opt/share/libnetconf2/ietf-netconf-monitoring.yin 15:06:05 -- Installing: /opt/share/libnetconf2/ietf-netconf-notifications.yin 15:06:05 -- Installing: /opt/share/libnetconf2/ietf-netconf-with-defaults.yin 15:06:05 -- Installing: /opt/share/libnetconf2/ietf-netconf.yin 15:06:05 -- Installing: /opt/share/libnetconf2/nc-notifications.yin 15:06:05 -- Installing: /opt/share/libnetconf2/notifications.yin 15:06:05 -- Installing: /opt/lib64/pkgconfig/libnetconf2.pc 15:06:05 Removing intermediate container a5a52d1a8a12 15:06:05 ---> 3f06e0959a79 15:06:05 Step 20/47 : COPY patches/Netopeer2/ ./patches/Netopeer2/ 15:06:05 ---> d1ac623b2739 15:06:05 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 15:06:05 ---> Running in 13cf6f6071ac 15:06:06 + git clone --branch v0.7-r2 --depth 1 https://github.com/CESNET/Netopeer2.git 15:06:06 Cloning into 'Netopeer2'... 15:06:06 + cd Netopeer2 15:06:06 + patch -p1 -i ../patches/Netopeer2/01-fix-grep-count.patch 15:06:06 patching file keystored/scripts/model-install.sh 15:06:06 patching file server/scripts/model-install.sh.in 15:06:06 patching file server/CMakeLists.txt 15:06:06 + patch -p1 -i ../patches/Netopeer2/02-zlog.patch 15:06:06 patching file server/log.c 15:06:06 patching file server/main.c 15:06:06 + cd keystored 15:06:06 + mkdir build 15:06:06 + cd build 15:06:06 + cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' '-DMODEL_INSTALL=ON' .. 15:06:06 -- The C compiler identification is GNU 9.3.0 15:06:06 -- Check for working C compiler: /usr/bin/cc 15:06:06 -- Check for working C compiler: /usr/bin/cc -- works 15:06:06 -- Detecting C compiler ABI info 15:06:06 -- Detecting C compiler ABI info - done 15:06:06 -- Detecting C compile features 15:06:06 -- Detecting C compile features - done 15:06:06 -- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 15:06:06 CMake Warning at CMakeLists.txt:58 (message): 15:06:06 keystored pkg-config file copied into a directory not searched by 15:06:06 pkg-config. 15:06:06 15:06:06 15:06:06 CMake Warning at CMakeLists.txt:59 (message): 15:06:06 For netopeer2-server configuration to work, pkg-config search path must 15:06:06 include "/opt/lib64/pkgconfig" or keystored keys directory will have to be 15:06:06 set manually to "/opt/etc/keystored/keys". 15:06:06 15:06:06 15:06:06 -- Found sysrepo: /opt/lib64/libsysrepo.so 15:06:06 -- Configuring done 15:06:06 -- Generating done 15:06:06 -- Build files have been written to: /usr/src/Netopeer2/keystored/build 15:06:06 + make -j2 15:06:06 Scanning dependencies of target keystored 15:06:06 [ 50%] Building C object CMakeFiles/keystored.dir/keystored.c.o 15:06:07 [100%] Linking C shared library libkeystored.so 15:06:07 [100%] Built target keystored 15:06:07 + make install 15:06:07 [100%] Built target keystored 15:06:07 Install the project... 15:06:07 -- Install configuration: "Release" 15:06:07 -- Installing: /opt/lib64/pkgconfig/keystored.pc 15:06:07 -- Installing: /opt/etc/keystored/keys 15:06:07 - Installing module ietf-x509-cert-to-name... 15:06:07 Installing a new module from file '/usr/src/Netopeer2/keystored/scripts/../../modules/ietf-x509-cert-to-name.yang'... 15:06:07 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang'... 15:06:07 Skipping installation of data files for module 'ietf-x509-cert-to-name'... 15:06:07 Notifying sysrepo about the change... 15:06:07 Install operation completed successfully. 15:06:07 - Installing module ietf-keystore... 15:06:07 Installing a new module from file '/usr/src/Netopeer2/keystored/scripts/../../modules/ietf-keystore.yang'... 15:06:07 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang'... 15:06:07 Installing data files for module 'ietf-keystore'... 15:06:07 Notifying sysrepo about the change... 15:06:07 Install operation completed successfully. 15:06:07 - SSH hostkey not found, generating a new one... 15:06:07 - Importing ietf-keystore stock key configuration... 15:06:07 The new configuration was successfully applied. 15:06:07 -- Installing: /opt/lib64/sysrepo/plugins/libkeystored.so 15:06:07 -- Set runtime path of "/opt/lib64/sysrepo/plugins/libkeystored.so" to "" 15:06:07 Removing intermediate container 13cf6f6071ac 15:06:07 ---> fa02c02e8bdc 15:06:07 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 15:06:07 ---> Running in 03244e30aaa0 15:06:08 + cd Netopeer2/server 15:06:08 + mkdir build 15:06:08 + cd build 15:06:08 + cmake '-DCMAKE_BUILD_TYPE:String=Release' '-DCMAKE_INSTALL_PREFIX:PATH=/opt' .. 15:06:08 -- The C compiler identification is GNU 9.3.0 15:06:08 -- Check for working C compiler: /usr/bin/cc 15:06:08 -- Check for working C compiler: /usr/bin/cc -- works 15:06:08 -- Detecting C compiler ABI info 15:06:08 -- Detecting C compiler ABI info - done 15:06:08 -- Detecting C compile features 15:06:08 -- Detecting C compile features - done 15:06:08 -- Found CURL: /usr/lib/libcurl.so (found version "7.79.1") 15:06:08 -- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 15:06:08 -- keystored keys directory is "/opt/etc/keystored/keys". 15:06:08 -- Found libcurl 7.79.1 15:06:08 -- Enabling URL capability 15:06:08 -- libnetconf2 was compiled with support of up to 6 threads 15:06:08 -- Looking for pthread.h 15:06:08 -- Looking for pthread.h - found 15:06:08 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD 15:06:08 -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success 15:06:08 -- Found Threads: TRUE 15:06:08 -- Looking for pthread_rwlockattr_setkind_np 15:06:08 -- Looking for pthread_rwlockattr_setkind_np - not found 15:06:08 -- Looking for stdatomic.h 15:06:08 -- Looking for stdatomic.h - found 15:06:08 -- Looking for NC_ENABLED_SSH 15:06:09 -- Looking for NC_ENABLED_SSH - found 15:06:09 -- Looking for NC_ENABLED_TLS 15:06:09 -- Looking for NC_ENABLED_TLS - found 15:06:09 -- Found sysrepo: /opt/lib64/libsysrepo.so 15:06:09 -- Configuring done 15:06:09 -- Generating done 15:06:09 -- Build files have been written to: /usr/src/Netopeer2/server/build 15:06:09 + make -j2 15:06:09 Scanning dependencies of target serverobj 15:06:09 [ 5%] Building C object CMakeFiles/serverobj.dir/ietf_netconf_server.c.o 15:06:09 [ 11%] Building C object CMakeFiles/serverobj.dir/ietf_system.c.o 15:06:09 [ 16%] Building C object CMakeFiles/serverobj.dir/ietf_keystore.c.o 15:06:09 [ 22%] Building C object CMakeFiles/serverobj.dir/netconf_monitoring.c.o 15:06:09 [ 27%] Building C object CMakeFiles/serverobj.dir/operations.c.o 15:06:09 [ 33%] Building C object CMakeFiles/serverobj.dir/op_get_config.c.o 15:06:09 [ 38%] Building C object CMakeFiles/serverobj.dir/op_editconfig.c.o 15:06:10 [ 44%] Building C object CMakeFiles/serverobj.dir/op_copyconfig.c.o 15:06:10 /usr/src/Netopeer2/server/op_copyconfig.c: In function 'op_copyconfig': 15:06:10 /usr/src/Netopeer2/server/op_copyconfig.c:477:13: warning: 'ly_wd' may be used uninitialized in this function [-Wmaybe-uninitialized] 15:06:10 477 | if (op_url_export(target_url, LYP_FORMAT | LYP_WITHSIBLINGS | opcopy_wd_nc2ly(nc_wd), root, &ereply) == 0) { 15:06:10 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 15:06:10 [ 50%] Building C object CMakeFiles/serverobj.dir/op_deleteconfig.c.o 15:06:10 [ 55%] Building C object CMakeFiles/serverobj.dir/op_candidate.c.o 15:06:10 [ 61%] Building C object CMakeFiles/serverobj.dir/op_validate.c.o 15:06:10 [ 66%] Building C object CMakeFiles/serverobj.dir/op_un_lock.c.o 15:06:10 [ 72%] Building C object CMakeFiles/serverobj.dir/op_generic.c.o 15:06:10 [ 77%] Building C object CMakeFiles/serverobj.dir/op_notifications.c.o 15:06:10 [ 83%] Building C object CMakeFiles/serverobj.dir/op_kill.c.o 15:06:11 [ 88%] Building C object CMakeFiles/serverobj.dir/log.c.o 15:06:11 [ 88%] Built target serverobj 15:06:11 Scanning dependencies of target netopeer2-server 15:06:11 [ 94%] Building C object CMakeFiles/netopeer2-server.dir/main.c.o 15:06:11 [100%] Linking C executable netopeer2-server 15:06:11 [100%] Built target netopeer2-server 15:06:11 + make install 15:06:11 [ 88%] Built target serverobj 15:06:11 [100%] Built target netopeer2-server 15:06:11 Install the project... 15:06:11 -- Install configuration: "Release" 15:06:11 -- Installing: /opt/bin/netopeer2-server 15:06:11 -- Set runtime path of "/opt/bin/netopeer2-server" to "" 15:06:11 - Installing module ietf-netconf... 15:06:11 Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf.yang'... 15:06:11 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf@2011-06-01.yang'... 15:06:11 Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'... 15:06:11 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang'... 15:06:11 Installing data files for module 'ietf-netconf'... 15:06:11 Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'... 15:06:11 Skipping installation of data files for module 'ietf-netconf-acm'... 15:06:11 Notifying sysrepo about the change... 15:06:11 Install operation completed successfully. 15:06:11 - Enabling feature writable-running in ietf-netconf... 15:06:11 Enabling feature 'writable-running' in the module 'ietf-netconf'. 15:06:11 Operation completed successfully. 15:06:12 - Enabling feature candidate in ietf-netconf... 15:06:12 Enabling feature 'candidate' in the module 'ietf-netconf'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature rollback-on-error in ietf-netconf... 15:06:12 Enabling feature 'rollback-on-error' in the module 'ietf-netconf'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature validate in ietf-netconf... 15:06:12 Enabling feature 'validate' in the module 'ietf-netconf'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature startup in ietf-netconf... 15:06:12 Enabling feature 'startup' in the module 'ietf-netconf'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature xpath in ietf-netconf... 15:06:12 Enabling feature 'xpath' in the module 'ietf-netconf'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature url in ietf-netconf... 15:06:12 Enabling feature 'url' in the module 'ietf-netconf'. 15:06:12 Operation completed successfully. 15:06:12 - Installing module ietf-netconf-with-defaults... 15:06:12 Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf-with-defaults.yang'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-with-defaults@2011-06-01.yang'... 15:06:12 Resolving dependency: 'ietf-netconf-with-defaults' imports 'ietf-netconf'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf@2011-06-01.yang'... 15:06:12 Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang'... 15:06:12 Skipping installation of data files for module 'ietf-netconf-with-defaults'... 15:06:12 Resolving dependency: 'ietf-netconf-with-defaults' imports 'ietf-netconf'... 15:06:12 Installing data files for module 'ietf-netconf'... 15:06:12 Resolving dependency: 'ietf-netconf' imports 'ietf-netconf-acm'... 15:06:12 Skipping installation of data files for module 'ietf-netconf-acm'... 15:06:12 Notifying sysrepo about the change... 15:06:12 Install operation completed successfully. 15:06:12 - Installing module ietf-netconf-monitoring... 15:06:12 Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf-monitoring.yang'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-monitoring@2010-10-04.yang'... 15:06:12 Installing data files for module 'ietf-netconf-monitoring'... 15:06:12 Notifying sysrepo about the change... 15:06:12 Install operation completed successfully. 15:06:12 - Module notifications already installed. 15:06:12 - Module nc-notifications already installed. 15:06:12 - Module ietf-netconf-notifications already installed. 15:06:12 - Installing module ietf-yang-library... 15:06:12 Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-yang-library.yang'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-yang-library@2018-01-17.yang'... 15:06:12 Resolving dependency: 'ietf-yang-library' imports 'ietf-datastores'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-datastores@2017-08-17.yang'... 15:06:12 Installing data files for module 'ietf-yang-library'... 15:06:12 Resolving dependency: 'ietf-yang-library' imports 'ietf-datastores'... 15:06:12 Skipping installation of data files for module 'ietf-datastores'... 15:06:12 Notifying sysrepo about the change... 15:06:12 Install operation completed successfully. 15:06:12 - Installing module ietf-netconf-server... 15:06:12 Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-netconf-server.yang'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-server@2016-11-02.yang'... 15:06:12 Resolving dependency: 'ietf-netconf-server' imports 'ietf-x509-cert-to-name'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-x509-cert-to-name@2014-12-10.yang'... 15:06:12 Resolving dependency: 'ietf-netconf-server' imports 'ietf-ssh-server'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-ssh-server@2016-11-02.yang'... 15:06:12 Resolving dependency: 'ietf-ssh-server' imports 'ietf-keystore'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang'... 15:06:12 Resolving dependency: 'ietf-netconf-server' imports 'ietf-tls-server'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-tls-server@2016-11-02.yang'... 15:06:12 Resolving dependency: 'ietf-tls-server' imports 'ietf-keystore'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-keystore@2016-10-31.yang'... 15:06:12 Installing data files for module 'ietf-netconf-server'... 15:06:12 Resolving dependency: 'ietf-netconf-server' imports 'ietf-x509-cert-to-name'... 15:06:12 Skipping installation of data files for module 'ietf-x509-cert-to-name'... 15:06:12 Resolving dependency: 'ietf-netconf-server' imports 'ietf-ssh-server'... 15:06:12 Skipping installation of data files for module 'ietf-ssh-server'... 15:06:12 Resolving dependency: 'ietf-ssh-server' imports 'ietf-keystore'... 15:06:12 Installing data files for module 'ietf-keystore'... 15:06:12 Resolving dependency: 'ietf-netconf-server' imports 'ietf-tls-server'... 15:06:12 Skipping installation of data files for module 'ietf-tls-server'... 15:06:12 Resolving dependency: 'ietf-tls-server' imports 'ietf-keystore'... 15:06:12 Installing data files for module 'ietf-keystore'... 15:06:12 Notifying sysrepo about the change... 15:06:12 Install operation completed successfully. 15:06:12 - Enabling feature listen in ietf-netconf-server... 15:06:12 Enabling feature 'listen' in the module 'ietf-netconf-server'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature ssh-listen in ietf-netconf-server... 15:06:12 Enabling feature 'ssh-listen' in the module 'ietf-netconf-server'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature tls-listen in ietf-netconf-server... 15:06:12 Enabling feature 'tls-listen' in the module 'ietf-netconf-server'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature call-home in ietf-netconf-server... 15:06:12 Enabling feature 'call-home' in the module 'ietf-netconf-server'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature ssh-call-home in ietf-netconf-server... 15:06:12 Enabling feature 'ssh-call-home' in the module 'ietf-netconf-server'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature tls-call-home in ietf-netconf-server... 15:06:12 Enabling feature 'tls-call-home' in the module 'ietf-netconf-server'. 15:06:12 Operation completed successfully. 15:06:12 - Installing module ietf-system... 15:06:12 Installing a new module from file '/usr/src/Netopeer2/server/../modules/ietf-system.yang'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-system@2014-08-06.yang'... 15:06:12 Resolving dependency: 'ietf-system' imports 'ietf-netconf-acm'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/ietf-netconf-acm@2018-02-14.yang'... 15:06:12 Resolving dependency: 'ietf-system' imports 'iana-crypt-hash'... 15:06:12 Installing the YANG file to '/opt/etc/sysrepo/yang/iana-crypt-hash@2014-08-06.yang'... 15:06:12 Installing data files for module 'ietf-system'... 15:06:12 Resolving dependency: 'ietf-system' imports 'ietf-netconf-acm'... 15:06:12 Skipping installation of data files for module 'ietf-netconf-acm'... 15:06:12 Resolving dependency: 'ietf-system' imports 'iana-crypt-hash'... 15:06:12 Skipping installation of data files for module 'iana-crypt-hash'... 15:06:12 Notifying sysrepo about the change... 15:06:12 Install operation completed successfully. 15:06:12 - Enabling feature authentication in ietf-system... 15:06:12 Enabling feature 'authentication' in the module 'ietf-system'. 15:06:12 Operation completed successfully. 15:06:12 - Enabling feature local-users in ietf-system... 15:06:12 Enabling feature 'local-users' in the module 'ietf-system'. 15:06:12 Operation completed successfully. 15:06:13 The new configuration was successfully applied. 15:06:13 Removing intermediate container 03244e30aaa0 15:06:13 ---> c88959bbb637 15:06:13 Step 23/47 : FROM python:3.7.7-alpine3.11 as stage0 15:06:13 ---> e854017db514 15:06:13 Step 24/47 : RUN apk upgrade --no-cache --available 15:06:13 ---> Running in 729f70b9ee14 15:06:13 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz 15:06:14 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz 15:06:14 Upgrading critical system libraries and apk-tools: 15:06:14 (1/1) Upgrading apk-tools (2.10.5-r0 -> 2.10.8-r0) 15:06:14 Executing busybox-1.31.1-r9.trigger 15:06:14 Continuing the upgrade transaction with new apk-tools: 15:06:14 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz 15:06:14 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz 15:06:14 (1/10) Upgrading musl (1.1.24-r2 -> 1.1.24-r3) 15:06:14 (2/10) Upgrading libcrypto1.1 (1.1.1g-r0 -> 1.1.1l-r0) 15:06:14 (3/10) Upgrading libssl1.1 (1.1.1g-r0 -> 1.1.1l-r0) 15:06:14 (4/10) Upgrading krb5-libs (1.17.1-r0 -> 1.17.2-r0) 15:06:14 (5/10) Upgrading zlib (1.2.11-r3 -> 1.2.11-r5) 15:06:14 (6/10) Upgrading busybox (1.31.1-r9 -> 1.31.1-r11) 15:06:14 Executing busybox-1.31.1-r11.post-upgrade 15:06:14 (7/10) Upgrading ca-certificates-cacert (20191127-r1 -> 20191127-r2) 15:06:14 (8/10) Upgrading ssl_client (1.31.1-r9 -> 1.31.1-r11) 15:06:14 (9/10) Upgrading ca-certificates (20191127-r1 -> 20191127-r2) 15:06:14 (10/10) Upgrading musl-utils (1.1.24-r2 -> 1.1.24-r3) 15:06:14 Executing busybox-1.31.1-r11.trigger 15:06:14 Executing ca-certificates-20191127-r2.trigger 15:06:15 OK: 11 MiB in 34 packages 15:06:15 Removing intermediate container 729f70b9ee14 15:06:15 ---> d27591593955 15:06:15 Step 25/47 : FROM scratch 15:06:15 ---> 15:06:15 Step 26/47 : LABEL authors="eliezio.oliveira@est.tech" 15:06:15 ---> Running in c884329b6a0c 15:06:15 Removing intermediate container c884329b6a0c 15:06:15 ---> 21dfe6553960 15:06:15 Step 27/47 : COPY --from=stage0 / / 15:06:17 ---> 10f1c2565d60 15:06:17 Step 28/47 : RUN set -eux && apk add --no-cache coreutils libcurl libev libssh openssl pcre protobuf-c xmlstarlet 15:06:17 ---> Running in 3e421e140c2e 15:06:17 + apk add --no-cache coreutils libcurl libev libssh openssl pcre protobuf-c xmlstarlet 15:06:17 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz 15:06:17 fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz 15:06:17 (1/19) Installing libacl (2.2.53-r0) 15:06:17 (2/19) Installing libattr (2.4.48-r0) 15:06:17 (3/19) Installing coreutils (8.31-r0) 15:06:17 (4/19) Installing nghttp2-libs (1.40.0-r1) 15:06:17 (5/19) Installing libcurl (7.79.1-r0) 15:06:17 (6/19) Installing libev (4.27-r0) 15:06:17 (7/19) Installing libssh (0.9.4-r1) 15:06:17 (8/19) Installing openssl (1.1.1l-r0) 15:06:17 (9/19) Installing pcre (8.43-r1) 15:06:17 (10/19) Installing libgcc (9.3.0-r0) 15:06:17 (11/19) Installing libstdc++ (9.3.0-r0) 15:06:18 (12/19) Installing libprotobuf (3.11.2-r1) 15:06:18 (13/19) Installing libprotoc (3.11.2-r1) 15:06:18 (14/19) Installing protobuf-c (1.3.2-r3) 15:06:18 (15/19) Installing libgpg-error (1.36-r2) 15:06:18 (16/19) Installing libgcrypt (1.8.8-r1) 15:06:18 (17/19) Installing libxml2 (2.9.12-r0) 15:06:18 (18/19) Installing libxslt (1.1.34-r0) 15:06:18 (19/19) Installing xmlstarlet (1.6.1-r0) 15:06:18 Executing busybox-1.31.1-r11.trigger 15:06:18 OK: 23 MiB in 53 packages 15:06:18 Removing intermediate container 3e421e140c2e 15:06:18 ---> e397c2924f76 15:06:18 Step 29/47 : COPY --from=build /opt/ /opt/ 15:06:19 ---> 4b1e43b72207 15:06:19 Step 30/47 : ENV LD_LIBRARY_PATH=/opt/lib:/opt/lib64 15:06:19 ---> Running in 56b10f431c1e 15:06:19 Removing intermediate container 56b10f431c1e 15:06:19 ---> 5fa6855aad28 15:06:19 Step 31/47 : ENV PYTHONPATH=/opt/lib/python3.7/site-packages 15:06:19 ---> Running in 037d7e363da7 15:06:19 Removing intermediate container 037d7e363da7 15:06:19 ---> f71cf784705c 15:06:19 Step 32/47 : COPY patches/supervisor/ /usr/src/patches/supervisor/ 15:06:19 ---> 7bc0f247c251 15:06:19 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 15:06:19 ---> Running in 64ccffacfb7f 15:06:20 + pip install --no-cache-dir loguru 'supervisor==4.1.0' virtualenv 15:06:21 Collecting loguru 15:06:21 Downloading loguru-0.7.3-py3-none-any.whl (61 kB) 15:06:21 Collecting supervisor==4.1.0 15:06:21 Downloading supervisor-4.1.0-py2.py3-none-any.whl (318 kB) 15:06:21 Collecting virtualenv 15:06:21 Downloading virtualenv-20.26.6-py3-none-any.whl (6.0 MB) 15:06:21 Collecting importlib-metadata>=6.6; python_version < "3.8" 15:06:21 Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB) 15:06:22 Collecting platformdirs<5,>=3.9.1 15:06:22 Downloading platformdirs-4.0.0-py3-none-any.whl (17 kB) 15:06:22 Collecting filelock<4,>=3.12.2 15:06:22 Downloading filelock-3.12.2-py3-none-any.whl (10 kB) 15:06:22 Collecting distlib<1,>=0.3.7 15:06:22 Downloading distlib-0.4.0-py2.py3-none-any.whl (469 kB) 15:06:22 Collecting zipp>=0.5 15:06:22 Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB) 15:06:22 Collecting typing-extensions>=3.6.4; python_version < "3.8" 15:06:22 Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB) 15:06:22 Installing collected packages: loguru, supervisor, zipp, typing-extensions, importlib-metadata, platformdirs, filelock, distlib, virtualenv 15:06:23 Successfully installed distlib-0.4.0 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 15:06:23 WARNING: You are using pip version 20.1.1; however, version 24.0 is available. 15:06:23 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command. 15:06:23 + cd /usr/local/lib/python3.7/site-packages 15:06:23 + patch -p1 -i /usr/src/patches/supervisor/01-std-log-format.patch 15:06:23 patching file supervisor/loggers.py 15:06:23 patching file supervisor/options.py 15:06:24 Removing intermediate container 64ccffacfb7f 15:06:24 ---> c7114f94b2ee 15:06:24 Step 34/47 : COPY config/ /config 15:06:24 ---> 028bc47cf593 15:06:24 Step 35/47 : VOLUME /config 15:06:24 ---> Running in 8b941d84b703 15:06:24 Removing intermediate container 8b941d84b703 15:06:24 ---> 08952bbf0bc2 15:06:24 Step 36/47 : COPY templates/ /templates 15:06:24 ---> 7354afb2908f 15:06:24 Step 37/47 : RUN adduser --system --disabled-password --gecos 'Netconf User' netconf 15:06:24 ---> Running in 624ee1703b13 15:06:25 Removing intermediate container 624ee1703b13 15:06:25 ---> 0bd2e3bba4ce 15:06:25 Step 38/47 : HEALTHCHECK --interval=1s --start-period=2s --retries=10 CMD test -f /run/netopeer2-server.pid 15:06:25 ---> Running in 7f2a1260c000 15:06:25 Removing intermediate container 7f2a1260c000 15:06:25 ---> a05322a38806 15:06:25 Step 39/47 : EXPOSE 830 15:06:25 ---> Running in 4b035d31023b 15:06:25 Removing intermediate container 4b035d31023b 15:06:25 ---> 830f95680775 15:06:25 Step 40/47 : EXPOSE 6513 15:06:25 ---> Running in 56700783c2b4 15:06:26 Removing intermediate container 56700783c2b4 15:06:26 ---> 0152a78f95ca 15:06:26 Step 41/47 : COPY supervisord.conf /etc/supervisord.conf 15:06:26 ---> 894c829590f0 15:06:26 Step 42/47 : RUN mkdir /etc/supervisord.d 15:06:26 ---> Running in 163df2262a48 15:06:27 Removing intermediate container 163df2262a48 15:06:27 ---> 8642be1d02d1 15:06:27 Step 43/47 : COPY zlog.conf /opt/etc/ 15:06:27 ---> b6bc00b5c173 15:06:27 Step 44/47 : ENV LOGURU_FORMAT="{time:YYYY-DD-MM HH:mm:ss.SSS} {level: <5} [{module}] {message}" 15:06:27 ---> Running in 258f1f0a846a 15:06:27 Removing intermediate container 258f1f0a846a 15:06:27 ---> 548dbc4ad929 15:06:27 Step 45/47 : ENV LOGURU_COLORIZE=True 15:06:27 ---> Running in 48fe136b3588 15:06:27 Removing intermediate container 48fe136b3588 15:06:27 ---> 4e57ce39b278 15:06:27 Step 46/47 : COPY entrypoint.sh common.sh configure-*.sh reconfigure-*.sh generic_subscriber.py /opt/bin/ 15:06:28 ---> 79eaf9e7cf48 15:06:28 Step 47/47 : CMD /opt/bin/entrypoint.sh 15:06:28 ---> Running in 1ca61328edb4 15:06:28 Removing intermediate container 1ca61328edb4 15:06:28 ---> df62d54a3b99 15:06:28 Successfully built df62d54a3b99 15:06:28 Successfully tagged nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6 15:06:28 ---> docker-build.sh ends 15:06:28 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins2818370508395068052.sh 15:06:28 + cd test/mocks/netconf-pnp-simulator/engine 15:06:28 + docker tag nexus3.onap.org:10003/onap/integration/simulators/netconf-pnp-simulator:2.8.6 netconf-pnp-simulator:latest 15:06:28 + tox 15:06:28 No handlers could be found for logger "tox_pyenv" 15:06:28 .tox create: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/.tox 15:06:30 .tox installdeps: tox-docker == 1.7.0, tox >= 3.26.0 15:06:38 py3 create: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine/.tox/py3 15:06:38 No handlers could be found for logger "filelock" 15:06:39 py3 installdeps: pytest == 6.2.2, docker == 4.4.4, lxml == 4.6.2, ncclient == 0.6.9 15:06:50 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 15:06:50 py3 docker: run 'netconf-pnp-simulator:latest' 15:06:51 py3 docker: health check: u'netconf-pnp-simulator:latest' 15:06:53 py3 run-test-pre: PYTHONHASHSEED='1352360131' 15:06:53 py3 run-test: commands[0] | pytest -v 15:06:53 ============================= test session starts ============================== 15:06:53 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 15:06:53 cachedir: .tox/py3/.pytest_cache 15:06:53 rootdir: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/test/mocks/netconf-pnp-simulator/engine, configfile: tox.ini 15:06:53 collecting ... collected 20 items 15:06:53 15:06:53 test_basic_operations.py::TestBasicOperations::test_capabilities PASSED [ 5%] 15:06:54 test_basic_operations.py::TestBasicOperations::test_get PASSED [ 10%] 15:06:54 test_basic_operations.py::TestBasicOperations::test_get_config_startup PASSED [ 15%] 15:06:55 test_basic_operations.py::TestBasicOperations::test_get_config_running PASSED [ 20%] 15:06:55 test_basic_operations.py::TestBasicOperations::test_copy_config PASSED [ 25%] 15:06:55 test_basic_operations.py::TestBasicOperations::test_neg_filter PASSED [ 30%] 15:06:56 test_basic_operations.py::TestBasicOperations::test_lock PASSED [ 35%] 15:06:56 test_tls.py::TestTLS::test_tls_connect FAILED [ 40%] 15:07:01 test_tls.py::TestTLS::test_tls_reconfiguration[round #1] FAILED [ 45%] 15:07:06 test_tls.py::TestTLS::test_tls_reconfiguration[round #2] FAILED [ 50%] 15:07:11 test_tls.py::TestTLS::test_tls_reconfiguration[round #3] FAILED [ 55%] 15:07:16 test_tls.py::TestTLS::test_tls_reconfiguration[round #4] FAILED [ 60%] 15:07:21 test_tls.py::TestTLS::test_tls_reconfiguration[round #5] FAILED [ 65%] 15:07:23 test_tls.py::TestTLS::test_tls_reconfiguration[round #6] FAILED [ 70%] 15:07:23 test_turing_machine.py::TestTuringMachine::test_get ERROR [ 75%] 15:07:24 test_turing_machine.py::TestTuringMachine::test_get_config_startup ERROR [ 80%] 15:07:24 test_turing_machine.py::TestTuringMachine::test_get_config_running ERROR [ 85%] 15:07:24 test_turing_machine.py::TestTuringMachine::test_get_subtree_filter ERROR [ 90%] 15:07:24 test_turing_machine.py::TestTuringMachine::test_get_xpath_filter ERROR [ 95%] 15:07:24 test_turing_machine.py::TestTuringMachine::test_edit_config ERROR [100%] 15:07:24 15:07:24 ==================================== ERRORS ==================================== 15:07:24 _________________ ERROR at setup of TestTuringMachine.test_get _________________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 > buf = self.packetizer.readline(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def readline(self, timeout): 15:07:24 """ 15:07:24 Read a line from the socket. We assume no data is pending after the 15:07:24 line, so it's okay to attempt large reads. 15:07:24 """ 15:07:24 buf = self.__remainder 15:07:24 while linefeed_byte not in buf: 15:07:24 > buf += self._read_timeout(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def _read_timeout(self, timeout): 15:07:24 start = time.time() 15:07:24 while True: 15:07:24 try: 15:07:24 > x = self.__socket.recv(128) 15:07:24 E ConnectionResetError: [Errno 104] Connection reset by peer 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:663: ConnectionResetError 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 > self._transport.start_client() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 event = , timeout = None 15:07:24 15:07:24 def start_client(self, event=None, timeout=None): 15:07:24 """ 15:07:24 Negotiate a new SSH2 session as a client. This is the first step after 15:07:24 creating a new `.Transport`. A separate thread is created for protocol 15:07:24 negotiation. 15:07:24 15:07:24 If an event is passed in, this method returns immediately. When 15:07:24 negotiation is done (successful or not), the given ``Event`` will 15:07:24 be triggered. On failure, `is_active` will return ``False``. 15:07:24 15:07:24 (Since 1.4) If ``event`` is ``None``, this method will not return until 15:07:24 negotiation is done. On success, the method returns normally. 15:07:24 Otherwise an SSHException is raised. 15:07:24 15:07:24 After a successful negotiation, you will usually want to authenticate, 15:07:24 calling `auth_password ` or 15:07:24 `auth_publickey `. 15:07:24 15:07:24 .. note:: `connect` is a simpler method for connecting as a client. 15:07:24 15:07:24 .. note:: 15:07:24 After calling this method (or `start_server` or `connect`), you 15:07:24 should no longer directly read from or write to the original socket 15:07:24 object. 15:07:24 15:07:24 :param .threading.Event event: 15:07:24 an event to trigger when negotiation is complete (optional) 15:07:24 15:07:24 :param float timeout: 15:07:24 a timeout, in seconds, for SSH2 session negotiation (optional) 15:07:24 15:07:24 :raises: 15:07:24 `.SSHException` -- if negotiation fails (and no ``event`` was 15:07:24 passed in) 15:07:24 """ 15:07:24 self.active = True 15:07:24 if event is not None: 15:07:24 # async, return immediately and let the app poll for completion 15:07:24 self.completion_event = event 15:07:24 self.start() 15:07:24 return 15:07:24 15:07:24 # synchronous, wait for a result 15:07:24 self.completion_event = event = threading.Event() 15:07:24 self.start() 15:07:24 max_time = time.time() + timeout if timeout is not None else None 15:07:24 while True: 15:07:24 event.wait(0.1) 15:07:24 if not self.active: 15:07:24 e = self.get_exception() 15:07:24 if e is not None: 15:07:24 > raise e 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def run(self): 15:07:24 # (use the exposed "run" method, because if we specify a thread target 15:07:24 # of a private method, threading.Thread will keep a reference to it 15:07:24 # indefinitely, creating a GC cycle and not letting Transport ever be 15:07:24 # GC'd. it's a bug in Thread.) 15:07:24 15:07:24 # Hold reference to 'sys' so we can test sys.modules to detect 15:07:24 # interpreter shutdown. 15:07:24 self.sys = sys 15:07:24 15:07:24 # active=True occurs before the thread is launched, to avoid a race 15:07:24 _active_threads.append(self) 15:07:24 tid = hex(id(self) & xffffffff) 15:07:24 if self.server_mode: 15:07:24 self._log(DEBUG, "starting thread (server mode): {}".format(tid)) 15:07:24 else: 15:07:24 self._log(DEBUG, "starting thread (client mode): {}".format(tid)) 15:07:24 try: 15:07:24 try: 15:07:24 self.packetizer.write_all(b(self.local_version + "\r\n")) 15:07:24 self._log( 15:07:24 DEBUG, 15:07:24 "Local version/idstring: {}".format(self.local_version), 15:07:24 ) # noqa 15:07:24 > self._check_banner() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 buf = self.packetizer.readline(timeout) 15:07:24 except ProxyCommandFailure: 15:07:24 raise 15:07:24 except Exception as e: 15:07:24 raise SSHException( 15:07:24 > "Error reading SSH protocol banner" + str(e) 15:07:24 ) 15:07:24 E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = 15:07:24 15:07:24 def setup(self): 15:07:24 self.nc = manager.connect( 15:07:24 host=settings.HOST, 15:07:24 port=settings.SSH_PORT, 15:07:24 username=settings.USERNAME, 15:07:24 key_filename=settings.SSH_KEY_FILENAME, 15:07:24 allow_agent=False, 15:07:24 look_for_keys=False, 15:07:24 > hostkey_verify=False) 15:07:24 15:07:24 nctest.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect 15:07:24 return connect_ssh(*args, **kwds) 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh 15:07:24 session.connect(*args, **kwds) 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 self._transport.start_client() 15:07:24 except paramiko.SSHException as e: 15:07:24 > raise SSHError('Negotiation failed: %s' % e) 15:07:24 E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError 15:07:24 ------------------------------ Captured log setup ------------------------------ 15:07:24 15:07:23.835 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:23.836 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:23.836 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 15:07:24 15:07:23.836 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout) 15:07:24 15:07:23.836 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 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout) 15:07:24 15:07:23.837 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 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] x = self.__socket.recv(128) 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] ConnectionResetError: [Errno 104] Connection reset by peer 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred: 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:23.837 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 15:07:24 15:07:23.837 ERROR [ncclient.transport.ssh] self._check_banner() 15:07:24 15:07:23.837 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 15:07:24 15:07:23.838 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e) 15:07:24 15:07:23.838 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:23.838 ERROR [ncclient.transport.ssh] 15:07:24 _________ ERROR at setup of TestTuringMachine.test_get_config_startup __________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 > buf = self.packetizer.readline(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def readline(self, timeout): 15:07:24 """ 15:07:24 Read a line from the socket. We assume no data is pending after the 15:07:24 line, so it's okay to attempt large reads. 15:07:24 """ 15:07:24 buf = self.__remainder 15:07:24 while linefeed_byte not in buf: 15:07:24 > buf += self._read_timeout(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def _read_timeout(self, timeout): 15:07:24 start = time.time() 15:07:24 while True: 15:07:24 try: 15:07:24 x = self.__socket.recv(128) 15:07:24 if len(x) == 0: 15:07:24 > raise EOFError() 15:07:24 E EOFError 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 > self._transport.start_client() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 event = , timeout = None 15:07:24 15:07:24 def start_client(self, event=None, timeout=None): 15:07:24 """ 15:07:24 Negotiate a new SSH2 session as a client. This is the first step after 15:07:24 creating a new `.Transport`. A separate thread is created for protocol 15:07:24 negotiation. 15:07:24 15:07:24 If an event is passed in, this method returns immediately. When 15:07:24 negotiation is done (successful or not), the given ``Event`` will 15:07:24 be triggered. On failure, `is_active` will return ``False``. 15:07:24 15:07:24 (Since 1.4) If ``event`` is ``None``, this method will not return until 15:07:24 negotiation is done. On success, the method returns normally. 15:07:24 Otherwise an SSHException is raised. 15:07:24 15:07:24 After a successful negotiation, you will usually want to authenticate, 15:07:24 calling `auth_password ` or 15:07:24 `auth_publickey `. 15:07:24 15:07:24 .. note:: `connect` is a simpler method for connecting as a client. 15:07:24 15:07:24 .. note:: 15:07:24 After calling this method (or `start_server` or `connect`), you 15:07:24 should no longer directly read from or write to the original socket 15:07:24 object. 15:07:24 15:07:24 :param .threading.Event event: 15:07:24 an event to trigger when negotiation is complete (optional) 15:07:24 15:07:24 :param float timeout: 15:07:24 a timeout, in seconds, for SSH2 session negotiation (optional) 15:07:24 15:07:24 :raises: 15:07:24 `.SSHException` -- if negotiation fails (and no ``event`` was 15:07:24 passed in) 15:07:24 """ 15:07:24 self.active = True 15:07:24 if event is not None: 15:07:24 # async, return immediately and let the app poll for completion 15:07:24 self.completion_event = event 15:07:24 self.start() 15:07:24 return 15:07:24 15:07:24 # synchronous, wait for a result 15:07:24 self.completion_event = event = threading.Event() 15:07:24 self.start() 15:07:24 max_time = time.time() + timeout if timeout is not None else None 15:07:24 while True: 15:07:24 event.wait(0.1) 15:07:24 if not self.active: 15:07:24 e = self.get_exception() 15:07:24 if e is not None: 15:07:24 > raise e 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def run(self): 15:07:24 # (use the exposed "run" method, because if we specify a thread target 15:07:24 # of a private method, threading.Thread will keep a reference to it 15:07:24 # indefinitely, creating a GC cycle and not letting Transport ever be 15:07:24 # GC'd. it's a bug in Thread.) 15:07:24 15:07:24 # Hold reference to 'sys' so we can test sys.modules to detect 15:07:24 # interpreter shutdown. 15:07:24 self.sys = sys 15:07:24 15:07:24 # active=True occurs before the thread is launched, to avoid a race 15:07:24 _active_threads.append(self) 15:07:24 tid = hex(id(self) & xffffffff) 15:07:24 if self.server_mode: 15:07:24 self._log(DEBUG, "starting thread (server mode): {}".format(tid)) 15:07:24 else: 15:07:24 self._log(DEBUG, "starting thread (client mode): {}".format(tid)) 15:07:24 try: 15:07:24 try: 15:07:24 self.packetizer.write_all(b(self.local_version + "\r\n")) 15:07:24 self._log( 15:07:24 DEBUG, 15:07:24 "Local version/idstring: {}".format(self.local_version), 15:07:24 ) # noqa 15:07:24 > self._check_banner() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 buf = self.packetizer.readline(timeout) 15:07:24 except ProxyCommandFailure: 15:07:24 raise 15:07:24 except Exception as e: 15:07:24 raise SSHException( 15:07:24 > "Error reading SSH protocol banner" + str(e) 15:07:24 ) 15:07:24 E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = 15:07:24 15:07:24 def setup(self): 15:07:24 self.nc = manager.connect( 15:07:24 host=settings.HOST, 15:07:24 port=settings.SSH_PORT, 15:07:24 username=settings.USERNAME, 15:07:24 key_filename=settings.SSH_KEY_FILENAME, 15:07:24 allow_agent=False, 15:07:24 look_for_keys=False, 15:07:24 > hostkey_verify=False) 15:07:24 15:07:24 nctest.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect 15:07:24 return connect_ssh(*args, **kwds) 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh 15:07:24 session.connect(*args, **kwds) 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 self._transport.start_client() 15:07:24 except paramiko.SSHException as e: 15:07:24 > raise SSHError('Negotiation failed: %s' % e) 15:07:24 E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError 15:07:24 ------------------------------ Captured log setup ------------------------------ 15:07:24 15:07:23.969 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner 15:07:24 15:07:23.969 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:23.969 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 15:07:24 15:07:23.969 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout) 15:07:24 15:07:23.970 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 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout) 15:07:24 15:07:23.970 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 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] raise EOFError() 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] EOFError 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred: 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:23.970 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 15:07:24 15:07:23.970 ERROR [ncclient.transport.ssh] self._check_banner() 15:07:24 15:07:23.971 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 15:07:24 15:07:23.971 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e) 15:07:24 15:07:23.971 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:23.971 ERROR [ncclient.transport.ssh] 15:07:24 _________ ERROR at setup of TestTuringMachine.test_get_config_running __________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 > buf = self.packetizer.readline(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def readline(self, timeout): 15:07:24 """ 15:07:24 Read a line from the socket. We assume no data is pending after the 15:07:24 line, so it's okay to attempt large reads. 15:07:24 """ 15:07:24 buf = self.__remainder 15:07:24 while linefeed_byte not in buf: 15:07:24 > buf += self._read_timeout(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def _read_timeout(self, timeout): 15:07:24 start = time.time() 15:07:24 while True: 15:07:24 try: 15:07:24 x = self.__socket.recv(128) 15:07:24 if len(x) == 0: 15:07:24 > raise EOFError() 15:07:24 E EOFError 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 > self._transport.start_client() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 event = , timeout = None 15:07:24 15:07:24 def start_client(self, event=None, timeout=None): 15:07:24 """ 15:07:24 Negotiate a new SSH2 session as a client. This is the first step after 15:07:24 creating a new `.Transport`. A separate thread is created for protocol 15:07:24 negotiation. 15:07:24 15:07:24 If an event is passed in, this method returns immediately. When 15:07:24 negotiation is done (successful or not), the given ``Event`` will 15:07:24 be triggered. On failure, `is_active` will return ``False``. 15:07:24 15:07:24 (Since 1.4) If ``event`` is ``None``, this method will not return until 15:07:24 negotiation is done. On success, the method returns normally. 15:07:24 Otherwise an SSHException is raised. 15:07:24 15:07:24 After a successful negotiation, you will usually want to authenticate, 15:07:24 calling `auth_password ` or 15:07:24 `auth_publickey `. 15:07:24 15:07:24 .. note:: `connect` is a simpler method for connecting as a client. 15:07:24 15:07:24 .. note:: 15:07:24 After calling this method (or `start_server` or `connect`), you 15:07:24 should no longer directly read from or write to the original socket 15:07:24 object. 15:07:24 15:07:24 :param .threading.Event event: 15:07:24 an event to trigger when negotiation is complete (optional) 15:07:24 15:07:24 :param float timeout: 15:07:24 a timeout, in seconds, for SSH2 session negotiation (optional) 15:07:24 15:07:24 :raises: 15:07:24 `.SSHException` -- if negotiation fails (and no ``event`` was 15:07:24 passed in) 15:07:24 """ 15:07:24 self.active = True 15:07:24 if event is not None: 15:07:24 # async, return immediately and let the app poll for completion 15:07:24 self.completion_event = event 15:07:24 self.start() 15:07:24 return 15:07:24 15:07:24 # synchronous, wait for a result 15:07:24 self.completion_event = event = threading.Event() 15:07:24 self.start() 15:07:24 max_time = time.time() + timeout if timeout is not None else None 15:07:24 while True: 15:07:24 event.wait(0.1) 15:07:24 if not self.active: 15:07:24 e = self.get_exception() 15:07:24 if e is not None: 15:07:24 > raise e 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def run(self): 15:07:24 # (use the exposed "run" method, because if we specify a thread target 15:07:24 # of a private method, threading.Thread will keep a reference to it 15:07:24 # indefinitely, creating a GC cycle and not letting Transport ever be 15:07:24 # GC'd. it's a bug in Thread.) 15:07:24 15:07:24 # Hold reference to 'sys' so we can test sys.modules to detect 15:07:24 # interpreter shutdown. 15:07:24 self.sys = sys 15:07:24 15:07:24 # active=True occurs before the thread is launched, to avoid a race 15:07:24 _active_threads.append(self) 15:07:24 tid = hex(id(self) & xffffffff) 15:07:24 if self.server_mode: 15:07:24 self._log(DEBUG, "starting thread (server mode): {}".format(tid)) 15:07:24 else: 15:07:24 self._log(DEBUG, "starting thread (client mode): {}".format(tid)) 15:07:24 try: 15:07:24 try: 15:07:24 self.packetizer.write_all(b(self.local_version + "\r\n")) 15:07:24 self._log( 15:07:24 DEBUG, 15:07:24 "Local version/idstring: {}".format(self.local_version), 15:07:24 ) # noqa 15:07:24 > self._check_banner() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 buf = self.packetizer.readline(timeout) 15:07:24 except ProxyCommandFailure: 15:07:24 raise 15:07:24 except Exception as e: 15:07:24 raise SSHException( 15:07:24 > "Error reading SSH protocol banner" + str(e) 15:07:24 ) 15:07:24 E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = 15:07:24 15:07:24 def setup(self): 15:07:24 self.nc = manager.connect( 15:07:24 host=settings.HOST, 15:07:24 port=settings.SSH_PORT, 15:07:24 username=settings.USERNAME, 15:07:24 key_filename=settings.SSH_KEY_FILENAME, 15:07:24 allow_agent=False, 15:07:24 look_for_keys=False, 15:07:24 > hostkey_verify=False) 15:07:24 15:07:24 nctest.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect 15:07:24 return connect_ssh(*args, **kwds) 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh 15:07:24 session.connect(*args, **kwds) 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 self._transport.start_client() 15:07:24 except paramiko.SSHException as e: 15:07:24 > raise SSHError('Negotiation failed: %s' % e) 15:07:24 E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError 15:07:24 ------------------------------ Captured log setup ------------------------------ 15:07:24 15:07:24.101 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner 15:07:24 15:07:24.101 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.101 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 15:07:24 15:07:24.101 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout) 15:07:24 15:07:24.101 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 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout) 15:07:24 15:07:24.102 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 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] raise EOFError() 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] EOFError 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred: 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.102 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 15:07:24 15:07:24.102 ERROR [ncclient.transport.ssh] self._check_banner() 15:07:24 15:07:24.102 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 15:07:24 15:07:24.103 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e) 15:07:24 15:07:24.103 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24.103 ERROR [ncclient.transport.ssh] 15:07:24 _________ ERROR at setup of TestTuringMachine.test_get_subtree_filter __________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 > buf = self.packetizer.readline(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def readline(self, timeout): 15:07:24 """ 15:07:24 Read a line from the socket. We assume no data is pending after the 15:07:24 line, so it's okay to attempt large reads. 15:07:24 """ 15:07:24 buf = self.__remainder 15:07:24 while linefeed_byte not in buf: 15:07:24 > buf += self._read_timeout(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def _read_timeout(self, timeout): 15:07:24 start = time.time() 15:07:24 while True: 15:07:24 try: 15:07:24 x = self.__socket.recv(128) 15:07:24 if len(x) == 0: 15:07:24 > raise EOFError() 15:07:24 E EOFError 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 > self._transport.start_client() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 event = , timeout = None 15:07:24 15:07:24 def start_client(self, event=None, timeout=None): 15:07:24 """ 15:07:24 Negotiate a new SSH2 session as a client. This is the first step after 15:07:24 creating a new `.Transport`. A separate thread is created for protocol 15:07:24 negotiation. 15:07:24 15:07:24 If an event is passed in, this method returns immediately. When 15:07:24 negotiation is done (successful or not), the given ``Event`` will 15:07:24 be triggered. On failure, `is_active` will return ``False``. 15:07:24 15:07:24 (Since 1.4) If ``event`` is ``None``, this method will not return until 15:07:24 negotiation is done. On success, the method returns normally. 15:07:24 Otherwise an SSHException is raised. 15:07:24 15:07:24 After a successful negotiation, you will usually want to authenticate, 15:07:24 calling `auth_password ` or 15:07:24 `auth_publickey `. 15:07:24 15:07:24 .. note:: `connect` is a simpler method for connecting as a client. 15:07:24 15:07:24 .. note:: 15:07:24 After calling this method (or `start_server` or `connect`), you 15:07:24 should no longer directly read from or write to the original socket 15:07:24 object. 15:07:24 15:07:24 :param .threading.Event event: 15:07:24 an event to trigger when negotiation is complete (optional) 15:07:24 15:07:24 :param float timeout: 15:07:24 a timeout, in seconds, for SSH2 session negotiation (optional) 15:07:24 15:07:24 :raises: 15:07:24 `.SSHException` -- if negotiation fails (and no ``event`` was 15:07:24 passed in) 15:07:24 """ 15:07:24 self.active = True 15:07:24 if event is not None: 15:07:24 # async, return immediately and let the app poll for completion 15:07:24 self.completion_event = event 15:07:24 self.start() 15:07:24 return 15:07:24 15:07:24 # synchronous, wait for a result 15:07:24 self.completion_event = event = threading.Event() 15:07:24 self.start() 15:07:24 max_time = time.time() + timeout if timeout is not None else None 15:07:24 while True: 15:07:24 event.wait(0.1) 15:07:24 if not self.active: 15:07:24 e = self.get_exception() 15:07:24 if e is not None: 15:07:24 > raise e 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def run(self): 15:07:24 # (use the exposed "run" method, because if we specify a thread target 15:07:24 # of a private method, threading.Thread will keep a reference to it 15:07:24 # indefinitely, creating a GC cycle and not letting Transport ever be 15:07:24 # GC'd. it's a bug in Thread.) 15:07:24 15:07:24 # Hold reference to 'sys' so we can test sys.modules to detect 15:07:24 # interpreter shutdown. 15:07:24 self.sys = sys 15:07:24 15:07:24 # active=True occurs before the thread is launched, to avoid a race 15:07:24 _active_threads.append(self) 15:07:24 tid = hex(id(self) & xffffffff) 15:07:24 if self.server_mode: 15:07:24 self._log(DEBUG, "starting thread (server mode): {}".format(tid)) 15:07:24 else: 15:07:24 self._log(DEBUG, "starting thread (client mode): {}".format(tid)) 15:07:24 try: 15:07:24 try: 15:07:24 self.packetizer.write_all(b(self.local_version + "\r\n")) 15:07:24 self._log( 15:07:24 DEBUG, 15:07:24 "Local version/idstring: {}".format(self.local_version), 15:07:24 ) # noqa 15:07:24 > self._check_banner() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 buf = self.packetizer.readline(timeout) 15:07:24 except ProxyCommandFailure: 15:07:24 raise 15:07:24 except Exception as e: 15:07:24 raise SSHException( 15:07:24 > "Error reading SSH protocol banner" + str(e) 15:07:24 ) 15:07:24 E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = 15:07:24 15:07:24 def setup(self): 15:07:24 self.nc = manager.connect( 15:07:24 host=settings.HOST, 15:07:24 port=settings.SSH_PORT, 15:07:24 username=settings.USERNAME, 15:07:24 key_filename=settings.SSH_KEY_FILENAME, 15:07:24 allow_agent=False, 15:07:24 look_for_keys=False, 15:07:24 > hostkey_verify=False) 15:07:24 15:07:24 nctest.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect 15:07:24 return connect_ssh(*args, **kwds) 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh 15:07:24 session.connect(*args, **kwds) 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 self._transport.start_client() 15:07:24 except paramiko.SSHException as e: 15:07:24 > raise SSHError('Negotiation failed: %s' % e) 15:07:24 E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError 15:07:24 ------------------------------ Captured log setup ------------------------------ 15:07:24 15:07:24.256 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner 15:07:24 15:07:24.257 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.257 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 15:07:24 15:07:24.257 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout) 15:07:24 15:07:24.257 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 15:07:24 15:07:24.257 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout) 15:07:24 15:07:24.257 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 15:07:24 15:07:24.257 ERROR [ncclient.transport.ssh] raise EOFError() 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] EOFError 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred: 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.258 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 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] self._check_banner() 15:07:24 15:07:24.258 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 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e) 15:07:24 15:07:24.258 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24.259 ERROR [ncclient.transport.ssh] 15:07:24 __________ ERROR at setup of TestTuringMachine.test_get_xpath_filter ___________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 > buf = self.packetizer.readline(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def readline(self, timeout): 15:07:24 """ 15:07:24 Read a line from the socket. We assume no data is pending after the 15:07:24 line, so it's okay to attempt large reads. 15:07:24 """ 15:07:24 buf = self.__remainder 15:07:24 while linefeed_byte not in buf: 15:07:24 > buf += self._read_timeout(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def _read_timeout(self, timeout): 15:07:24 start = time.time() 15:07:24 while True: 15:07:24 try: 15:07:24 > x = self.__socket.recv(128) 15:07:24 E ConnectionResetError: [Errno 104] Connection reset by peer 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:663: ConnectionResetError 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 > self._transport.start_client() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 event = , timeout = None 15:07:24 15:07:24 def start_client(self, event=None, timeout=None): 15:07:24 """ 15:07:24 Negotiate a new SSH2 session as a client. This is the first step after 15:07:24 creating a new `.Transport`. A separate thread is created for protocol 15:07:24 negotiation. 15:07:24 15:07:24 If an event is passed in, this method returns immediately. When 15:07:24 negotiation is done (successful or not), the given ``Event`` will 15:07:24 be triggered. On failure, `is_active` will return ``False``. 15:07:24 15:07:24 (Since 1.4) If ``event`` is ``None``, this method will not return until 15:07:24 negotiation is done. On success, the method returns normally. 15:07:24 Otherwise an SSHException is raised. 15:07:24 15:07:24 After a successful negotiation, you will usually want to authenticate, 15:07:24 calling `auth_password ` or 15:07:24 `auth_publickey `. 15:07:24 15:07:24 .. note:: `connect` is a simpler method for connecting as a client. 15:07:24 15:07:24 .. note:: 15:07:24 After calling this method (or `start_server` or `connect`), you 15:07:24 should no longer directly read from or write to the original socket 15:07:24 object. 15:07:24 15:07:24 :param .threading.Event event: 15:07:24 an event to trigger when negotiation is complete (optional) 15:07:24 15:07:24 :param float timeout: 15:07:24 a timeout, in seconds, for SSH2 session negotiation (optional) 15:07:24 15:07:24 :raises: 15:07:24 `.SSHException` -- if negotiation fails (and no ``event`` was 15:07:24 passed in) 15:07:24 """ 15:07:24 self.active = True 15:07:24 if event is not None: 15:07:24 # async, return immediately and let the app poll for completion 15:07:24 self.completion_event = event 15:07:24 self.start() 15:07:24 return 15:07:24 15:07:24 # synchronous, wait for a result 15:07:24 self.completion_event = event = threading.Event() 15:07:24 self.start() 15:07:24 max_time = time.time() + timeout if timeout is not None else None 15:07:24 while True: 15:07:24 event.wait(0.1) 15:07:24 if not self.active: 15:07:24 e = self.get_exception() 15:07:24 if e is not None: 15:07:24 > raise e 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def run(self): 15:07:24 # (use the exposed "run" method, because if we specify a thread target 15:07:24 # of a private method, threading.Thread will keep a reference to it 15:07:24 # indefinitely, creating a GC cycle and not letting Transport ever be 15:07:24 # GC'd. it's a bug in Thread.) 15:07:24 15:07:24 # Hold reference to 'sys' so we can test sys.modules to detect 15:07:24 # interpreter shutdown. 15:07:24 self.sys = sys 15:07:24 15:07:24 # active=True occurs before the thread is launched, to avoid a race 15:07:24 _active_threads.append(self) 15:07:24 tid = hex(id(self) & xffffffff) 15:07:24 if self.server_mode: 15:07:24 self._log(DEBUG, "starting thread (server mode): {}".format(tid)) 15:07:24 else: 15:07:24 self._log(DEBUG, "starting thread (client mode): {}".format(tid)) 15:07:24 try: 15:07:24 try: 15:07:24 self.packetizer.write_all(b(self.local_version + "\r\n")) 15:07:24 self._log( 15:07:24 DEBUG, 15:07:24 "Local version/idstring: {}".format(self.local_version), 15:07:24 ) # noqa 15:07:24 > self._check_banner() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 buf = self.packetizer.readline(timeout) 15:07:24 except ProxyCommandFailure: 15:07:24 raise 15:07:24 except Exception as e: 15:07:24 raise SSHException( 15:07:24 > "Error reading SSH protocol banner" + str(e) 15:07:24 ) 15:07:24 E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = 15:07:24 15:07:24 def setup(self): 15:07:24 self.nc = manager.connect( 15:07:24 host=settings.HOST, 15:07:24 port=settings.SSH_PORT, 15:07:24 username=settings.USERNAME, 15:07:24 key_filename=settings.SSH_KEY_FILENAME, 15:07:24 allow_agent=False, 15:07:24 look_for_keys=False, 15:07:24 > hostkey_verify=False) 15:07:24 15:07:24 nctest.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect 15:07:24 return connect_ssh(*args, **kwds) 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh 15:07:24 session.connect(*args, **kwds) 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 self._transport.start_client() 15:07:24 except paramiko.SSHException as e: 15:07:24 > raise SSHError('Negotiation failed: %s' % e) 15:07:24 E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError 15:07:24 ------------------------------ Captured log setup ------------------------------ 15:07:24 15:07:24.389 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.390 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 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout) 15:07:24 15:07:24.390 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 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout) 15:07:24 15:07:24.390 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 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] x = self.__socket.recv(128) 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] ConnectionResetError: [Errno 104] Connection reset by peer 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred: 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.390 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.390 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 15:07:24 15:07:24.391 ERROR [ncclient.transport.ssh] self._check_banner() 15:07:24 15:07:24.391 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 15:07:24 15:07:24.391 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e) 15:07:24 15:07:24.391 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[Errno 104] Connection reset by peer 15:07:24 15:07:24.391 ERROR [ncclient.transport.ssh] 15:07:24 _____________ ERROR at setup of TestTuringMachine.test_edit_config _____________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 > buf = self.packetizer.readline(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2369: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def readline(self, timeout): 15:07:24 """ 15:07:24 Read a line from the socket. We assume no data is pending after the 15:07:24 line, so it's okay to attempt large reads. 15:07:24 """ 15:07:24 buf = self.__remainder 15:07:24 while linefeed_byte not in buf: 15:07:24 > buf += self._read_timeout(timeout) 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:395: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , timeout = 15 15:07:24 15:07:24 def _read_timeout(self, timeout): 15:07:24 start = time.time() 15:07:24 while True: 15:07:24 try: 15:07:24 x = self.__socket.recv(128) 15:07:24 if len(x) == 0: 15:07:24 > raise EOFError() 15:07:24 E EOFError 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/packet.py:665: EOFError 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 > self._transport.start_client() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:329: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 event = , timeout = None 15:07:24 15:07:24 def start_client(self, event=None, timeout=None): 15:07:24 """ 15:07:24 Negotiate a new SSH2 session as a client. This is the first step after 15:07:24 creating a new `.Transport`. A separate thread is created for protocol 15:07:24 negotiation. 15:07:24 15:07:24 If an event is passed in, this method returns immediately. When 15:07:24 negotiation is done (successful or not), the given ``Event`` will 15:07:24 be triggered. On failure, `is_active` will return ``False``. 15:07:24 15:07:24 (Since 1.4) If ``event`` is ``None``, this method will not return until 15:07:24 negotiation is done. On success, the method returns normally. 15:07:24 Otherwise an SSHException is raised. 15:07:24 15:07:24 After a successful negotiation, you will usually want to authenticate, 15:07:24 calling `auth_password ` or 15:07:24 `auth_publickey `. 15:07:24 15:07:24 .. note:: `connect` is a simpler method for connecting as a client. 15:07:24 15:07:24 .. note:: 15:07:24 After calling this method (or `start_server` or `connect`), you 15:07:24 should no longer directly read from or write to the original socket 15:07:24 object. 15:07:24 15:07:24 :param .threading.Event event: 15:07:24 an event to trigger when negotiation is complete (optional) 15:07:24 15:07:24 :param float timeout: 15:07:24 a timeout, in seconds, for SSH2 session negotiation (optional) 15:07:24 15:07:24 :raises: 15:07:24 `.SSHException` -- if negotiation fails (and no ``event`` was 15:07:24 passed in) 15:07:24 """ 15:07:24 self.active = True 15:07:24 if event is not None: 15:07:24 # async, return immediately and let the app poll for completion 15:07:24 self.completion_event = event 15:07:24 self.start() 15:07:24 return 15:07:24 15:07:24 # synchronous, wait for a result 15:07:24 self.completion_event = event = threading.Event() 15:07:24 self.start() 15:07:24 max_time = time.time() + timeout if timeout is not None else None 15:07:24 while True: 15:07:24 event.wait(0.1) 15:07:24 if not self.active: 15:07:24 e = self.get_exception() 15:07:24 if e is not None: 15:07:24 > raise e 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:773: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def run(self): 15:07:24 # (use the exposed "run" method, because if we specify a thread target 15:07:24 # of a private method, threading.Thread will keep a reference to it 15:07:24 # indefinitely, creating a GC cycle and not letting Transport ever be 15:07:24 # GC'd. it's a bug in Thread.) 15:07:24 15:07:24 # Hold reference to 'sys' so we can test sys.modules to detect 15:07:24 # interpreter shutdown. 15:07:24 self.sys = sys 15:07:24 15:07:24 # active=True occurs before the thread is launched, to avoid a race 15:07:24 _active_threads.append(self) 15:07:24 tid = hex(id(self) & xffffffff) 15:07:24 if self.server_mode: 15:07:24 self._log(DEBUG, "starting thread (server mode): {}".format(tid)) 15:07:24 else: 15:07:24 self._log(DEBUG, "starting thread (client mode): {}".format(tid)) 15:07:24 try: 15:07:24 try: 15:07:24 self.packetizer.write_all(b(self.local_version + "\r\n")) 15:07:24 self._log( 15:07:24 DEBUG, 15:07:24 "Local version/idstring: {}".format(self.local_version), 15:07:24 ) # noqa 15:07:24 > self._check_banner() 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2185: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def _check_banner(self): 15:07:24 # this is slow, but we only have to do it once 15:07:24 for i in range(100): 15:07:24 # give them 15 seconds for the first line, then just 2 seconds 15:07:24 # each additional line. (some sites have very high latency.) 15:07:24 if i == 0: 15:07:24 timeout = self.banner_timeout 15:07:24 else: 15:07:24 timeout = 2 15:07:24 try: 15:07:24 buf = self.packetizer.readline(timeout) 15:07:24 except ProxyCommandFailure: 15:07:24 raise 15:07:24 except Exception as e: 15:07:24 raise SSHException( 15:07:24 > "Error reading SSH protocol banner" + str(e) 15:07:24 ) 15:07:24 E paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:2374: SSHException 15:07:24 15:07:24 During handling of the above exception, another exception occurred: 15:07:24 15:07:24 self = 15:07:24 15:07:24 def setup(self): 15:07:24 self.nc = manager.connect( 15:07:24 host=settings.HOST, 15:07:24 port=settings.SSH_PORT, 15:07:24 username=settings.USERNAME, 15:07:24 key_filename=settings.SSH_KEY_FILENAME, 15:07:24 allow_agent=False, 15:07:24 look_for_keys=False, 15:07:24 > hostkey_verify=False) 15:07:24 15:07:24 nctest.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:168: in connect 15:07:24 return connect_ssh(*args, **kwds) 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/manager.py:135: in connect_ssh 15:07:24 session.connect(*args, **kwds) 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = , host = '127.0.0.1', port = 49154 15:07:24 timeout = None 15:07:24 unknown_host_cb = 15:07:24 username = 'netconf', password = None, key_filename = '../config/ssh/id_rsa' 15:07:24 allow_agent = False, hostkey_verify = False, hostkey_b64 = None 15:07:24 look_for_keys = False, ssh_config = None, sock_fd = None, bind_addr = None 15:07:24 15:07:24 def connect( 15:07:24 self, 15:07:24 host, 15:07:24 port = PORT_NETCONF_DEFAULT, 15:07:24 timeout = None, 15:07:24 unknown_host_cb = default_unknown_host_cb, 15:07:24 username = None, 15:07:24 password = None, 15:07:24 key_filename = None, 15:07:24 allow_agent = True, 15:07:24 hostkey_verify = True, 15:07:24 hostkey_b64 = None, 15:07:24 look_for_keys = True, 15:07:24 ssh_config = None, 15:07:24 sock_fd = None, 15:07:24 bind_addr = None): 15:07:24 15:07:24 """Connect via SSH and initialize the NETCONF session. First attempts the publickey authentication method and then password authentication. 15:07:24 15:07:24 To disable attempting publickey authentication altogether, call with *allow_agent* and *look_for_keys* as `False`. 15:07:24 15:07:24 *host* is the hostname or IP address to connect to 15:07:24 15:07:24 *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 15:07:24 15:07:24 *timeout* is an optional timeout for socket connect 15:07:24 15:07:24 *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`) 15:07:24 15:07:24 *username* is the username to use for SSH authentication 15:07:24 15:07:24 *password* is the password used if using password authentication, or the passphrase to use for unlocking keys that require it 15:07:24 15:07:24 *key_filename* is a filename where a the private key to be used can be found 15:07:24 15:07:24 *allow_agent* enables querying SSH agent (if found) for keys 15:07:24 15:07:24 *hostkey_verify* enables hostkey verification from ~/.ssh/known_hosts 15:07:24 15:07:24 *hostkey_b64* only connect when server presents a public hostkey matching this (obtain from server /etc/ssh/ssh_host_*pub or ssh-keyscan) 15:07:24 15:07:24 *look_for_keys* enables looking in the usual locations for ssh keys (e.g. :file:`~/.ssh/id_*`) 15:07:24 15:07:24 *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`). 15:07:24 15:07:24 *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 15:07:24 15:07:24 *bind_addr* is a (local) source IP address to use, must be reachable from the remote device. 15:07:24 """ 15:07:24 if not (host or sock_fd): 15:07:24 raise SSHError("Missing host or socket fd") 15:07:24 15:07:24 self._host = host 15:07:24 15:07:24 # Optionally, parse .ssh/config 15:07:24 config = {} 15:07:24 if ssh_config is True: 15:07:24 ssh_config = "~/.ssh/config" if sys.platform != "win32" else "~/ssh/config" 15:07:24 if ssh_config is not None: 15:07:24 config = paramiko.SSHConfig() 15:07:24 with open(os.path.expanduser(ssh_config)) as ssh_config_file_obj: 15:07:24 config.parse(ssh_config_file_obj) 15:07:24 15:07:24 # Save default Paramiko SSH port so it can be reverted 15:07:24 paramiko_default_ssh_port = paramiko.config.SSH_PORT 15:07:24 15:07:24 # Change the default SSH port to the port specified by the user so expand_variables 15:07:24 # replaces %p with the passed in port rather than 22 (the defauld paramiko.config.SSH_PORT) 15:07:24 15:07:24 paramiko.config.SSH_PORT = port 15:07:24 15:07:24 config = config.lookup(host) 15:07:24 15:07:24 # paramiko.config.SSHconfig::expand_variables is called by lookup so we can set the SSH port 15:07:24 # back to the default 15:07:24 paramiko.config.SSH_PORT = paramiko_default_ssh_port 15:07:24 15:07:24 host = config.get("hostname", host) 15:07:24 if username is None: 15:07:24 username = config.get("user") 15:07:24 if key_filename is None: 15:07:24 key_filename = config.get("identityfile") 15:07:24 if hostkey_verify: 15:07:24 userknownhostsfile = config.get("userknownhostsfile") 15:07:24 if userknownhostsfile: 15:07:24 self.load_known_hosts(os.path.expanduser(userknownhostsfile)) 15:07:24 if timeout is None: 15:07:24 timeout = config.get("connecttimeout") 15:07:24 if timeout: 15:07:24 timeout = int(timeout) 15:07:24 15:07:24 if username is None: 15:07:24 username = getpass.getuser() 15:07:24 15:07:24 if sock_fd is None: 15:07:24 proxycommand = config.get("proxycommand") 15:07:24 if proxycommand: 15:07:24 self.logger.debug("Configuring Proxy. %s", proxycommand) 15:07:24 if not isinstance(proxycommand, six.string_types): 15:07:24 proxycommand = [os.path.expanduser(elem) for elem in proxycommand] 15:07:24 else: 15:07:24 proxycommand = os.path.expanduser(proxycommand) 15:07:24 sock = paramiko.proxy.ProxyCommand(proxycommand) 15:07:24 else: 15:07:24 for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM): 15:07:24 af, socktype, proto, canonname, sa = res 15:07:24 try: 15:07:24 sock = socket.socket(af, socktype, proto) 15:07:24 sock.settimeout(timeout) 15:07:24 except socket.error: 15:07:24 continue 15:07:24 try: 15:07:24 if bind_addr: 15:07:24 sock.bind((bind_addr, 0)) 15:07:24 sock.connect(sa) 15:07:24 except socket.error: 15:07:24 sock.close() 15:07:24 continue 15:07:24 break 15:07:24 else: 15:07:24 raise SSHError("Could not open socket to %s:%s" % (host, port)) 15:07:24 else: 15:07:24 if sys.version_info[0] < 3: 15:07:24 s = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, _sock=s) 15:07:24 else: 15:07:24 sock = socket.fromfd(int(sock_fd), socket.AF_INET, socket.SOCK_STREAM) 15:07:24 sock.settimeout(timeout) 15:07:24 15:07:24 self._transport = paramiko.Transport(sock) 15:07:24 self._transport.set_log_channel(logger.name) 15:07:24 if config.get("compression") == 'yes': 15:07:24 self._transport.use_compression() 15:07:24 15:07:24 if hostkey_b64: 15:07:24 # If we need to connect with a specific hostkey, negotiate for only its type 15:07:24 hostkey_obj = None 15:07:24 for key_cls in [paramiko.DSSKey, paramiko.Ed25519Key, paramiko.RSAKey, paramiko.ECDSAKey]: 15:07:24 try: 15:07:24 hostkey_obj = key_cls(data=base64.b64decode(hostkey_b64)) 15:07:24 except paramiko.SSHException: 15:07:24 # Not a key of this type - try the next 15:07:24 pass 15:07:24 if not hostkey_obj: 15:07:24 # We've tried all known host key types and haven't found a suitable one to use - bail 15:07:24 raise SSHError("Couldn't find suitable paramiko key class for host key %s" % hostkey_b64) 15:07:24 self._transport._preferred_keys = [hostkey_obj.get_name()] 15:07:24 elif self._host_keys: 15:07:24 # Else set preferred host keys to those we possess for the host 15:07:24 # (avoids situation where known_hosts contains a valid key for the host, but that key type is not selected during negotiation) 15:07:24 known_host_keys_for_this_host = self._host_keys.lookup(host) or {} 15:07:24 host_port = '[%s]:%s' % (host, port) 15:07:24 known_host_keys_for_this_host.update(self._host_keys.lookup(host_port) or {}) 15:07:24 if known_host_keys_for_this_host: 15:07:24 self._transport._preferred_keys = list(known_host_keys_for_this_host) 15:07:24 15:07:24 # Connect 15:07:24 try: 15:07:24 self._transport.start_client() 15:07:24 except paramiko.SSHException as e: 15:07:24 > raise SSHError('Negotiation failed: %s' % e) 15:07:24 E ncclient.transport.errors.SSHError: Negotiation failed: Error reading SSH protocol banner 15:07:24 15:07:24 ../.tox/py3/lib/python3.6/site-packages/ncclient/transport/ssh.py:331: SSHError 15:07:24 ------------------------------ Captured log setup ------------------------------ 15:07:24 15:07:24.515 ERROR [ncclient.transport.ssh] Exception (client): Error reading SSH protocol banner 15:07:24 15:07:24.516 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.516 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 15:07:24 15:07:24.516 ERROR [ncclient.transport.ssh] buf = self.packetizer.readline(timeout) 15:07:24 15:07:24.516 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 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] buf += self._read_timeout(timeout) 15:07:24 15:07:24.517 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 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] raise EOFError() 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] EOFError 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] During handling of the above exception, another exception occurred: 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] Traceback (most recent call last): 15:07:24 15:07:24.517 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 15:07:24 15:07:24.517 ERROR [ncclient.transport.ssh] self._check_banner() 15:07:24 15:07:24.517 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 15:07:24 15:07:24.518 ERROR [ncclient.transport.ssh] "Error reading SSH protocol banner" + str(e) 15:07:24 15:07:24.518 ERROR [ncclient.transport.ssh] paramiko.ssh_exception.SSHException: Error reading SSH protocol banner 15:07:24 15:07:24.518 ERROR [ncclient.transport.ssh] 15:07:24 =================================== FAILURES =================================== 15:07:24 ___________________________ TestTLS.test_tls_connect ___________________________ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def test_tls_connect(self): 15:07:24 > nc_connect(INITIAL_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:41: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852) 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: SSLError 15:07:24 __________________ TestTLS.test_tls_reconfiguration[round #1] __________________ 15:07:24 15:07:24 self = , round_id = 'round #1' 15:07:24 15:07:24 @pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)]) 15:07:24 def test_tls_reconfiguration(self, round_id): 15:07:24 # pylint: disable=W0613 15:07:24 self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR) 15:07:24 > self.reconfigure_and_check(INITIAL_CONFIG_DIR, NEW_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:47: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:60: in reconfigure_and_check 15:07:24 nc_connect(good_config_dir) 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852) 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: SSLError 15:07:24 ----------------------------- Captured stdout call ----------------------------- 15:07:24 Received NETCONF HelloMessage: 15:07:24 urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:capability:writable-running:1.0urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:rollback-on-error:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:url:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,expliciturn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:interleave:1.0urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-08-05urn:ietf:params:xml:ns:yang:1?module=yang&revision=2017-02-20urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=22urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2018-02-14urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01&features=writable-running,candidate,rollback-on-error,validate,startup,url,xpathurn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&revision=2012-02-06urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&revision=2008-07-14urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&revision=2008-07-14urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&revision=2014-12-10urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&revision=2014-08-06urn:ietf:params:xml:ns:yang:ietf-system?module=ietf-system&revision=2014-08-06&features=authentication,local-usershttp://example.net/turing-machine?module=turing-machine&revision=2013-12-271]]>]]> 15:07:24 __________________ TestTLS.test_tls_reconfiguration[round #2] __________________ 15:07:24 15:07:24 self = , round_id = 'round #2' 15:07:24 15:07:24 @pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)]) 15:07:24 def test_tls_reconfiguration(self, round_id): 15:07:24 # pylint: disable=W0613 15:07:24 self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR) 15:07:24 > self.reconfigure_and_check(INITIAL_CONFIG_DIR, NEW_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:47: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:60: in reconfigure_and_check 15:07:24 nc_connect(good_config_dir) 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852) 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: SSLError 15:07:24 ----------------------------- Captured stdout call ----------------------------- 15:07:24 Received NETCONF HelloMessage: 15:07:24 urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:capability:writable-running:1.0urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:rollback-on-error:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:url:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,expliciturn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:interleave:1.0urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-08-05urn:ietf:params:xml:ns:yang:1?module=yang&revision=2017-02-20urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=22urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2018-02-14urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01&features=writable-running,candidate,rollback-on-error,validate,startup,url,xpathurn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&revision=2012-02-06urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&revision=2008-07-14urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&revision=2008-07-14urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&revision=2014-12-10urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&revision=2014-08-06urn:ietf:params:xml:ns:yang:ietf-system?module=ietf-system&revision=2014-08-06&features=authentication,local-usershttp://example.net/turing-machine?module=turing-machine&revision=2013-12-271]]>]]> 15:07:24 __________________ TestTLS.test_tls_reconfiguration[round #3] __________________ 15:07:24 15:07:24 self = , round_id = 'round #3' 15:07:24 15:07:24 @pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)]) 15:07:24 def test_tls_reconfiguration(self, round_id): 15:07:24 # pylint: disable=W0613 15:07:24 self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR) 15:07:24 > self.reconfigure_and_check(INITIAL_CONFIG_DIR, NEW_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:47: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:60: in reconfigure_and_check 15:07:24 nc_connect(good_config_dir) 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852) 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: SSLError 15:07:24 ----------------------------- Captured stdout call ----------------------------- 15:07:24 Received NETCONF HelloMessage: 15:07:24 urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:capability:writable-running:1.0urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:rollback-on-error:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:url:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,expliciturn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:interleave:1.0urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-08-05urn:ietf:params:xml:ns:yang:1?module=yang&revision=2017-02-20urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=22urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2018-02-14urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01&features=writable-running,candidate,rollback-on-error,validate,startup,url,xpathurn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&revision=2012-02-06urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&revision=2008-07-14urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&revision=2008-07-14urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&revision=2014-12-10urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&revision=2014-08-06urn:ietf:params:xml:ns:yang:ietf-system?module=ietf-system&revision=2014-08-06&features=authentication,local-usershttp://example.net/turing-machine?module=turing-machine&revision=2013-12-271]]>]]> 15:07:24 __________________ TestTLS.test_tls_reconfiguration[round #4] __________________ 15:07:24 15:07:24 self = , round_id = 'round #4' 15:07:24 15:07:24 @pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)]) 15:07:24 def test_tls_reconfiguration(self, round_id): 15:07:24 # pylint: disable=W0613 15:07:24 self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR) 15:07:24 > self.reconfigure_and_check(INITIAL_CONFIG_DIR, NEW_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:47: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:60: in reconfigure_and_check 15:07:24 nc_connect(good_config_dir) 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852) 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: SSLError 15:07:24 ----------------------------- Captured stdout call ----------------------------- 15:07:24 Received NETCONF HelloMessage: 15:07:24 urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:capability:writable-running:1.0urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:rollback-on-error:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:url:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,expliciturn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:interleave:1.0urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-08-05urn:ietf:params:xml:ns:yang:1?module=yang&revision=2017-02-20urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=22urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2018-02-14urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01&features=writable-running,candidate,rollback-on-error,validate,startup,url,xpathurn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&revision=2012-02-06urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&revision=2008-07-14urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&revision=2008-07-14urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&revision=2014-12-10urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&revision=2014-08-06urn:ietf:params:xml:ns:yang:ietf-system?module=ietf-system&revision=2014-08-06&features=authentication,local-usershttp://example.net/turing-machine?module=turing-machine&revision=2013-12-271]]>]]> 15:07:24 __________________ TestTLS.test_tls_reconfiguration[round #5] __________________ 15:07:24 15:07:24 self = , round_id = 'round #5' 15:07:24 15:07:24 @pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)]) 15:07:24 def test_tls_reconfiguration(self, round_id): 15:07:24 # pylint: disable=W0613 15:07:24 self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR) 15:07:24 > self.reconfigure_and_check(INITIAL_CONFIG_DIR, NEW_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:47: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:60: in reconfigure_and_check 15:07:24 nc_connect(good_config_dir) 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852) 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: SSLError 15:07:24 ----------------------------- Captured stdout call ----------------------------- 15:07:24 Received NETCONF HelloMessage: 15:07:24 urn:ietf:params:netconf:base:1.0urn:ietf:params:netconf:base:1.1urn:ietf:params:netconf:capability:writable-running:1.0urn:ietf:params:netconf:capability:candidate:1.0urn:ietf:params:netconf:capability:rollback-on-error:1.0urn:ietf:params:netconf:capability:validate:1.1urn:ietf:params:netconf:capability:startup:1.0urn:ietf:params:netconf:capability:url:1.0urn:ietf:params:netconf:capability:xpath:1.0urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,report-all-tagged,trim,expliciturn:ietf:params:netconf:capability:notification:1.0urn:ietf:params:netconf:capability:interleave:1.0urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&revision=2016-08-05urn:ietf:params:xml:ns:yang:1?module=yang&revision=2017-02-20urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2013-07-15urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=22urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&revision=2018-02-14urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&revision=2011-06-01&features=writable-running,candidate,rollback-on-error,validate,startup,url,xpathurn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&revision=2012-02-06urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&revision=2008-07-14urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&revision=2008-07-14urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&revision=2014-12-10urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&revision=2011-06-01urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&revision=2014-08-06urn:ietf:params:xml:ns:yang:ietf-system?module=ietf-system&revision=2014-08-06&features=authentication,local-usershttp://example.net/turing-machine?module=turing-machine&revision=2013-12-271]]>]]> 15:07:24 __________________ TestTLS.test_tls_reconfiguration[round #6] __________________ 15:07:24 15:07:24 self = , round_id = 'round #6' 15:07:24 15:07:24 @pytest.mark.parametrize("round_id", [f"round #{i + 1}" for i in range(6)]) 15:07:24 def test_tls_reconfiguration(self, round_id): 15:07:24 # pylint: disable=W0613 15:07:24 > self.reconfigure_and_check(NEW_CONFIG_DIR, INITIAL_CONFIG_DIR) 15:07:24 15:07:24 test_tls.py:46: 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 test_tls.py:60: in reconfigure_and_check 15:07:24 nc_connect(good_config_dir) 15:07:24 test_tls.py:93: in nc_connect 15:07:24 conn.connect((settings.HOST, settings.TLS_PORT)) 15:07:24 /usr/lib/python3.6/ssl.py:1109: in connect 15:07:24 self._real_connect(addr, False) 15:07:24 /usr/lib/python3.6/ssl.py:1100: in _real_connect 15:07:24 self.do_handshake() 15:07:24 /usr/lib/python3.6/ssl.py:1077: in do_handshake 15:07:24 self._sslobj.do_handshake() 15:07:24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15:07:24 15:07:24 self = 15:07:24 15:07:24 def do_handshake(self): 15:07:24 """Start the SSL/TLS handshake.""" 15:07:24 > self._sslobj.do_handshake() 15:07:24 E ConnectionResetError: [Errno 104] Connection reset by peer 15:07:24 15:07:24 /usr/lib/python3.6/ssl.py:689: ConnectionResetError 15:07:24 =============================== warnings summary =============================== 15:07:24 ../.tox/py3/lib/python3.6/site-packages/paramiko/transport.py:32 15:07:24 /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. 15:07:24 from cryptography.hazmat.backends import default_backend 15:07:24 15:07:24 -- Docs: https://docs.pytest.org/en/stable/warnings.html 15:07:24 =========================== short test summary info ============================ 15:07:24 FAILED test_tls.py::TestTLS::test_tls_connect - ssl.SSLError: [SSL: CERTIFICA... 15:07:24 FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #1] - ssl.SSLErro... 15:07:24 FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #2] - ssl.SSLErro... 15:07:24 FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #3] - ssl.SSLErro... 15:07:24 FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #4] - ssl.SSLErro... 15:07:24 FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #5] - ssl.SSLErro... 15:07:24 FAILED test_tls.py::TestTLS::test_tls_reconfiguration[round #6] - ConnectionR... 15:07:24 ERROR test_turing_machine.py::TestTuringMachine::test_get - ncclient.transpor... 15:07:24 ERROR test_turing_machine.py::TestTuringMachine::test_get_config_startup - nc... 15:07:24 ERROR test_turing_machine.py::TestTuringMachine::test_get_config_running - nc... 15:07:24 ERROR test_turing_machine.py::TestTuringMachine::test_get_subtree_filter - nc... 15:07:24 ERROR test_turing_machine.py::TestTuringMachine::test_get_xpath_filter - nccl... 15:07:24 ERROR test_turing_machine.py::TestTuringMachine::test_edit_config - ncclient.... 15:07:24 ============== 7 failed, 7 passed, 1 warning, 6 errors in 31.18s =============== 15:07:24 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) 15:07:24 py3 docker: remove '58833fa9c4' (forced) 15:07:25 ___________________________________ summary ____________________________________ 15:07:25 ERROR: py3: commands failed 15:07:25 Build step 'Execute shell' marked build as failure 15:07:25 $ ssh-agent -k 15:07:25 unset SSH_AUTH_SOCK; 15:07:25 unset SSH_AGENT_PID; 15:07:25 echo Agent pid 2067 killed; 15:07:25 [ssh-agent] Stopped. 15:07:25 [PostBuildScript] - [INFO] Executing post build scripts. 15:07:25 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins17879253814158971833.sh 15:07:25 ---> sysstat.sh 15:07:25 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins12039653451977003454.sh 15:07:25 ---> package-listing.sh 15:07:25 ++ facter osfamily 15:07:25 ++ tr '[:upper:]' '[:lower:]' 15:07:25 + OS_FAMILY=debian 15:07:25 + workspace=/w/workspace/integration-netconf-pnp-simulator-docker-merge-master 15:07:25 + START_PACKAGES=/tmp/packages_start.txt 15:07:25 + END_PACKAGES=/tmp/packages_end.txt 15:07:25 + DIFF_PACKAGES=/tmp/packages_diff.txt 15:07:25 + PACKAGES=/tmp/packages_start.txt 15:07:25 + '[' /w/workspace/integration-netconf-pnp-simulator-docker-merge-master ']' 15:07:25 + PACKAGES=/tmp/packages_end.txt 15:07:25 + case "${OS_FAMILY}" in 15:07:25 + dpkg -l 15:07:25 + grep '^ii' 15:07:25 + '[' -f /tmp/packages_start.txt ']' 15:07:25 + '[' -f /tmp/packages_end.txt ']' 15:07:25 + diff /tmp/packages_start.txt /tmp/packages_end.txt 15:07:25 + '[' /w/workspace/integration-netconf-pnp-simulator-docker-merge-master ']' 15:07:25 + mkdir -p /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/ 15:07:25 + cp -f /tmp/packages_diff.txt /tmp/packages_end.txt /tmp/packages_start.txt /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/ 15:07:25 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins14266568630203221202.sh 15:07:25 ---> capture-instance-metadata.sh 15:07:25 Setup pyenv: 15:07:25 system 15:07:25 3.8.13 15:07:25 3.9.13 15:07:25 * 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version) 15:07:26 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-dOcM from file:/tmp/.os_lf_venv 15:07:26 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 15:07:26 lf-activate-venv(): INFO: Attempting to install with network-safe options... 15:07:27 lf-activate-venv(): INFO: Base packages installed successfully 15:07:27 lf-activate-venv(): INFO: Installing additional packages: lftools 15:07:34 lf-activate-venv(): INFO: Adding /tmp/venv-dOcM/bin to PATH 15:07:34 INFO: Running in OpenStack, capturing instance metadata 15:07:35 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins10844665861853767601.sh 15:07:35 provisioning config files... 15:07:35 copy managed file [jenkins-log-archives-settings] to file:/w/workspace/integration-netconf-pnp-simulator-docker-merge-master@tmp/config14483159752279049723tmp 15:07:35 Regular expression run condition: Expression=[^.*logs-s3.*], Label=[] 15:07:35 Run condition [Regular expression match] preventing perform for step [Provide Configuration files] 15:07:35 [EnvInject] - Injecting environment variables from a build step. 15:07:35 [EnvInject] - Injecting as environment variables the properties content 15:07:35 SERVER_ID=logs 15:07:35 15:07:35 [EnvInject] - Variables injected successfully. 15:07:35 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins7625415999123102320.sh 15:07:35 ---> create-netrc.sh 15:07:35 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins16266661487434523091.sh 15:07:35 ---> python-tools-install.sh 15:07:35 Setup pyenv: 15:07:35 system 15:07:35 3.8.13 15:07:35 3.9.13 15:07:35 * 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version) 15:07:35 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-dOcM from file:/tmp/.os_lf_venv 15:07:35 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 15:07:35 lf-activate-venv(): INFO: Attempting to install with network-safe options... 15:07:37 lf-activate-venv(): INFO: Base packages installed successfully 15:07:37 lf-activate-venv(): INFO: Installing additional packages: lftools 15:07:44 lf-activate-venv(): INFO: Adding /tmp/venv-dOcM/bin to PATH 15:07:44 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/sh /tmp/jenkins15985288241333761817.sh 15:07:44 ---> uv-install.sh 15:07:44 uv 0.11.2 is already installed 15:07:44 uvx 0.11.2 (x86_64-unknown-linux-gnu) 15:07:44 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins8040665861815161515.sh 15:07:44 ---> sudo-logs.sh 15:07:44 Archiving 'sudo' log.. 15:07:45 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash /tmp/jenkins10437025060370342703.sh 15:07:45 ---> job-cost.sh 15:07:45 INFO: Activating Python virtual environment... 15:07:45 Setup pyenv: 15:07:45 system 15:07:45 3.8.13 15:07:45 3.9.13 15:07:45 * 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version) 15:07:45 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-dOcM from file:/tmp/.os_lf_venv 15:07:45 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 15:07:45 lf-activate-venv(): INFO: Attempting to install with network-safe options... 15:07:46 lf-activate-venv(): INFO: Base packages installed successfully 15:07:46 lf-activate-venv(): INFO: Installing additional packages: zipp==1.1.0 python-openstackclient urllib3~=1.26.15 15:07:51 lf-activate-venv(): INFO: Adding /tmp/venv-dOcM/bin to PATH 15:07:51 INFO: No stack-cost file found 15:07:51 INFO: Instance uptime: 324s 15:07:51 INFO: Fetching instance metadata (attempt 1 of 3)... 15:07:51 DEBUG: URL: http://169.254.169.254/latest/meta-data/instance-type 15:07:51 INFO: Successfully fetched instance metadata 15:07:51 INFO: Instance type: v3-standard-8 15:07:51 INFO: Retrieving pricing info for: v3-standard-8 15:07:51 INFO: Fetching Vexxhost pricing API (attempt 1 of 3)... 15:07:51 DEBUG: URL: https://pricing.vexxhost.net/v1/pricing/v3-standard-8/cost?seconds=324 15:07:52 INFO: Successfully fetched Vexxhost pricing API 15:07:52 INFO: Retrieved cost: 0.22 15:07:52 INFO: Retrieved resource: v3-standard-8 15:07:52 INFO: Creating archive directory: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/cost 15:07:52 INFO: Archiving costs to: /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/archives/cost.csv 15:07:52 INFO: Successfully archived job cost data 15:07:52 DEBUG: Cost data: integration-netconf-pnp-simulator-docker-merge-master,328,2026-04-01 15:07:52,v3-standard-8,324,0.22,0.00,FAILURE 15:07:52 [integration-netconf-pnp-simulator-docker-merge-master] $ /bin/bash -l /tmp/jenkins15647678343597757397.sh 15:07:52 ---> logs-deploy.sh 15:07:52 Setup pyenv: 15:07:52 system 15:07:52 3.8.13 15:07:52 3.9.13 15:07:52 * 3.10.6 (set by /w/workspace/integration-netconf-pnp-simulator-docker-merge-master/.python-version) 15:07:52 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-dOcM from file:/tmp/.os_lf_venv 15:07:52 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 15:07:52 lf-activate-venv(): INFO: Attempting to install with network-safe options... 15:07:54 lf-activate-venv(): INFO: Base packages installed successfully 15:07:54 lf-activate-venv(): INFO: Installing additional packages: lftools urllib3~=1.26.15 15:08:01 lf-activate-venv(): INFO: Adding /tmp/venv-dOcM/bin to PATH 15:08:01 INFO: Nexus URL https://nexus.onap.org path production/vex-yul-ecomp-jenkins-1/integration-netconf-pnp-simulator-docker-merge-master/328 15:08:01 INFO: archiving workspace using pattern(s): 15:08:02 Archives upload complete. 15:08:02 INFO: archiving logs to Nexus 15:08:03 ---> uname -a: 15:08:03 Linux prd-ubuntu1804-docker-8c-8g-2838 4.15.0-192-generic #203-Ubuntu SMP Wed Aug 10 17:40:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 15:08:03 15:08:03 15:08:03 ---> lscpu: 15:08:03 Architecture: x86_64 15:08:03 CPU op-mode(s): 32-bit, 64-bit 15:08:03 Byte Order: Little Endian 15:08:03 CPU(s): 8 15:08:03 On-line CPU(s) list: 0-7 15:08:03 Thread(s) per core: 1 15:08:03 Core(s) per socket: 1 15:08:03 Socket(s): 8 15:08:03 NUMA node(s): 1 15:08:03 Vendor ID: AuthenticAMD 15:08:03 CPU family: 23 15:08:03 Model: 49 15:08:03 Model name: AMD EPYC-Rome Processor 15:08:03 Stepping: 0 15:08:03 CPU MHz: 2799.998 15:08:03 BogoMIPS: 5599.99 15:08:03 Virtualization: AMD-V 15:08:03 Hypervisor vendor: KVM 15:08:03 Virtualization type: full 15:08:03 L1d cache: 32K 15:08:03 L1i cache: 32K 15:08:03 L2 cache: 512K 15:08:03 L3 cache: 16384K 15:08:03 NUMA node0 CPU(s): 0-7 15:08:03 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 nrip_save umip rdpid arch_capabilities 15:08:03 15:08:03 15:08:03 ---> nproc: 15:08:03 8 15:08:03 15:08:03 15:08:03 ---> df -h: 15:08:03 Filesystem Size Used Avail Use% Mounted on 15:08:03 udev 16G 0 16G 0% /dev 15:08:03 tmpfs 3.2G 716K 3.2G 1% /run 15:08:03 /dev/vda1 155G 11G 145G 7% / 15:08:03 tmpfs 16G 0 16G 0% /dev/shm 15:08:03 tmpfs 5.0M 0 5.0M 0% /run/lock 15:08:03 tmpfs 16G 0 16G 0% /sys/fs/cgroup 15:08:03 /dev/vda15 105M 4.4M 100M 5% /boot/efi 15:08:03 tmpfs 3.2G 0 3.2G 0% /run/user/1001 15:08:03 15:08:03 15:08:03 ---> free -m: 15:08:03 total used free shared buff/cache available 15:08:03 Mem: 32167 847 28195 0 3124 30864 15:08:03 Swap: 1023 0 1023 15:08:03 15:08:03 15:08:03 ---> ip addr: 15:08:03 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 15:08:03 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 15:08:03 inet 127.0.0.1/8 scope host lo 15:08:03 valid_lft forever preferred_lft forever 15:08:03 inet6 ::1/128 scope host 15:08:03 valid_lft forever preferred_lft forever 15:08:03 2: ens3: mtu 1458 qdisc mq state UP group default qlen 1000 15:08:03 link/ether fa:16:3e:e2:22:44 brd ff:ff:ff:ff:ff:ff 15:08:03 inet 10.30.106.64/23 brd 10.30.107.255 scope global dynamic ens3 15:08:03 valid_lft 86072sec preferred_lft 86072sec 15:08:03 inet6 fe80::f816:3eff:fee2:2244/64 scope link 15:08:03 valid_lft forever preferred_lft forever 15:08:03 3: docker0: mtu 1500 qdisc noqueue state DOWN group default 15:08:03 link/ether 02:42:02:5a:ed:50 brd ff:ff:ff:ff:ff:ff 15:08:03 inet 10.250.0.254/24 brd 10.250.0.255 scope global docker0 15:08:03 valid_lft forever preferred_lft forever 15:08:03 inet6 fe80::42:2ff:fe5a:ed50/64 scope link 15:08:03 valid_lft forever preferred_lft forever 15:08:03 15:08:03 15:08:03 ---> sar -b -r -n DEV: 15:08:03 Linux 4.15.0-192-generic (prd-ubuntu1804-docker-8c-8g-2838) 04/01/26 _x86_64_ (8 CPU) 15:08:03 15:08:03 15:02:37 LINUX RESTART (8 CPU) 15:08:03 15:08:03 15:03:02 tps rtps wtps bread/s bwrtn/s 15:08:03 15:04:01 375.21 51.19 324.01 3462.06 95369.33 15:08:03 15:05:01 238.29 9.38 228.91 1689.59 75785.64 15:08:03 15:06:01 57.37 0.07 57.31 13.73 5494.42 15:08:03 15:07:01 237.68 33.33 204.35 1497.08 15905.75 15:08:03 15:08:01 48.38 1.13 47.25 48.12 2570.34 15:08:03 Average: 190.77 18.91 171.86 1334.98 38835.47 15:08:03 15:08:03 15:03:02 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 15:08:03 15:04:01 30091604 31711092 2847616 8.65 69420 1861208 1415140 4.16 844392 1714484 172300 15:08:03 15:05:01 29328608 31625688 3610612 10.96 92520 2486240 1651400 4.86 1042612 2207516 18604 15:08:03 15:06:01 29312860 31656548 3626360 11.01 93416 2529128 1644928 4.84 1040820 2217496 2504 15:08:03 15:07:01 28825564 31544584 4113656 12.49 112212 2859260 1972716 5.80 1283104 2415988 2928 15:08:03 15:08:01 28814768 31544992 4124452 12.52 116508 2865444 1556652 4.58 1315088 2400696 10136 15:08:03 Average: 29274681 31616581 3664539 11.13 96815 2520256 1648167 4.85 1105203 2191236 41294 15:08:03 15:08:03 15:03:02 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 15:08:03 15:04:01 ens3 485.85 326.25 2440.43 80.70 0.00 0.00 0.00 0.00 15:08:03 15:04:01 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 15:08:03 15:04:01 lo 1.22 1.22 0.14 0.14 0.00 0.00 0.00 0.00 15:08:03 15:05:01 ens3 190.08 130.11 2758.42 16.24 0.00 0.00 0.00 0.00 15:08:03 15:05:01 docker0 63.34 101.15 3.40 1775.14 0.00 0.00 0.00 0.00 15:08:03 15:05:01 vethbcd45e3 5.83 7.75 0.40 31.61 0.00 0.00 0.00 0.00 15:08:03 15:05:01 lo 3.00 3.00 0.33 0.33 0.00 0.00 0.00 0.00 15:08:03 15:06:01 ens3 36.56 31.84 82.40 7.36 0.00 0.00 0.00 0.00 15:08:03 15:06:01 docker0 7.93 10.61 0.50 76.19 0.00 0.00 0.00 0.00 15:08:03 15:06:01 veth6f5b794 2.15 2.72 0.16 5.22 0.00 0.00 0.00 0.00 15:08:03 15:06:01 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 15:08:03 15:07:01 ens3 64.41 50.06 782.26 7.64 0.00 0.00 0.00 0.00 15:08:03 15:07:01 veth6d1391c 5.00 4.92 1.96 0.88 0.00 0.00 0.00 0.00 15:08:03 15:07:01 docker0 21.65 30.41 3.05 346.15 0.00 0.00 0.00 0.00 15:08:03 15:07:01 lo 9.42 9.42 2.75 2.75 0.00 0.00 0.00 0.00 15:08:03 15:08:01 ens3 28.99 23.19 21.82 12.20 0.00 0.00 0.00 0.00 15:08:03 15:08:01 docker0 1.60 1.80 0.97 0.37 0.00 0.00 0.00 0.00 15:08:03 15:08:01 lo 3.95 3.95 1.40 1.40 0.00 0.00 0.00 0.00 15:08:03 Average: ens3 160.09 111.57 1212.94 24.64 0.00 0.00 0.00 0.00 15:08:03 Average: docker0 18.97 28.89 1.59 441.03 0.00 0.00 0.00 0.00 15:08:03 Average: lo 3.52 3.52 0.93 0.93 0.00 0.00 0.00 0.00 15:08:03 15:08:03 15:08:03 ---> sar -P ALL: 15:08:03 Linux 4.15.0-192-generic (prd-ubuntu1804-docker-8c-8g-2838) 04/01/26 _x86_64_ (8 CPU) 15:08:03 15:08:03 15:02:37 LINUX RESTART (8 CPU) 15:08:03 15:08:03 15:03:02 CPU %user %nice %system %iowait %steal %idle 15:08:03 15:04:01 all 9.94 0.00 0.98 2.09 0.03 86.96 15:08:03 15:04:01 0 3.16 0.00 0.51 0.02 0.03 96.28 15:08:03 15:04:01 1 23.16 0.00 1.28 0.58 0.05 74.93 15:08:03 15:04:01 2 9.26 0.00 0.81 0.39 0.03 89.50 15:08:03 15:04:01 3 3.29 0.00 0.58 0.17 0.02 95.94 15:08:03 15:04:01 4 2.68 0.00 0.88 1.83 0.03 94.57 15:08:03 15:04:01 5 10.44 0.00 0.65 0.44 0.03 88.44 15:08:03 15:04:01 6 11.21 0.00 1.38 6.72 0.07 80.62 15:08:03 15:04:01 7 16.28 0.00 1.73 6.58 0.03 75.37 15:08:03 15:05:01 all 12.11 0.00 1.66 1.29 0.04 84.90 15:08:03 15:05:01 0 9.02 0.00 1.07 0.05 0.03 89.82 15:08:03 15:05:01 1 20.51 0.00 1.40 0.25 0.03 77.80 15:08:03 15:05:01 2 26.67 0.00 3.11 2.24 0.07 67.91 15:08:03 15:05:01 3 4.44 0.00 1.82 0.03 0.03 93.68 15:08:03 15:05:01 4 8.38 0.00 1.27 0.08 0.03 90.23 15:08:03 15:05:01 5 2.54 0.00 0.69 0.02 0.03 96.72 15:08:03 15:05:01 6 14.77 0.00 2.39 3.89 0.05 78.90 15:08:03 15:05:01 7 10.55 0.00 1.49 3.80 0.05 84.11 15:08:03 15:06:01 all 14.97 0.00 1.63 0.14 0.05 83.21 15:08:03 15:06:01 0 14.93 0.00 1.77 0.05 0.05 83.20 15:08:03 15:06:01 1 16.62 0.00 1.87 0.02 0.05 81.44 15:08:03 15:06:01 2 39.86 0.00 2.14 0.02 0.08 57.91 15:08:03 15:06:01 3 4.31 0.00 0.84 0.02 0.03 94.80 15:08:03 15:06:01 4 8.94 0.00 1.52 0.28 0.05 89.20 15:08:03 15:06:01 5 8.28 0.00 1.62 0.05 0.05 90.00 15:08:03 15:06:01 6 11.89 0.00 1.54 0.58 0.05 85.94 15:08:03 15:06:01 7 14.82 0.00 1.74 0.10 0.05 83.29 15:08:03 15:07:01 all 10.15 0.00 2.03 0.62 0.05 87.15 15:08:03 15:07:01 0 18.87 0.00 2.43 0.23 0.05 78.42 15:08:03 15:07:01 1 10.43 0.00 2.07 0.13 0.05 87.31 15:08:03 15:07:01 2 8.35 0.00 1.94 0.20 0.05 89.45 15:08:03 15:07:01 3 6.85 0.00 1.65 0.33 0.05 91.12 15:08:03 15:07:01 4 6.12 0.00 1.88 0.86 0.05 91.09 15:08:03 15:07:01 5 7.69 0.00 1.93 0.07 0.05 90.26 15:08:03 15:07:01 6 17.95 0.00 2.20 2.93 0.07 76.85 15:08:03 15:07:01 7 4.93 0.00 2.11 0.23 0.05 92.68 15:08:03 15:08:01 all 7.91 0.00 1.01 0.20 0.04 90.84 15:08:03 15:08:01 0 3.13 0.00 0.90 0.92 0.03 95.01 15:08:03 15:08:01 1 1.30 0.00 0.80 0.03 0.03 97.83 15:08:03 15:08:01 2 7.76 0.00 1.04 0.07 0.05 91.08 15:08:03 15:08:01 3 13.16 0.00 1.08 0.08 0.03 85.64 15:08:03 15:08:01 4 19.98 0.00 1.59 0.07 0.05 78.31 15:08:03 15:08:01 5 3.89 0.00 0.94 0.03 0.03 95.11 15:08:03 15:08:01 6 12.78 0.00 1.13 0.12 0.05 85.92 15:08:03 15:08:01 7 1.29 0.00 0.65 0.30 0.03 97.73 15:08:03 Average: all 11.02 0.00 1.46 0.86 0.04 86.61 15:08:03 Average: 0 9.85 0.00 1.34 0.25 0.04 88.52 15:08:03 Average: 1 14.37 0.00 1.48 0.20 0.04 83.90 15:08:03 Average: 2 18.41 0.00 1.81 0.58 0.06 79.13 15:08:03 Average: 3 6.43 0.00 1.20 0.13 0.03 92.21 15:08:03 Average: 4 9.24 0.00 1.43 0.62 0.04 88.66 15:08:03 Average: 5 6.56 0.00 1.16 0.12 0.04 92.12 15:08:03 Average: 6 13.73 0.00 1.73 2.83 0.06 81.66 15:08:03 Average: 7 9.55 0.00 1.54 2.19 0.04 86.67 15:08:03 15:08:03 15:08:03