From 4d94f2aea9812ef311696e8c09c8f717d1a44514 Mon Sep 17 00:00:00 2001 From: Bryan Killian Date: Thu, 13 Apr 2023 03:27:06 -0400 Subject: [PATCH 01/91] updating network name to reflect new limitation from 11 to 9 --- docs/configuration/container/index.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/configuration/container/index.rst b/docs/configuration/container/index.rst index c23a6184..0487f863 100644 --- a/docs/configuration/container/index.rst +++ b/docs/configuration/container/index.rst @@ -182,11 +182,11 @@ Example Configuration .. code-block:: none - set container network zabbix-net prefix 172.20.0.0/16 - set container network zabbix-net description 'Network for Zabbix component containers' + set container network zabbix prefix 172.20.0.0/16 + set container network zabbix description 'Network for Zabbix component containers' set container name mysql-server image mysql:8.0 - set container name mysql-server network zabbix-net + set container name mysql-server network zabbix set container name mysql-server environment 'MYSQL_DATABASE' value 'zabbix' set container name mysql-server environment 'MYSQL_USER' value 'zabbix' @@ -194,10 +194,10 @@ Example Configuration set container name mysql-server environment 'MYSQL_ROOT_PASSWORD' value 'root_pwd' set container name zabbix-java-gateway image zabbix/zabbix-java-gateway:alpine-5.2-latest - set container name zabbix-java-gateway network zabbix-net + set container name zabbix-java-gateway network zabbix set container name zabbix-server-mysql image zabbix/zabbix-server-mysql:alpine-5.2-latest - set container name zabbix-server-mysql network zabbix-net + set container name zabbix-server-mysql network zabbix set container name zabbix-server-mysql environment 'DB_SERVER_HOST' value 'mysql-server' set container name zabbix-server-mysql environment 'MYSQL_DATABASE' value 'zabbix' @@ -210,7 +210,7 @@ Example Configuration set container name zabbix-server-mysql port zabbix destination 10051 set container name zabbix-web-nginx-mysql image zabbix/zabbix-web-nginx-mysql:alpine-5.2-latest - set container name zabbix-web-nginx-mysql network zabbix-net + set container name zabbix-web-nginx-mysql network zabbix set container name zabbix-web-nginx-mysql environment 'MYSQL_DATABASE' value 'zabbix' set container name zabbix-web-nginx-mysql environment 'ZBX_SERVER_HOST' value 'zabbix-server-mysql' From 742838edda1738160f6dd7cbebd35c97e9a1a00d Mon Sep 17 00:00:00 2001 From: rebortg Date: Mon, 18 Dec 2023 06:05:48 +0000 Subject: [PATCH 02/91] Github: update current branch --- docs/_include/vyos-1x | 2 +- docs/changelog/1.3.rst | 13 +++++++++++++ docs/changelog/1.4.rst | 39 +++++++++++++++++++++++++++++++++++++++ docs/changelog/1.5.rst | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) diff --git a/docs/_include/vyos-1x b/docs/_include/vyos-1x index 5b2ee47e..f991faab 160000 --- a/docs/_include/vyos-1x +++ b/docs/_include/vyos-1x @@ -1 +1 @@ -Subproject commit 5b2ee47e85b536800897e4f4a475ca3167238254 +Subproject commit f991faab2c0d95cbec5d46996b154145955572d7 diff --git a/docs/changelog/1.3.rst b/docs/changelog/1.3.rst index 11d3be91..4d5d802d 100644 --- a/docs/changelog/1.3.rst +++ b/docs/changelog/1.3.rst @@ -8,6 +8,19 @@ _ext/releasenotes.py +2023-12-15 +========== + +* :vytask:`T5824` ``(bug): busybox cannot connect some websites from initramfs`` + + +2023-12-12 +========== + +* :vytask:`T5817` ``(bug): Show openvpn server fails in some cases`` +* :vytask:`T5413` ``(default): Deny the opportunity to use one public/private key pair on both wireguard peers.`` + + 2023-11-30 ========== diff --git a/docs/changelog/1.4.rst b/docs/changelog/1.4.rst index b6c901b4..1db86da5 100644 --- a/docs/changelog/1.4.rst +++ b/docs/changelog/1.4.rst @@ -8,6 +8,45 @@ _ext/releasenotes.py +2023-12-15 +========== + +* :vytask:`T5824` ``(bug): busybox cannot connect some websites from initramfs`` +* :vytask:`T5803` ``(default): git/github: Adjust configuration for safe and baseline defaults`` + + +2023-12-14 +========== + +* :vytask:`T5773` ``(bug): Unable to load config via HTTP`` +* :vytask:`T5816` ``(bug): BGP Large Community List Validation Broken`` +* :vytask:`T5812` ``(bug): rollback check max revision number does not work`` +* :vytask:`T5749` ``(feature): Show MAC address VRF and MTU by default for "show interfaces"`` +* :vytask:`T5774` ``(bug): commit-archive to FTP server broken after update (VyOS 1.5-rolling)`` +* :vytask:`T5826` ``(default): Add dmicode as an explicit dependency`` +* :vytask:`T5793` ``(default): mdns-repeater: Cleanup avahi-daemon configuration in /etc`` + + +2023-12-13 +========== + +* :vytask:`T591` ``(feature): Support SRv6`` + + +2023-12-12 +========== + +* :vytask:`T4704` ``(feature): Allow to set metric (MED) to rtt with rtt,+rtt or -rtt`` +* :vytask:`T5815` ``(enhancment): Add load_config module`` +* :vytask:`T5413` ``(default): Deny the opportunity to use one public/private key pair on both wireguard peers.`` + + +2023-12-11 +========== + +* :vytask:`T5741` ``(bug): WAN Load Balancing failover route tables aren't created`` + + 2023-12-10 ========== diff --git a/docs/changelog/1.5.rst b/docs/changelog/1.5.rst index 1deedc72..f8207e80 100644 --- a/docs/changelog/1.5.rst +++ b/docs/changelog/1.5.rst @@ -8,6 +8,45 @@ _ext/releasenotes.py +2023-12-15 +========== + +* :vytask:`T5824` ``(bug): busybox cannot connect some websites from initramfs`` +* :vytask:`T5770` ``(bug): MACsec not encrypting`` +* :vytask:`T5803` ``(default): git/github: Adjust configuration for safe and baseline defaults`` + + +2023-12-14 +========== + +* :vytask:`T5773` ``(bug): Unable to load config via HTTP`` +* :vytask:`T5816` ``(bug): BGP Large Community List Validation Broken`` +* :vytask:`T5812` ``(bug): rollback check max revision number does not work`` +* :vytask:`T5749` ``(feature): Show MAC address VRF and MTU by default for "show interfaces"`` +* :vytask:`T5774` ``(bug): commit-archive to FTP server broken after update (VyOS 1.5-rolling)`` +* :vytask:`T5826` ``(default): Add dmicode as an explicit dependency`` +* :vytask:`T5793` ``(default): mdns-repeater: Cleanup avahi-daemon configuration in /etc`` + + +2023-12-13 +========== + +* :vytask:`T5688` ``(default): Create the same view of pool configuration for all accel-ppp services`` +* :vytask:`T591` ``(feature): Support SRv6`` + + +2023-12-12 +========== + +* :vytask:`T5815` ``(enhancment): Add load_config module`` + + +2023-12-11 +========== + +* :vytask:`T5741` ``(bug): WAN Load Balancing failover route tables aren't created`` + + 2023-12-10 ========== From ad4a92eb9823654abb4acc38549b771f5a7212e9 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Fri, 22 Dec 2023 12:29:55 +0100 Subject: [PATCH 03/91] testing: fix typo --- docs/contributing/testing.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/contributing/testing.rst b/docs/contributing/testing.rst index d5df9d59..772ff04a 100644 --- a/docs/contributing/testing.rst +++ b/docs/contributing/testing.rst @@ -4,10 +4,11 @@ Testing ####### -One of the major advantages introduced in VyOS 1.3 is an autmated test framework. -When assembling an ISO image multiple things can go wrong badly and publishing -a faulty ISO makes no sense. The user is disappointed by the quality of the image -and the developers get flodded with bug reports over and over again. +One of the major advantages introduced in VyOS 1.3 is an automated test +framework. When assembling an ISO image multiple things can go wrong badly and +publishing a faulty ISO makes no sense. The user is disappointed by the quality +of the image and the developers get flodded with bug reports over and over +again. As the VyOS documentation is not only for users but also for the developers - and we keep no secret documentation - this section describes how the automated From 983a7de9865bd08ceb080ae906c87009a2e07e5a Mon Sep 17 00:00:00 2001 From: rebortg Date: Mon, 25 Dec 2023 06:05:34 +0000 Subject: [PATCH 04/91] Github: update current branch --- docs/_include/vyos-1x | 2 +- docs/changelog/1.3.rst | 28 +++++++++++++++++++++++ docs/changelog/1.4.rst | 52 ++++++++++++++++++++++++++++++++++++++++++ docs/changelog/1.5.rst | 49 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) diff --git a/docs/_include/vyos-1x b/docs/_include/vyos-1x index f991faab..b1a35b8a 160000 --- a/docs/_include/vyos-1x +++ b/docs/_include/vyos-1x @@ -1 +1 @@ -Subproject commit f991faab2c0d95cbec5d46996b154145955572d7 +Subproject commit b1a35b8ae02c7a72ee29bf3e1595fedf254479ee diff --git a/docs/changelog/1.3.rst b/docs/changelog/1.3.rst index 4d5d802d..5960cd58 100644 --- a/docs/changelog/1.3.rst +++ b/docs/changelog/1.3.rst @@ -8,6 +8,34 @@ _ext/releasenotes.py +2023-12-22 +========== + +* :vytask:`T4760` ``(bug): VyOS does not support running multiple instances of DHCPv6 clients`` + + +2023-12-21 +========== + +* :vytask:`T5714` ``(bug): IPSec VPN: op-mode: "show log vpn" does not show results`` +* :vytask:`T3039` ``(feature): Resize a root partition and filesystem automatically during deployment in virtual environments`` +* :vytask:`T2404` ``(bug): Cannot change MTU`` +* :vytask:`T2353` ``(bug): Interface [conf_mode] errors parent task`` +* :vytask:`T5796` ``(bug): Openconnect - HTTPS security headers are missing`` + + +2023-12-19 +========== + +* :vytask:`T2116` ``(feature): Processing configuration via Cloud-init User-Data`` + + +2023-12-18 +========== + +* :vytask:`T2191` ``(feature): Using tallow to block sshd probes`` + + 2023-12-15 ========== diff --git a/docs/changelog/1.4.rst b/docs/changelog/1.4.rst index 1db86da5..385d1d63 100644 --- a/docs/changelog/1.4.rst +++ b/docs/changelog/1.4.rst @@ -8,6 +8,58 @@ _ext/releasenotes.py +2023-12-24 +========== + +* :vytask:`T5853` ``(default): Typo interfaces-virtual-ethernet.xml.in`` + + +2023-12-22 +========== + +* :vytask:`T5811` ``(bug): static dhcp-interface routes not installed`` +* :vytask:`T5804` ``(bug): SNAT "any" interface error`` +* :vytask:`T4760` ``(bug): VyOS does not support running multiple instances of DHCPv6 clients`` + + +2023-12-21 +========== + +* :vytask:`T5778` ``(bug): The show dhcp server leases operation mode command does not work as expected`` +* :vytask:`T5775` ``(default): Migrated Firewall Global State Policy ineffective on latest firewall zone config`` +* :vytask:`T5637` ``(bug): Firewall default-action log`` +* :vytask:`T5796` ``(bug): Openconnect - HTTPS security headers are missing`` +* :vytask:`T3580` ``(feature): Refactoring firewall ipv6 rule icmpv6`` +* :vytask:`T2898` ``(feature): Support NDP proxy`` +* :vytask:`T2229` ``(feature): PPPOE Default Queue type selection`` + + +2023-12-20 +========== + +* :vytask:`T5823` ``(feature): Protocol BGP add default values for config dictionary`` +* :vytask:`T5798` ``(enhancment): reverse-proxy load-balancing service should support multiple certificates for frontend`` + + +2023-12-19 +========== + +* :vytask:`T5828` ``(default): Fix GRUB installation on arm64`` + + +2023-12-18 +========== + +* :vytask:`T5751` ``(feature): Adjust new image tools for non-interactive use`` +* :vytask:`T5831` ``(feature): show system image should reverse order by addition date`` +* :vytask:`T5825` ``(bug): image-tools: restore authentication on 'add system image'`` +* :vytask:`T5821` ``(bug): image-tools: restore vrf-aware 'add system image'`` +* :vytask:`T5819` ``(bug): Don't echo password on install image`` +* :vytask:`T5806` ``(bug): Clear old raid data on new install image`` +* :vytask:`T5789` ``(bug): image-tools should copy ssh host keys on image update`` +* :vytask:`T5758` ``(default): Restore scanning configs when live installing`` + + 2023-12-15 ========== diff --git a/docs/changelog/1.5.rst b/docs/changelog/1.5.rst index f8207e80..4ef32704 100644 --- a/docs/changelog/1.5.rst +++ b/docs/changelog/1.5.rst @@ -8,6 +8,55 @@ _ext/releasenotes.py +2023-12-23 +========== + +* :vytask:`T5678` ``(feature): Improvements in PPPoE configuration`` + + +2023-12-22 +========== + +* :vytask:`T5804` ``(bug): SNAT "any" interface error`` + + +2023-12-21 +========== + +* :vytask:`T5807` ``(bug): NAT66 op-mode bugs`` +* :vytask:`T5778` ``(bug): The show dhcp server leases operation mode command does not work as expected`` +* :vytask:`T5775` ``(default): Migrated Firewall Global State Policy ineffective on latest firewall zone config`` +* :vytask:`T5676` ``(bug): NAT66 source rule with negation source/destination prefix causes TypeError`` +* :vytask:`T5637` ``(bug): Firewall default-action log`` +* :vytask:`T5796` ``(bug): Openconnect - HTTPS security headers are missing`` + + +2023-12-20 +========== + +* :vytask:`T5823` ``(feature): Protocol BGP add default values for config dictionary`` +* :vytask:`T5798` ``(enhancment): reverse-proxy load-balancing service should support multiple certificates for frontend`` + + +2023-12-19 +========== + +* :vytask:`T5828` ``(default): Fix GRUB installation on arm64`` + + +2023-12-18 +========== + +* :vytask:`T5751` ``(feature): Adjust new image tools for non-interactive use`` +* :vytask:`T5831` ``(feature): show system image should reverse order by addition date`` +* :vytask:`T5825` ``(bug): image-tools: restore authentication on 'add system image'`` +* :vytask:`T5821` ``(bug): image-tools: restore vrf-aware 'add system image'`` +* :vytask:`T5819` ``(bug): Don't echo password on install image`` +* :vytask:`T5806` ``(bug): Clear old raid data on new install image`` +* :vytask:`T5789` ``(bug): image-tools should copy ssh host keys on image update`` +* :vytask:`T5758` ``(default): Restore scanning configs when live installing`` + + 2023-12-15 ========== From 0ed155b05523c755a9eb777c49a3a0fd4b56149e Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Mon, 25 Dec 2023 09:14:05 +0100 Subject: [PATCH 05/91] snmp: T5855: migrate "set service lldp snmp enable" to "set service lldp snmp" --- docs/configuration/service/lldp.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration/service/lldp.rst b/docs/configuration/service/lldp.rst index aa357211..12a9e0b6 100644 --- a/docs/configuration/service/lldp.rst +++ b/docs/configuration/service/lldp.rst @@ -54,7 +54,7 @@ Configuration Disable transmit of LLDP frames on given ``. Useful to exclude certain interfaces from LLDP when ``all`` have been enabled. -.. cfgcmd:: set service lldp snmp enable +.. cfgcmd:: set service lldp snmp Enable SNMP queries of the LLDP database From fd3073eef7bcbd64112e0581ba10afb58100b30d Mon Sep 17 00:00:00 2001 From: Viacheslav Hletenko Date: Mon, 25 Dec 2023 17:23:32 +0200 Subject: [PATCH 06/91] Add system update-check example Add an example of online checking for updates ``` set system update-check auto-check set system update-check url ``` --- docs/configuration/system/index.rst | 1 + docs/configuration/system/updates.rst | 37 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 docs/configuration/system/updates.rst diff --git a/docs/configuration/system/index.rst b/docs/configuration/system/index.rst index bfda7747..dbb63d09 100644 --- a/docs/configuration/system/index.rst +++ b/docs/configuration/system/index.rst @@ -25,6 +25,7 @@ System sysctl task-scheduler time-zone + updates .. toctree:: diff --git a/docs/configuration/system/updates.rst b/docs/configuration/system/updates.rst new file mode 100644 index 00000000..a55bfa9a --- /dev/null +++ b/docs/configuration/system/updates.rst @@ -0,0 +1,37 @@ +####### +Updates +####### + +VyOS supports online checking for updates + +Configuration +============= + +.. cfgcmd:: set system update-check auto-check + + Configure auto-checking for new images + + +.. cfgcmd:: set system update-check url + + Configure a URL that contains information about images. + + +Example +======= + +.. code-block:: none + + set system update-check auto-check + set system update-check url 'https://raw.githubusercontent.com/vyos/vyos-rolling-nightly-builds/main/version.json' + +Check: + +.. code-block:: none + + vyos@r4:~$ show system updates + Current version: 1.5-rolling-202312220023 + + Update available: 1.5-rolling-202312250024 + Update URL: https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202312250024/1.5-rolling-202312250024-amd64.iso + vyos@r4:~$ From 0c5e77aea59cbb50af527c59770584d232c97f52 Mon Sep 17 00:00:00 2001 From: Nicolas Fort Date: Tue, 26 Dec 2023 08:55:02 -0300 Subject: [PATCH 07/91] Add configuration commands and brief example of firewall Flowtables. Also re-add commands for firewall state policies, which now can eb found under section --- docs/configuration/firewall/flowtables.rst | 140 +++++++++++++++++- .../configuration/firewall/global-options.rst | 34 ++++- 2 files changed, 170 insertions(+), 4 deletions(-) diff --git a/docs/configuration/firewall/flowtables.rst b/docs/configuration/firewall/flowtables.rst index 8b44a9b9..bc7b9212 100644 --- a/docs/configuration/firewall/flowtables.rst +++ b/docs/configuration/firewall/flowtables.rst @@ -1,4 +1,4 @@ -:lastproofread: 2023-11-08 +:lastproofread: 2023-12-26 .. _firewall-flowtables-configuration: @@ -13,7 +13,7 @@ Overview ******** In this section there's useful information of all firewall configuration that -can be done regarding flowtables +can be done regarding flowtables. .. cfgcmd:: set firewall flowtables ... @@ -50,3 +50,139 @@ flowtable (flowtable miss), the packet follows the classic IP forwarding path. .. note:: **Flowtable Reference:** https://docs.kernel.org/networking/nf_flowtable.html + + +*********************** +Flowtable Configuration +*********************** + +In order to use flowtables, the minimal configuration needed includes: + + * Create flowtable: create flowtable, which includes the interfaces + that are going to be used by the flowtable. + + * Create firewall rule: create a firewall rule, setting action to + ``offload`` and using desired flowtable for ``offload-target``. + +Creating a flow table: + +.. cfgcmd:: set firewall flowtable interface + + Define interfaces to be used in the flowtable. + +.. cfgcmd:: set firewall flowtable description + +Provide a description to the flow table. + +.. cfgcmd:: set firewall flowtable offload + + + Define type of offload to be used by the flowtable: ``hardware`` or + ``software``. By default, ``software`` offload is used. + +.. note:: **Hardware offload:** should be supported by the NICs used. + +Creating rules for using flow tables: + +.. cfgcmd:: set firewall [ipv4 | ipv4] forward filter rule <1-999999> + action offload + + Create firewall rule in forward chain, and set action to ``offload``. + +.. cfgcmd:: set firewall [ipv4 | ipv4] forward filter rule <1-999999> + offload-target + + Create firewall rule in forward chain, and define which flowtbale + should be used. Only applicable if action is ``offload``. + +********************* +Configuration Example +********************* + +Things to be considred in this setup: + + * Two interfaces are going to be used in the flowtables: eth0 and eth1 + + * Minumum firewall ruleset is provided, which includes some filtering rules, + and appropiate rules for using flowtable offload capabilities. + +As described, first packet will be evaluated by all the firewall path, so +desired connection should be explicitely accepted. Same thing should be taken +into account for traffic in reverse order. In most cases state policies are +used in order to accept connection in reverse patch. + +We will only accept traffic comming from interface eth0, protocol tcp and +destination port 1122. All other traffic traspassing the router should be +blocked. + +Commands +-------- + +.. code-block:: none + + set firewall flowtable FT01 interface 'eth0' + set firewall flowtable FT01 interface 'eth1' + set firewall ipv4 forward filter default-action 'drop' + set firewall ipv4 forward filter rule 10 action 'offload' + set firewall ipv4 forward filter rule 10 offload-target 'FT01' + set firewall ipv4 forward filter rule 10 state 'established' + set firewall ipv4 forward filter rule 10 state 'related' + set firewall ipv4 forward filter rule 20 action 'accept' + set firewall ipv4 forward filter rule 20 state 'established' + set firewall ipv4 forward filter rule 20 state 'related' + set firewall ipv4 forward filter rule 110 action 'accept' + set firewall ipv4 forward filter rule 110 destination address '192.0.2.100' + set firewall ipv4 forward filter rule 110 destination port '1122' + set firewall ipv4 forward filter rule 110 inbound-interface name 'eth0' + set firewall ipv4 forward filter rule 110 protocol 'tcp' + +Explanation +----------- + +Analysis on what happens for desired connection: + + 1. First packet is received on eht0, with destination address 192.0.2.100, + protocol tcp and destination port 1122. Assume such destination address is + reachable through interface eth1. + + 2. Since this is the first packet, connection status of this connection, + so far is **new**. So neither rule 10 nor 20 are valid. + + 3. Rule 110 is hit, so connection is accepted. + + 4. Once answer from server 192.0.2.100 is seen in opposite direction, + connection state will be triggered to **established**, so this reply is + accepted in rule 10. + + 5. Second packet for this connection is received by the router. Since + connection state is **established**, then rule 10 is hit, and a new entry + in the flowtable FT01 is added for this connection. + + 6. All subsecuent packets will skip traditional path, and will be offloaded + and will use the **Fast Path**. + +Checks +------ + +It's time to check conntrack table, to see if any connection was accepted, +and if was properly offloaded + +.. code-block:: none + + vyos@FlowTables:~$ show firewall ipv4 forward filter + Ruleset Information + + --------------------------------- + ipv4 Firewall "forward filter" + + Rule Action Protocol Packets Bytes Conditions + ------- -------- ---------- --------- ------- ---------------------------------------------------------------- + 10 offload all 8 468 ct state { established, related } flow add @VYOS_FLOWTABLE_FT01 + 20 accept all 8 468 ct state { established, related } accept + 110 accept tcp 2 120 ip daddr 192.0.2.100 tcp dport 1122 iifname "eth0" accept + default drop all 7 420 + + vyos@FlowTables:~$ sudo conntrack -L | grep tcp + conntrack v1.4.6 (conntrack-tools): 5 flow entries have been shown. + tcp 6 src=198.51.100.100 dst=192.0.2.100 sport=41676 dport=1122 src=192.0.2.100 dst=198.51.100.100 sport=1122 dport=41676 [OFFLOAD] mark=0 use=2 + vyos@FlowTables:~$ diff --git a/docs/configuration/firewall/global-options.rst b/docs/configuration/firewall/global-options.rst index 316e0802..455e530b 100644 --- a/docs/configuration/firewall/global-options.rst +++ b/docs/configuration/firewall/global-options.rst @@ -1,4 +1,4 @@ -:lastproofread: 2023-11-07 +:lastproofread: 2023-12-026 .. _firewall-global-options-configuration: @@ -114,4 +114,34 @@ Configuration Enable or Disable VyOS to be :rfc:`1337` conform. The following system parameter will be altered: - * ``net.ipv4.tcp_rfc1337`` \ No newline at end of file + * ``net.ipv4.tcp_rfc1337`` + +.. cfgcmd:: set firewall global-options state-policy established action + [accept | drop | reject] + +.. cfgcmd:: set firewall global-options state-policy established log + +.. cfgcmd:: set firewall global-options state-policy established log-level + [emerg | alert | crit | err | warn | notice | info | debug] + + Set the global setting for an established connection. + +.. cfgcmd:: set firewall global-options state-policy invalid action + [accept | drop | reject] + +.. cfgcmd:: set firewall global-options state-policy invalid log + +.. cfgcmd:: set firewall global-options state-policy invalid log-level + [emerg | alert | crit | err | warn | notice | info | debug] + + Set the global setting for invalid packets. + +.. cfgcmd:: set firewall global-options state-policy related action + [accept | drop | reject] + +.. cfgcmd:: set firewall global-options state-policy related log + +.. cfgcmd:: set firewall global-options state-policy related log-level + [emerg | alert | crit | err | warn | notice | info | debug] + + Set the global setting for related connections. From 0893ca769b1796d2d61dc26a0c0c13d1eda56f5e Mon Sep 17 00:00:00 2001 From: Nicolas Fort Date: Wed, 27 Dec 2023 06:52:57 -0300 Subject: [PATCH 08/91] dhcp-server: update docs for op-mode command --- .../configuration/firewall/global-options.rst | 2 +- docs/configuration/service/dhcp-server.rst | 34 ++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/configuration/firewall/global-options.rst b/docs/configuration/firewall/global-options.rst index 455e530b..b3f311aa 100644 --- a/docs/configuration/firewall/global-options.rst +++ b/docs/configuration/firewall/global-options.rst @@ -1,4 +1,4 @@ -:lastproofread: 2023-12-026 +:lastproofread: 2023-12-26 .. _firewall-global-options-configuration: diff --git a/docs/configuration/service/dhcp-server.rst b/docs/configuration/service/dhcp-server.rst index b5b12a5b..0cc10feb 100644 --- a/docs/configuration/service/dhcp-server.rst +++ b/docs/configuration/service/dhcp-server.rst @@ -549,18 +549,43 @@ Operation Mode .. code-block:: none vyos@vyos:~$ show dhcp server leases - IP address Hardware address State Lease start Lease expiration Remaining Pool Hostname - -------------- ------------------ ------- ------------------- ------------------- ---------- ----------- --------- - 192.0.2.104 00:53:01:dd:ee:ff active 2019/12/05 14:24:23 2019/12/06 02:24:23 6:05:35 dhcpexample test1 - 192.0.2.115 00:53:01:ae:af:bf active 2019/12/05 18:02:37 2019/12/06 06:02:37 9:43:49 dhcpexample test2 + IP Address MAC address State Lease start Lease expiration Remaining Pool Hostname Origin + -------------- ----------------- ------- ------------------- ------------------- ----------- -------- ---------- -------- + 192.168.11.134 00:50:79:66:68:09 active 2023/11/29 09:51:05 2023/11/29 10:21:05 0:24:10 LAN VPCS1 local + 192.168.11.133 50:00:00:06:00:00 active 2023/11/29 09:51:38 2023/11/29 10:21:38 0:24:43 LAN VYOS-6 local + 10.11.11.108 50:00:00:05:00:00 active 2023/11/29 09:51:43 2023/11/29 10:21:43 0:24:48 VIF-1001 VYOS5 local + 192.168.11.135 00:50:79:66:68:07 active 2023/11/29 09:55:16 2023/11/29 09:59:16 0:02:21 remote + vyos@vyos:~$ .. hint:: Static mappings aren't shown. To show all states, use ``show dhcp server leases state all``. +.. opcmd:: show dhcp server leases origin [local | remote] + + Show statuses of all active leases granted by local (this server) or + remote (failover server): + +.. code-block:: none + + vyos@vyos:~$ show dhcp server leases origin remote + IP Address MAC address State Lease start Lease expiration Remaining Pool Hostname Origin + -------------- ----------------- ------- ------------------- ------------------- ----------- -------- ---------- -------- + 192.168.11.135 00:50:79:66:68:07 active 2023/11/29 09:55:16 2023/11/29 09:59:16 0:02:21 remote + vyos@vyos:~$ + .. opcmd:: show dhcp server leases pool Show only leases in the specified pool. +.. code-block:: none + + vyos@vyos:~$ show dhcp server leases pool LAN + IP Address MAC address State Lease start Lease expiration Remaining Pool Hostname Origin + -------------- ----------------- ------- ------------------- ------------------- ----------- ------ ---------- -------- + 192.168.11.134 00:50:79:66:68:09 active 2023/11/29 09:51:05 2023/11/29 10:21:05 0:23:55 LAN VPCS1 local + 192.168.11.133 50:00:00:06:00:00 active 2023/11/29 09:51:38 2023/11/29 10:21:38 0:24:28 LAN VYOS-6 local + vyos@vyos:~$ + .. opcmd:: show dhcp server leases sort Sort the output by the specified key. Possible keys: ip, hardware_address, @@ -572,7 +597,6 @@ Operation Mode free, expired, released, abandoned, reset, backup (default = active) - *********** IPv6 server *********** From 3c4d9ec2e93740eb9bd398736b228af356d2b2a8 Mon Sep 17 00:00:00 2001 From: Nicolas Fort Date: Wed, 27 Dec 2023 07:45:07 -0300 Subject: [PATCH 09/91] System Conntrack: update commands for timeout rules; update commands for ignore rules, since both ipv4 and ipv6 rules are supported. --- docs/configuration/system/conntrack.rst | 147 +++++++++++++++--------- 1 file changed, 92 insertions(+), 55 deletions(-) diff --git a/docs/configuration/system/conntrack.rst b/docs/configuration/system/conntrack.rst index 68a4f2b8..6ed5fef7 100644 --- a/docs/configuration/system/conntrack.rst +++ b/docs/configuration/system/conntrack.rst @@ -46,9 +46,23 @@ Configure | Use `delete system conntrack modules` to deactive all modules. | Or, for example ftp, `delete system conntrack modules ftp`. +.. cfgcmd:: set system conntrack tcp half-open-connections <1-21474836> + :defaultvalue: -Define Conection Timeouts -========================= + Set the maximum number of TCP half-open connections. + +.. cfgcmd:: set system conntrack tcp loose + :defaultvalue: + + Policy to track previously established connections. + +.. cfgcmd:: set system conntrack tcp max-retrans <1-2147483647> + :defaultvalue: + + Set the number of TCP maximum retransmit attempts. + +Contrack Timeouts +================= VyOS supports setting timeouts for connections according to the connection type. You can set timeout values for generic connections, for ICMP @@ -82,34 +96,48 @@ states. Set the timeout in secounds for a protocol or state. - You can also define custom timeout values to apply to a specific subset of connections, based on a packet and flow selector. To do this, you need to create a rule defining the packet and flow selector. -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> description +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + description Set a rule description. +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + destination address +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + source address -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> destination address -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> source address - - set a destination and/or source address. Accepted input: + Set a destination and/or source address. Accepted input for ipv4: .. code-block:: none - IP address to match - Subnet to match - - - IP range to match - ! Match everything except the specified address - ! Match everything except the specified subnet - !- - Match everything except the specified range + set system conntrack timeout custom ipv4 rule <1-999999> [source | destination] address + Possible completions: + IPv4 address to match + IPv4 prefix to match + - IPv4 address range to match + ! Match everything except the specified address + ! Match everything except the specified prefix + !- Match everything except the specified range -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> destination port -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> source port + set system conntrack timeout custom ipv6 rule <1-999999> [source | destination] address + Possible completions: + IP address to match + Subnet to match + - + IP range to match + ! Match everything except the specified address + ! Match everything except the specified prefix + !- + Match everything except the specified range + +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + destination port +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + source port Set a destination and/or source port. Accepted input: @@ -123,49 +151,58 @@ create a rule defining the packet and flow selector. The whole list can also be "negated" using '!'. For example: `!22,telnet,http,123,1001-1005`` - - -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol icmp <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol other <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp close <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp close-wait <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp established <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp fin-wait <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp last-ack <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp syn-recv <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp syn-sent <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol tcp time-wait <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol udp other <1-21474836> -.. cfgcmd:: set system conntrack timeout custom rule <1-9999> protocol udp stream <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp close <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp close-wait <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp established <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp fin-wait <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp last-ack <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp syn-recv <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp syn-sent <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol tcp time-wait <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol udp replied <1-21474836> +.. cfgcmd:: set system conntrack timeout custom [ipv4 | ipv6] rule <1-999999> + protocol udp unreplied <1-21474836> Set the timeout in secounds for a protocol or state in a custom rule. - -.. cfgcmd:: set system conntrack tcp half-open-connections <1-21474836> - :defaultvalue: - - Set the maximum number of TCP half-open connections. - -.. cfgcmd:: set system conntrack tcp loose - :defaultvalue: - - Policy to track previously established connections. - -.. cfgcmd:: set system conntrack tcp max-retrans <1-2147483647> - :defaultvalue: - - Set the number of TCP maximum retransmit attempts. - -.. cfgcmd:: set system conntrack ignore rule <1-9999> description -.. cfgcmd:: set system conntrack ignore rule <1-9999> destination address -.. cfgcmd:: set system conntrack ignore rule <1-9999> destination port -.. cfgcmd:: set system conntrack ignore rule <1-9999> inbound-interface -.. cfgcmd:: set system conntrack ignore rule <1-9999> protocol -.. cfgcmd:: set system conntrack ignore rule <1-9999> source address -.. cfgcmd:: set system conntrack ignore rule <1-9999> source port +Conntrack ignore rules +====================== Customized ignore rules, based on a packet and flow selector. +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + description +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + destination address +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + destination port +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + inbound-interface +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + protocol +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + source address +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + source port +.. cfgcmd:: set system conntrack ignore [ipv4 | ipv6] rule <1-999999> + tcp flags [not] + + Allowed values fpr TCP flags: ``ack``, ``cwr``, ``ecn``, ``fin``, ``psh``, + ``rst``, ``syn`` and ``urg``. Multiple values are supported, and for + inverted selection use ``not``, as shown in the example. + +Conntrack log +============= + .. cfgcmd:: set system conntrack log icmp destroy .. cfgcmd:: set system conntrack log icmp new .. cfgcmd:: set system conntrack log icmp update From 5933ffbe44c626b77c93af68e18123a66dd12b63 Mon Sep 17 00:00:00 2001 From: fett0 Date: Wed, 27 Dec 2023 16:37:24 -0300 Subject: [PATCH 10/91] ocserv: add http-security-headers documentation --- docs/configuration/vpn/openconnect.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/configuration/vpn/openconnect.rst b/docs/configuration/vpn/openconnect.rst index 1cc197e9..845d9196 100644 --- a/docs/configuration/vpn/openconnect.rst +++ b/docs/configuration/vpn/openconnect.rst @@ -165,6 +165,13 @@ Simple setup with one user added and password authentication: set vpn openconnect ssl ca-certificate 'ca-ocserv' set vpn openconnect ssl certificate 'srv-ocserv' +To enable the HTTP security headers in the configuration file, use the command: + +.. code-block:: none + + set vpn openconnect http-security-headers + + Adding a 2FA with an OTP-key ============================ From 05215848a5df37a4cc4075a58b05f19871a56306 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Sat, 30 Dec 2023 10:44:58 +0100 Subject: [PATCH 11/91] system: T5877: Shorten system domain-search config path Documentation pdate for https://github.com/vyos/vyos-1x/pull/2718 --- docs/configuration/system/name-server.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/configuration/system/name-server.rst b/docs/configuration/system/name-server.rst index f18cb5a3..5d08dbc5 100644 --- a/docs/configuration/system/name-server.rst +++ b/docs/configuration/system/name-server.rst @@ -48,7 +48,7 @@ In order for the system to use and complete unqualified host names, a list can be defined which will be used for domain searches. -.. cfgcmd:: set system domain-search domain +.. cfgcmd:: set system domain-search Use this command to define domains, one at a time, so that the system uses them to complete unqualified host names. Maximum: 6 entries. @@ -68,7 +68,7 @@ order: vyos.io (first), vyos.net (second) and vyos.network (last): .. code-block:: none - set system domain-search domain vyos.io - set system domain-search domain vyos.net - set system domain-search domain vyos.network + set system domain-search vyos.io + set system domain-search vyos.net + set system domain-search vyos.network From 878aa0bd85a206afd4a0bd58535ba250748e1c8c Mon Sep 17 00:00:00 2001 From: sofukong <130022807+sofukong@users.noreply.github.com> Date: Sat, 30 Dec 2023 17:49:10 +0800 Subject: [PATCH 12/91] build: improve documentation of current versions and how to build them --- docs/contributing/build-vyos.rst | 138 ++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 49 deletions(-) diff --git a/docs/contributing/build-vyos.rst b/docs/contributing/build-vyos.rst index bb212e2f..919f30bf 100644 --- a/docs/contributing/build-vyos.rst +++ b/docs/contributing/build-vyos.rst @@ -23,10 +23,60 @@ also set up your own build machine and run a :ref:`build_native`. The source code remains public and an ISO can be built using the process outlined in this chapter. + The following includes the build process for VyOS 1.2 to the latest version. + This will guide you through the process of building a VyOS ISO using Docker_. This process has been tested on clean installs of Debian Jessie, Stretch, and Buster. +.. _build_native: + +Native Build +============ + +To build VyOS natively you require a properly configured build host with the +following Debian versions installed: + +- Debian Jessie for VyOS 1.2 (crux) +- Debian Buster for VyOS 1.3 (equuleus) +- Debian Bookworm for VyOS 1.4 (sagitta) +- Debian Bookworm for the upcoming VyOS 1.5/circinus/current + (subject to change) - aka the rolling release + +To start, clone the repository to your local machine: + +.. code-block:: none + + # For VyOS 1.2 (crux) + $ git clone -b crux --single-branch https://github.com/vyos/vyos-build + + # For VyOS 1.3 (equuleus) + $ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build + + # For VyOS 1.4 (sagitta) + $ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build + + # For VyOS 1.5 (circinus,current) + $ git clone -b current --single-branch https://github.com/vyos/vyos-build + + $ cd vyos-build + + # For VyOS 1.2 (crux) and VyOS 1.3 (equuleus) + $ ./configure --architecture amd64 --build-by "j.randomhacker@vyos.io" + $ sudo make iso + + # For VyOS 1.4 (sagitta) and VyOS 1.5 (circinus,current) + $ sudo make clean + $ sudo ./build-vyos-image iso --architecture amd64 --build-by "j.randomhacker@vyos.io" + +For the packages required, you can refer to the ``docker/Dockerfile`` file +in the repository_. The ``./build-vyos-image`` script will also warn you if any +dependencies are missing. + +This will guide you through the process of building a VyOS ISO using Docker. +This process has been tested on clean installs of Debian Bullseye (11) and +Bookworm (12). + .. _build_docker: Docker @@ -34,14 +84,26 @@ Docker Installing Docker_ and prerequisites: +.. hint:: Due to the updated version of Docker, the following examples may + become invalid. + .. code-block:: none - $ sudo apt-get update - $ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common - $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - - $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" - $ sudo apt-get update - $ sudo apt-get install -y docker-ce + # Add Docker's official GPG key: + sudo apt-get update + sudo apt-get install ca-certificates curl gnupg + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + sudo chmod a+r /etc/apt/keyrings/docker.gpg + + # Add the repository to Apt sources: + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + + sudo apt-get update + sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin To be able to use Docker_ without ``sudo``, the current non-root user must be added to the ``docker`` group by calling: ``sudo usermod -aG docker @@ -79,7 +141,7 @@ To manually download the container from DockerHub, run: $ docker pull vyos/vyos-build:crux # For VyOS 1.2 $ docker pull vyos/vyos-build:equuleus # For VyOS 1.3 $ docker pull vyos/vyos-build:sagitta # For VyOS 1.4 - $ docker pull vyos/vyos-build:current # For rolling release + $ docker pull vyos/vyos-build:current # For VyOS 1.5 rolling release Build from source ^^^^^^^^^^^^^^^^^ @@ -94,15 +156,19 @@ The container can also be built directly from source: $ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build # For VyOS 1.4 (sagitta) $ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build + # For VyOS 1.5 (circinus,current) + $ git clone -b current --single-branch https://github.com/vyos/vyos-build $ cd vyos-build - $ docker build -t vyos/vyos-build:crux docker # For VyOS 1.2 - $ docker build -t vyos/vyos-build:current docker # For rolling release - -.. note:: Since VyOS has switched to Debian (11) Bullseye in its ``current`` - branch, you will require individual container for `current`, `equuleus` and - `crux` builds. + $ docker build -t vyos/vyos-build:crux docker # For VyOS 1.2 + $ docker build -t vyos/vyos-build:equuleus docker # For VyOS 1.3 + $ docker build -t vyos/vyos-build:sagitta docker # For VyOS 1.4 + $ docker build -t vyos/vyos-build:current docker # For VyOS 1.5 rolling release +.. note:: VyOS has switched to Debian (12) Bookworm in its ``current`` branch, + Due to software version updates, it is recommended to use the official + Docker Hub image to build VyOS ISO. + Tips and Tricks --------------- @@ -141,39 +207,6 @@ your development containers in your current working directory. ``--sysctl net.ipv6.conf.lo.disable_ipv6=0``, otherwise those tests will fail. -.. _build_native: - -Native Build -============ - -To build VyOS natively you require a properly configured build host with the -following Debian versions installed: - -- Debian Jessie for VyOS 1.2 (crux) -- Debian Buster for VyOS 1.3 (equuleus) -- Debian Bullseye for VyOS 1.4 (sagitta) - -To start, clone the repository to your local machine: - -.. code-block:: none - - # For VyOS 1.2 (crux) - $ git clone -b crux --single-branch https://github.com/vyos/vyos-build - - # For VyOS 1.3 (equuleus) - $ git clone -b equuleus --single-branch https://github.com/vyos/vyos-build - - # For VyOS 1.4 (sagitta) - $ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build - - -For the packages required, you can refer to the ``docker/Dockerfile`` file -in the repository_. The ``./build-vyos-image`` script will also warn you if any -dependencies are missing. - -Once you have the required dependencies installed, you may proceed with the -steps described in :ref:`build_iso`. - .. _build_iso: @@ -196,6 +229,10 @@ Please note as this will differ for both `current` and `crux`. # For VyOS 1.4 (sagitta) $ git clone -b sagitta --single-branch https://github.com/vyos/vyos-build + # For VyOS 1.5 (circinus,current) + $ git clone -b current --single-branch https://github.com/vyos/vyos-build + + Now a fresh build of the VyOS ISO can begin. Change directory to the ``vyos-build`` directory and run: @@ -210,7 +247,10 @@ Now a fresh build of the VyOS ISO can begin. Change directory to the # For VyOS 1.4 (sagitta) $ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:sagitta bash - + + # For VyOS 1.5 (current) + $ docker run --rm -it --privileged -v $(pwd):/vyos -w /vyos vyos/vyos-build:current bash + .. code-block:: none # For MacOS (crux, equuleus, sagitta) @@ -234,7 +274,7 @@ Start the build: vyos_bld@8153428c7e1f:/vyos$ ./configure --architecture amd64 --build-by "j.randomhacker@vyos.io" vyos_bld@8153428c7e1f:/vyos$ sudo make iso - # For VyOS 1.4 (sagitta) + # For VyOS 1.4 (sagitta) For VyOS 1.5 (circinus,current) vyos_bld@8153428c7e1f:/vyos$ sudo make clean vyos_bld@8153428c7e1f:/vyos$ sudo ./build-vyos-image iso --architecture amd64 --build-by "j.randomhacker@vyos.io" @@ -836,7 +876,7 @@ information. .. stop_vyoslinter -.. _Docker: https://www.docker.com +.. _Docker: https://docs.docker.com/engine/install/debian/ .. _`Docker as non-root`: https://docs.docker.com/engine/install/linux-postinstall .. _VyOS DockerHub organisation: https://hub.docker.com/u/vyos .. _repository: https://github.com/vyos/vyos-build From 706930834f21f503dbb4b3cae52afad486854541 Mon Sep 17 00:00:00 2001 From: rebortg Date: Mon, 1 Jan 2024 06:06:30 +0000 Subject: [PATCH 13/91] Github: update current branch --- docs/_include/vyos-1x | 2 +- docs/changelog/1.3.rst | 6 ++++++ docs/changelog/1.4.rst | 35 +++++++++++++++++++++++++++++++++++ docs/changelog/1.5.rst | 37 ++++++++++++++++++++++++++++++++++++- 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/docs/_include/vyos-1x b/docs/_include/vyos-1x index b1a35b8a..20782531 160000 --- a/docs/_include/vyos-1x +++ b/docs/_include/vyos-1x @@ -1 +1 @@ -Subproject commit b1a35b8ae02c7a72ee29bf3e1595fedf254479ee +Subproject commit 2078253176046ea4d07e69caeb7932ea439b5614 diff --git a/docs/changelog/1.3.rst b/docs/changelog/1.3.rst index 5960cd58..d0d71d55 100644 --- a/docs/changelog/1.3.rst +++ b/docs/changelog/1.3.rst @@ -8,6 +8,12 @@ _ext/releasenotes.py +2023-12-29 +========== + +* :vytask:`T5852` ``(bug): Reboots fail with eapol WAN interface`` + + 2023-12-22 ========== diff --git a/docs/changelog/1.4.rst b/docs/changelog/1.4.rst index 385d1d63..cf8e22ab 100644 --- a/docs/changelog/1.4.rst +++ b/docs/changelog/1.4.rst @@ -8,6 +8,41 @@ _ext/releasenotes.py +2023-12-30 +========== + +* :vytask:`T5875` ``(bug): login: removing and re-adding a user keeps the home directory but UID will change, thus SSH keys no longer work`` +* :vytask:`T5653` ``(feature): Command to display fingerprint`` + + +2023-12-29 +========== + +* :vytask:`T5829` ``(bug): Can't Add IPv6 Address to Containers`` +* :vytask:`T5852` ``(bug): Reboots fail with eapol WAN interface`` +* :vytask:`T5869` ``(bug): vyos.template.first_host_address() does not honor RFC4291 section 2.6.1`` + + +2023-12-28 +========== + +* :vytask:`T4163` ``(feature): [BMP-BGP] Routing monitoring feature`` +* :vytask:`T5867` ``(feature): Upgrade podman to Debian Trixie version 4.7.x`` +* :vytask:`T5866` ``(feature): Add op-mode command to restart IPv6 RA daemon`` +* :vytask:`T5861` ``(bug): Flavor build system fails with third-party packages`` +* :vytask:`T5854` ``(feature): Extend override-default script to allow embedded defaultValue settings`` +* :vytask:`T5566` ``(feature): Be able to disable 802.3az/EEE (energy efficient ethernet) for a particular interface`` +* :vytask:`T5792` ``(default): Upgrade ddclient 3.11.2 release`` + + +2023-12-25 +========== + +* :vytask:`T5855` ``(feature): Migrate "set service lldp snmp enable" -> `set service lldp snmp"`` +* :vytask:`T5837` ``(bug): vyos.configdict.node_changed does not return keys per adding`` +* :vytask:`T5856` ``(bug): SNMP service removal fails`` + + 2023-12-24 ========== diff --git a/docs/changelog/1.5.rst b/docs/changelog/1.5.rst index 4ef32704..3749e53a 100644 --- a/docs/changelog/1.5.rst +++ b/docs/changelog/1.5.rst @@ -8,6 +8,42 @@ _ext/releasenotes.py +2023-12-30 +========== + +* :vytask:`T5875` ``(bug): login: removing and re-adding a user keeps the home directory but UID will change, thus SSH keys no longer work`` +* :vytask:`T5653` ``(feature): Command to display fingerprint`` + + +2023-12-29 +========== + +* :vytask:`T5829` ``(bug): Can't Add IPv6 Address to Containers`` +* :vytask:`T5852` ``(bug): Reboots fail with eapol WAN interface`` +* :vytask:`T5869` ``(bug): vyos.template.first_host_address() does not honor RFC4291 section 2.6.1`` + + +2023-12-28 +========== + +* :vytask:`T5827` ``(bug): image-tools: 'show system image' Command Not in Order`` +* :vytask:`T4163` ``(feature): [BMP-BGP] Routing monitoring feature`` +* :vytask:`T5867` ``(feature): Upgrade podman to Debian Trixie version 4.7.x`` +* :vytask:`T5866` ``(feature): Add op-mode command to restart IPv6 RA daemon`` +* :vytask:`T5861` ``(bug): Flavor build system fails with third-party packages`` +* :vytask:`T5854` ``(feature): Extend override-default script to allow embedded defaultValue settings`` +* :vytask:`T5566` ``(feature): Be able to disable 802.3az/EEE (energy efficient ethernet) for a particular interface`` +* :vytask:`T5792` ``(default): Upgrade ddclient 3.11.2 release`` + + +2023-12-25 +========== + +* :vytask:`T5855` ``(feature): Migrate "set service lldp snmp enable" -> `set service lldp snmp"`` +* :vytask:`T5837` ``(bug): vyos.configdict.node_changed does not return keys per adding`` +* :vytask:`T5856` ``(bug): SNMP service removal fails`` + + 2023-12-23 ========== @@ -80,7 +116,6 @@ 2023-12-13 ========== -* :vytask:`T5688` ``(default): Create the same view of pool configuration for all accel-ppp services`` * :vytask:`T591` ``(feature): Support SRv6`` From d74d2f6a400a5740e8e1438bcec6d72d604d745f Mon Sep 17 00:00:00 2001 From: sarthurdev <965089+sarthurdev@users.noreply.github.com> Date: Tue, 2 Jan 2024 22:25:43 +0100 Subject: [PATCH 14/91] Fix firewall syntax for refactor in PPPoE IPv6 example --- docs/configexamples/pppoe-ipv6-basic.rst | 40 +++++++++++++----------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/docs/configexamples/pppoe-ipv6-basic.rst b/docs/configexamples/pppoe-ipv6-basic.rst index f569d9c3..ad588def 100644 --- a/docs/configexamples/pppoe-ipv6-basic.rst +++ b/docs/configexamples/pppoe-ipv6-basic.rst @@ -89,24 +89,28 @@ To have basic protection while keeping IPv6 network functional, we need to: .. code-block:: none - set firewall ipv6-name WAN_IN default-action 'drop' - set firewall ipv6-name WAN_IN rule 10 action 'accept' - set firewall ipv6-name WAN_IN rule 10 state established 'enable' - set firewall ipv6-name WAN_IN rule 10 state related 'enable' - set firewall ipv6-name WAN_IN rule 20 action 'accept' - set firewall ipv6-name WAN_IN rule 20 protocol 'icmpv6' - set firewall ipv6-name WAN_LOCAL default-action 'drop' - set firewall ipv6-name WAN_LOCAL rule 10 action 'accept' - set firewall ipv6-name WAN_LOCAL rule 10 state established 'enable' - set firewall ipv6-name WAN_LOCAL rule 10 state related 'enable' - set firewall ipv6-name WAN_LOCAL rule 20 action 'accept' - set firewall ipv6-name WAN_LOCAL rule 20 protocol 'icmpv6' - set firewall ipv6-name WAN_LOCAL rule 30 action 'accept' - set firewall ipv6-name WAN_LOCAL rule 30 destination port '546' - set firewall ipv6-name WAN_LOCAL rule 30 protocol 'udp' - set firewall ipv6-name WAN_LOCAL rule 30 source port '547' - set interfaces pppoe pppoe0 firewall in ipv6-name 'WAN_IN' - set interfaces pppoe pppoe0 firewall local ipv6-name 'WAN_LOCAL' + set firewall ipv6 name WAN_IN default-action 'drop' + set firewall ipv6 name WAN_IN rule 10 action 'accept' + set firewall ipv6 name WAN_IN rule 10 state established 'enable' + set firewall ipv6 name WAN_IN rule 10 state related 'enable' + set firewall ipv6 name WAN_IN rule 20 action 'accept' + set firewall ipv6 name WAN_IN rule 20 protocol 'icmpv6' + set firewall ipv6 name WAN_LOCAL default-action 'drop' + set firewall ipv6 name WAN_LOCAL rule 10 action 'accept' + set firewall ipv6 name WAN_LOCAL rule 10 state established 'enable' + set firewall ipv6 name WAN_LOCAL rule 10 state related 'enable' + set firewall ipv6 name WAN_LOCAL rule 20 action 'accept' + set firewall ipv6 name WAN_LOCAL rule 20 protocol 'icmpv6' + set firewall ipv6 name WAN_LOCAL rule 30 action 'accept' + set firewall ipv6 name WAN_LOCAL rule 30 destination port '546' + set firewall ipv6 name WAN_LOCAL rule 30 protocol 'udp' + set firewall ipv6 name WAN_LOCAL rule 30 source port '547' + set firewall ipv6 forward filter rule 10 action jump + set firewall ipv6 forward filter rule 10 jump-target 'WAN_IN' + set firewall ipv6 forward filter rule 10 inbound-interface name 'pppoe0' + set firewall ipv6 input filter rule 10 action jump + set firewall ipv6 input filter rule 10 jump-target 'WAN_LOCAL' + set firewall ipv6 input filter rule 10 inbound-interface name 'pppoe0' Note to allow the router to receive DHCPv6 response from ISP. We need to allow packets with source port 547 (server) and destination port 546 (client). From e39d7d8990dd0f107b328258ecf67e3e4a1b179e Mon Sep 17 00:00:00 2001 From: Giggum <152240782+Giggum@users.noreply.github.com> Date: Fri, 5 Jan 2024 00:29:03 -0500 Subject: [PATCH 15/91] docs: fix to improve readability and correct typos. --- docs/configuration/firewall/index.rst | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/configuration/firewall/index.rst b/docs/configuration/firewall/index.rst index 3887e26a..bdfc2069 100644 --- a/docs/configuration/firewall/index.rst +++ b/docs/configuration/firewall/index.rst @@ -5,30 +5,30 @@ Firewall ######## With VyOS being based on top of Linux and its kernel, the Netfilter project -created the iptables and now the successor nftables for the Linux kernel to +created iptables and its successor nftables for the Linux kernel to work directly on the data flows. This now extends the concept of zone-based security to allow for manipulating the data at multiple stages once accepted by the network interface and the driver before being handed off to the -destination (e.g. a web server OR another device). +destination (e.g., a web server OR another device). -A simplified traffic flow, based on Netfilter packet flow, is shown next, in +A simplified traffic flow diagram, based on Netfilter packet flow, is shown next, in order to have a full view and understanding of how packets are processed, and -what possible paths can take. +what possible paths traffic can take. .. figure:: /_static/images/firewall-gral-packet-flow.png -Main notes regarding this packet flow and terminology used in VyOS firewall: +Main points regarding this packet flow and terminology used in VyOS firewall are below: - * **Bridge Port?**: choose appropiate path based on if interface were the + * **Bridge Port?**: choose appropriate path based on whether interface where the packet was received is part of a bridge, or not. -If interface were the packet was received isn't part of a bridge, then packet +If interface where the packet was received isn't part of a bridge, then packet is processed at the **IP Layer**: * **Prerouting**: several actions can be done in this stage, and currently - these actions are defined in different parts in vyos configuration. Order + these actions are defined in different parts in VyOS configuration. Order is important, and all these actions are performed before any actions - define under ``firewall`` section. Relevant configuration that acts in + defined under ``firewall`` section. Relevant configuration that acts in this stage are: * **Conntrack Ignore**: rules defined under ``set system conntrack ignore @@ -40,12 +40,12 @@ is processed at the **IP Layer**: * **Destination NAT**: rules defined under ``set [nat | nat66] destination...``. - * **Destination is the router?**: choose appropiate path based on - destination IP address. Transit forward continunes to **forward**, + * **Destination is the router?**: choose appropriate path based on + destination IP address. Transit forward continues to **forward**, while traffic that destination IP address is configured on the router continues to **input**. - * **Input**: stage where traffic destinated to the router itself can be + * **Input**: stage where traffic destined for the router itself can be filtered and controlled. This is where all rules for securing the router should take place. This includes ipv4 and ipv6 filtering rules, defined in: @@ -61,10 +61,10 @@ is processed at the **IP Layer**: * ``set firewall ipv6 forward filter ...``. - * **Output**: stage where traffic that is originated by the router itself - can be filtered and controlled. Bare in mind that this traffic can be a - new connection originted by a internal process running on VyOS router, - such as NTP, or can be a response to traffic received externaly through + * **Output**: stage where traffic that originates from the router itself + can be filtered and controlled. Bear in mind that this traffic can be a + new connection originated by a internal process running on VyOS router, + such as NTP, or a response to traffic received externaly through **inputt** (for example response to an ssh login attempt to the router). This includes ipv4 and ipv6 filtering rules, defined in: @@ -79,11 +79,11 @@ is processed at the **IP Layer**: * **Source NAT**: rules defined under ``set [nat | nat66] destination...``. -If interface were the packet was received is part of a bridge, then packet -is processed at the **Bridge Layer**, which contains a ver basic setup where -for bridge filtering: +If interface where the packet was received is part of a bridge, then packet +is processed at the **Bridge Layer**, which contains a basic setup for +bridge filtering: - * **Forward (Bridge)**: stage where traffic that is trasspasing through the + * **Forward (Bridge)**: stage where traffic that is trespasing through the bridge is filtered and controlled: * ``set firewall bridge forward filter ...``. From 59ed69455cea99d5d905ffdef51690eb85de5e13 Mon Sep 17 00:00:00 2001 From: Viacheslav Hletenko Date: Wed, 3 Jan 2024 13:42:54 +0200 Subject: [PATCH 16/91] updates: add system image latest If we configure "update-check url" we can use `latest` option to update system image. ``` add system image latest ``` --- docs/configuration/system/updates.rst | 2 ++ docs/installation/update.rst | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/configuration/system/updates.rst b/docs/configuration/system/updates.rst index a55bfa9a..505d9318 100644 --- a/docs/configuration/system/updates.rst +++ b/docs/configuration/system/updates.rst @@ -35,3 +35,5 @@ Check: Update available: 1.5-rolling-202312250024 Update URL: https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202312250024/1.5-rolling-202312250024-amd64.iso vyos@r4:~$ + + vyos@r4:~$ add system image latest diff --git a/docs/installation/update.rst b/docs/installation/update.rst index 5f75f9db..b0b43836 100644 --- a/docs/installation/update.rst +++ b/docs/installation/update.rst @@ -10,7 +10,7 @@ for the new image to boot using the current configuration. .. note:: Only LTS releases are PGP-signed. -.. opcmd:: add system image [vrf name] +.. opcmd:: add system image | [latest] [vrf name] [username user [password pass]] Use this command to install a new system image. You can reach the @@ -72,6 +72,13 @@ Example OK. This image will be named: vyos-1.3-rolling-201912201452 +You can use ``latest`` option. It loads the latest available Rolling release. + +.. code-block:: none + + vyos@vyos:~$ add system image latest + +.. note:: To use the `latest` option the "system update-check url" must be configured. .. hint:: The most up-do-date Rolling Release for AMD64 can be accessed using the following URL: From 8e2932ebb426534b6727836c51395077ed8ed490 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Fri, 5 Jan 2024 22:55:37 +0100 Subject: [PATCH 17/91] pki: T5886: add support for ACME protocol (LetsEncrypt) --- docs/configuration/pki/index.rst | 44 +++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/configuration/pki/index.rst b/docs/configuration/pki/index.rst index 66ad84a3..1fea13ac 100644 --- a/docs/configuration/pki/index.rst +++ b/docs/configuration/pki/index.rst @@ -1,4 +1,4 @@ -:lastproofread: 2021-09-01 +:lastproofread: 2024-01-05 .. include:: /_include/need_improvement.txt @@ -248,6 +248,44 @@ certificates used by services on this router. If CA is present, this certificate will be included in generated CRLs +ACME +^^^^ + +The VyOS PKI subsystem can also be used to automatically retrieve Certificates +using the :abbr:`ACME (Automatic Certificate Management Environment)` protocol. + +.. cfgcmd:: set pki certificate acme domain-name + + Domain names to apply, multiple domain-names can be specified. + + This is a mandatory option + +.. cfgcmd:: set pki certificate acme email
+ + Email used for registration and recovery contact. + + This is a mandatory option + +.. cfgcmd:: set pki certificate acme listen-address
+ + The address the server listens to during http-01 challenge + +.. cfgcmd:: set pki certificate acme rsa-key-size <2048 | 3072 | 4096> + + Size of the RSA key. + + This options defaults to 2048 + +.. cfgcmd:: set pki certificate acme url + + ACME Directory Resource URI. + + This defaults to https://acme-v02.api.letsencrypt.org/directory + + .. note:: During initial deployment we recommend using the staging API + of LetsEncrypt to prevent and blacklisting of your system. The API + endpoint is https://acme-staging-v02.api.letsencrypt.org/directory + Operation ========= @@ -292,3 +330,7 @@ also to display them. .. opcmd:: show pki crl Show a list of installed :abbr:`CRLs (Certificate Revocation List)`. + +.. opcmd:: renew certbot + + Manually trigger certificate renewal. This will be done twice a day. From 7132481c92e169348ac3f6750be8ce45c2f2b5dd Mon Sep 17 00:00:00 2001 From: Giggum <152240782+Giggum@users.noreply.github.com> Date: Fri, 5 Jan 2024 22:40:42 -0500 Subject: [PATCH 18/91] fix to add more fixes on top of previous pull request --- docs/configuration/firewall/index.rst | 35 ++--- docs/configuration/firewall/index.rst~ | 179 +++++++++++++++++++++++++ 2 files changed, 197 insertions(+), 17 deletions(-) create mode 100644 docs/configuration/firewall/index.rst~ diff --git a/docs/configuration/firewall/index.rst b/docs/configuration/firewall/index.rst index bdfc2069..74d5bc20 100644 --- a/docs/configuration/firewall/index.rst +++ b/docs/configuration/firewall/index.rst @@ -4,26 +4,27 @@ Firewall ######## -With VyOS being based on top of Linux and its kernel, the Netfilter project +As VyOS is based on Linux it leverages its firewall. The Netfilter project created iptables and its successor nftables for the Linux kernel to -work directly on the data flows. This now extends the concept of zone-based -security to allow for manipulating the data at multiple stages once accepted -by the network interface and the driver before being handed off to the -destination (e.g., a web server OR another device). +work directly on packet data flows. This now extends the concept of +zone-based security to allow for manipulating the data at multiple stages once +accepted by the network interface and the driver before being handed off to +the destination (e.g., a web server OR another device). -A simplified traffic flow diagram, based on Netfilter packet flow, is shown next, in -order to have a full view and understanding of how packets are processed, and -what possible paths traffic can take. +A simplified traffic flow diagram, based on Netfilter packet flow, is shown +next, in order to have a full view and understanding of how packets are +processed, and what possible paths traffic can take. .. figure:: /_static/images/firewall-gral-packet-flow.png -Main points regarding this packet flow and terminology used in VyOS firewall are below: +The main points regarding this packet flow and terminology used in VyOS +firewall are covered below: - * **Bridge Port?**: choose appropriate path based on whether interface where the - packet was received is part of a bridge, or not. + * **Bridge Port?**: choose appropriate path based on whether interface + where the packet was received is part of a bridge, or not. -If interface where the packet was received isn't part of a bridge, then packet -is processed at the **IP Layer**: +If the interface where the packet was received isn't part of a bridge, then +packetis processed at the **IP Layer**: * **Prerouting**: several actions can be done in this stage, and currently these actions are defined in different parts in VyOS configuration. Order @@ -79,8 +80,8 @@ is processed at the **IP Layer**: * **Source NAT**: rules defined under ``set [nat | nat66] destination...``. -If interface where the packet was received is part of a bridge, then packet -is processed at the **Bridge Layer**, which contains a basic setup for +If the interface where the packet was received is part of a bridge, then +packetis processed at the **Bridge Layer**, which contains a basic setup for bridge filtering: * **Forward (Bridge)**: stage where traffic that is trespasing through the @@ -88,7 +89,7 @@ bridge filtering: * ``set firewall bridge forward filter ...``. -Main structure VyOS firewall cli is shown next: +The main structure VyOS firewall cli is shown next: .. code-block:: none @@ -134,7 +135,7 @@ Main structure VyOS firewall cli is shown next: - custom_zone_name + ... -Please, refer to appropiate section for more information about firewall +Please, refer to appropriate section for more information about firewall configuration: .. toctree:: diff --git a/docs/configuration/firewall/index.rst~ b/docs/configuration/firewall/index.rst~ new file mode 100644 index 00000000..bdfc2069 --- /dev/null +++ b/docs/configuration/firewall/index.rst~ @@ -0,0 +1,179 @@ +:lastproofread: 2023-11-23 + +######## +Firewall +######## + +With VyOS being based on top of Linux and its kernel, the Netfilter project +created iptables and its successor nftables for the Linux kernel to +work directly on the data flows. This now extends the concept of zone-based +security to allow for manipulating the data at multiple stages once accepted +by the network interface and the driver before being handed off to the +destination (e.g., a web server OR another device). + +A simplified traffic flow diagram, based on Netfilter packet flow, is shown next, in +order to have a full view and understanding of how packets are processed, and +what possible paths traffic can take. + +.. figure:: /_static/images/firewall-gral-packet-flow.png + +Main points regarding this packet flow and terminology used in VyOS firewall are below: + + * **Bridge Port?**: choose appropriate path based on whether interface where the + packet was received is part of a bridge, or not. + +If interface where the packet was received isn't part of a bridge, then packet +is processed at the **IP Layer**: + + * **Prerouting**: several actions can be done in this stage, and currently + these actions are defined in different parts in VyOS configuration. Order + is important, and all these actions are performed before any actions + defined under ``firewall`` section. Relevant configuration that acts in + this stage are: + + * **Conntrack Ignore**: rules defined under ``set system conntrack ignore + [ipv4 | ipv6] ...``. + + * **Policy Route**: rules defined under ``set policy [route | route6] + ...``. + + * **Destination NAT**: rules defined under ``set [nat | nat66] + destination...``. + + * **Destination is the router?**: choose appropriate path based on + destination IP address. Transit forward continues to **forward**, + while traffic that destination IP address is configured on the router + continues to **input**. + + * **Input**: stage where traffic destined for the router itself can be + filtered and controlled. This is where all rules for securing the router + should take place. This includes ipv4 and ipv6 filtering rules, defined + in: + + * ``set firewall ipv4 input filter ...``. + + * ``set firewall ipv6 input filter ...``. + + * **Forward**: stage where transit traffic can be filtered and controlled. + This includes ipv4 and ipv6 filtering rules, defined in: + + * ``set firewall ipv4 forward filter ...``. + + * ``set firewall ipv6 forward filter ...``. + + * **Output**: stage where traffic that originates from the router itself + can be filtered and controlled. Bear in mind that this traffic can be a + new connection originated by a internal process running on VyOS router, + such as NTP, or a response to traffic received externaly through + **inputt** (for example response to an ssh login attempt to the router). + This includes ipv4 and ipv6 filtering rules, defined in: + + * ``set firewall ipv4 input filter ...``. + + * ``set firewall ipv6 output filter ...``. + + * **Postrouting**: as in **Prerouting**, several actions defined in + different parts of VyOS configuration are performed in this + stage. This includes: + + * **Source NAT**: rules defined under ``set [nat | nat66] + destination...``. + +If interface where the packet was received is part of a bridge, then packet +is processed at the **Bridge Layer**, which contains a basic setup for +bridge filtering: + + * **Forward (Bridge)**: stage where traffic that is trespasing through the + bridge is filtered and controlled: + + * ``set firewall bridge forward filter ...``. + +Main structure VyOS firewall cli is shown next: + +.. code-block:: none + + - set firewall + * bridge + - forward + + filter + * flowtable + - custom_flow_table + + ... + * global-options + + all-ping + + broadcast-ping + + ... + * group + - address-group + - ipv6-address-group + - network-group + - ipv6-network-group + - interface-group + - mac-group + - port-group + - domain-group + * ipv4 + - forward + + filter + - input + + filter + - output + + filter + - name + + custom_name + * ipv6 + - forward + + filter + - input + + filter + - output + + filter + - ipv6-name + + custom_name + * zone + - custom_zone_name + + ... + +Please, refer to appropiate section for more information about firewall +configuration: + +.. toctree:: + :maxdepth: 1 + :includehidden: + + global-options + groups + bridge + ipv4 + ipv6 + flowtables + +.. note:: **For more information** + of Netfilter hooks and Linux networking packet flows can be + found in `Netfilter-Hooks + `_ + + +Zone-based firewall +^^^^^^^^^^^^^^^^^^^ +.. toctree:: + :maxdepth: 1 + :includehidden: + + zone + +With zone-based firewalls a new concept was implemented, in addtion to the +standard in and out traffic flows, a local flow was added. This local was for +traffic originating and destined to the router itself. Which means additional +rules were required to secure the firewall itself from the network, in +addition to the existing inbound and outbound rules from the traditional +concept above. + +To configure VyOS with the +:doc:`zone-based firewall configuration ` + +As the example image below shows, the device now needs rules to allow/block +traffic to or from the services running on the device that have open +connections on that interface. + +.. figure:: /_static/images/firewall-zonebased.png From 9ca5e9dd89eabda161d974e7359ab2716fe56464 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Sat, 6 Jan 2024 20:54:08 +0100 Subject: [PATCH 19/91] dns: T5900: add dont-throttle-netmasks and serve-stale-extensions powerdns features --- docs/configuration/service/dns.rst | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/configuration/service/dns.rst b/docs/configuration/service/dns.rst index 2caeb22d..7624d309 100644 --- a/docs/configuration/service/dns.rst +++ b/docs/configuration/service/dns.rst @@ -143,6 +143,19 @@ avoid being tracked by the provider of your upstream DNS server. 168.192.in-addr.arpa, 16-31.172.in-addr.arpa, which enabling upstream DNS server(s) to be used for reverse lookups of these zones. +.. cfgcmd:: set service dns forwarding serve-stale-extension <0-65535> + + Maximum number of times an expired record’s TTL is extended by 30s when + serving stale. Extension only occurs if a record cannot be refreshed. A + value of 0 means the Serve Stale mechanism is not used. To allow records + becoming stale to be served for an hour, use a value of 120. + +.. cfgcmd:: set service dns forwarding exclude-throttle-address + + When an authoritative server does not answer a query or sends a reply the + recursor does not like, it is throttled. Any servers matching the supplied + netmasks will never be throttled. + Example ======= @@ -381,12 +394,12 @@ By default, ddclient_ will update a dynamic dns record using the IP address directly attached to the interface. If your VyOS instance is behind NAT, your record will be updated to point to your internal IP. -Above, command syntax isn noted to configure dynamic dns on a specific interface. -It is possible to overlook the additional address option, web, when completeing -those commands. ddclient_ has another way to determine the WAN IP address, using -a web-based url to determine the external IP. Each of the commands above will -need to be modified to use 'web' as the 'interface' specified if this functionality -is to be utilized. +Above, command syntax isn noted to configure dynamic dns on a specific interface. +It is possible to overlook the additional address option, web, when completeing +those commands. ddclient_ has another way to determine the WAN IP address, using +a web-based url to determine the external IP. Each of the commands above will +need to be modified to use 'web' as the 'interface' specified if this functionality +is to be utilized. This functionality is controlled by adding the following configuration: From caa86c76390ea8e97def1416da16696e55cc059c Mon Sep 17 00:00:00 2001 From: rebortg Date: Mon, 8 Jan 2024 06:05:52 +0000 Subject: [PATCH 20/91] Github: update current branch --- docs/_include/vyos-1x | 2 +- docs/changelog/1.4.rst | 48 ++++++++++++++++++++++++++++++++++++++++++ docs/changelog/1.5.rst | 39 ++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) diff --git a/docs/_include/vyos-1x b/docs/_include/vyos-1x index 20782531..48c09cb9 160000 --- a/docs/_include/vyos-1x +++ b/docs/_include/vyos-1x @@ -1 +1 @@ -Subproject commit 2078253176046ea4d07e69caeb7932ea439b5614 +Subproject commit 48c09cb91079733e4c5517a22b5345ff14d66059 diff --git a/docs/changelog/1.4.rst b/docs/changelog/1.4.rst index cf8e22ab..7a4c96c0 100644 --- a/docs/changelog/1.4.rst +++ b/docs/changelog/1.4.rst @@ -8,6 +8,54 @@ _ext/releasenotes.py +2024-01-07 +========== + +* :vytask:`T5891` ``(bug): OpenVPN IPv6 config issue with 1.4-rc1`` +* :vytask:`T5887` ``(feature): Upgrade Linux Kernel to 6.6.y (2023 LTS edition)`` + + +2024-01-06 +========== + +* :vytask:`T3670` ``(feature): Option to disable HTTP port 80 redirect`` + + +2024-01-05 +========== + +* :vytask:`T3642` ``(feature): PKI configuration`` +* :vytask:`T5894` ``(feature): Extend get_config_dict() with additional parameter with_pki that defaults to False`` + + +2024-01-04 +========== + +* :vytask:`T4072` ``(feature): Feature Request: Firewall on bridge interfaces`` +* :vytask:`T3459` ``(default): Inform the user when unable to install outdated image`` + + +2024-01-03 +========== + +* :vytask:`T5880` ``(bug): verify_source_interface should not allow dynamic interfaces like ppp, l2tp, ipoe or sstpc client interfaces`` +* :vytask:`T5879` ``(bug): tunnel: sourceing from dynamic pppoe0 interface will fail on reboots`` +* :vytask:`T4500` ``(bug): Missing firewall logs`` + + +2024-01-02 +========== + +* :vytask:`T5885` ``(default): image-tools: relax restriction on image-name length from 32 to 64`` + + +2024-01-01 +========== + +* :vytask:`T5883` ``(bug): Preserve file ownership in /config subdirs on add system image`` +* :vytask:`T5474` ``(feature): Establish common file name pattern for XML conf mode commands`` + + 2023-12-30 ========== diff --git a/docs/changelog/1.5.rst b/docs/changelog/1.5.rst index 3749e53a..631ccf91 100644 --- a/docs/changelog/1.5.rst +++ b/docs/changelog/1.5.rst @@ -8,6 +8,45 @@ _ext/releasenotes.py +2024-01-07 +========== + +* :vytask:`T5899` ``(feature): VyOS vm images use bookworm repo`` +* :vytask:`T5887` ``(feature): Upgrade Linux Kernel to 6.6.y (2023 LTS edition)`` + + +2024-01-06 +========== + +* :vytask:`T3214` ``(bug): OpenVPN IPv6 fixes`` + + +2024-01-05 +========== + +* :vytask:`T5894` ``(feature): Extend get_config_dict() with additional parameter with_pki that defaults to False`` + + +2024-01-03 +========== + +* :vytask:`T5880` ``(bug): verify_source_interface should not allow dynamic interfaces like ppp, l2tp, ipoe or sstpc client interfaces`` +* :vytask:`T5879` ``(bug): tunnel: sourceing from dynamic pppoe0 interface will fail on reboots`` + + +2024-01-02 +========== + +* :vytask:`T5885` ``(default): image-tools: relax restriction on image-name length from 32 to 64`` + + +2024-01-01 +========== + +* :vytask:`T5883` ``(bug): Preserve file ownership in /config subdirs on add system image`` +* :vytask:`T5474` ``(feature): Establish common file name pattern for XML conf mode commands`` + + 2023-12-30 ========== From 8628ad46eb25d5e165cf2e03f52c2b7c7bc7b6ca Mon Sep 17 00:00:00 2001 From: Bubun Das Date: Mon, 8 Jan 2024 23:48:19 +0530 Subject: [PATCH 21/91] Update monitoring.rst Updated docs for influxdb --- docs/configuration/service/monitoring.rst | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/configuration/service/monitoring.rst b/docs/configuration/service/monitoring.rst index 0aa93e71..245af067 100644 --- a/docs/configuration/service/monitoring.rst +++ b/docs/configuration/service/monitoring.rst @@ -109,11 +109,11 @@ Monitoring functionality with ``telegraf`` and ``InfluxDB 2`` is provided. Telegraf is the open source server agent to help you collect metrics, events and logs from your routers. -.. cfgcmd:: set service monitoring telegraf authentication organization +.. cfgcmd:: set service monitoring telegraf influxdb authentication organization Authentication organization name -.. cfgcmd:: set service monitoring telegraf authentication token +.. cfgcmd:: set service monitoring telegraf influxdb authentication token Authentication token @@ -121,11 +121,11 @@ and logs from your routers. Remote ``InfluxDB`` bucket name -.. cfgcmd:: set service monitoring port +.. cfgcmd:: set service monitoring telegraf influxdb port Remote port -.. cfgcmd:: set service monitoring telegraf url +.. cfgcmd:: set service monitoring telegraf influxdb url Remote URL @@ -138,12 +138,11 @@ An example of a configuration that sends ``telegraf`` metrics to remote .. code-block:: none - set service monitoring telegraf authentication organization 'vyos' - set service monitoring telegraf authentication token 'ZAml9Uy5wrhA...==' - set service monitoring telegraf bucket 'bucket_vyos' - set service monitoring telegraf port '8086' - set service monitoring telegraf source 'all' - set service monitoring telegraf url 'http://r1.influxdb2.local' + set service monitoring telegraf influxdb authentication organization 'vyos' + set service monitoring telegraf influxdb authentication token 'ZAml9Uy5wrhA...==' + set service monitoring telegraf influxdb bucket 'bucket_vyos' + set service monitoring telegraf influxdb port '8086' + set service monitoring telegraf influxdb url 'http://r1.influxdb2.local' .. _azure-data-explorer: https://github.com/influxdata/telegraf/tree/master/plugins/outputs/azure_data_explorer .. _prometheus-client: https://github.com/influxdata/telegraf/tree/master/plugins/outputs/prometheus_client From dfa516d63e38eadc5e57dd143b17022c6ff2c092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20G=C3=B6hler?= Date: Mon, 8 Jan 2024 21:23:37 +0100 Subject: [PATCH 22/91] Delete docs/configuration/firewall/index.rst~ --- docs/configuration/firewall/index.rst~ | 179 ------------------------- 1 file changed, 179 deletions(-) delete mode 100644 docs/configuration/firewall/index.rst~ diff --git a/docs/configuration/firewall/index.rst~ b/docs/configuration/firewall/index.rst~ deleted file mode 100644 index bdfc2069..00000000 --- a/docs/configuration/firewall/index.rst~ +++ /dev/null @@ -1,179 +0,0 @@ -:lastproofread: 2023-11-23 - -######## -Firewall -######## - -With VyOS being based on top of Linux and its kernel, the Netfilter project -created iptables and its successor nftables for the Linux kernel to -work directly on the data flows. This now extends the concept of zone-based -security to allow for manipulating the data at multiple stages once accepted -by the network interface and the driver before being handed off to the -destination (e.g., a web server OR another device). - -A simplified traffic flow diagram, based on Netfilter packet flow, is shown next, in -order to have a full view and understanding of how packets are processed, and -what possible paths traffic can take. - -.. figure:: /_static/images/firewall-gral-packet-flow.png - -Main points regarding this packet flow and terminology used in VyOS firewall are below: - - * **Bridge Port?**: choose appropriate path based on whether interface where the - packet was received is part of a bridge, or not. - -If interface where the packet was received isn't part of a bridge, then packet -is processed at the **IP Layer**: - - * **Prerouting**: several actions can be done in this stage, and currently - these actions are defined in different parts in VyOS configuration. Order - is important, and all these actions are performed before any actions - defined under ``firewall`` section. Relevant configuration that acts in - this stage are: - - * **Conntrack Ignore**: rules defined under ``set system conntrack ignore - [ipv4 | ipv6] ...``. - - * **Policy Route**: rules defined under ``set policy [route | route6] - ...``. - - * **Destination NAT**: rules defined under ``set [nat | nat66] - destination...``. - - * **Destination is the router?**: choose appropriate path based on - destination IP address. Transit forward continues to **forward**, - while traffic that destination IP address is configured on the router - continues to **input**. - - * **Input**: stage where traffic destined for the router itself can be - filtered and controlled. This is where all rules for securing the router - should take place. This includes ipv4 and ipv6 filtering rules, defined - in: - - * ``set firewall ipv4 input filter ...``. - - * ``set firewall ipv6 input filter ...``. - - * **Forward**: stage where transit traffic can be filtered and controlled. - This includes ipv4 and ipv6 filtering rules, defined in: - - * ``set firewall ipv4 forward filter ...``. - - * ``set firewall ipv6 forward filter ...``. - - * **Output**: stage where traffic that originates from the router itself - can be filtered and controlled. Bear in mind that this traffic can be a - new connection originated by a internal process running on VyOS router, - such as NTP, or a response to traffic received externaly through - **inputt** (for example response to an ssh login attempt to the router). - This includes ipv4 and ipv6 filtering rules, defined in: - - * ``set firewall ipv4 input filter ...``. - - * ``set firewall ipv6 output filter ...``. - - * **Postrouting**: as in **Prerouting**, several actions defined in - different parts of VyOS configuration are performed in this - stage. This includes: - - * **Source NAT**: rules defined under ``set [nat | nat66] - destination...``. - -If interface where the packet was received is part of a bridge, then packet -is processed at the **Bridge Layer**, which contains a basic setup for -bridge filtering: - - * **Forward (Bridge)**: stage where traffic that is trespasing through the - bridge is filtered and controlled: - - * ``set firewall bridge forward filter ...``. - -Main structure VyOS firewall cli is shown next: - -.. code-block:: none - - - set firewall - * bridge - - forward - + filter - * flowtable - - custom_flow_table - + ... - * global-options - + all-ping - + broadcast-ping - + ... - * group - - address-group - - ipv6-address-group - - network-group - - ipv6-network-group - - interface-group - - mac-group - - port-group - - domain-group - * ipv4 - - forward - + filter - - input - + filter - - output - + filter - - name - + custom_name - * ipv6 - - forward - + filter - - input - + filter - - output - + filter - - ipv6-name - + custom_name - * zone - - custom_zone_name - + ... - -Please, refer to appropiate section for more information about firewall -configuration: - -.. toctree:: - :maxdepth: 1 - :includehidden: - - global-options - groups - bridge - ipv4 - ipv6 - flowtables - -.. note:: **For more information** - of Netfilter hooks and Linux networking packet flows can be - found in `Netfilter-Hooks - `_ - - -Zone-based firewall -^^^^^^^^^^^^^^^^^^^ -.. toctree:: - :maxdepth: 1 - :includehidden: - - zone - -With zone-based firewalls a new concept was implemented, in addtion to the -standard in and out traffic flows, a local flow was added. This local was for -traffic originating and destined to the router itself. Which means additional -rules were required to secure the firewall itself from the network, in -addition to the existing inbound and outbound rules from the traditional -concept above. - -To configure VyOS with the -:doc:`zone-based firewall configuration ` - -As the example image below shows, the device now needs rules to allow/block -traffic to or from the services running on the device that have open -connections on that interface. - -.. figure:: /_static/images/firewall-zonebased.png From cecc0f3c32afb455ddb006b35faf343877061443 Mon Sep 17 00:00:00 2001 From: Christian Breunig Date: Mon, 8 Jan 2024 21:29:11 +0100 Subject: [PATCH 23/91] https: add latest CLI changes --- docs/configuration/service/https.rst | 96 +++++++++++++--------------- 1 file changed, 46 insertions(+), 50 deletions(-) diff --git a/docs/configuration/service/https.rst b/docs/configuration/service/https.rst index eb2e30eb..973c5355 100644 --- a/docs/configuration/service/https.rst +++ b/docs/configuration/service/https.rst @@ -1,7 +1,7 @@ .. _http-api: ######## -HTTP-API +HTTP API ######## VyOS provide an HTTP API. You can use it to execute op-mode commands, @@ -13,6 +13,51 @@ Please take a look at the :ref:`vyosapi` page for an detailed how-to. Configuration ************* +.. cfgcmd:: set service https allow-client address
+ + Only allow certain IP addresses or prefixes to access the https + webserver. + +.. cfgcmd:: set service https certificates ca-certificate + + Use CA certificate from PKI subsystem + +.. cfgcmd:: set service https certificates certificate + + Use certificate from PKI subsystem + +.. cfgcmd:: set service https certificates dh-params + + Use :abbr:`DH (Diffie–Hellman)` parameters from PKI subsystem. + Must be at least 2048 bits in length. + +.. cfgcmd:: set service https listen-address
+ + Webserver should only listen on specified IP address + +.. cfgcmd:: set service https port + + Webserver should listen on specified port. + + Default: 443 + +.. cfgcmd:: set service https enable-http-redirect + + Enable automatic redirect from http to https. + +.. cfgcmd:: set service https tls-version <1.2 | 1.3> + + Select TLS version used. + + This defaults to both 1.2 and 1.3. + +.. cfgcmd:: set service https vrf + + Start Webserver in given VRF. + +API +=== + .. cfgcmd:: set service https api keys id key Set a named api key. Every key has the same, full permissions @@ -27,42 +72,6 @@ Configuration Enforce strict path checking -.. cfgcmd:: set service https virtual-host listen-address - - - Address to listen for HTTPS requests - -.. cfgcmd:: set service https virtual-host port <1-65535> - - Port to listen for HTTPS requests; default 443 - -.. cfgcmd:: set service https virtual-host server-name - - Server names for virtual hosts it can be exact, wildcard or regex. - -.. cfgcmd:: set service https api-restrict virtual-host - - By default, nginx exposes the local API on all virtual servers. - Use this to restrict nginx to one or more virtual hosts. - -.. cfgcmd:: set service https certificates certbot domain-name - - Domain name(s) for which to obtain certificate - -.. cfgcmd:: set service https certificates certbot email - - Email address to associate with certificate - -.. cfgcmd:: set service https certificates system-generated-certificate - - Use an automatically generated self-signed certificate - -.. cfgcmd:: set service https certificates system-generated-certificate - lifetime - - Lifetime in days; default is 365 - - ********************* Example Configuration ********************* @@ -72,16 +81,3 @@ Set an API-KEY is the minimal configuration to get a working API Endpoint. .. code-block:: none set service https api keys id MY-HTTPS-API-ID key MY-HTTPS-API-PLAINTEXT-KEY - - -To use this full configuration we asume a public accessible hostname. - -.. code-block:: none - - set service https api keys id MY-HTTPS-API-ID key MY-HTTPS-API-PLAINTEXT-KEY - set service https certificates certbot domain-name rtr01.example.com - set service https certificates certbot email mail@example.com - set service https virtual-host rtr01 listen-address 198.51.100.2 - set service https virtual-host rtr01 port 11443 - set service https virtual-host rtr01 server-name rtr01.example.com - set service https api-restrict virtual-host rtr01 From a2666e8e13b01b7becef274dd97f77f4ce39a91b Mon Sep 17 00:00:00 2001 From: Nicolas Vollmar Date: Wed, 10 Jan 2024 08:51:08 +0100 Subject: [PATCH 24/91] fix spelling --- docs/_locale/de/configuration.pot | 4 ++-- docs/_locale/es/configuration.pot | 2 +- docs/_locale/ja/configuration.pot | 4 ++-- docs/_locale/pt/configuration.pot | 4 ++-- docs/_locale/uk/configuration.pot | 4 ++-- docs/configuration/loadbalancing/reverse-proxy.rst | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/_locale/de/configuration.pot b/docs/_locale/de/configuration.pot index 6641dd72..df607936 100644 --- a/docs/_locale/de/configuration.pot +++ b/docs/_locale/de/configuration.pot @@ -19468,8 +19468,8 @@ msgid "``latency``: A server profile focused on lowering network latency. This p msgstr "``latency``: A server profile focused on lowering network latency. This profile favors performance over power savings by setting ``intel_pstate`` and ``min_perf_pct=100``." #: ../../configuration/loadbalancing/reverse-proxy.rst:108 -msgid "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" -msgstr "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" +msgid "``least-connection`` Distributes requests to the server with the fewest active connections" +msgstr "``least-connection`` Distributes requests to the server with the fewest active connections" #: ../../configuration/vpn/ipsec.rst:125 msgid "``life-bytes`` ESP life in bytes <1024-26843545600000>. Number of bytes transmitted over an IPsec SA before it expires;" diff --git a/docs/_locale/es/configuration.pot b/docs/_locale/es/configuration.pot index 88324a87..0f90f6ac 100644 --- a/docs/_locale/es/configuration.pot +++ b/docs/_locale/es/configuration.pot @@ -19468,7 +19468,7 @@ msgid "``latency``: A server profile focused on lowering network latency. This p msgstr "``latency``: un perfil de servidor centrado en reducir la latencia de la red. Este perfil favorece el rendimiento sobre el ahorro de energía configurando ``intel_pstate`` y ``min_perf_pct=100``." #: ../../configuration/loadbalancing/reverse-proxy.rst:108 -msgid "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" +msgid "``least-connection`` Distributes requests to the server with the fewest active connections" msgstr "``least-connection`` Distribuye las solicitudes al servidor con la menor cantidad de conexiones activas" #: ../../configuration/vpn/ipsec.rst:125 diff --git a/docs/_locale/ja/configuration.pot b/docs/_locale/ja/configuration.pot index b76eeeb0..7a5f67f1 100644 --- a/docs/_locale/ja/configuration.pot +++ b/docs/_locale/ja/configuration.pot @@ -19468,8 +19468,8 @@ msgid "``latency``: A server profile focused on lowering network latency. This p msgstr "``latency``: A server profile focused on lowering network latency. This profile favors performance over power savings by setting ``intel_pstate`` and ``min_perf_pct=100``." #: ../../configuration/loadbalancing/reverse-proxy.rst:108 -msgid "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" -msgstr "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" +msgid "``least-connection`` Distributes requests to the server with the fewest active connections" +msgstr "``least-connection`` Distributes requests to the server with the fewest active connections" #: ../../configuration/vpn/ipsec.rst:125 msgid "``life-bytes`` ESP life in bytes <1024-26843545600000>. Number of bytes transmitted over an IPsec SA before it expires;" diff --git a/docs/_locale/pt/configuration.pot b/docs/_locale/pt/configuration.pot index dbe8970c..8b7aff49 100644 --- a/docs/_locale/pt/configuration.pot +++ b/docs/_locale/pt/configuration.pot @@ -19468,8 +19468,8 @@ msgid "``latency``: A server profile focused on lowering network latency. This p msgstr "``latency``: A server profile focused on lowering network latency. This profile favors performance over power savings by setting ``intel_pstate`` and ``min_perf_pct=100``." #: ../../configuration/loadbalancing/reverse-proxy.rst:108 -msgid "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" -msgstr "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" +msgid "``least-connection`` Distributes requests to the server with the fewest active connections" +msgstr "``least-connection`` Distributes requests to the server with the fewest active connections" #: ../../configuration/vpn/ipsec.rst:125 msgid "``life-bytes`` ESP life in bytes <1024-26843545600000>. Number of bytes transmitted over an IPsec SA before it expires;" diff --git a/docs/_locale/uk/configuration.pot b/docs/_locale/uk/configuration.pot index a3a1a512..1a912c61 100644 --- a/docs/_locale/uk/configuration.pot +++ b/docs/_locale/uk/configuration.pot @@ -19468,8 +19468,8 @@ msgid "``latency``: A server profile focused on lowering network latency. This p msgstr "``latency``: A server profile focused on lowering network latency. This profile favors performance over power savings by setting ``intel_pstate`` and ``min_perf_pct=100``." #: ../../configuration/loadbalancing/reverse-proxy.rst:108 -msgid "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" -msgstr "``least-connection`` Distributes requests tp tje server wotj the fewest active connections" +msgid "``least-connection`` Distributes requests to the server with the fewest active connections" +msgstr "``least-connection`` Distributes requests to the server with the fewest active connections" #: ../../configuration/vpn/ipsec.rst:125 msgid "``life-bytes`` ESP life in bytes <1024-26843545600000>. Number of bytes transmitted over an IPsec SA before it expires;" diff --git a/docs/configuration/loadbalancing/reverse-proxy.rst b/docs/configuration/loadbalancing/reverse-proxy.rst index 04b612f5..19ef3773 100644 --- a/docs/configuration/loadbalancing/reverse-proxy.rst +++ b/docs/configuration/loadbalancing/reverse-proxy.rst @@ -105,7 +105,7 @@ Backend of the client * ``round-robin`` Distributes requests in a circular manner, sequentially sending each request to the next server in line - * ``least-connection`` Distributes requests tp tje server wotj the fewest + * ``least-connection`` Distributes requests to the server with the fewest active connections .. cfgcmd:: set load-balancing reverse-proxy backend mode From 1b1cc7986813c65b608ace38bf497622eb74f1cf Mon Sep 17 00:00:00 2001 From: Trae Santiago Date: Wed, 10 Jan 2024 11:13:38 -0600 Subject: [PATCH 25/91] added new NPTv6/DHCPv6 example --- .../images/vyos_1_5_nat66_dhcpv6_wdummy.png | Bin 0 -> 349078 bytes docs/configuration/nat/nat66.rst | 97 ++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 docs/_static/images/vyos_1_5_nat66_dhcpv6_wdummy.png diff --git a/docs/_static/images/vyos_1_5_nat66_dhcpv6_wdummy.png b/docs/_static/images/vyos_1_5_nat66_dhcpv6_wdummy.png new file mode 100644 index 0000000000000000000000000000000000000000..297fdd11b573ba2f6d8de6012997eb8c67a3bb45 GIT binary patch literal 349078 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
+?Ql@DI4$7Y#}4@+ zGOUBLgjLn08;FmcHZE5Fia4i5MBE0L-S~{S#j!;cWOOS4gilUZfbTpt8oU^B{Fppz z%Qp5q`AWVox0P;ZgcneR4{~u=YU?!WFuaM)Fq7f2DA5jnyw6rrO_64>wt;Pj`kAeH zWcViFJQ-ROlqx2z>2ak%`>aznf>|xZbC34LPU8Uwkq29I)<^4fhsU3Pb=d1&<&c)) zStpT-ciR`7VGUSEshveDXz&Aq!Xm9q)HQ(kzICBpbTeO3LG2N=oj-xtmZ zqB|LYPI*BN(AKbf!*#lNvd2}8=|}p77`j<*F)pL;j+^?R4tu98nf$txo9BW*n{;Xb ziNW*`)xDE=K>G;-!YNI%-EI+imucS$26UK%c9Vo|rEpN5eJB@1ti%aEWhR=7^*fXE!?8F&G2 zvniA7z^|mQ5xBqW-kO#88JH)MzI=dmPQ6MI*ir&`?0DbX@fUZNk^AdW5gmLL#>vI2 zu3k?EJ5_%U)-`f9?MTW@d6kGFMQk$X&{;|+n(_;4$VtghB)#_KrfltKEl8Dvc4_)*}EX(37QRfMY3Z?e>CQKWKrHwN>ru-{I3G6-YMvjUDiCjT&^ zKJC^mL;sg3uBST_qMLWstE%d)t&VHZ61HnmT{do4D;hcL|M8QqGy(VrAD-)Zi=|b5 z7oZd|dm%-fIV@&M#}8oC`(guo@hP)&GDj`yRWq&Hopl|&<6Ki`w8-?A*=pO?n}#Bs z*QXx|-*t7o@@Nt#Uv{>S#3z5H4=@sD8Qh3pUL2U3c>r_=*G2h|8g2(a9aOtIqUZN0 zRH1&5NZmm>i(85m4uE~KklM8LG0ddKGBcn_SuZ5EMEHQP55U z+T9Xrw!%g^fpZDY6B@{XLE;{upWvQ4aLYA)CbIm=X>@9~Q6yDe0unQzG^_HYyU5z6 z&3S>qOq>VNfUjbU89^QnnK90GCwDEF^G+3L7l1nQP(0tfc&?|)x!Dh6Rl1Wr zF7rdX?p;2^$5OorX2k}Y6_J<#!ju?1RH+IWxMcQQD&qBE#?dlyRKav7ZEEFW;@aY) z&cX)}Bc~jn=e|T3-0Rv|Tio`5YunSh>EPL@X zbG{xFI~!$WGaH{&PHA9+YID2Il+%+K0d`nM@8;SLgjFugfeGY>I$t7f3Bdw<)hIA2 zleW8A!M+us7m=ei5d*L;w9iPrk9R#WFe7P(Znm84vA*m)A3yMw@7bFJc>!RF zbkC^ka+>U+O~|54v|taJ#WT2J@&+4%>TurNHXAyg1=i+N$)C2Xmg6ottn8Vy zea_#3{$+t0&-3FZkaHsv3+j6d@_lsWJrbWhLDiwok_VLN1BTjoxzG?;=&ScqRK1or@-X6-2g(F``B>0xHXZLxYW7-lC zqYSiyah=%Axp|9#%{*+58r!KLsq_f!(T+$@A1zlpW2mD8B!r3B7wdy6q zmmdH~%uv^~@>FiRv*orA0~UTNUR#sKPjX-MF)wjVy>|V4G_wJ>b)DCdRZT0iTgOB( zGfo@Y`Cve;S`)QAmsPa+jj)r8eHFP&kFd%UixOuY`oJ)^dhuPn^|?;7NnneAd**=8 zC^Baz5-4J{3=a&I3|R`Zv(9aW*q;I;R9cJrtSAqbK^08*jPt8?IYX46OB?0WS*)rY z+&H)2@+)@lmc1gXoIkC}o`}X!16f|V5@nWGolhzmk*o13^s*$t<;wTBq&H zqhvumA8GRzTIN-8V3%?GNamzOmQUs-ui0B$Ot1j}+{{?x!;_ZUAs53PBG3haH*-FU zHUy2Dpr($KUA6CgU7v%kyX-O2)=yMAR|9J|0hTc<+!nxy4;=G+tTY?6r;Wx6gG3s? zMS8x(OEdpUK~+-Rks~mqrDbwLLKn}qnCR$`vuC5uo;{n{E12dW>B8g~@&49xq4CtI zsw5uPF=Icl&l_0KZ|bjb->SPe*kv;^CiUnkrT$n~uXuwyUD2x7OzBRiPC9ql`K6J> zC6!exg(Kf|Ge5sPv@=@vHAZKIW+o!i(z3q>G=M$WJr^(1*Xz03TjgEN=})_^X(v6{ z>MwXr%gR0L_{^J;e2jEd;ig34oG0_Lgkp%zN;*B>v*79GokTyN+_`PxtaJ%(e!MeV zlDmhWTy(NJk;CKDoieGUs@mX3lI=56yz2zb=`&{}lcgj9#e?Yk%z13NEq_I4B+QJ@ zXLsP$9NqGIvVAQULoeITWt_5Z>fR{-P`GY>3m<_ECsi1@3wEMr--R;=-?N?bhAm^ln0{An!CY~5(6SLsS?y0Lr&@Emw$kyHm{hn?QH(bOf0WCEcQZB8HC|>*=8gmAf=E77nPj&PzAL^ahhDrg);8<%Q z1GEBav_$zb;`$7MF1<^q-)mHOjN~$TzT9;>0A)TiH1aI5F7_2(sm z)JD?GQcb)@-kLburx!I9HY8fHI_8&(?*d}wQmPOi^T?d^>GX0Xo7R2J7v-~h`S$|b zL`~i1%XWQNkY;-|hjy5fc=hwJo5hoek`E>OjCbl@Zs~9*DVa?5S^erVeOFRj==$(+ z#!gFAeV-evs7hu9Hos=b$y)~zp8gVBY_N$p&j7d_u(D?N4yOX0DP+%2GuY}Hbcdvq zQg(S3-VNF~_u!SrzQfplYSd!Z=mWVMx50J!Y!uEt;yPZ6CYFIhk~{UcJwBryYBZHQ zF|hIUX;qDp${6!XJ<-d{efCq_@AQG;bQy_-n@yT@3gcm6CF#mdE47~tt`5oZOuck? z>bD+)Bvc1=(a)z(fL#;#I0f@xCxOl~)hZBx-Z7Z({7agkc(8b<4)K@au zSa>jQ)B>xTPG#q@*Yun;>++F%ZfpjUWGf_wx+@Km-PZO1b*)SP&W-OAdPZ4ocF zT$uMqVZiSci>C)rF7ijLfIfMKza=Bi{p@_oad1AR(~?Ea!=YG9yCdf|5T-FO(jL=vp&m?#G>Cv|~xyjKfZ;st+iV)m4Q`Xuuy+hJ0y*O+a$z=e2vPoK6C8L4it~wR_|z86bUDefjFbOf74N!_79Lx z=@qfR+UUG44%A_TUvoXGs4jlf*;x2W6Ue|k4ZY~KurNRluDVySL22_c5uY1bEKhn% zYRnFuw62yLm^4fn?y12}sq1K1MOa?De9>a&X_W{zR35f0RrGp3?Xas~^{|!E#7K$w z2~)=6!?O>IlDyZKq--|XVEXJ3xp`j#QWi#^_W`*z8q!dTBEtg! zY_t3UdJzMq2;U91Gtsdjns)(Y^Q^4 zq6d%iInpE_dV*c9yYu?Q!_KwEd4Mh)HAHl5z>rF6 zy67~elk+UKkAt`CM7v4_wtYFKJw{8tC!9%=Rk<%liSk%#X^Mzm<3z}|~%-QX0kUta&*5xI?7y?qTp=9$d8iw~?S zvTi$i+VwbZ!E5Ec+T||_6ao##YvLFpt!v(6BZe$B>DDx--oMlmf!;njfwHj- zOccfDRg~zn=d|CGejzU-Jr8D(Sh$UlR^!#~_`N_~NW?MvL45~U`}UTFLtfn{F$S|i zr{4<{y2@CX%4ivC`j-hgOa~}y?Z2lJ&!P(UV_r}Ah6AG)cU^A3omMP%x_L!n(&QVL zbmVn=zSR^o%WFQEOxNhU44%`f@SGy1UOO(BJs_pgiF^Q*W(_&nCY zQCq+5U*iG{8x*ki?KO_=GJ5!EJLQWEQ@^;@4}~MfnQJX7!^YnpF)-H9GY=n`qZjS% zYJny1-?25dcR&Et2_QK}YIhR7n?wNK>@U^}o zug`{e8!rkT-ok$ifxz!$R29U2I+2T~rO}RRVR2Vsq4-D5^aK2BL$+(ABLB zjI60%(uc2qFlzglsv~pY=Ej2+cElB+4#U43&A=LAk65|-Q5TX;%T(pKW9CYPB4wyN zF)(K?-ly*jl*k8}{NCwG#gQvFO01unmL5+q1>*vOaZnA?2D)BKM?s_%o5P)*V4pC4 zr1edm6Z08TuJRO7tbyzL^f$sIwQ+rLfBE}jLk5#CN4R*lRReLQqqmMmXv~%LmbAg6 zyjtUT)`&}kO0GVh4YNUPn7=AuQRWoo4HbFHF6zuZx5_5?;CsasIKS8UzJVsOWyzWp zP$`-#=gM8EZb-r;)E9kr_(jd3D@MdAF{HO@Sg;_N96^j^ro__Pfa7356(`{G)~9%+ z*hQ(e0m#^FCV~Dm^2&iWW~U5rfJs{ikpP~&qp;yH7M#*aj4r%?Xr!c0yn7q6+ZsAx z;8E3)#c~zfF(hn1U142=J~lFfQ%yRz*7>Lz$|-escexXd7$6O}U^c0uh7Xmw@nt<49U(oRa zdkl_ObCN*^X$Iy<1I~TmK>qL-ma~YRNHTrO=vgDn(b_m1V;m%o%!IZy-TWa0e zy}8@A3sfS6)Qojf*52Cu46g-n(B0w6Jkfyl+D}aE2PMaqRms6D2f$%bhzKhJm+8}W z_1vQ1nFm-?+h|Ao*K;5U_2ijDkzymyz7*{=qV--j!#YJ zB{lGPt8OdM;Z8)GpiQthKyB6K8MY|;{d2h+SBFc=HV^1wvw>>T0PI5bg3}u!>C^qk za;NaIruWrUU97yWC7WmN_6u*r=C)}|eE|4oEYsF)``oYi_JMe5gxPmyZuPd(Sv@O` zJg$=8G8yR6mm8h(sFA7gR?7WGiRQv>wzI}Fk|Q^8Nfo>8d^Lx zB|mU#@v8HHW;Rfq<&y2;;(46QNE1p1vv}vLuhp(6W8WXiLbWVu%~~yN+Ii8&;Cmtl zXO`{>(E*kDgTp73EGAoB4n}Hm(u3)mjDb!M?ke z$6mi|_o$TE;T~R+vZ38-MI^E}vZ?%DN0vKgn#m?|E4_P~69f?6ax)v$OVB*DVlCQd z&0MMWxG}Sx4NEL+Ucu05f$-tu;T?X;uTkd!r3O+R%F}3@61Cnzm)>T#=u1^z^2i(V zWjj~XF{CE~;q&uXhBs`Dz&WaTRKv8PH(EtQ^6 zgJ33wQ#Zk}r7H|`p->u~Tucd#b!C-U8SNwTt6u87bOiTkGh5!yXWrDK$ zt=4Hw!}!LzBOt|-4JdA*0wU-@socGotV11P;DDX%&cKrvbFp#6JUO|D+3tXL za4uM$Xq;;=+*jJqet?l$i;t6n{|s3Ws}n5~)Agu!IGMi$Bh_@?YCkhsznA`{4uyWN z-7M5)LG)KD!!XiJyQj!rpOX|s9dbJ&P_~hzOog<|@*LQV2a1@^=Mq8a?IPDxnX-El zkLeUupmxXi$H#J30g-})LTUdh`wwD%y(JBnfukbsd?>LUTq@9^tO{<6dOZgqyx0Pc zgzlpZ;^cUF3|o^8g!_nh52URR*Y`73$2FZqjB1*h%^zTFhl*v!k}mY0DGULvB?j%R z@Z}-%dw!rG2(ri&GUBdBFd%|J?67yf>{or0vuvZ^%@`_bxw{N&nH`_PfU0Q~(3~7- z6hPnZ6`)$qT*gG7*gUtw2ZDIvWz1r(obWT0PX|enNdNjEQU=SL>-`dic{4Jz;Zdd< zxiy#2t`u-dvQRS;X2s>^K=wl4X_;^RC`*$HD#a-m&#q(Ww&W7_$Y>lb(1Siu0_;s$ zzZ1%xXXfm5vm-oThbL*F0+1K6Z`TNFq4+<}-aH=aHu@hfQKF)`N+R8DtyV%sl5qcX!|W^*qn-dA|SLFE8%Q z<+{#w&ilO2`<(0Zw>33YK{)Y4IXt_slyRQjQ>3gE?=}#$(0yb-t9w&>MkWX%!q%yI z?mHy*(Q}#hya8)+rN7v-GQY-tjF_I@+_|^%$oivDLJxzG6DGv`dB|FNtvHG8-HA)h zi4HjJ>t?rSe`1&DQTBa>+(ru2iEPT`}#rmKHXzXMa-x1giQ z?I{s`n_I*8JY>D~-nZehJhwz=$Tn?Z>(zL-KS#xcY{a0se8Z-jv`R#v#qoS_OQz|@^zgH;M~>!M{6i%L2Pk& z|L&g-rd8X6RlU?jRKe?igNXU3fgR?RW9Rx$^$MCK?A^+CtY+t)o_m#`fWjHGZ>oB= zr;PK~ZBbbZT${uKUemB${`q=!BZuWk&D5g@)i)H1>!v6f9QGg?!B~Reo}@+r8jK{V;KlXzuJ#{L4%wVMO{m6;=T}hOV zc&J4clyNPt6pkkmY#|YQs_sAi3zMwy{qX1O@BcCSa&-LVye&XeR@b54XaaxM>RnqP zQ#`T3f0~H$W%Tb@yYk11!O<2TZQ1yHM}My}FdV7uliwXXvJ&RtKb6iwP(a+}Hms~a zkG(p2#$%@sVGE@%Qw6vDaa^0cqJ*rx2w;xj{_W6zS{5pW;56m0?K;Ht4<9xe5OhGS z)b{Ip==GZ9Pl}di+%dy{hF13HzY_m9J9o~pLtQ9^p$}?~ENMpB7RHNX+K&q!P4I)q94# zA~pE`wK{7jUxbl~^gn8t*2R<2RZ=7}+Q{!eOMhK)RPMvdQm)>FWo)i>|8Lbi56)Ua zwqVnr`g)E*ymy(xu9LGGR(##*U%$T}QJ5O4t8dSc=<|K|zgiuF7`ksU?2Mm2ELM|)i>*Z7b`F$IZ%UZc#>(6u{5Gp`TqPhP(QA>a1 z00MdCKP+D;QPY;1plt9n_gWP&RIZ16wENNUA4~mhCpKU|{uuk6e_Hge;uSOMZ%TQ6 zbCU79dQegG{@W0x+lcsm<`fnL~e6L(j>3gF{_|TWO49bz|4}|~K z!OAQ*v=`~8eSGlMVcAsV^Ovt~S2RHe$z}Odqbsu^X9}+Sm zAD3$p4lb+yE{e1pvl3Q|sGzPUk~H{2{!<3>3WV=(xWpv<$CXwHHdfTw&hB=*xrJhw zgxIftuZu3U-Zhw&_3+-V*|GA$|0k)$pU6AM=1!J^nuBS|L-~w+>?fw#*cszUm<90@ zg|+%$ZCy?8V5`k{sSAAt-4GtaH!>bfOHB(9XF>)f*RL4*KQfSito}Ec#zFo-?MSn_ z`p=FA5}0C_UZ$80nOTJ}4u52C^=w`TY|z&fn4j~%TG^1o_SVsE(a1uJ7tMuY`h6dX zIx2?u6zEG?|0`>|Nc=c*die%lckU$!t6Gf192u|5bp;p{9$)qZ>6O0@kNi!YX|G-X z^S5$*d)4=pFnPD|a$S3BdPy z%hEpqZ`H^q4dDXgVvW}Sqw{gz%F3#BrezCT=v~Z3>iAf`RZS3-EK-{b{a*)eu>yp(7~rpFT`qC_a}vJ;cm-nHWp1Bpf7^DY zb&%V7O@pC;CtO^6?A;pN4b1dkIXV0szVibYxZ;Ta%qRFSz{bFei!|4={1bbN*qND` zZQrp_Q(;`N#P7#0b1 zmtDSSt&kytS(_>*Kt;^@|F$~}zHf#!RatFUE&2Ud^?NfZA6UL5Ru-mfZgzXl`FYlI zwXZz>oB;k%>1Bt4@zW|1lA#4|P}DP8U`1}I|B(~eOB!_a(#S|@X*s_P5sURVtnP=0`w&=98Zli5V{&y9b zN9DDjRBg~Dc6N3b)YUyO&!0X`wEhwu`({nv6+sjVt)ikLA|YX*rS)i^kP!Fw?XTP0 zudu9NA2-v%6RVbHICOc@eBmHcwDez>co1YsDD-+}IYifUd?+OSj|cvJ`F=~G?fy9y zzccYxpPuQryPRR{Rla?y#xj^}m}hO6z!<_|o&9@P1`tfTC+(Ne78zh19zq>IuH#D` z_kfWsOLO{y{*MLzC&ys6-+Q(9jI=qiqYc}hV_tvo!i5W&ImAU=U0vOv(URS~OJRX@ z!}1IpJG+jpZR%`phg831ly^ptNyS&y*;5Z5Jcx{m$pDSV=;na!y)i`#;eRSe~i!gQ+HJUUHV*mvsV!K^bOY?zrQHRGBvK1#_@+^76?>G`?l z)$5n08&H&5q40<0h33__PkK*%SH@I${rXmTeelCg)N8A{E2M1GEa#rm?9N*}zcLN; zKJ@xctNZ?ZVKWwvqM!QiVd4E&tf>2%1abL|daO+ANNWZ)yr?$8xX4*QLtm_DQl(*0 zO~Bt0{^xlmc8gbisn`4bsXf^vcY9wq)FMYMr1~(2+J{9wbN(?ewWu)GU6QAlq5nlg zepZ*d)2!r1Qs~a(AL6idZ-W;?1kCgoY2&U!C(814Ly<+;=?@jOIpf`^fO7e{c8g>c zg`HCV$sRopctTsDOW$}H>&Hw}k5;{tH@=_yghLTM$c=A1m=jDrdpu5J#;%O^5s4lX zz4FaJ=YjcKs)o zFb9LuPhf1}HTAbyJz5tO%)(xpgDzX+u(4FGM#-}%8 zraoZmLwWT;{08InCDL6FpM1e<(?7q=jpB(P7I|dHiw7_1?V8cVZ>86Kj>_Tn8DK2V zj;fn4gOhM>__eKJWg;?9bjyh?!M|${_A!IYr?4Y*BS3H`to7L07?Pr(gT(J zc}q%Xf%Cw<@z*DP=NvPDWV^(!v4!QC;e21F;c;KuEUAYn-ea__q@Q@{#j$J&wql32 z%;80zo_yDDy}lD33_IBF`pY!^HTb!A+ck?-Hs5oMmGOA<_U48z^E-S$tG?rj^v+pB z_QPQ)x>t;Xf2ry9_uP!hmVK<=%QR|Vq2Iy{8+3)Aw?UTj16ke6DuWtb?mY%*|JM6l zhrb0x8qVVz2#ammre(EO!CZ9W{I>^~(X1jP_>7mYqj}ETDxC}6CDpwz^8EwevI*%9 zyDcZoCSKIq_IiYZ`{+15^m5Sb%sj4Ela=(J1XZyT3xSj#v)$*`?+Ch)OUv~~NI_ zL~8Zg`7VAsv`nPUb@kNSuvD`}TG;uB>*LKRBI*o{7)aOst!c8oT? zzSH$(q9De(^rLDxzmqIx%$0o|*VPQW+`tdnEW5TJxRe8S!|&b|KwIp9LzxJpdChg$ zWEtSicHU;dJ{C}WeH&Q1)BEECQjaM;s=|t4ny<0y9hpqmB=02UWry$>9ep*Z{Wbr} zw`va53B5a~zrN(yb)r_!zHvyiFZ>o`7DpU2W{ zqg>o|;*)aFZ;5q=HU&wW8QdnrYDo+|Nkv(I?y1B5P2tf+)g)2IMC1~R+U?deQSBaj zMUK1HUhTRyH;;R)oOgKcGE2i7rx<-T@r>q4kx&YSesDQlMJ^YAc^-H9E;d!xW=0{T zN+dj+6J6G1VMp+#7T)3asnz4tx|(iEZlXk}@n3&C`|`9~x5ntp!iQB@mpesFH+m#W zhs(~hbLeLoSt;M%Bsp=lI<b|?eQ?MN*^yj`&CC=H%`VQJ%f|8C;z$HplxejOx8M8`ccS=?X_mKRHFj>se}}8o62bmtw=KI6g7CCKI)y&)HEO#}ge=J8z{+pEVGv zt!IiN(^I>NJeuS(y&7inapiezs^%`@zilI{8Hk`C__u)=9o1F;rdY?8T3*CEuNKwF zbC>C~#3Z$TfA|Jn)d8$rHea#>dCWPoWGX(?sc||D zhwRjTess8Fr_i_C(IF~eB*5dtPMhMKdYW%qr+%@nld+`B%dBWdL#6bkk0_ZW48{J=el?lHZhN@9Rl)5Rqq- z?S=}>(-bG8tMMg~H!mz?c(aR~ux6PbmJ(ZR+>nr?;i1MZsL$Rpj5M$eB~BY zqPvNH8#wsKcnUe`HhK}H|4;~moPL1Z`y2KO{XVoL7F}(W%p~gDU7>yaA_f!|ddF!^ z1)eKaj4Mw+Qx^LmCVYP%!p>XRqKWFEO_2Na(%oL`rT2V$#2YJRSDa-s8RW}1z}Q>z zcro~M9UXV0?(p0f>AvEt1x{Usykdp%EmtRu z{?P)&_OTUkS7rE>Vp3eXizRGA0HRhhDQM@ zBAiAiUZpc7U5LEjeX#-0^Y*1@uXpyyO`cK{_a>F`_8olT@gX~muD)te?fey`*F`1 zK;*`ZnfX$WQImU~A!TeL1+s?fNsZjBHf_3d#2*BS4#}Dyc^yww+wZeH*(YIeRX<*F zEtS}@AkgKve@gE~2*Yd#zp02qsYGw~QvLw3NYtp|zBH+6qQx!Abq=8Y13Oy|xyitc zWATp{*%ql2eb`#+VZT;quUJXE3aecVhH8+iH4s0ER^v`xE)8~LDKVOS75ifZAM6sU zg4;})*JlYh&*v|CuIdx%9JB zZN@Hq`DN&drf-|XIvbg`h$()w1ErB|LP%KDWOUdCtwwwu@8adw+X%E2V{LRxViA=I z?vHlJK20Xy&i_H5?a&rlZWzAwE8xG7BN!UY1U`GeCauQ6#Kgd&YIK<{ce|ImtQUcg zZniLQxz>t{KI&&1>zTz@&t}tnlBQAitaZjWM8Pg5fap14MwMmxIV?pH)SIp^*Ie2~ zoKdD}_Yc!_%I*`AB}Kkpa8YxZ@zOX=IU=f?dC9VdNR^G1&hE*#H=D;cZNbG_#Wg4vahu$Ze?{F=G8vcRSz7 zw;Ot#eInnG#NG8cYBPuT_=bEnN{oLqjt*F`x-^|~w9v8ROJ>(w3&tf>cHJ zP41az+yy60FGe!W_{YbNr&s3KG{h-~8RK+JH7y#&=gD&;8TeBB4e90mQjyaJ9Sb%% z|F$n~KI*b9HlLplge_|Q2%IrGR?Wz#lFDr}d%qwyQ^lau zmWJ||&U-TsTS*i?`J|gGpTW~k6&*VGBd(h{NSC(}7h?1@2~}2bDD)r3ZRN1v0^7$i z-reN3Y7^RL6wM!01yH684h>4h9?n{$Rc69b;2;;FH5|ea8OqY06XD3#N&%oR?l>KN zrcOQP0^q7#-A1qcWq|?Zq)Gli@|U zuRpI0P=9`jF)dlnS1%hVICU-(B@U>>T`lqcUbgoh-GK_SMu++%KZl1XHl)NAfuAT9 zL^k=s zkY$xgEwmp`&04;#6FboC!6R<+d^m?Y(BWnJ!^x>n5@lBn{aeonv5=9 ziR*u=tH+AXLt5q5Oi_MQjSW3twp73=^qOU(%*h0x2y*2_UR0?5py{nWgFQfQV3qQ> zo_R>d`P_DYc(yaye$C=%+X%HEb&);z0zuV=<#O-oZa2LBCbNqY%Osrq2{@a6EhZz@ z_=!kheZG${Y7}%)fA!x&rj{rH!-SsvQ%S1Wu61ZAawfdjDLpTW``BS}OZ|RSKA1`V zP?s9+JYGRG{&LB6mU(-&!MaFM&qmiR9^k`TrC!BgXsSiZrb33ayH;^rnfAFiiP3Ct&BN2_HX5x=y7vT~9DrjJ^%UTvJ4nxM*OW7NAZ5#w{itNB z&jAQ|lX6Zv1#89Fv=%&BN~Qb!^3u-wK{N>se}5^7idy*oZ z-Z*ZcxBqerPOZ~PAbb)XDKbOI8sS>pb5>gKO(Rp$ZkO_=Ua!GWY|bGv$t}gkxFI3E z?}%yXS26uYrp*xEWKzXr|T(*C)CgWVv1tFRGkpFqTVBQHwy-AbK>h(G! z7Jod7@P^)0_MO}L(3k-kuhr;6c@<6S>fqkp;fdBL5<_cv_ALFX5#Shc`1S2QN9O{b zbjV~1GoIW-$nJCCb(vw>5Xl^F#+vZR4HByePA#QJXR63QqXNAAwXt0BB40z}EGDR3 zMJ}F6l@>j*>BPjgFf#dP2t)K|XrA75%@XDM`FnJ7#~0fnV*L@9=EU>2Wf>kH$`z*V zJm~^#*=O%<8$X_uY}!3?lQgps4b+6}klEVoDw{}RgMG_%M*OMQu?!g^EiENZ=Fl?f zI`iO%&`&ddzL5>2%S^Pz*(J5gS9!gyp8j*QzGBg}(XsKo0P!Ksh6(%G5^#j*#MD{yt(a1{hfSv_MP5=5%}4 zfe_x(i3xIBu7w(yB>w<0?5x%cdcN?Y2Z|5p`j&;a_&pzH(V|aBB@A>N8XcvQCObFRxb}Hj|jo!HI;*JgYz7c%DtA=BmvIin}McMfr zxWy=8*nK<#Q;20r<0Hl{gjs=D*Z_wfjcIV1^=OGJIq~e0Ee;+dUvo84w6A($jYBFE z1}%A0O=YVlI zaw>W+yiCeVO=mYsjV!$JAYJuPBNm8Q_~&-UVD(NP9`1A=xL+}$7pc^`^O}>zhli44 zmaJ!lmN}}9G}Y*GYK3gWZ#%y$EG#R>gpYHKWuhGj3}LiuDdSAbe& zTz{b&x~oLRWik7ydS}SKbddy>?K;Vqaz(R?zdh3_^}SVl%GOe`dLuHL*`XX1e;h~T5MVat=X-m@DE>3c#ZS+BT@gaXdYjiOwn6%gAb24i_vg}Zk2v_^|9oig|kJtF<($g)8@;rgJer}aXQXP;B2*n||{hNC_+ zw!HbtJqvh6<1*^3d=v2bwYj@|4sacFNGXfkY^q#yE7k5!0h2MyXRErW*M&zc?2P2% zkAIz2h#aFvk7p?Av1`xlirqdTAH~)y#m`a>DW;gaHZK3UitxhF=NE&$o>dzU7V||e zx)=$@n=YBPh`Yz;E{~T@M5ph4*9^?%Pt21H4umH#wj7Ys(`aP0)!)$5Z*1CNCc8A2 z*AsliAEz?$4v5&i%|I{C8rQtBl?)_(^%T3Ubye(+h+g{HfT2h_iHSdylGmW%Mr`p+ zmMb{A_jMgdugbQq^ikgwXgwY0G1~OT>JtxjVo||h5?{B`=;cqnP_0S4g-8H>!A3fu zLscN_anr2(mzlV|hU5lWFmgJ2cOJ!1K1qh{7uRC;zsf`ywcsXUpFXx2}({P?)?q2|yhhazII zm{jE3Ht*CjtjyI}V>!nSa}4`WsGZla{O!EYC56jgvu)*0v@>wqS05(-t+pJaM9{!| zzg*K<<05D2i*dX($611V(bbbV9b8Z?>vUH_(BFB+P+KQHGj^g=5`X*~;qffnD}suE zkLkz9!cL1b!{eLWXc|hHRaSZ|lOlHyz0`U%DusVn8WvG&d#8kIV?7vv-^(ON^WuM{-w!!s z%NO)b??hu2>(2C-74=>u`D6A--0sUY(@DkmUoj`vKO%W%idY|VMN#rwy2a;wW=B*$ zq*J}k{e9FR@e2%-j#%g}aWlo{`f5qxaoElDivX5cf5X2K|8z0Wf4fSy=m@Om-vCTvtBc)bd#EuqHj>iIjAQAYU@O|!>*ZkJo^&3~>; zI)}HbVZa^f{&q<0dGm6b1h0u}kZ(!dvYM>b{MF|rAtFXOuk1O@(ws4Ln*$#vI28qj z){1qv;7p-2SjIMC*R}r)!0jAk* zsPozEMaQ{!DZvVfm2(WO0pj{(J~G=P_oT=<19EyiX6pOL@p3N~3R@00-A8>OyMB-U z^R)LYY-qhRrn1A_nIb1bofos4JhhLg59IP3NJElj&&4fTJN@+5GzANW%$MRZVWN93 zAIhTJZt(6*PG?Tv60a~UW8`?$yowpArLi{=l5@<=y^m1JCMw)$cby>($b-U8DGLi* z;cRS@Jv-Y=55GXB8S=Bs^LUaizq`qq4E?O`eRqH^?4YQUf;UH|3dniou&1>+7~PFO zEsm}z&zOlvZO|1{T#M;^JSWq6mE4$cXV27lPnjvp+MeUjSk5-J3Lj%1)hkhK-K~3F z(V{IcUPx%>i0$QDn9^R)K7Z#uM&A=8Ev1%8QnTIZeLl{|>=y}flJXMK#)gO8TaIV< zFmg`<_m+vJK?ham|bVe0&nmV-_p zVum0wK1!(UldX}lwP^F=T9kHdZ}gx+rN#3tu}Hancf+p*HY194&sh8RsV;$~fLwWF zgDwFgqc2;ZFh0M`kQ+R0%O5a2(c7~Dw>@r%yq)s>Op=&p@8DPwp|307bFrgWz;iyS z>@bNVgaJv^ByNo?gC>1&hBYXj)iyUetS`;DXk3ZgFt{1J_*c72brv;L4Su0 z&O^_|xr|b{DO~*Hc!Bqd%Jp{9{^=% zvZI8R>G0u69Amj=oX809UH(E8#DfM5J9Im4mD_tXy22SU)7jn=l4B>? zmbe!+aSHOJrJeXK-M$lq@l2}%pb|m~<0h=XM-dpBH%O{VFOAW~bqN-0JUcy&DBPRKCCD z@9D(%U~QV^lAfzvb|sYws=yeJB4#(=A+}ib~<%c722whO`F+p>#(L7J2zUSr2y)AX2Q>fae z9gStgQY3SxQC;rmeT4?F&8a0@nGB)DyI~uzgzB20L*PyMH>{fViq<3;Mpg*CEP3^N z4(>a>c!b-T1b#bLFUv^k1_eko;cfF+Ala@HQgGrc`h+fod-Lqsb<*)UJDpLlbTqbO zzRslk>lE%~LtMZzN>$z#~C`E7LTD#oqtZtIxez_@Ij*vVcf(pam`H(30U?m|D4D@ciM z9ygfbTG0px?P2ErE3HAC@Ch~(9_aGELxMFar(O+JkZpp4#9J$piL3q#*C*O4;O56#ur|W|n z*6_RI2(xX*b6qY(!w@!ZM^JctESIOQgeBIyioYBt^7HUzU2O#UuP4io9}y%Z$FSal z@p7o{=}+W;Wj$5!hY4gaSe{t5&t>KQ{1y#2b4H|rnH?0p?7ma6%fHn2k1-~&3l$fX2iBOYk%eT`p&a)1cvTJ^andpsuy5u9>^zA04 zt0;yCWxKU@g2;&bx-@DH<+U3RG~;~7Py6-P7|d5QqL#9T0Rq04uZ6`I0vnif${dG0K@zSDPA?AWoZS2DDKYdHGD&77)S_q zE}kB0@D!%=0&n(o0EqOy&H{%aCal<+D+C`8?eX3IPp0c-8z2q0*nQG5=R%~2FpXYn zzA*KJ0?D8URsY9Ev0L%KD*})PG)xBuGT^{h-1fhs@SunAJ@1pN`^tJRuzqUx!eYid zA9q9HSPI6#7r@vUa2EF|U#@%U4b{hHsfF{8Um%&dg?@Q1 zDYV7l%c8KZQ~!@BbRkHHu6%kXmKP9oilE%e<6QEC#}{NHP#AT7(4tqe3CSlFufXS5 zAA9mp=n{Av^Jw)C|4x_Z1fd`!r{U<}il~gWpz_|qIP!(X(IKD@QMQ?E-UZdLZ`j4* z6fN0A=~H?ra!X3MDXe&$)RLmj+kYhsKGjrMc*jCt?8vjxtP3u%ZK`7FhH_%jx(!>3 z8?o>1ZaqJ1+ZZ22`1N7;cpR{*Z-Cwuo~7Hl%z;k;Yy2`+FFTPBwB2!orK!qw9PKM* ze!bP`o`@zzXU69fgK>hvTEPc4= zQY1$`is1)Bo(eIu@>2#&uZO%l-dJHq(o&27b&dh%XlSLou9Dyk&bKDQVHy%wg7 zh6bOW*!A-IhnhSa%D#-03VMj_F&I?K4I^RgPB)%*M0d7!%Z>4O6#aB`G{ z$I0GK09{2%uYk;o6YNL&tFfQg5flYst~74wPe%l_`}M=hH`rv8SDJSf*;w}k%nyi9 z8nokM>79Ei1*hG9o@HW)85br7syZsmfkXt#YsZ%Cfx&Zoi*?=s;)DqCc|=U4E=$p~ z?&HXU1Koa~k^wlYMsx5O}|_7b-gsCRs# z6gFhd)rsPZy-h&WCgs%mb#AQViLvQva)nO?qS_I_F6Z{RR&TC=2ez+&ks`ITOO#(t zH%n022B3BIBZ`W$Nysl+`HWtWQ>+k47jvAcJ_dV$h042 z*SxibQMY50e{&c%GLNdW8yG1>Q6l3pVhLnvG_Le#Ft}!<)YL`8?XHoUXS-F8 z+`q#x9T@kGV@)*`nZ+xS5~8u{l2=UdQ8wHQj^E8)8+lT7Qo`7mW_98fgKB#a67-Bi z2tA-vIPPkgBf7%AH9h+s7AnTwQtqndm|O;ZX`-XTTCTSpsmMXzQl<;L<_P8TU&W3l z_+P^*xaf3YkadV$oX-l~bGjKKvOR*uGNDQkFv?F`83TFl6>Q74+!AgkN$_$ttnWYl zwP%xns)-y2g2Y!m$t}%zL^4syfI$0TlPg@X?3Y9)2FN8tT>3Zex(tDy0tE+^4eKv&%-@SE>$@?Kn2k0%@;XEksoAUv`U-QSG{1P;e5E5352?$IvVR%gD?ruW{HyD}`$Q4U zT_}jL)8^&Yl96aB2a|R@PNHIdpN8kf&`*b0+ngCd&Xlg@;FJ04Lmj6)c#DvA**B_z z%XI?HRjz{n;`}SLo$Tduuj|J7wh`cVJuyIw&%X&D(S`D$=?~@?y*ECIRZtG{tpuiX z&;*6O=3gSi)B#?tA#B&gUjsG;J;4y&YGTV)&F-vX5}ELrZWHHiZK(^MERubR+fv-P z@W}qx>b*xHNgh1In4@%+#fSsV5IK)KZlf_J6Y(+j1Zl7)ya+r;2NYDy5iOC#Vx-x@ z@)2h6=6Q(Xw1{>DXzG|D#MgU}Ol@S+16K+tk9@$Lq`}bjc0|}u#|inYV3rm8gSV3a z804*ft;oY7Vvs$?#P|@pI|ifY>jX6jpbBxIedWQ|eUc9X0ZY#|cL4j<#nOB-v=xqBN6qd$n z4^;rS3*PSP+u*>kdVwB=fm_?Vof&Oe#${XlL0c%EKi75Ue$#6;W58_PB{Pr{72pCE zKMDlyocZ>`CN38!>2@fRI^Zi7)A36_^8PQfnLtc|$% z7j5upKP-R0lH2Z;YjlK3E2g8bkj!4Ja7%7OTY*kSg;YI64<7(uVoN&nn#1@ycL^$HgiT zLBVDL1vyUtE0ei)R5%B?V2c~(bo4HL-I;=up8 z(HDl)e9GO1Gqqlah1l}1B!CEg?vn&@p73dArF&CQ1D13>`1>)| zcb8!yVb4we8ebN~3|Q~rj_03N1Xc4oie>R2SsZvpg8YE*@G#0_L>G%u=qHHiXFeAl zmB1EoD9l#^t!M>ceDX&v1ZKvP3EQ)j0_y@!_2x9eN$EFl9GU-IN7&iqd`*;DZBjsMKH& zR9FsZMG^QUJCgd^akBsI9Qk$lVs6aNxnTgE?!7{4VJG;EITQ5@?Db+!*gYP7qk!Kn z?Yv2wI=u3zlHy5lxp^CFx;W3p!#bF*mz+S>@f#Ok2Ok}N{7}@2cbtq0#Jup8UCz)= z+cw+{IMTEo|Ar0)jb8>SKuz&w#cyMP$98+|3&(FVNp$Ku*%zkY5EjhXr*gj?f=8xB zO;`oRL6vX!G0VF>?k(!c#2kMBOzTLDf$BTP;B`Q2ZkDGJE5nk_a9?>^LU0sL)=+wo zk99vlJ5*DZiNIeVY97FGO~Yf+mCG}KR?$3b#pfAA1!*5)5oFL1F?wLWjNQkr#Y^L5 zSwO~(Tg&*GB`}cO;bn}?w0O-Pw}3AmgFn*l%bbd+n4S2%(DPF9gnk3NwL0P(xC z&712~&<=JkFHHBy?ml6A6>+5}v#X3(oJBCav?P$&@d}>?{n9v*<6lnwd%9K7Z7Xow z&~mle5GhXa&Y``3MCyYxyITw8KOtcn_dH`^2xlvNJ|2-Q7GYrzd-w``%OEGu?k4ud zU{+YbXJW=bCW`^IU412<=BT|qSVY6++R)Q0I)rbgi~Q2OSP>Xz*yxOn{AAz@m2i_ufu}4x zddfVDAmFw`Tr-)RhU33d@h^ns=qg@ z6M9!n$>3MMR&FYRaCP!(^V92o6QS$8=tlAXu7~VKz@`ne=fl^GcX? z%V5TAWu67C#ClGcw#{&@7k$lE2)8n4D7^PyIcVZD_?G<_>DLH-%p?@Qt&eRE!20=lRp({BtBuYK5Q>-W-Lmu8J9iD=N6~S424>#xJq)oW3*R0{ ztWR4Sp7UsoS86Nua6mj7O16SU|XYs=vK| z(BsS~aT{8HKM7Fr$$(`q*{NC~3S=5Nfa+P&89P1nagi6rOWtLd{M;1-5#-Q^nSnb3 zrTyp!7xQaxt!@@P8^M_Ta#)D10(NF{=+WxYJYG;bc9}8j#|?oV3b|I0x@^&= z9;b`~eItgYFY6aN8bVKt@u3eM3qPW|Ali?I&8I?XiPDjGkZbT7=gMVcAi%8U|H#-p z7LN}^D-i>@_Bm`QAz3%XQL5U3PwD_1^rTnX`FV+Ah2Me+84G<&WxVw-j@Lj;2mY&{ z940${ikcY-DHz~@Ymmuq>fUi|WYR7r)*1-B8v|ZYxKlnZzS;8gbII{Tj}ZNx&)nF~ z^jyguE5Q3W2(TkOLDU_+qDXAIX><@9Bzt%l~!m!)})=H`j0OzRu!v0KpvbTYd=8vJLZ+0jK$% zgjSQH$^(~>o~1Wnu(g}dtDW=%cGr9t|H?pnZ5S1X`XR7(jUPf8r$Un&KM-Knj2Hhg%WEwXMxH~qx@kw(|vJ4t~iWwdaakwaa1HsS2Fnuj~xYN-n}76Vg{NCGf5 z*)gW2?zvIufQ|{%dJJQxq{Zfq-@??m?aiZwgJH7u&%{mbQ(oS?oH%IY=>ti1dp`8CqpCcS^x z_!Oz9zmdpZ%X?SKESPvRxpbCoCOHjx%>f-*c$-aa-WqwEa2KVjCH#;Z1$JB)2O+B z-C1y`bil5ta3&@?GEA)RWuwra6|H4H2CE$EScwkj4B~;+j;JJF$-Ndq$}}#j51|3H z@cMOahDqGDNrkthhi=rLaMJ$kA>L&NlGlz-gdYx`gr3qqh57zsU?XlJsl9&gH5H@{RT*Wy9?6VvA=%XDyie`HknRb5eet^Q zU+0zvt_62Lul_kewV+MRT+A6SiFJ!nhc54%N)O#FUCKvaG%R-A8?bjP8G@n*rL#5E z8nS5TA;$NQPn3_9GBzu#@tOc2883nBnFc{!LU-_@%Td}AwFvM}iOQY^x#>&fnvAvf zN{_=ZWFRf&f4$p&SkihuQdPYLq?p0W#ejTn@2;c{;Mc}( z?{>~{saW_BeZuZqjI_&^*7;+*J{Mmf%mnhZ4ca-DAXU)5_8AewLC->s*m$EG0U-L* z9nv?E!>xin68K-H{VTm%0z%g*t)p zz90sOhbP$*6ag7gK(>PsG6u4eotB~=!&4fOeqSj?BX$gwAD$14wTJJ5o<|?a>X7Cf zcXk2oB*OC4C+CQo+6W;EaATU0=EpVQvjyD&fF#6dujgU{N6dL?pYm$?5Z20hZYO-} z=?nYy@UCi_xK{F|ok+?lVUTTdOIg-Z@0hVL&8Gh4i;+tSd{{V03SfvrsB4x;DnL)z z95gQ9x=~)#7f^=u|2jKD7|n;8$E_PLhc}Nv=qN-Q2m)xc2C~zikLy@>?;^ACns6G{ zYC}o6sCZT1$|(mc=>M`)ehZS&%?~}_`Y#1?3vqdJt5fiUu&ghA$4kV=NYMIeVb)dP zU|@L%yTj9e`p`1261XeMh2D0U5Ndjp@04qNkI!h<95mb_&_u_1c@vUGvBFdx><;S)$y@5M4#(ql zUjIV3D#QYRt~@;Q=rI$(gF<#dv}h|Lq0pv*pLbq#$1;$4I?V@K*JlkWmeC%7_Ud*o z9*y$-cJJVsPg<{4H$&gF--U-#ug^O|H{E7_x%OV4QL!>`wP$2WJ2zjd;X_oyVUQ3b znR1%-;~Sc5)u9U^D-|9Ejm@H3pWd7SA7z;}m*T-yw7O5jGO0pV@g z4eCla*f5bu1SdI%X1p#&~~J3Bt1jBIZz3K*h-M`a!idiQF9Ql|34mkQQQHk za`o!dGSCz-b`L?wI-&czc*mXDZ{uZ+ju@Aojo87LYn8;TY$^X&}y9rp*Lx4 zy0Q{+1A?%a4cFVqZtcht6sjNo`+TS1U)8n*-cum$+ZTkSkV1n!MJ_mYdA(-zTLv0S z+CES|Bqm4k%>^^!mFw2b4>Ar_~rG6!N3J&Y-3sIkF8TcaYIO*YP8G0q^ z&m%v>DXSuJo%ay%n!{rl$`l?9+A^Q*6!(lT3gI|vg?E^#GC{!y^Omvk;LEGf86Cq; z(_2*F?wlN`R&U*M(y_f?;UEkHP!BOrk^KM)`KHshl8<<9Ci*~9a61yXuu{(nXJC^2 z(%p_C-8_Ov;gf@2h{!~rfiDjKk7srTCy}4w&a8)3nR7Lk{4hJu0RI2%?RjuX0$lS5 zA#c7%!Q%eqc+h@lzhiJ4m<;qLG*j8=NYC~TJm*-H-P>yD|F*v=1e%#6LZM!P~pfxu1A(Z z7UA-3EOZf_UU*95<~SXCT8b;N;34OrlzFhkrn`QE3E155*|Clmk7-0%Rz~adoscJb z%4X9t0C7UxuQ#0r2V4L%32J5+l`5W#pibB}RvHyKQ!3PK8QZ;4Hs2^kl6Vn@C`5uO*G2G*p`uKkdASMKRG~RpN1^n|7qw&rulBMV) zbf3tF(XHpoVPC(6maL36`%U-#f~X!IwV#AkJ(^j`M= zsK6(xQCk%&iA;C+Fzre~3^*yi;Y>`Nh?jOh{xRhQ^Rey4AOQhFfnB_~lHfQ$IUqjI z06?hof3f%G@ld{R-#8N`3MEt$EmDMvLe}kN0t$+vVJguJzS~nj(l^ z5s@Iq#eQOUdQDpM$9=r&$>~s9x&>>Jc1M|)5s#Pc(TASig0y$bs3J0k1~Yj!MF}CU zWb|XcuLChuFm_$)`s4)*SXB&4UCYu#8=yV@xn_E;lxiTK0~hUkves^t=k_|(E5Kxa zj^t0u&HjM%E%hJ>8dQliXr5bi8m*c^#%9#+YCJ&@ZKO@dxXj!D{?}|GwBbg$uvne= zP!lSq>9beDtRvr{3BtD!t!K;Cm4nExxMyqab~gk6V94a1MXnmi?RGhCHGJEoIrpF- z8**5!;5GpC1pyk2J}Nza{o>0VloHCcgj&)5J@!Rs9&Y>vYV_LQX>s}xtQh-rx?+n+V%|7=VZmSsjja+$8Jq-(*@?>4rl# z!avrW{9Rd2lMI@e=+H{JbDX@Wvb|1;ba-guP@B!9ren!&CoCB9WI;Z4dQ%2i zh}MQUW#ym)^&fp;unQ2c{)9!0_muVcyGuh-hCt!bJlmm_ri648T(Ku?hh)f(T>lBg z9S~_K!1k{M-Het+d(;+6E zng~U|Xf`jq1=BKgyl~3%f;}U-IDRKU&6Gk9){hHlW!C|SuLtGu4~+@x`Tg(yAqeJ1~SMhZF7VeP2estVx*atD@!8dR9t>n9Q8(L5K+CDP&R|9hZ zu$uxm648KGT9%_mz^`G|38E1)Y50cl2EZsi)T9bOz-2_*7XqZ4v$a}vOjHoqqQj`y zoB|~k8AHzZraQo$c~%74C1@zxlhe9fr>(=>JXPZ7yZ=p5*JC!Vv6L&@X-#Z(7QvY- z-<}F$NP|cY$%QN52w;#Fex#_ZMZXW}S^Al7Tz`%Ea=dE7WA!bl_=De}rOpYgM!Vrl z64=+t0jnWaQA?aDhNQFq#(D}My%vZ-4zQUq8=wHFP+&mXFOG~&H|yq+_@J3U)Szk$ zx*GjX8q#B}y8Df)>N#CtzP=34G*4a>6oY)A-Ebtty5=K9U^f7!y!rG@XD%+;nvN^o zs2fWp*l!u_2!U!Y3Tq)PD^auu2Up$F!ij6iCu?OB(xzi{+`JsVy| zx8%htus0{Zl!Mv_l40N&inPC|565|4* z{N>O^O4Uo*0H&=XrC;Xwb&zKJY<*!B>Q3;vDAH|c#mMcdl0h`N?$Z855H%JQYNZphIDM4FbQG1% znCpZUfa1FtU@^NWNJ5=x_qhP0}{cll8KB5A(V@$(GpZzQ&#s*B!WZJ@1jH<5eV1DgLU;t)~T1n zA&js(jP&td4!`%5e}-&BOOi9eW3w*!a7alS&ocaYVV*yJk?piiEY8Z4p4|+Jn`Z_K z1s38j$iXzLbR;3>hd@Pl>WEQjHZD1@?N%tjhnkQjJZy4VKrUo?1XqDc*(g`IokfaZ z4`goBtk_%7iX*_W#hg&CmflA5#;rzCy)z}P1YVbMR~r(6|LQ`jC-=6#{XVCGAV*Cx z@*D|TIjOjQsG9tKfTS~x&G?$68ZfT{R#XqJq&Rs|SS3iEDHug2M<8;E6miXgS`bcu zpn0+2W(f*u3z7{u42CWghmY6*OOfV*t%;c!60|FVlU=km_(OiNClPom{c*6l#WXvh zIOBom8Gs>ZQJ0IBYqIihg~}x%iYtEZ>HYXpI4~!ha;y!7!!t~qfrDrGr2Yr1f`|8J zrb9oGd2(%kOl)bxBsx_G8$sY!w=3Z?##Pg=$B&bN5%gG92Z@mqp zxlV{*le~4!RZ>E@$uD0KzH=p^=X+V9>oQTwP$=eiWS7^O=6Kc006L@@Q5(HuFV7qi z$W|`jrKIe-Asw*Cv~K6R@)Jo4kUWATZ&#pXTnnyt6FoKB+rC{xD0cr$Wjk^}A^Tp}&Bz>Kk;~Rt&>Nc%9b`Z4ny@E#L_G02fb5UC@c+}mya8P~K z7DWTEQxsaKW7&6x5UC-GFmhR#vh07DAOT&~O<*~Q_HCOaoT0#z1m&1a$7z$)!6IwyzJt#Yg%FD`RX$(#X(b`r&+SR^;%y{U)HKWA?EVO3 zjobf?*LoPq$%tHBlx<~ooQm<=Gl)W|hk)K^&9jKWBk4{CGJv>xHyR?a%{jV1`4<4JK?d91ogHcCpF>(6em)MI8u#Z>tv~|c zb%L>8z8=Ea9&Cs+H;NaZ1XuIeGLUp@?pOvmv6L9knkX3bjeaI4{%L(68qIt7FV2`3 zat9c-+>wYa^%F6*l3&b-^SjuRs$I}yH(e@~FyJfNsV7K4C2s~0{P`%S!qGA){jmMI z-~!&(Qv7U)!8NbLDzbVN{zsYsuo2M?sN4c=dXQ+{wJ5@8w!1D4yOG5GAcEnRcec@k zfu$kpOLudv+Yp*LxR?yf&2&bXktU5)9@}+icnlKqN`~F>XL+Ig0&u_{gNka&(VZ9^aUY6 zTm45`jhn{-NSxCOOdu`rGgAC#ViGvZ83!67)7xi2w!q&&`;@xmoWBb}!$n{eAMg=U z36Lm!IU}$L2L#&h@u+Gm@oX{UnIfI<~p52YAVnR z^8#O;KjDi4vcdyx>*|xp5U7@5i$aHQ&65v)QX?^x@)ugZIb-lULl(aSNDC1KJgfHj zK2~YY5m=ukckctT^&JFVmeNbt+UefFBmxx&2$x9wb<-cFK(UH*xP!MJZV7M{c`kAc z1z@BtbSN#w%Z7>nLg+C-#AT@3xm2eZ8Y*eoeO?TJ)4R}A)s$y%A!Wm>;sS&Z5-tPC zg#|=9^o>8QoQ@%tVLm_uRq#FFo--g`@3(uCjg*&tPr&+)2sUmJl7!Zy~Ly2iMsgS5t!g+Y#+gisR`775pVL&V!iW8YIwFNW9Bi^13 z)b>P}aX16;;dRi%PlCrTBAnhiAWdNVnavtbZt=5%5VMGQ*6(MtZ zN@}7>yh21B8hn4mF5T2k@2+fK2)hnIzSzd!WgO^hcC1R>uFx%>3iP~IB*#I9VO@DH zD!lO*G7}QmUq~br9eEVW={{|LHqIht1*I$S_^9aMl8vCgQk+Z|gxAp$#$!;9-n#+p zph`H9=pprb#3c75->$3F0~o%pr_9@)>_@pX9fp3s>4Ew(lZM!?1xbUdovcfvP;}IcZ3N6=GNez=&zv=az)RLHP1UpHgnv__N1H zYGj3Z%;^ss77?Phk@+4NWjA@w_VsCLmyf`I`M)*a=p}82n#MIl!xDF>jnZ#f5N~fP z0?;SChHvH5QgYBjj`0QX$Pq`ISVD;x;!u!Z*P+ucXE_brA+5@7Cm{WzPChkb zP00gTG*P0@bgUFjn-1mBjazsBcKr^V1_Xe(dF4YfB7_g<_>ZX?Dsr)C+@hY+wnXx! z(JlC1;brjG687t9T5kpP>%np6S>>-o(-iK%A;RLuhKTL&WOIka5Yh^sTI~-vOD-3w zC0+-X8-(e@!Gs^%sI2zaL32eO(!|dN=BvkU5tnbHQ9}it^3T52Om5nHzZmLUIU(A< z_GJghpcDNULh^+vY9FAEdOUh|?A;KZKc8k3k^=K9r{6ZD4o-%^u+29tRJ=fWX^zP^aWo~=K#b**sdK~6ZIvs+t(J2pmla)paPnVxE zyD&V5|71Tx$hxb%Kc$i2LE$6N&cLUU{wD^ z{imd$7Iol&+AcISdX1`dU>-{cQbFdh!aLSO%xu71Kimyjm0Ec95YT(UglB+;wnL6H zf;g}}O43mTD4*-|;L*Um+dDCx&uNIFC042xw8)+AGBQQGa0QFwcr^*VGa=eS6r(z# zqY^MsqWJvx3sh&3>R_qNoy+b>b#Q6N38eJAyilM&Ky@&p+#oiNOCiVV4h*i9G7Pm< zyFCUz!(Ok*Ze9R7PBIjB-mRdC-BDl{Vd|NVRCSZkM8Xk4!g&T2G5oZ|JD90*x@!TK zB0t5KQK%W#f>MJcS6%2(r{r1O49-f@iVmt z)bBnKtB-u32)`WHa&ZpR>G=%kr_#}&E8?90i9qGouw5C9{w9RV~nl6CoE;_~LaN#vonDc~8Uhiv7GqAZMd6yc`8N?LUA6SkDrWK`JDMv1(>=S?~##)rvV`0Vj~vgXt8t4||Q2p^>@1S)Ha3 znC8?!-I2@Ng{GA~bq;u0x{$Rl-rD_#3bhF;5R=kti4I`qt0}guC8ftwOFKfm5QB{7 zz;0wVtsa7dnZe|fBgvn~lx2}Q;O3qP>E`z0?5KSNg8gDlw#e)nP0H#p0l3m;_D2zt z-X59lJ+z5#2cJg6>!UYr0i>OE;!Z`e9~GGQgPhiMNJ;@t3RCtUTe3R!-K}dx%b?J5gHWN*1&8JPXsJ`yw6 zOGnGMo?yv_Zp8M<6zZKCPtIH=s}eB&*S&{h?rwI+oq*Ds?l6q>c!|ALZ9+qkFZt() zwlwD~6;hahPGT`kBMf9=XI-*r&E%Us%{(E7%abWVgO^_=0DCxpCUA84?mIUW9c+FA zPd$VTej(C(hI>9D?h8Es81}^-j0{7A&G%nB5MIp7rv`!RF-`<@4>5cZI`M>)cE=GV zq<1d|lFR+)=9W3ZsRZBz({SEICMU5@B^()QF5+E^;gahN)c3Z;UVtP#9pdsj06@Ne zZhy{Ob~N1MCX^U6fh_hDcn!B)IRvT@s^QG=eQqRlWe33-iXGoewH*c(W3KBaliiab zEe@W$C$2n$QRI;{Xe}uP0NlbS-w|8r@)FwqiNGd)%7vl{%;~(5hcBr0S|*60!QJYh z@wR!8(A*vP5j7%)1LG|_v^B@^8VU?)7I2z^c=U!~)->Y(LO^x;t9(f5<_(x&R~x@G zb%n01iTkOfp`Au(gnQyTLS$akxsiA-l67NNQ{r4M;fC? z1p=oqNa^(~I$rN!|279`4jk$Ww#Wp2M0O_{n&irJj@y^3NS6s9R&j;+dzM!Qo+|U8 z?-V>0$RU8EC`$irhBgw^Ttq~hjpm>5ZFlo(9LMWrj_DBgEt0_dJNw>guKwGjYGSA)?qCqKkItO_g;yKBZEf63% zBXrBWBN69lc0yqCSLpxp)3Ks&IjTpo<%S3Es=2nMeL0nKC+7B#;vVP7L~(&K4*SH$ zM7s!Wjih&~McJiiB<9V!tb$M4Kb6H4)XfkkG#?lIc6d5TwYS^qMiBP?)bsflvg44W zL%9!pToHj28(D-8$#L}1J~-ng3ONi2d1?2pHIZAyW5Qo!<4xOQU`)JR$bEi%-oHnub%k60&~&IN548nzE=rvZeNFm5QjN-qFe6 zNVeN!27SW%jbOcU>xzIaJ#qm;ZRi|DP~YCTo33fs?CRJMzrrSJ^&Sa$pe}_;^Xl!+ z`?RzNX0Mk5cz6fttJ)=K@cW&WN&8!<;q?W7-|zOHab0%>Ph!iw`tUQcVIP;GpUE%i z{7&&w*TkDSOzbtZ=4OaQN&jfDc8#nGdjli?uQyio4!x@AO*Dy`90ritr|sSVtLfd2 zcLGCc9=t=4Db-kAy04RZ?RApyn2Rr8=A*(m$ob6eiBP%i9f`D>gz0?Wnk0g-W*9b4ND9!-LB@e|1&z?xpy)J#BHm++ICp5K*8KY zxXR*dy%L~(v!Z}I8+mh}`h?3KMPyUdo;e)--TvXXq<)?(&N*w|tlv2TD4P3-^`QH= zj!}xP_A%jv&}+N1?%j6Igj<=oJb}B5(W)Qwxq5YavYyc(1>21LsE3Vl4j#_25rb^Fv&&RC8G(I;j7vvv0KSl+piGM<2? zX0A!mC$oRL@mgQ<(Bp-BVb;ZkoV_r=1mXB4+{)kU{u#-FIs(PW;~D{Q8AmTWqIbRZ z$Qt`$L$zeJ=PXdBhjfVxZx+kn2Q7+RX$WOdX@-y#vLbm2c1+|`#QFs>HN=P z`FgHF*g2Xb{hN+U&S;CPy+1K4d$L{ znu7?ndi-k}d583Ua2$qbek@kjCF#o5mge0zPM3z6B7DN<+$#C=j&7erCPTkW9!MOg zu54;;(v|zjWlb;*?m1Q_E+C4Y>6u?$P6*wjMcVPDrLR0+NXseU7Y=)P--o}WRyBW- zbrc6TP-yz&_Wd_F2(=Gx+x%qpxhF!GMgQfhHBP|Kv@yOHMdVG%{{d|(4NrOj?a(9Q zN73!IkXCM2;@61qWbqoyzm4DKJv+I5bnNly!^B$SDX~Co$oxFMeLM_%y{wY7s(k*e zzpTpRPDl4}DY8orh^t8JlcV{Ja5fTlq>#FvmU9};S@7a%$2J*%Dg+a6(A6Hd_yfAo za!R--VQ~OMkP5UIS4S!|@bVz%hLJ^^WUu5CtuXyuPPNYO!dUx+ohG-9+8-|(XPIuE z-hQ&^qxY*?heV~PF52c&o5uHQ=VKD?&kA%jU+p96df8(U8G3{a+}|_#?eM?M$Ur2i ziv>IdvA>;dnE272qw_|9Jx3Y(ml@6Z(!D1(pswtsjdhC*Hww*2%4^U#-C&ZDX`Zy0 zWSd^o(ruPuPStjE+wBAe8f809#?7B7_W9;Fi@x%I>1#dF*6&a=*O!~$!a8D&ArdEx zF!|H-y`sO=vQPBMoT?ZMe_VZ9#r0JyEpc*kQolpEiY?uw@ya+YB@#q>;(^4R+X58T z@?5z5rJ@)OoP|a!_57S#2bs2~Qxo~eu%D|lx@)S0#|6hyQ3CzAbaS14xu|^2eoyP0 zxnia0`gcP}x8@#@R1DLD6=%)FvpnmHlwXFQcE9|H7+t12zSAD=GP+YhPYLt$Z*C$q zNdXTx<){%9?RN{Chp;aoHz=HBLnsj^D$psfVu0%q)AB9?ZTRnMAfS1 z992ejM^W9Fz4D{HWX5~#U);bm3xT(*|Q zH)m}>>OtiFcRXm$Q9d%-G~cx+aKw8In|^o^VR3jOVbdedmD!q)o~`EAu%uWy&h1_3 zFWlDp5*t2YVoXyQ9c1@M3Mv|b7tI!`U241* zEdx&rsI~{q=VCkucmq?6716`}z0RR_6}YxIe|y~0J^E|*h6`Fj$+c6i%*4ezB~!u~ zH@|8|XBi@wQHEaxv$gx_bvNnd`A0Qd$*{Xvq;5cWx>Sqx`r_-a+fh?M448OHfLdot ze$Mm;R=A=GF9_Y1vlmpYJqCnlMFmDKF;zOm4VYJD9ojca44Zef2>B*cd^E49=)( zW>YU38iYNW`SuTcvMLyDP{zq))|WtafN^(P&a0PE8Y;$PQ2QS}`|4OTbyH!K+*vmW zYgIQAV1z|-zKoupUN1MPm6*`SpK=V}C)xj{m*Su(Y=%94gtkvpQ`EZoxUThU*S7M? z`P0L1$fToYD(8eYW&lq^l=Vu5QCQg!=G*grb)?D%VVV7_gSiO_EY{^CSQSf35c`T*(#SP6STuZ^Gl_T6)XEp?81R?&G?%lgC`BCr|PXrr`5K zQtIU#Ld60m%tJY9+y_RkVR-AOgF1Xxey-rkp6+>$lb$=La-@=}6k@RsQz*W0}Y5C)`eAOakVLxx?Wna-&Px>{oTQuvdM>+f-X80sTsOG*1eEri<5~`x5WwtCAP#kEp7%E|o#n>avuKw8|T45PwCC(`uZ7NA8y>!T+zWHXK|}Ue(6;3VhHQ( zr->6nw+cu4^%iLROf?#G7ac$$LMQ$g6vEi|ECosCmuz(cQx+Wp3rj0UH&r!HrMHbD zMnLV8=)M2nTKE4R@;@?C|K05>3fbVtZjdz`k=WFp?mB+kuXVvO<#qex_qUyOTy`z_=S5<%l^&LPH`{NeNHhN(n)jf@q5ib$<!M(!(3&nQ_~zrlVTmC)R8nXxj8Sn$C2Svj<4u1pZ%lw6D*`un(ug6Nm%zqP%TI zowKZOzN>$HgI(5)>6=6*Yw|IrtZA5dfIi@F_CWd|Jng`7gST4(A+IRjxOVv?X!c7e zaM~Yt1=R+x^WS_Ux*pLnIo{o3>Pw@Br9`8uVE%2#poz}n>`Mv8W614`O@8fU4tES{ zeOM2EaBg5r@r)>uq_=h75N`>=L{)QMjwtxk(*d-7r@=g_JX$so9^-rN$1uML-As%; zZkT(%80zLlGO{ygi=V@XU6<_02aD`Q;)pDCno=vR`q!afhZ7#|K7|XP_Tn}j?k?9T zaxIuxiL~b6zy>w9?Y7hjc^0JG-|L`P*w^1{cc~AjcJw-~0Cscp%5KJ3D~uO4=i^?7 zhQeWpDc;(Oq8UQw;X6pLATgVn$;hG#q0$E-^y=YWvgaT4WGpt$V2*fMKP}e`Pr4$b z1HmiKnO+A%CY|yHeO<%~pIduS=fR~cS6{)sx&R72FS{$AQwD5wxI^Yt!0Xp=AEhkR z2bCNhb9rJ*+4Wvd+l0#s;fP|599ZR++mYxX<%pc5R zN*ZlKwpfF&h_~gxIA7}FJ)e8jMRGP*6a+tC3^h%)Y+>yxa&k(R<{X5uL{W-zYV;C_ zuaum}TQX6K)!?-1LgvCu0}>ezbX$|3A0iU0&&-WJtJE1ncD_;7<6;PFjHAJ_N(Sxv zl1exE;zBL483|I`Czt&|QP{)5(|sR_s+HG$7BIlnd$B1BifJbav=k7a?YaSPh+yf~ z2Uk!UgR>XN6_lGXZVXFn_2%deCFAc;|3ueZ&90%t(0CKY844rcL~u@SorO5KY}o}0==RGcBo8)A zi4?rH#cm!eN6W#`vx7*{|K&m(n|nN%SkYbU-%UexiBqYo=p>7)r;{^7498iD81~7$ zccg@(aWk8f&tMC}kY}m}6W(+7e~DWnE}tFZ;~&hwg@n@;47zd5 za*D(MyuVnC4?U_?A4v=qpTG{n{iay!=+jh7NW*nmoPu%#yk4X$>d*SH4bICT)%?*H z0&yr)tdi6t3b}+sLRLt$AW%y;Ic;t(XKzp_7xf^g2BIY9F53~6iac9A@l74Z^XUFT zSBhfeF$>$vbE8C2<$Wkuq+PW2eC#I5r(+o9Xefs=*+OIWDDHK05?*?DFdKD~BG}Kud=VFO? zF(_Dm4T*!&IOxNo@$QBP#rE(jA!~OwLr#hCnMZG_{f`_L>sRZ}P&FaDLrXqiLk6}} z`oWhTI{Ax^QV>2E?D<9B-FzQ$hzf_6?2)X5bWTjWMUj~LO~1#yqp)y{n4oTqQVB`F zo-ONF?lI7>^miWxyU;>?*WSL*Odo{NG3@8ECjn1K&UlGa8!j;<5=Qq+4M_h?mbQgw# zeg8@i>GNlwkbZQ+u6l5nE9WeIA9+sIMCTaxOVm-WrT#71JC3ol+-IlFH4~Vq46?}f zaT}OF-PjGP$0La=wW9BiWbVj2IJoDLx_=EL4XG*B@S0}{=pI8yRV-<|4hc`;%tch& zpa?xT+MOEs=2X?-&dI%vcRv)|^DuN$&#1vEp&3TA4RFs zoabBWXZ(EV=3xGPX4FrOy%-Muqoi+?jcu|sy&~kxeq5eTCh6dn6%Nwz`-v%QjVWFjz1JLApB9b zxt~(+Y^KogQ2OTj$z$!F0}CO!fjWjQUyNO%@z>zWOvxDj=;k0hOAU;%RJ}`Ja&6qz zcTGVv)-9gKhGaiqRpHRfv1q8#z20|`<3D>TuoMq(1iAXvPX+&s#!b2%+o$=~&aUOr zfJ5NOCmR6ih@Yt8))T#C4Bi=xAy($mO( z=8E_E&?aosFL2a4l7VVF(gkA%f51G+x`9=2g?%SDaetp{88|6wzG*v#F z|DrjeUxMd>sC)aK$ePm|b^2?Yhx?eAsp?+G_ z_IN=}x>xoBk@G1 znacDb!%)W;jS*#xQSYPk3iT&XwcDP@jkFM|uiWK@Ytt4U3K;n}p4l2~TNiEXm2Nq_ zzj<-EJx!CBMNYBY`)+c|^d$A6Pbgs*E1fo@MpwScq!#|8ScX80?0(!-K&@!!p6jSX zwIwfIY8BH?6=WDU?nzoQ38|0VIcLkh7!r{ z5*oG!&w*ihGC}5pnG?NRJPAt*Bdnh@fivrb@*z zbm8>C1I@+{GG5t@ozpK0+m*r@h_-oGuG-yqNyr|qbr|<9uBpHXBw?0kT6a15&?Ig+j$fAjFRAPBkPjpw^MMpuBOJV1(waNK9je? zI^;>qoaZB~S3LR>UklBW2Lc`xqf z>%kf3lezO1q6FHg=*I6~GaMFbgBjuz%`9ZIXsWQ*IwpHneIW|IQ+Se2M7Lztsb6he zs~neaFwBYONQpyUq~EolH%+zno5Vy>X_iY$eM5eaTObEseonXkX)jy@+IbViqvqe{ zO4|tBx0YmNWKP@t78r`5_kT0|{ax+X!B##~-m9Cf<}C2O(hm>aZE*Q^=gJki45{hU zF5Nvm0s`_>wueW`9X5a2nQ-^P{0VG0;R7pnG!&z)(_fR6uVc)!lrr#=s20oqIwfP# zmBNPTI(V`|tu{jcmg|&M7y7!~W*1IIxZR65cf*>SDg6fY&}&z@-BIUfIsuRK=ACxJ~>B8%P&+*H6d@@7(P6n z2ojjwno9w`G>kK4^6iW6jMDRS*lY(wTZx(d0dIyIhwMk=Q>UIOi0QaE*kS+-Nr)fA z=IV~b1_y+M#NQDlM!nnWWul7eLMQ#qrg6Uvj{lP5lF+C!qG$AvQ_1u!_AFxN^W#BU_ zE!3uI1=tt|^_**`8Be}zsHlevbAPceQ-{=2N_;9nR;EX@r7S(Dkn!u5T$}5m*DDbuzx9X!Fzl%jC85F zxmA4Ha3nl)eE7RBHYzhOy3=dpCPUfGk0yE}$O1iB;zs@}{m z3|JBu(cDSZ4EAIA!a<@ggiYv_$!B9y(Zp$A|APTDz8pNmX6yCpm9mO|k#t_BMSQ9a&JXW_V@bGKUHU2WD>w0> zkb}tu&SeU6e+`Wa!thxhIkZx?MMhIRHfT(|z`a#$boPpzOnu)H^@3v!4zxosH7_oP zde4%Ke9RY7hb6RJmsLS` zcIWLzV?2d)a}U27*u)m?)N>p~R-T!xcaL%IN#+v~z`Fc6kw{wN^+Nq|yd+D(oOUHn z{3obZDbY33TusT!?)bC#`%~zF9HkdwIID3zq>K%-)~5=6R{GKS zZjv+4{S~|BG@&xfNPWDi^VIEZtC~vpa6K_ZD0dTHcj1OhXBKRqRpZ3xQYJrn5QCDO z;;l#KTk>MgTXVPJrmjD7)yCEn!u=a;_=2aOJ!|S`uM_A(|0$DyNb^}6z?YHVZH(@_ zArde>c#E7iRR~$JkL3>SMen-rWyHf@wM(7mSuusNQM#@>J2qrLYw%xrq;svjvX=A=UgK-mW?k9q3W6D`0`v#gj91e+g z=Dc;UAC{skAC?h3@hWv3sBx&j`J@QjpDRY%ewnzM*6bowq8Q+eclP@#W<_|551!|W zdH*F_nMOcBp!t=6l!9@&H{&Vwyw@TEo|beakVRJkZEV-sd#W@#MRGC4q-8xDBi<9# zox{Ya=5rB!xtK9l_KrFaGR+}Vi3h`de~M_2KPbZ^^*)2T9^3F>mj!jwok2LV<<9%V z{yQ8HuLxuG)-53lX;uo?Q{-7Q;n2vSHmBRD?suRi&NfCXV3eVpij~QS|ozT5kWSDODTsjFkVc9bBqQctouc3&=7N~y0 z#4ZT+5^^sQ7Lz*eH!F|-AtDku@)MVlm42{;>mF3CpF9EKJ-<;lc$qPpeVAqKD>%Es zK5UbsNMD--eO|lsTNrmNwmdQ;%jQj=T)x2Ip2iuh{qGl7WD+8cnTYWjR}H!m7QlT_ zm(k6w*-nvXY%0GPzz@ML9#)2e_ zgtne^9h&B8FYr5utZgUwWnsCB$26aj=}v<_y;pNDFsd#K%upYq<91wTbSZkko$A53=n{KRjvpdh6W3C#<)HgKmlEtnr4vOnV z_fzTViM$+m%xsW>>)5ph9|rsZH@8i2ID5lWxmE_+f9qWjJXQuh|7=?y^js{3IubXq zKw$RaIa!d*;=JH*XQqvowsfA*1=2A1IDua|+Dw?dGkI6-<_yDC0K-|P3GX!Ce;b~( zkL~dA`Zhg6#tk?0M2W7uzd@>&{w+<#%IIi`Jo`UhvwJBjB8tCb7n6RR*!^ensgG&( zt6lUdw~#S`ozPf^4Pr`Qe1cr)E}oG?-dX$+bf>JZta1HqD49jgJo=%IdUvBnRQ(141a|49fkc2QS<2hC+<6YA> z3%$gcspktCV*`FIA8pV5-eS^v%!iPYw5NHWn;R2E7u;78&u|vPn~zWTnXfMfE-&+K z7&XlD=WrmTWOTpaPG1VRbnBOw>AF-h(max09C;`-=A>>iI>O$PeanE;WJdXAwHUp^ z6-S9`XX240Eum`pC`G{esQfkrHLr33w8HDD)f0L|_0yLcFJ*L3mu=|S+IxVJ9^~j= z)l2?$b$PeX*JkQV^K1Kp-xrgD#zI)6>@9?Hqpz+X$7Q`f$P`-oUju zlBloz+k}eor*3#_RFQgXJ%8h?{?Youas3h~w{bw;y$EB|S7TRrW4Cke?;~sSQuE6K z?2i!rn$ySPg4uPxo>+SbK*L9Tbzyp{QOdb@ltU&Td1nhzcpf-Khm$6 zp|!I+##4tI^z@hbBZQy*j!V}YydUY51_IRpt@K59=31n22`jkceyUfwVa{^%-;11- zJgm8Km5b=GC%dx|LOR(iA{a3z4*xW<@Z5Cc2K{v7nuF(IMTlxi?nH5s{c5KIXPnE3 z?}YnoLBwzZtLfKito{96hm4Dz@6jOlG<&^BNE!1ztEsjgOY( z*Vk;`cG;vOS9`whW16a(#yffbK^O{>O}dN)S=stRk1c&k@eg?&0T^9ogJ{#7;g z+Y^1~1%nab`JZi~*ivo5u*031o#6r_dy_2sWM8ya!$o1_Yb1T|&CNnMiR)!;Q;E-5 zY8pbs_$dMDcSd}H-x-CK3qVMJL{BvY^R=IeH7@+-FdDeZVA3d7dpi3$*WbR;%}vyO z#?V{s4P8oeu8)pthhWy**1%9;Bp!kdMNouwL2=Kf{n>@C?5S0$)s+aBwLUbEu<7gP z3<`5nm;UODFF#@`r)x9&OR;No1gnQl@(!CAfwD`QPqOh0dF4uk@xv$La|1q`r5?Ww zd&7^1v|r;oPrN2Oo7J!Fqk8-zG}1qJ`eZNbIn{~kjn-^wOt7D%7HAIEzjm~XEoF_| zZ#&1NQZ)VYt?eXrOYT%cHcJVaM_f^MfS+IFO(_zk3g5BM^9l_MABdzo(@!%8!;P?> z=OPZ0DP#P$*e%37T}#iF5NG$-_{n`q&N$=Zb)&KR$vvCKMg(U#xD;ucF%zkt{wJul z+e+RXWU2;2+fdPu>t2I`Qi?|9G4V#uC!49Q@|Xt{waw>5p*D=7 zmA8uh{!_W>YwW$6_cS)wyrA+2hFK)--TKT8N-CaDXs_G!B2Nn@&S~X5@*DZ16v>6TULo2AAM!Uzn)v zF~2bM=F@jFV#2Cf5@+5y(JZgRoe*GvUC_UKL%g}(>7yv{&mhXMxA@9Twt$0II^o!O zZWX&ǀ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 Date: Wed, 10 Jan 2024 12:53:01 +0100 Subject: [PATCH 26/91] dhcp: T3316: Update documentation for Kea implementation --- .../_include/dhcp-server.conf | 2 +- docs/configuration/service/dhcp-server.rst | 131 ++---------------- docs/installation/install.rst | 8 +- docs/quick-start.rst | 6 +- 4 files changed, 20 insertions(+), 127 deletions(-) diff --git a/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf b/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf index 9c4b612a..a3a7f27e 100644 --- a/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf +++ b/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf @@ -8,6 +8,6 @@ set protocols static route 10.0.10.0/24 next-hop 10.0.20.254 set protocols static route 192.168.0.0/24 next-hop 127.16.0.2 set service dhcp-server listen-address '172.16.0.1' set service dhcp-server shared-network-name DHCPTun100 authoritative -set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 default-router '192.168.0.254' +set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 option default-router '192.168.0.254' set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 range 0 start '192.168.0.30' set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 range 0 stop '192.168.0.30' \ No newline at end of file diff --git a/docs/configuration/service/dhcp-server.rst b/docs/configuration/service/dhcp-server.rst index 0cc10feb..e20fc251 100644 --- a/docs/configuration/service/dhcp-server.rst +++ b/docs/configuration/service/dhcp-server.rst @@ -4,7 +4,7 @@ DHCP Server ########### -VyOS uses ISC DHCP server for both IPv4 and IPv6 address assignment. +VyOS uses Kea DHCP server for both IPv4 and IPv6 address assignment. *********** IPv4 server @@ -26,12 +26,7 @@ Configuration Create DNS record per client lease, by adding clients to /etc/hosts file. Entry will have format: `_.` -.. cfgcmd:: set service dhcp-server host-decl-name - - Will drop `_` from client DNS record, using only the - host declaration name and domain: `.` - -.. cfgcmd:: set service dhcp-server shared-network-name domain-name +.. cfgcmd:: set service dhcp-server shared-network-name option domain-name The domain-name parameter should be the domain name that will be appended to the client's hostname to form a fully-qualified domain-name (FQDN) (DHCP @@ -40,7 +35,7 @@ Configuration This is the configuration parameter for the entire shared network definition. All subnets will inherit this configuration item if not specified locally. -.. cfgcmd:: set service dhcp-server shared-network-name domain-search +.. cfgcmd:: set service dhcp-server shared-network-name option domain-search The domain-name parameter should be the domain name used when completing DNS request where no full FQDN is passed. This option can be given multiple times @@ -49,7 +44,7 @@ Configuration This is the configuration parameter for the entire shared network definition. All subnets will inherit this configuration item if not specified locally. -.. cfgcmd:: set service dhcp-server shared-network-name name-server
+.. cfgcmd:: set service dhcp-server shared-network-name option name-server
Inform client that the DNS server can be found at `
`. @@ -58,21 +53,6 @@ Configuration Multiple DNS servers can be defined. -.. cfgcmd:: set service dhcp-server shared-network-name ping-check - - When the DHCP server is considering dynamically allocating an IP address to a - client, it first sends an ICMP Echo request (a ping) to the address being - assigned. It waits for a second, and if no ICMP Echo response has been heard, - it assigns the address. - - If a response is heard, the lease is abandoned, and the server does not - respond to the client. The lease will remain abandoned for a minimum of - abandon-lease-time seconds (defaults to 24 hours). - - If there are no free addresses but there are abandoned IP addresses, the - DHCP server will attempt to reclaim an abandoned IP address regardless of the - value of abandon-lease-time. - .. cfgcmd:: set service dhcp-server listen-address
This configuration parameter lets the DHCP server to listen for DHCP @@ -91,14 +71,14 @@ Individual Client Subnet network. .. cfgcmd:: set service dhcp-server shared-network-name subnet - default-router
+ option default-router
This is a configuration parameter for the ``, saying that as part of the response, tell the client that the default gateway can be reached at `
`. .. cfgcmd:: set service dhcp-server shared-network-name subnet - name-server
+ option name-server
This is a configuration parameter for the subnet, saying that as part of the response, tell the client that the DNS server can be found at `
`. @@ -133,40 +113,19 @@ Individual Client Subnet This option can be specified multiple times. .. cfgcmd:: set service dhcp-server shared-network-name subnet - domain-name + option domain-name The domain-name parameter should be the domain name that will be appended to the client's hostname to form a fully-qualified domain-name (FQDN) (DHCP Option 015). .. cfgcmd:: set service dhcp-server shared-network-name subnet - domain-search + option domain-search The domain-name parameter should be the domain name used when completing DNS request where no full FQDN is passed. This option can be given multiple times if you need multiple search domains (DHCP Option 119). -.. cfgcmd:: set service dhcp-server shared-network-name subnet - ping-check - - When the DHCP server is considering dynamically allocating an IP address to a - client, it first sends an ICMP Echo request (a ping) to the address being - assigned. It waits for a second, and if no ICMP Echo response has been heard, - it assigns the address. - - If a response is heard, the lease is abandoned, and the server does not - respond to the client. The lease will remain abandoned for a minimum of - abandon-lease-time seconds (defaults to 24 hours). - - If a there are no free addresses but there are abandoned IP addresses, the - DHCP server will attempt to reclaim an abandoned IP address regardless of the - value of abandon-lease-time. - -.. cfgcmd:: set service dhcp-server shared-network-name subnet - enable-failover - - Enable DHCP failover configuration for this address pool. - Failover -------- @@ -391,32 +350,6 @@ Options Multi: can be specified multiple times. -Raw Parameters -============== - -Raw parameters can be passed to shared-network-name, subnet and static-mapping: - -.. code-block:: none - - set service dhcp-server shared-network-name shared-network-parameters - Additional shared-network parameters for DHCP server. - set service dhcp-server shared-network-name subnet subnet-parameters - Additional subnet parameters for DHCP server. - set service dhcp-server shared-network-name subnet static-mapping static-mapping-parameters - Additional static-mapping parameters for DHCP server. - Will be placed inside the "host" block of the mapping. - -These parameters are passed as-is to isc-dhcp's dhcpd.conf under the -configuration node they are defined in. They are not validated so an error in -the raw parameters won't be caught by vyos's scripts and will cause dhcpd to -fail to start. Always verify that the parameters are correct before committing -the configuration. Refer to isc-dhcp's dhcpd.conf manual for more information: -https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcpdconf - -Quotes can be used inside parameter values by replacing all quote characters -with the string ``"``. They will be replaced with literal quote characters -when generating dhcpd.conf. - Example ======= @@ -439,12 +372,11 @@ Common configuration, valid for both primary and secondary node. .. code-block:: none - set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 default-router '192.0.2.254' - set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 name-server '192.0.2.254' - set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 domain-name 'vyos.net' + set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option default-router '192.0.2.254' + set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option name-server '192.0.2.254' + set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option domain-name 'vyos.net' set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 range 0 start '192.0.2.10' set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 range 0 stop '192.0.2.250' - set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 enable-failover **Primary** @@ -467,47 +399,6 @@ Common configuration, valid for both primary and secondary node. .. _dhcp-server:v4_example_raw: -Raw Parameters --------------- - -* Override static-mapping's name-server with a custom one that will be sent only - to this host. -* An option that takes a quoted string is set by replacing all quote characters - with the string ``"`` inside the static-mapping-parameters value. - The resulting line in dhcpd.conf will be - ``option pxelinux.configfile "pxelinux.cfg/01-00-15-17-44-2d-aa";``. - - -.. code-block:: none - - set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 static-mapping example static-mapping-parameters "option domain-name-servers 192.0.2.11, 192.0.2.12;" - set service dhcp-server shared-network-name dhcpexample subnet 192.0.2.0/24 static-mapping example static-mapping-parameters "option pxelinux.configfile "pxelinux.cfg/01-00-15-17-44-2d-aa";" - -Option 43 for UniFI -------------------- - -* These parameters need to be part of the DHCP global options. - They stay unchanged. - - -.. code-block:: none - - set service dhcp-server global-parameters 'option space ubnt;' - set service dhcp-server global-parameters 'option ubnt.unifi-address code 1 = ip-address;' - set service dhcp-server global-parameters 'class "ubnt" {' - set service dhcp-server global-parameters 'match if substring (option vendor-class-identifier, 0, 4) = "ubnt";' - set service dhcp-server global-parameters 'option vendor-class-identifier "ubnt";' - set service dhcp-server global-parameters 'vendor-option-space ubnt;' - set service dhcp-server global-parameters '}' - -* Now we add the option to the scope, adapt to your setup - - -.. code-block:: none - - set service dhcp-server shared-network-name example-scope subnet 10.1.1.0/24 subnet-parameters 'option ubnt.unifi-address 172.16.1.10;' - - Operation Mode ============== diff --git a/docs/installation/install.rst b/docs/installation/install.rst index 2bbce8ee..bf0f11fe 100644 --- a/docs/installation/install.rst +++ b/docs/installation/install.rst @@ -458,9 +458,11 @@ In this example we configured an existent VyOS as the DHCP server: vyos@vyos# show service dhcp-server shared-network-name mydhcp { subnet 192.168.1.0/24 { - bootfile-name pxelinux.0 - bootfile-server 192.168.1.50 - default-router 192.168.1.50 + option { + bootfile-name pxelinux.0 + bootfile-server 192.168.1.50 + default-router 192.168.1.50 + } range 0 { start 192.168.1.70 stop 192.168.1.100 diff --git a/docs/quick-start.rst b/docs/quick-start.rst index c8bb3f04..44ff99ff 100644 --- a/docs/quick-start.rst +++ b/docs/quick-start.rst @@ -93,9 +93,9 @@ DNS server. .. code-block:: none - set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 default-router '192.168.0.1' - set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 name-server '192.168.0.1' - set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 domain-name 'vyos.net' + set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 option default-router '192.168.0.1' + set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 option name-server '192.168.0.1' + set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 option domain-name 'vyos.net' set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 lease '86400' set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 range 0 start '192.168.0.9' set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 range 0 stop '192.168.0.254' From 3864aa6aafd592e5d8b93dbede9004ccbf001e88 Mon Sep 17 00:00:00 2001 From: sarthurdev <965089+sarthurdev@users.noreply.github.com> Date: Thu, 11 Jan 2024 02:12:07 +0100 Subject: [PATCH 27/91] dhcp: dhcpv6: T3316: Update documentation for inclusion of `subnet-id` --- .../_include/dhcp-server.conf | 3 ++- docs/configuration/service/dhcp-server.rst | 17 +++++++++++++++++ docs/installation/install.rst | 1 + docs/quick-start.rst | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf b/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf index a3a7f27e..20c8dd10 100644 --- a/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf +++ b/docs/configexamples/autotest/DHCPRelay_through_GRE/_include/dhcp-server.conf @@ -10,4 +10,5 @@ set service dhcp-server listen-address '172.16.0.1' set service dhcp-server shared-network-name DHCPTun100 authoritative set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 option default-router '192.168.0.254' set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 range 0 start '192.168.0.30' -set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 range 0 stop '192.168.0.30' \ No newline at end of file +set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 range 0 stop '192.168.0.30' +set service dhcp-server shared-network-name DHCPTun100 subnet 192.168.0.0/24 subnet-id '1' \ No newline at end of file diff --git a/docs/configuration/service/dhcp-server.rst b/docs/configuration/service/dhcp-server.rst index e20fc251..c51a0aff 100644 --- a/docs/configuration/service/dhcp-server.rst +++ b/docs/configuration/service/dhcp-server.rst @@ -70,6 +70,12 @@ Individual Client Subnet any device trying to request an IP address that is not valid for this network. +.. cfgcmd:: set service dhcp-server shared-network-name subnet + subnet-id + + This configuration parameter is required and must be unique to each subnet. + It is required to map subnets to lease file entries. + .. cfgcmd:: set service dhcp-server shared-network-name subnet option default-router
@@ -197,6 +203,7 @@ inside the subnet definition but can be outside of the range statement. .. code-block:: none + set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 subnet-id 1 set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 ip-address 192.168.1.100 set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 mac-address aa:bb:11:22:33:00 @@ -210,6 +217,7 @@ The configuration will look as follows: ip-address 192.168.1.100 mac-address aa:bb:11:22:33:00 } + subnet-id 1 } Options @@ -377,6 +385,7 @@ Common configuration, valid for both primary and secondary node. set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 option domain-name 'vyos.net' set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 range 0 start '192.0.2.10' set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 range 0 stop '192.0.2.250' + set service dhcp-server shared-network-name NET-VYOS subnet 192.0.2.0/24 subnet-id '1' **Primary** @@ -505,6 +514,12 @@ Configuration Clients receiving advertise messages from multiple servers choose the server with the highest preference value. The range for this value is ``0...255``. +.. cfgcmd:: set service dhcpv6-server shared-network-name subnet + subnet-id + + This configuration parameter is required and must be unique to each subnet. + It is required to map subnets to lease file entries. + .. cfgcmd:: set service dhcpv6-server shared-network-name subnet lease-time {default | maximum | minimum} @@ -581,6 +596,7 @@ server. The following example describes a common scenario. set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 address-range start 2001:db8::100 stop 2001:db8::199 set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 name-server 2001:db8::ffff + set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 subnet-id 1 The configuration will look as follows: @@ -595,6 +611,7 @@ The configuration will look as follows: } } name-server 2001:db8::ffff + subnet-id 1 } } diff --git a/docs/installation/install.rst b/docs/installation/install.rst index bf0f11fe..17bccfbd 100644 --- a/docs/installation/install.rst +++ b/docs/installation/install.rst @@ -467,6 +467,7 @@ In this example we configured an existent VyOS as the DHCP server: start 192.168.1.70 stop 192.168.1.100 } + subnet-id 1 } } diff --git a/docs/quick-start.rst b/docs/quick-start.rst index 44ff99ff..05e278ad 100644 --- a/docs/quick-start.rst +++ b/docs/quick-start.rst @@ -99,6 +99,7 @@ DNS server. set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 lease '86400' set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 range 0 start '192.168.0.9' set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 range 0 stop '192.168.0.254' + set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 subnet-id '1' set service dns forwarding cache-size '0' set service dns forwarding listen-address '192.168.0.1' From 85ef13b14fa37b8780f6e6c8220bc54366c72741 Mon Sep 17 00:00:00 2001 From: Nicolas Fort Date: Thu, 11 Jan 2024 09:46:26 -0300 Subject: [PATCH 28/91] Add opmode commands for firewall zones, and add global state-policies in quick-start --- docs/configuration/firewall/zone.rst | 38 ++++++++++++++++++++++++++++ docs/quick-start.rst | 31 +++++++++++++++++------ 2 files changed, 61 insertions(+), 8 deletions(-) diff --git a/docs/configuration/firewall/zone.rst b/docs/configuration/firewall/zone.rst index 1ab9c630..059b029d 100644 --- a/docs/configuration/firewall/zone.rst +++ b/docs/configuration/firewall/zone.rst @@ -123,3 +123,41 @@ written from the perspective of: *Source Zone*-to->*Destination Zone* set firewall zone DMZ from LAN firewall name LANv4-to-DMZv4 set firewall zone LAN from DMZ firewall name DMZv4-to-LANv4 +************** +Operation-mode +************** + +.. opcmd:: show firewall zone-policy + + This will show you a basic summary of zones configuration. + + .. code-block:: none + + vyos@vyos:~$ show firewall zone-policy + Zone Interfaces From Zone Firewall IPv4 Firewall IPv6 + ------ ------------ ----------- --------------- --------------- + LAN eth1 WAN WAN_to_LAN + eth2 + LOCAL LOCAL LAN LAN_to_LOCAL + WAN WAN_to_LOCAL WAN_to_LOCAL_v6 + WAN eth3 LAN LAN_to_WAN + eth0 LOCAL LOCAL_to_WAN + vyos@vyos:~$ + +.. opcmd:: show firewall zone-policy zone + + This will show you a basic summary of a particular zone. + + .. code-block:: none + + vyos@vyos:~$ show firewall zone-policy zone WAN + Zone Interfaces From Zone Firewall IPv4 Firewall IPv6 + ------ ------------ ----------- --------------- --------------- + WAN eth3 LAN LAN_to_WAN + eth0 LOCAL LOCAL_to_WAN + vyos@vyos:~$ show firewall zone-policy zone LOCAL + Zone Interfaces From Zone Firewall IPv4 Firewall IPv6 + ------ ------------ ----------- --------------- --------------- + LOCAL LOCAL LAN LAN_to_LOCAL + WAN WAN_to_LOCAL WAN_to_LOCAL_v6 + vyos@vyos:~$ diff --git a/docs/quick-start.rst b/docs/quick-start.rst index c8bb3f04..bbd7ab77 100644 --- a/docs/quick-start.rst +++ b/docs/quick-start.rst @@ -141,7 +141,7 @@ networks, addresses, ports, and domains that describe different parts of our network. We can then use them for filtering within our firewall rulesets, allowing for more concise and readable configuration. -In this case, we will create two interface groups—a ``WAN`` group for our +In this case, we will create two interface groups — a ``WAN`` group for our interfaces connected to the public internet and a ``LAN`` group for the interfaces connected to our internal network. Additionally, we will create a network group, ``NET-INSIDE-v4``, that contains our internal subnet. @@ -156,10 +156,26 @@ Configure Stateful Packet Filtering ----------------------------------- With the new firewall structure, we have have a lot of flexibility in how we -group and order our rules, as shown by the two alternative approaches below. +group and order our rules, as shown by the three alternative approaches below. -Option 1: Common Chain -^^^^^^^^^^^^^^^^^^^^^^ +Option 1: Global State Policies +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Using options defined in ``set firewall global-options state-policy``, state +policy rules that applies for both IPv4 and IPv6 are created. These global +state policies also applies for all traffic that passes through the router +(transit) and for traffic originated/destinated to/from the router itself, and +will be avaluated before any other rule defined in the firewall. + +Most installations would choose this option, and will contain: + +.. code-block:: none + + set firewall global-options state-policy established action accept + set firewall global-options state-policy related action accept + set firewall global-options state-policy invalid action drop + +Option 2: Common/Custom Chain +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We can create a common chain for stateful connection filtering of multiple interfaces (or multiple netfilter hooks on one interface). Those individual @@ -196,12 +212,11 @@ hooks as the first filtering rule in the respective chains: set firewall ipv4 input filter rule 10 action 'jump' set firewall ipv4 input filter rule 10 jump-target CONN_FILTER -Option 2: Per-Hook Chain +Option 3: Per-Hook Chain ^^^^^^^^^^^^^^^^^^^^^^^^ -Alternatively, instead of configuring the ``CONN_FILTER`` chain described above, -you can take the more traditional stateful connection filtering approach by -creating rules on each hook's chain: +Alternatively, you can take the more traditional stateful connection +filtering approach by creating rules on each base hook's chain: .. code-block:: none From 3b50e4600a2db1abaff3d4049bd6627a272b00dc Mon Sep 17 00:00:00 2001 From: sarthurdev <965089+sarthurdev@users.noreply.github.com> Date: Sat, 13 Jan 2024 00:53:52 +0100 Subject: [PATCH 29/91] Update syntax for Kea option change --- docs/configuration/service/dhcp-server.rst | 28 ++++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/docs/configuration/service/dhcp-server.rst b/docs/configuration/service/dhcp-server.rst index c51a0aff..b99e5baa 100644 --- a/docs/configuration/service/dhcp-server.rst +++ b/docs/configuration/service/dhcp-server.rst @@ -528,35 +528,35 @@ Configuration values need to be supplied in seconds. .. cfgcmd:: set service dhcpv6-server shared-network-name subnet - nis-domain + option nis-domain A :abbr:`NIS (Network Information Service)` domain can be set to be used for DHCPv6 clients. .. cfgcmd:: set service dhcpv6-server shared-network-name subnet - nisplus-domain + option nisplus-domain The procedure to specify a :abbr:`NIS+ (Network Information Service Plus)` domain is similar to the NIS domain one: .. cfgcmd:: set service dhcpv6-server shared-network-name subnet - nis-server
+ option nis-server
Specify a NIS server address for DHCPv6 clients. .. cfgcmd:: set service dhcpv6-server shared-network-name subnet - nisplus-server
+ option nisplus-server
Specify a NIS+ server address for DHCPv6 clients. .. cfgcmd:: set service dhcpv6-server shared-network-name subnet - sip-server
+ option sip-server
Specify a :abbr:`SIP (Session Initiation Protocol)` server by IPv6 address of Fully Qualified Domain Name for all DHCPv6 clients. .. cfgcmd:: set service dhcpv6-server shared-network-name subnet - sntp-server-address
+ option sntp-server-address
A SNTP server address can be specified for DHCPv6 clients. @@ -594,8 +594,9 @@ server. The following example describes a common scenario. .. code-block:: none - set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 address-range start 2001:db8::100 stop 2001:db8::199 - set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 name-server 2001:db8::ffff + set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 range 1 start 2001:db8::100 stop 2001:db8::199 + set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 range 1 stop 2001:db8::199 + set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 option name-server 2001:db8::ffff set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 subnet-id 1 The configuration will look as follows: @@ -605,12 +606,13 @@ The configuration will look as follows: show service dhcpv6-server shared-network-name NET1 { subnet 2001:db8::/64 { - address-range { - start 2001:db8::100 { - stop 2001:db8::199 - } + range 1 { + start 2001:db8::100 + stop 2001:db8::199 + } + option { + name-server 2001:db8::ffff } - name-server 2001:db8::ffff subnet-id 1 } } From 27432429e0ee86fafbba4017f57a9b2adc32809c Mon Sep 17 00:00:00 2001 From: rebortg Date: Sat, 13 Jan 2024 13:51:06 +0100 Subject: [PATCH 30/91] Update autotest labs with 1.5-rolling-202401121239 --- .../autotest/Wireguard/Wireguard.log | 1499 +++++++++-------- .../autotest/Wireguard/Wireguard.rst | 22 +- .../autotest/Wireguard/_include/branch.conf | 4 +- .../autotest/Wireguard/_include/central.conf | 4 +- .../autotest/tunnelbroker/tunnelbroker.log | 1458 ++++++++-------- .../autotest/tunnelbroker/tunnelbroker.rst | 36 +- 6 files changed, 1530 insertions(+), 1493 deletions(-) diff --git a/docs/configexamples/autotest/Wireguard/Wireguard.log b/docs/configexamples/autotest/Wireguard/Wireguard.log index 25bde79c..483b0e86 100644 --- a/docs/configexamples/autotest/Wireguard/Wireguard.log +++ b/docs/configexamples/autotest/Wireguard/Wireguard.log @@ -1,752 +1,767 @@ -2023-08-31 21:36:47,446 p=71926 u=rob n=ansible | PLAY [Automatic VyOS Lab test] ********************************************************************************************************************************************************************* -2023-08-31 21:36:47,487 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: fail if node_template_iso is empty] ************************************************************************************************************************** -2023-08-31 21:36:47,501 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:36:47,507 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:47,508 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:47,512 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:47,515 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: fail if node_template_version is empty] ********************************************************************************************************************** -2023-08-31 21:36:47,528 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:36:47,535 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:47,537 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:47,542 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:47,545 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: install requirements] **************************************************************************************************************************************** -2023-08-31 21:36:47,563 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:47,566 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:47,570 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:55,614 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:36:55,628 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:36:55,658 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:55,662 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:55,668 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:56,520 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:36:56,528 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: get template facts] ****************************************************************************************************************************************** -2023-08-31 21:36:56,555 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:56,558 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:56,563 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:57,042 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:36:57,050 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Register path status] **************************************************************************************************************************************** -2023-08-31 21:36:57,080 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:57,081 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:57,087 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:57,290 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:36:57,294 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: create path] ************************************************************************************************************************************************* -2023-08-31 21:36:57,316 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:57,317 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:57,322 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:36:57,559 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:36:57,564 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Upload iso to eve-ng] **************************************************************************************************************************************** -2023-08-31 21:36:57,587 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:36:57,590 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:36:57,597 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:45,806 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:37:45,818 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: create virtioa.qcow2 file] *********************************************************************************************************************************** -2023-08-31 21:37:45,849 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:45,852 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:45,857 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:46,082 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:37:46,087 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:37:46,113 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:46,113 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:46,119 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:46,825 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:46,834 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: create lab for node install] ********************************************************************************************************************************* -2023-08-31 21:37:46,868 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:46,871 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:46,876 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:47,520 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:47,529 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: open lab] **************************************************************************************************************************************************** -2023-08-31 21:37:47,558 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:47,562 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:47,567 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:48,030 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:48,039 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] *************************************************************************************************************************************************************** -2023-08-31 21:37:48,070 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:48,073 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:48,073 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:48,078 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:48,082 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: add node to lab] ********************************************************************************************************************************************* -2023-08-31 21:37:48,103 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:48,106 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:48,110 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:48,677 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:48,686 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: start node] ************************************************************************************************************************************************** -2023-08-31 21:37:48,717 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:48,721 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:48,726 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:50,314 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:50,323 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : debug] ****************************************************************************************************************************************************************** -2023-08-31 21:37:50,356 p=71926 u=rob n=ansible | ok: [eveng] => { - "msg": { - "cache_control": "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", - "changed": false, - "connection": "close", - "content": "{\"code\":200,\"status\":\"success\",\"message\":\"Node started (80049).\"}", - "content_length": "65", - "content_type": "application/json", - "cookies": {}, - "cookies_string": "", - "date": "Thu, 31 Aug 2023 19:37:49 GMT", - "elapsed": 1, - "expires": "Thu, 19 Nov 1981 08:52:00 GMT", - "failed": false, - "json": { - "code": 200, - "message": "Node started (80049).", - "status": "success" - }, - "msg": "OK (65 bytes)", - "pragma": "no-cache, no-cache", - "redirected": false, - "server": "Apache/2.4.41 (Ubuntu)", - "status": 200, - "url": "https://127.0.0.1/api/labs/node_create_lab_name.unl/nodes/1/start", - "x_powered_by": "Unified Networking Lab API" - } -} -2023-08-31 21:37:50,357 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:50,357 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:50,363 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:50,366 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: get node infos] ********************************************************************************************************************************************** -2023-08-31 21:37:50,385 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:50,388 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:50,393 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:50,931 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:50,938 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] *************************************************************************************************************************************************************** -2023-08-31 21:37:50,970 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:37:50,972 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:50,972 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:50,978 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:50,982 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: copy file] *************************************************************************************************************************************************** -2023-08-31 21:37:51,001 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:51,003 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:51,008 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:37:51,541 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:37:51,547 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: run expect script] ******************************************************************************************************************************************* -2023-08-31 21:37:51,569 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:37:51,571 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:37:51,576 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:38:52,093 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:38:52,096 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Login to EVE-NG and get Cookie (due timeout)] **************************************************************************************************************** -2023-08-31 21:38:52,115 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:38:52,118 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:38:52,123 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:38:52,887 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:38:52,895 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: stop node] *************************************************************************************************************************************************** -2023-08-31 21:38:52,927 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:38:52,930 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:38:52,936 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:38:54,029 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:38:54,039 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Pause to wait node is shutdown] ****************************************************************************************************************************** -2023-08-31 21:38:54,065 p=71926 u=rob n=ansible | Pausing for 10 seconds -2023-08-31 21:38:54,065 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:39:04,082 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:04,093 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: delete iso] ************************************************************************************************************************************************** -2023-08-31 21:39:04,120 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:04,124 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:04,130 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:04,361 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:39:04,373 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: commit virtioa.qcow2] **************************************************************************************************************************************** -2023-08-31 21:39:04,408 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:04,411 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:04,417 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:05,745 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:39:05,757 p=71926 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: delete lab for node install] ********************************************************************************************************************************* -2023-08-31 21:39:05,789 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:05,792 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:05,798 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:06,467 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:06,486 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Get env file content] ****************************************************************************************************************************************************** -2023-08-31 21:39:06,735 p=71926 u=rob n=ansible | ok: [vyos-oobm -> localhost] -2023-08-31 21:39:06,735 p=71926 u=rob n=ansible | ok: [branch -> localhost] -2023-08-31 21:39:06,735 p=71926 u=rob n=ansible | ok: [central -> localhost] -2023-08-31 21:39:06,735 p=71926 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:39:06,738 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Load facts] ***************************************************************************************************************************************************** -2023-08-31 21:39:06,760 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:07,757 p=71926 u=rob n=ansible | network_os is set to vyos -2023-08-31 21:39:07,763 p=71926 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko +2024-01-13 13:43:51,001 p=4891 u=rob n=ansible | PLAY [Automatic VyOS Lab test] ******************************************************************************************* +2024-01-13 13:43:51,019 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: fail if node_template_iso is empty] ************************************************ +2024-01-13 13:43:51,032 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:51,033 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:51,033 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:51,036 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:51,038 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: fail if node_template_version is empty] ******************************************** +2024-01-13 13:43:51,046 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:51,050 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:51,052 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:51,055 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:51,056 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: install requirements] ************************************************************** +2024-01-13 13:43:51,068 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:51,068 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:51,071 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:54,278 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:54,280 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:43:54,290 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:54,292 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:54,295 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:55,292 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:55,294 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: get template facts] **************************************************************** +2024-01-13 13:43:55,305 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:55,307 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:55,309 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:55,857 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:55,859 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Register path status] ************************************************************** +2024-01-13 13:43:55,870 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:55,871 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:55,874 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,154 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:56,156 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: create path] *********************************************************************** +2024-01-13 13:43:56,168 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,168 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,169 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,172 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,174 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Upload iso to eve-ng] ************************************************************** +2024-01-13 13:43:56,184 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,185 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,186 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,188 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,190 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: create virtioa.qcow2 file] ********************************************************* +2024-01-13 13:43:56,201 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,202 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,202 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,206 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,208 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:43:56,218 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,218 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,219 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,223 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,224 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: create lab for node install] ******************************************************* +2024-01-13 13:43:56,236 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,236 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,238 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,240 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,242 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: open lab] ************************************************************************** +2024-01-13 13:43:56,252 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,252 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,254 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,256 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,257 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] ************************************************************************************* +2024-01-13 13:43:56,267 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,268 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,269 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,272 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,273 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: add node to lab] ******************************************************************* +2024-01-13 13:43:56,284 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,284 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,285 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,288 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,290 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: start node] ************************************************************************ +2024-01-13 13:43:56,301 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,302 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,302 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,305 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,306 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : debug] **************************************************************************************** +2024-01-13 13:43:56,316 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,317 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,318 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,321 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,323 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: get node infos] ******************************************************************** +2024-01-13 13:43:56,333 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,334 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,335 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,338 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,339 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] ************************************************************************************* +2024-01-13 13:43:56,349 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,349 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,351 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,353 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,356 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: copy file] ************************************************************************* +2024-01-13 13:43:56,367 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,368 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,368 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,370 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,372 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: run expect script] ***************************************************************** +2024-01-13 13:43:56,382 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,382 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,383 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,386 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,387 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Login to EVE-NG and get Cookie (due timeout)] ************************************** +2024-01-13 13:43:56,397 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,398 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,398 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,401 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,403 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: stop node] ************************************************************************* +2024-01-13 13:43:56,413 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,413 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,414 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,417 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,419 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: Pause to wait node is shutdown] **************************************************** +2024-01-13 13:43:56,425 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,426 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: delete iso] ************************************************************************ +2024-01-13 13:43:56,437 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,437 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,438 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,441 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,443 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: commit virtioa.qcow2] ************************************************************** +2024-01-13 13:43:56,454 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,454 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,455 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,458 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,460 p=4891 u=rob n=ansible | TASK [eve-ng-create-node : Wireguard: delete lab for node install] ******************************************************* +2024-01-13 13:43:56,470 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,470 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,471 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,474 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,477 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Get env file content] **************************************************************************** +2024-01-13 13:43:56,693 p=4891 u=rob n=ansible | ok: [central -> localhost] +2024-01-13 13:43:56,693 p=4891 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:43:56,693 p=4891 u=rob n=ansible | ok: [branch -> localhost] +2024-01-13 13:43:56,693 p=4891 u=rob n=ansible | ok: [oobm-xcnelw -> localhost] +2024-01-13 13:43:56,695 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Load facts] *************************************************************************** +2024-01-13 13:43:56,709 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:56,729 p=4891 u=rob n=ansible | ok: [oobm-xcnelw] +2024-01-13 13:43:56,731 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:43:56,734 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:43:56,735 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : decode oobm default startupconfig] *************************************************************** +2024-01-13 13:43:56,746 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,748 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,751 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,752 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:56,754 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: fail if node_template_version is empty] *********************************************** +2024-01-13 13:43:56,762 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:56,766 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,767 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,770 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:56,771 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ******************************************************* +2024-01-13 13:43:56,784 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:56,784 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:56,787 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:57,729 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:57,731 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: get running lab list] ***************************************************************** +2024-01-13 13:43:57,742 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:57,743 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:57,746 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:58,334 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:58,336 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: kill running lab] ********************************************************************* +2024-01-13 13:43:58,344 p=4891 u=rob n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: +(response.json.message != "No nodes running (60071).") and (item.labname == "{{ eve_ng_folder_name }}/{{ lab }}") -2023-08-31 21:39:07,763 p=71926 u=rob n=ansible | network_os is set to vyos -2023-08-31 21:39:07,777 p=71926 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko +2024-01-13 13:43:58,346 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:58,347 p=4891 u=rob n=ansible | skipping: [eveng] => (item={'podid': '1', 'username': 'ansible', 'online': '1', 'uuid': '118775ba-26f6-434a-8dd5-62b0edaa4cd1', 'size': 0.0726, 'sat': '0', 'sat_name': 'master', 'labid': '2', 'labname': '/labtest/DHCPRelay_through_GRE', 'cpu': 0.5, 'mem': 3.01}) +2024-01-13 13:43:58,348 p=4891 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '588b9164-a3b7-4522-8058-0f6ff6286564', 'size': 0.1878, 'sat': '0', 'sat_name': 'master', 'labid': 1002, 'labname': '/Common\n', 'cpu': 0, 'mem': 0}) +2024-01-13 13:43:58,348 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:58,350 p=4891 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '61cc6cd0-78f4-4302-830b-482b642a5e74', 'size': 0.534, 'sat': '0', 'sat_name': 'master', 'labid': 1003, 'labname': '/MSS-Clambing\n', 'cpu': 0, 'mem': 0}) +2024-01-13 13:43:58,352 p=4891 u=rob n=ansible | skipping: [eveng] => (item={'podid': '1', 'username': 'ansible', 'online': '1', 'uuid': 'a0e4e4ed-9da3-4c84-9947-144e76edaa6b', 'size': 0.0791, 'sat': '0', 'sat_name': 'master', 'labid': '1', 'labname': '/labtest/L3VPN_EVPN', 'cpu': 2.33, 'mem': 0.02}) +2024-01-13 13:43:58,352 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:58,354 p=4891 u=rob n=ansible | skipping: [eveng] => (item={'podid': '1', 'username': 'ansible', 'online': '1', 'uuid': 'd5888368-28aa-4e0a-91b0-e4a068bce911', 'size': 0.322, 'sat': '0', 'sat_name': 'master', 'labid': '3', 'labname': '/labtest/OpenVPN_with_LDAP', 'cpu': 22.33, 'mem': 10.75}) +2024-01-13 13:43:58,355 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:43:58,357 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: delete existing lab] ****************************************************************** +2024-01-13 13:43:58,368 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:58,368 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:58,371 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:58,948 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:58,950 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Ensure labtest is present] ************************************************************ +2024-01-13 13:43:58,961 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:58,963 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:58,966 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:43:59,245 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:43:59,247 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Create Wireguard Lab] ***************************************************************** +2024-01-13 13:43:59,258 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:43:59,259 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:43:59,262 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:44:00,058 p=4891 u=rob n=ansible | changed: [eveng] +2024-01-13 13:44:00,060 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ******************************************************* +2024-01-13 13:44:00,075 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:44:00,076 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:44:00,079 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:44:00,911 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:44:00,914 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start vyos-oobm] ********************************************************************** +2024-01-13 13:44:00,927 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:44:00,928 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:44:00,933 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:44:02,451 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:44:02,453 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos-oobm] ******************************************************************* +2024-01-13 13:44:02,465 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:44:02,466 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:44:02,470 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:44:03,354 p=4891 u=rob n=ansible | network_os is set to vyos +2024-01-13 13:44:03,355 p=4891 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko -2023-08-31 21:39:07,777 p=71926 u=rob n=ansible | network_os is set to vyos -2023-08-31 21:39:07,779 p=71926 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko - -2023-08-31 21:39:07,779 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:39:07,781 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:39:07,781 p=71926 u=rob n=ansible | ok: [vyos-oobm] -2023-08-31 21:39:07,785 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : debug] ********************************************************************************************************************************************************************* -2023-08-31 21:39:07,814 p=71926 u=rob n=ansible | ok: [eveng] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:39:08,761 p=71926 u=rob n=ansible | ok: [branch] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:39:08,761 p=71926 u=rob n=ansible | ok: [central] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:39:08,762 p=71926 u=rob n=ansible | ok: [vyos-oobm] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:39:08,769 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: fail if node_template_version is empty] ************************************************************************************************************************* -2023-08-31 21:39:08,794 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:39:08,804 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:08,807 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:08,811 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:08,815 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ********************************************************************************************************************************* -2023-08-31 21:39:08,833 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:08,836 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:08,841 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:09,569 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:09,579 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: get running lab list] ******************************************************************************************************************************************* -2023-08-31 21:39:09,611 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:09,612 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:09,618 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:10,083 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:10,093 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: kill running lab] *********************************************************************************************************************************************** -2023-08-31 21:39:10,126 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:10,127 p=71926 u=rob n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: item.labname == "{{ eve_ng_folder_name }}/{{ lab }}" - -2023-08-31 21:39:10,130 p=71926 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '0fc5edef-8cf2-4400-9a1c-0c4c41a1a881', 'size': 0.1996, 'sat': '0', 'sat_name': 'master', 'labid': 1001, 'labname': '/ecmp wireguard\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:39:10,132 p=71926 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '588b9164-a3b7-4522-8058-0f6ff6286564', 'size': 1.0595, 'sat': '0', 'sat_name': 'master', 'labid': 1002, 'labname': '/Common\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:39:10,134 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:10,134 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:10,137 p=71926 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '9785926c-63ec-42c0-a1ca-a386b9013151', 'size': 0.4469, 'sat': '0', 'sat_name': 'master', 'labid': 1003, 'labname': '/layer2 via IPSec\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:39:10,139 p=71926 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': 'aa98095e-3b64-45aa-b883-e2b7fdfac08c', 'size': 0.5229, 'sat': '0', 'sat_name': 'master', 'labid': 1004, 'labname': '/ospf\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:39:10,140 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:39:10,144 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: delete existing lab] ******************************************************************************************************************************************** -2023-08-31 21:39:10,162 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:10,164 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:10,170 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:10,600 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:10,611 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Ensure labtest is present] ************************************************************************************************************************************** -2023-08-31 21:39:10,640 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:10,643 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:10,650 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:10,798 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:10,807 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Create Wireguard Lab] ******************************************************************************************************************************************* -2023-08-31 21:39:10,837 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:10,840 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:10,846 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:11,322 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:39:11,331 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ********************************************************************************************************************************* -2023-08-31 21:39:11,362 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:11,365 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:11,370 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:12,042 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:12,049 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start vyos-oobm] ************************************************************************************************************************************************ -2023-08-31 21:39:12,079 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:39:12,082 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:12,091 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:13,161 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:39:13,172 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos-oobm] ********************************************************************************************************************************************* -2023-08-31 21:39:13,201 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:39:13,204 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:39:13,210 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:39:14,088 p=71926 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:39:44,102 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:39:44,107 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:39:44,107 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:39:44,107 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | buf = self.packetizer.readline(timeout) -2023-08-31 21:39:44,107 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:39:44,108 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | buf += self._read_timeout(timeout) -2023-08-31 21:39:44,108 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:39:44,108 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | raise socket.timeout() -2023-08-31 21:39:44,108 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | socket.timeout -2023-08-31 21:39:44,108 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:39:44,108 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | During handling of the above exception, another exception occurred: -2023-08-31 21:39:44,109 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:39:44,109 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:39:44,109 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:39:44,109 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | self._check_banner() -2023-08-31 21:39:44,109 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:39:44,109 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | raise SSHException( -2023-08-31 21:39:44,110 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:39:44,110 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:15,137 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:40:15,138 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:40:15,138 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:40:15,139 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | buf = self.packetizer.readline(timeout) -2023-08-31 21:40:15,139 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:40:15,139 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | buf += self._read_timeout(timeout) -2023-08-31 21:40:15,139 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:40:15,139 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | raise socket.timeout() -2023-08-31 21:40:15,139 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | socket.timeout -2023-08-31 21:40:15,140 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:15,140 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | During handling of the above exception, another exception occurred: -2023-08-31 21:40:15,140 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:15,140 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:40:15,140 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:40:15,140 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | self._check_banner() -2023-08-31 21:40:15,141 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:40:15,141 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | raise SSHException( -2023-08-31 21:40:15,141 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:40:15,141 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:46,155 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:40:46,156 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:40:46,157 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:40:46,157 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | buf = self.packetizer.readline(timeout) -2023-08-31 21:40:46,157 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:40:46,157 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | buf += self._read_timeout(timeout) -2023-08-31 21:40:46,157 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:40:46,158 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | raise socket.timeout() -2023-08-31 21:40:46,158 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | socket.timeout -2023-08-31 21:40:46,158 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:46,158 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | During handling of the above exception, another exception occurred: -2023-08-31 21:40:46,158 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:46,158 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:40:46,159 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:40:46,159 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | self._check_banner() -2023-08-31 21:40:46,159 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:40:46,159 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | raise SSHException( -2023-08-31 21:40:46,159 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:40:46,159 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:40:47,928 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:40:48,182 p=72425 u=rob n=p=72425 u=rob | paramiko [vyos-oobm] | Authentication (publickey) successful! -2023-08-31 21:40:49,243 p=71926 u=rob n=ansible | ok: [vyos-oobm] -2023-08-31 21:40:49,246 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ********************************************************************************************************************************* -2023-08-31 21:40:49,266 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:40:49,269 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:40:49,275 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:40:50,220 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:40:50,224 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: get lab status] ************************************************************************************************************************************************* -2023-08-31 21:40:50,252 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:40:50,255 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:40:50,261 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:40:50,772 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:40:50,776 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start all nodes] ************************************************************************************************************************************************ -2023-08-31 21:40:50,795 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:40:50,799 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:40:50,803 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:40:51,376 p=71926 u=rob n=ansible | ok: [eveng] => (item=1) -2023-08-31 21:40:52,420 p=71926 u=rob n=ansible | ok: [eveng] => (item=4) -2023-08-31 21:40:53,681 p=71926 u=rob n=ansible | ok: [eveng] => (item=6) -2023-08-31 21:40:54,642 p=71926 u=rob n=ansible | ok: [eveng] => (item=2) -2023-08-31 21:40:55,580 p=71926 u=rob n=ansible | ok: [eveng] => (item=3) -2023-08-31 21:40:55,598 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos nodes] ******************************************************************************************************************************************** -2023-08-31 21:40:55,628 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:40:55,628 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:40:56,551 p=71926 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:40:56,552 p=71926 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:41:13,459 p=72315 u=rob n=ansible | persistent connection idle timeout triggered, timeout value is 120 secs. +2024-01-13 13:44:03,357 p=4891 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This +feature will be removed in version 2.18. Deprecation warnings can be disabled by setting deprecation_warnings=False in +ansible.cfg. +2024-01-13 13:46:02,775 p=5217 u=rob n=ansible | persistent connection idle timeout triggered, timeout value is 120 secs. See the timeout setting options in the Network Debug and Troubleshooting Guide. -2023-08-31 21:41:13,567 p=72315 u=rob n=ansible | shutdown complete -2023-08-31 21:41:26,577 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:41:26,583 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Traceback (most recent call last): -2023-08-31 21:41:26,583 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:41:26,583 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) -2023-08-31 21:41:26,584 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:41:26,584 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | buf += self._read_timeout(timeout) -2023-08-31 21:41:26,584 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:41:26,584 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | raise socket.timeout() -2023-08-31 21:41:26,584 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | socket.timeout -2023-08-31 21:41:26,584 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:41:26,585 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: -2023-08-31 21:41:26,584 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:41:26,585 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:41:26,585 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Traceback (most recent call last): -2023-08-31 21:41:26,585 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:41:26,585 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | self._check_banner() -2023-08-31 21:41:26,586 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:41:26,586 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | raise SSHException( -2023-08-31 21:41:26,586 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:41:26,586 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:41:26,588 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Traceback (most recent call last): -2023-08-31 21:41:26,588 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:41:26,588 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) -2023-08-31 21:41:26,589 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:41:26,589 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) -2023-08-31 21:41:26,589 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:41:26,589 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | raise socket.timeout() -2023-08-31 21:41:26,589 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | socket.timeout -2023-08-31 21:41:26,589 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:41:26,590 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: -2023-08-31 21:41:26,590 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:41:26,590 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Traceback (most recent call last): -2023-08-31 21:41:26,590 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:41:26,590 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | self._check_banner() -2023-08-31 21:41:26,590 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:41:26,591 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | raise SSHException( -2023-08-31 21:41:26,591 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:41:26,591 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:41:57,640 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:41:57,641 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Traceback (most recent call last): -2023-08-31 21:41:57,641 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:41:57,642 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) -2023-08-31 21:41:57,642 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:41:57,642 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) -2023-08-31 21:41:57,642 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:41:57,642 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | raise socket.timeout() -2023-08-31 21:41:57,642 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:41:57,642 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | socket.timeout -2023-08-31 21:41:57,643 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:41:57,643 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Traceback (most recent call last): -2023-08-31 21:41:57,643 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: -2023-08-31 21:41:57,643 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:41:57,643 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:41:57,643 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) -2023-08-31 21:41:57,643 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Traceback (most recent call last): -2023-08-31 21:41:57,643 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:41:57,643 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:41:57,643 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | buf += self._read_timeout(timeout) -2023-08-31 21:41:57,644 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | self._check_banner() -2023-08-31 21:41:57,644 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:41:57,644 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:41:57,644 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | raise socket.timeout() -2023-08-31 21:41:57,644 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | raise SSHException( -2023-08-31 21:41:57,644 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | socket.timeout -2023-08-31 21:41:57,644 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:41:57,644 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:41:57,644 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:41:57,644 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: -2023-08-31 21:41:57,644 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:41:57,645 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Traceback (most recent call last): -2023-08-31 21:41:57,645 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:41:57,645 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | self._check_banner() -2023-08-31 21:41:57,645 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:41:57,645 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | raise SSHException( -2023-08-31 21:41:57,645 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:41:57,646 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:42:28,697 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:42:28,697 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:42:28,698 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Traceback (most recent call last): -2023-08-31 21:42:28,698 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Traceback (most recent call last): -2023-08-31 21:42:28,699 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:42:28,699 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:42:28,699 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) -2023-08-31 21:42:28,699 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) -2023-08-31 21:42:28,699 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:42:28,699 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:42:28,699 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) -2023-08-31 21:42:28,699 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | buf += self._read_timeout(timeout) -2023-08-31 21:42:28,699 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:42:28,699 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:42:28,699 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | raise socket.timeout() -2023-08-31 21:42:28,700 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | raise socket.timeout() -2023-08-31 21:42:28,700 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | socket.timeout -2023-08-31 21:42:28,700 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | socket.timeout -2023-08-31 21:42:28,700 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:42:28,700 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:42:28,700 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: -2023-08-31 21:42:28,700 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: -2023-08-31 21:42:28,700 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:42:28,700 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:42:28,700 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Traceback (most recent call last): -2023-08-31 21:42:28,700 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Traceback (most recent call last): -2023-08-31 21:42:28,701 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:42:28,701 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:42:28,701 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | self._check_banner() -2023-08-31 21:42:28,701 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | self._check_banner() -2023-08-31 21:42:28,701 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:42:28,701 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:42:28,701 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | raise SSHException( -2023-08-31 21:42:28,701 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | raise SSHException( -2023-08-31 21:42:28,701 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:42:28,701 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:42:28,702 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | -2023-08-31 21:42:28,702 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | -2023-08-31 21:42:30,750 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:42:30,753 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:42:31,019 p=72617 u=rob n=p=72617 u=rob | paramiko [branch] | Authentication (publickey) successful! -2023-08-31 21:42:31,024 p=72616 u=rob n=p=72616 u=rob | paramiko [central] | Authentication (publickey) successful! -2023-08-31 21:42:32,367 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:42:32,367 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:42:32,369 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : generate pki wireguard key-pair] ******************************************************************************************************************************************* -2023-08-31 21:42:32,386 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:42:32,393 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:42:33,327 p=72314 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use +2024-01-13 13:46:02,887 p=5217 u=rob n=ansible | shutdown complete +2024-01-13 13:46:38,493 p=5211 u=rob n=p=5211 u=rob | paramiko [oobm-xcnelw] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:46:38,800 p=5211 u=rob n=p=5211 u=rob | paramiko [oobm-xcnelw] | Authentication (publickey) successful! +2024-01-13 13:46:40,108 p=4891 u=rob n=ansible | ok: [oobm-xcnelw] +2024-01-13 13:46:40,110 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ******************************************************* +2024-01-13 13:46:40,121 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:46:40,121 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:46:40,124 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:46:41,244 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:46:41,249 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: get lab status] *********************************************************************** +2024-01-13 13:46:41,267 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:46:41,269 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:46:41,273 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:46:41,842 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:46:41,847 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start all nodes] ********************************************************************** +2024-01-13 13:46:41,867 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:46:41,869 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:46:41,872 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:46:42,373 p=4891 u=rob n=ansible | ok: [eveng] => (item=1) +2024-01-13 13:46:43,474 p=4891 u=rob n=ansible | ok: [eveng] => (item=4) +2024-01-13 13:46:44,793 p=4891 u=rob n=ansible | ok: [eveng] => (item=6) +2024-01-13 13:46:45,990 p=4891 u=rob n=ansible | ok: [eveng] => (item=2) +2024-01-13 13:46:46,917 p=4891 u=rob n=ansible | ok: [eveng] => (item=3) +2024-01-13 13:46:46,924 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos nodes] ****************************************************************** +2024-01-13 13:46:46,940 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:46:46,944 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:46:47,861 p=4891 u=rob n=ansible | network_os is set to vyos +2024-01-13 13:46:47,861 p=4891 u=rob n=ansible | network_os is set to vyos +2024-01-13 13:47:17,890 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:17,892 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:17,893 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:17,893 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:17,894 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:17,894 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:17,894 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) +2024-01-13 13:47:17,895 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:17,895 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:17,895 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:17,895 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise socket.timeout() +2024-01-13 13:47:17,895 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | TimeoutError +2024-01-13 13:47:17,896 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:17,896 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:17,896 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:17,896 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:17,896 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:17,897 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:17,897 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:17,897 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:17,897 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | self._check_banner() +2024-01-13 13:47:17,897 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:17,897 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:17,897 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:17,897 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise SSHException( +2024-01-13 13:47:17,897 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf += self._read_timeout(timeout) +2024-01-13 13:47:17,898 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:17,898 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:17,898 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:17,898 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:17,898 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise socket.timeout() +2024-01-13 13:47:17,898 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | TimeoutError +2024-01-13 13:47:17,899 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:17,899 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:17,899 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:17,899 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:17,900 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:17,900 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | self._check_banner() +2024-01-13 13:47:17,900 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:17,901 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise SSHException( +2024-01-13 13:47:17,901 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:17,901 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:29,000 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:29,001 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:29,001 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:29,002 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:29,002 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:29,002 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:29,002 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf += self._read_timeout(timeout) +2024-01-13 13:47:29,003 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:29,003 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:29,003 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise socket.timeout() +2024-01-13 13:47:29,003 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | TimeoutError +2024-01-13 13:47:29,003 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:29,003 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:29,004 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:29,004 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:29,004 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:29,004 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:29,004 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:29,004 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:29,005 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:29,005 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | self._check_banner() +2024-01-13 13:47:29,005 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:29,005 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:29,005 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:29,006 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise SSHException( +2024-01-13 13:47:29,006 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) +2024-01-13 13:47:29,006 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:29,006 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:29,006 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:29,006 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:29,007 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise socket.timeout() +2024-01-13 13:47:29,007 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | TimeoutError +2024-01-13 13:47:29,007 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:29,008 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:29,008 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:29,008 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:29,008 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:29,008 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | self._check_banner() +2024-01-13 13:47:29,009 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:29,009 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise SSHException( +2024-01-13 13:47:29,009 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:29,009 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:40,094 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:40,095 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:40,095 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:40,095 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:40,096 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:40,096 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:40,096 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf += self._read_timeout(timeout) +2024-01-13 13:47:40,097 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:40,097 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:40,097 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise socket.timeout() +2024-01-13 13:47:40,097 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | TimeoutError +2024-01-13 13:47:40,098 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:40,098 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:40,098 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:40,098 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:40,099 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:40,099 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | self._check_banner() +2024-01-13 13:47:40,099 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:40,099 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise SSHException( +2024-01-13 13:47:40,100 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:40,100 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:40,106 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:40,107 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:40,107 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:40,107 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:40,107 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:40,108 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:40,108 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) +2024-01-13 13:47:40,108 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:40,108 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:40,108 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise socket.timeout() +2024-01-13 13:47:40,109 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | TimeoutError +2024-01-13 13:47:40,109 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:40,109 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:40,110 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:40,110 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:40,110 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:40,110 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | self._check_banner() +2024-01-13 13:47:40,111 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:40,111 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise SSHException( +2024-01-13 13:47:40,111 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:40,111 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:51,194 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:51,195 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:51,196 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:51,196 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:51,196 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:51,196 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:51,197 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf += self._read_timeout(timeout) +2024-01-13 13:47:51,197 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:51,197 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:51,197 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise socket.timeout() +2024-01-13 13:47:51,198 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | TimeoutError +2024-01-13 13:47:51,198 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:51,198 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:51,199 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:51,199 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:47:51,199 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:51,199 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | self._check_banner() +2024-01-13 13:47:51,200 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:51,200 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise SSHException( +2024-01-13 13:47:51,200 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:51,200 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:47:51,203 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:47:51,204 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:51,204 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:47:51,204 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) +2024-01-13 13:47:51,205 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:51,205 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:47:51,205 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) +2024-01-13 13:47:51,205 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:47:51,206 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:47:51,206 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise socket.timeout() +2024-01-13 13:47:51,206 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | TimeoutError +2024-01-13 13:47:51,206 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:51,207 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: +2024-01-13 13:47:51,207 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:47:51,207 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:47:51,207 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:47:51,208 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | self._check_banner() +2024-01-13 13:47:51,208 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:47:51,208 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise SSHException( +2024-01-13 13:47:51,208 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:47:51,208 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:48:02,304 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:48:02,306 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:48:02,306 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:48:02,306 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) +2024-01-13 13:48:02,307 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:48:02,307 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:48:02,307 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf += self._read_timeout(timeout) +2024-01-13 13:48:02,307 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:48:02,308 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:48:02,308 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise socket.timeout() +2024-01-13 13:48:02,308 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | TimeoutError +2024-01-13 13:48:02,308 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:48:02,309 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: +2024-01-13 13:48:02,309 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:48:02,309 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:48:02,309 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:48:02,310 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | self._check_banner() +2024-01-13 13:48:02,310 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:48:02,310 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise SSHException( +2024-01-13 13:48:02,310 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:48:02,310 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:48:02,315 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:48:02,316 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:48:02,316 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:48:02,316 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf = self.packetizer.readline(timeout) +2024-01-13 13:48:02,317 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:48:02,317 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:48:02,317 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | buf += self._read_timeout(timeout) +2024-01-13 13:48:02,318 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:48:02,318 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:48:02,318 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise socket.timeout() +2024-01-13 13:48:02,318 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | TimeoutError +2024-01-13 13:48:02,319 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:48:02,319 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | During handling of the above exception, another exception occurred: +2024-01-13 13:48:02,319 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:48:02,319 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Traceback (most recent call last): +2024-01-13 13:48:02,319 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:48:02,320 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | self._check_banner() +2024-01-13 13:48:02,320 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:48:02,320 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | raise SSHException( +2024-01-13 13:48:02,320 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:48:02,321 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | +2024-01-13 13:48:06,492 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:48:06,763 p=5476 u=rob n=p=5476 u=rob | paramiko [branch] | Authentication (publickey) successful! +2024-01-13 13:48:08,056 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:48:13,399 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:48:13,399 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:48:13,400 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:48:13,400 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf = self.packetizer.readline(timeout) +2024-01-13 13:48:13,400 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:48:13,400 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:48:13,401 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | buf += self._read_timeout(timeout) +2024-01-13 13:48:13,401 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:48:13,401 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:48:13,401 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise socket.timeout() +2024-01-13 13:48:13,401 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | TimeoutError +2024-01-13 13:48:13,402 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:48:13,402 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | During handling of the above exception, another exception occurred: +2024-01-13 13:48:13,402 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:48:13,402 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Traceback (most recent call last): +2024-01-13 13:48:13,402 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:48:13,403 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | self._check_banner() +2024-01-13 13:48:13,403 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:48:13,403 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | raise SSHException( +2024-01-13 13:48:13,403 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:48:13,403 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | +2024-01-13 13:48:17,197 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:48:17,452 p=5475 u=rob n=p=5475 u=rob | paramiko [central] | Authentication (publickey) successful! +2024-01-13 13:48:18,609 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:48:18,611 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : generate pki wireguard key-pair] ***************************************************************** +2024-01-13 13:48:18,619 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:48:18,624 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:48:19,490 p=5484 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:42:33,328 p=72313 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use +2024-01-13 13:48:19,490 p=5483 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:42:33,985 p=72314 u=rob n=p=72314 u=rob | paramiko [central] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:42:33,991 p=72313 u=rob n=p=72313 u=rob | paramiko [branch] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:42:34,239 p=72313 u=rob n=p=72313 u=rob | paramiko [branch] | Authentication (publickey) successful! -2023-08-31 21:42:34,241 p=72314 u=rob n=p=72314 u=rob | paramiko [central] | Authentication (publickey) successful! -2023-08-31 21:42:36,595 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:42:36,596 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:42:36,603 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : set pub and private key] *************************************************************************************************************************************************** -2023-08-31 21:42:36,638 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:42:36,639 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:42:37,566 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:42:37,567 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:42:37,575 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : setup nodes] *************************************************************************************************************************************************************** -2023-08-31 21:42:37,609 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:42:37,610 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:42:47,693 p=71926 u=rob n=ansible | [WARNING]: To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if present in the running configuration on device including the indentation +2024-01-13 13:48:20,262 p=5483 u=rob n=p=5483 u=rob | paramiko [central] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:48:20,285 p=5484 u=rob n=p=5484 u=rob | paramiko [branch] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:48:20,531 p=5483 u=rob n=p=5483 u=rob | paramiko [central] | Authentication (publickey) successful! +2024-01-13 13:48:20,577 p=5484 u=rob n=p=5484 u=rob | paramiko [branch] | Authentication (publickey) successful! +2024-01-13 13:48:22,964 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:48:23,374 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:48:23,377 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : set pub and private key] ************************************************************************* +2024-01-13 13:48:23,385 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:48:23,388 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:48:23,414 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:48:23,415 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:48:23,416 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : setup nodes] ************************************************************************************* +2024-01-13 13:48:23,427 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:48:23,427 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:48:36,229 p=4891 u=rob n=ansible | [WARNING]: To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if +present in the running configuration on device including the indentation -2023-08-31 21:42:47,693 p=71926 u=rob n=ansible | changed: [central] -2023-08-31 21:42:47,694 p=71926 u=rob n=ansible | changed: [branch] -2023-08-31 21:42:47,704 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ********************************************************************************************************************************* -2023-08-31 21:42:47,736 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:42:47,739 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:42:47,746 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:42:48,806 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:42:48,816 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: stop nodes id] ************************************************************************************************************************************************** -2023-08-31 21:42:48,848 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:42:48,852 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:42:48,857 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:42:48,863 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:42:48,866 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after stop] ************************************************************************************************************************************************ -2023-08-31 21:42:48,880 p=71926 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:42:48,880 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:42:53,894 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:42:53,910 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start nodes id] ************************************************************************************************************************************************* -2023-08-31 21:42:53,948 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:42:53,950 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:42:53,957 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:42:53,959 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:42:53,963 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after start] *********************************************************************************************************************************************** -2023-08-31 21:42:53,974 p=71926 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:42:53,975 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:42:58,992 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:42:59,006 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait, b/c the ping often failed without a short break] ********************************************************************************************************** -2023-08-31 21:42:59,028 p=71926 u=rob n=ansible | Pausing for 30 seconds -2023-08-31 21:42:59,029 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:43:29,046 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:43:29,060 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: do ping test] *************************************************************************************************************************************************** -2023-08-31 21:43:29,094 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:29,094 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:34,654 p=71926 u=rob n=ansible | ok: [central] => (item=10.0.2.100) -2023-08-31 21:43:34,672 p=71926 u=rob n=ansible | ok: [branch] => (item=10.0.1.100) -2023-08-31 21:43:34,679 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: execute test commands] ****************************************************************************************************************************************** -2023-08-31 21:43:34,700 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:34,711 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:35,790 p=71926 u=rob n=ansible | ok: [central] => (item={'desc': 'Test if IP is set to interface', 'command': "ip -4 addr show dev eth2 | grep inet | tr -s ' ' | cut -d' ' -f3 | head -n 1", 'wait_for': ['result[0] contains "10.0.1.254/24"']}) -2023-08-31 21:43:36,170 p=71926 u=rob n=ansible | ok: [branch] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.2/24 u/u VPN-to-central"']}) -2023-08-31 21:43:37,255 p=71926 u=rob n=ansible | ok: [central] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.1/24 u/u VPN-to-Branch"']}) -2023-08-31 21:43:37,274 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register stdout commands] *************************************************************************************************************************************** -2023-08-31 21:43:37,310 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:37,315 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:38,670 p=71926 u=rob n=ansible | ok: [branch] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) -2023-08-31 21:43:38,677 p=71926 u=rob n=ansible | ok: [central] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) -2023-08-31 21:43:42,942 p=71926 u=rob n=ansible | ok: [central] => (item={'name': 'ping_branch_pc', 'command': 'ping 10.0.2.100 count 4'}) -2023-08-31 21:43:42,963 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************************************************************************************** -2023-08-31 21:43:42,994 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:42,997 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:43,921 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:43:43,922 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:43:43,931 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Reboot vyos] **************************************************************************************************************************************************** -2023-08-31 21:43:43,965 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:43,966 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:45,100 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:43:45,100 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:43:45,105 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait while shutdown] ******************************************************************************************************************************************** -2023-08-31 21:43:45,120 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:45,123 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos nodes] ******************************************************************************************************************************************** -2023-08-31 21:43:45,141 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:45,151 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:46,074 p=71926 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:43:46,076 p=71926 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:43:46,892 p=72849 u=rob n=p=72849 u=rob | paramiko [branch] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:43:46,895 p=72848 u=rob n=p=72848 u=rob | paramiko [central] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:43:47,166 p=72848 u=rob n=p=72848 u=rob | paramiko [central] | Authentication (publickey) successful! -2023-08-31 21:43:47,173 p=72849 u=rob n=p=72849 u=rob | paramiko [branch] | Authentication (publickey) successful! -2023-08-31 21:43:48,250 p=71926 u=rob n=ansible | ok: [branch] -2023-08-31 21:43:48,250 p=71926 u=rob n=ansible | ok: [central] -2023-08-31 21:43:48,254 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ********************************************************************************************************************************* -2023-08-31 21:43:48,277 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:48,277 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:43:48,282 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:43:50,659 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:43:50,668 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: stop nodes id] ************************************************************************************************************************************************** -2023-08-31 21:43:50,700 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:50,705 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:50,709 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:43:50,715 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:43:50,718 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after stop] ************************************************************************************************************************************************ -2023-08-31 21:43:50,732 p=71926 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:43:50,732 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:43:55,754 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:43:55,764 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start nodes id] ************************************************************************************************************************************************* -2023-08-31 21:43:55,807 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:43:55,811 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:43:55,817 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:43:55,822 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:43:55,826 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after start] *********************************************************************************************************************************************** -2023-08-31 21:43:55,839 p=71926 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:43:55,839 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:44:00,859 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:44:00,872 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait, b/c the ping often failed without a short break] ********************************************************************************************************** -2023-08-31 21:44:00,894 p=71926 u=rob n=ansible | Pausing for 30 seconds -2023-08-31 21:44:00,894 p=71926 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:44:30,910 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:44:30,924 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: do ping test] *************************************************************************************************************************************************** -2023-08-31 21:44:30,961 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:30,962 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:36,294 p=71926 u=rob n=ansible | ok: [central] => (item=10.0.2.100) -2023-08-31 21:44:36,301 p=71926 u=rob n=ansible | ok: [branch] => (item=10.0.1.100) -2023-08-31 21:44:36,310 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: execute test commands] ****************************************************************************************************************************************** -2023-08-31 21:44:36,339 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:36,343 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:37,426 p=71926 u=rob n=ansible | ok: [central] => (item={'desc': 'Test if IP is set to interface', 'command': "ip -4 addr show dev eth2 | grep inet | tr -s ' ' | cut -d' ' -f3 | head -n 1", 'wait_for': ['result[0] contains "10.0.1.254/24"']}) -2023-08-31 21:44:37,644 p=71926 u=rob n=ansible | ok: [branch] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.2/24 u/u VPN-to-central"']}) -2023-08-31 21:44:38,706 p=71926 u=rob n=ansible | ok: [central] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.1/24 u/u VPN-to-Branch"']}) -2023-08-31 21:44:38,731 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register stdout commands] *************************************************************************************************************************************** -2023-08-31 21:44:38,771 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,775 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,783 p=71926 u=rob n=ansible | skipping: [central] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) -2023-08-31 21:44:38,788 p=71926 u=rob n=ansible | skipping: [branch] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) -2023-08-31 21:44:38,791 p=71926 u=rob n=ansible | skipping: [central] => (item={'name': 'ping_branch_pc', 'command': 'ping 10.0.2.100 count 4'}) -2023-08-31 21:44:38,792 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:38,792 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,796 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************************************************************************************** -2023-08-31 21:44:38,817 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,819 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,824 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,828 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:38,833 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: ake sure tmp dir exist] ***************************************************************************************************************************************** -2023-08-31 21:44:38,849 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,857 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,859 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,864 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:38,867 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register status of tmp/] **************************************************************************************************************************************** -2023-08-31 21:44:38,881 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,889 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,891 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,896 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:38,900 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: ownload upgrade_iso] ******************************************************************************************************************************************** -2023-08-31 21:44:38,916 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,925 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,925 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,932 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:38,937 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Copy iso to host] *********************************************************************************************************************************************** -2023-08-31 21:44:38,959 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,960 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,961 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,966 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:38,969 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: upgrade vyos] *************************************************************************************************************************************************** -2023-08-31 21:44:38,983 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:38,991 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:38,993 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:38,998 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,001 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Reboot vyos] **************************************************************************************************************************************************** -2023-08-31 21:44:39,014 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,021 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,024 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,028 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,031 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait while shutdown] ******************************************************************************************************************************************** -2023-08-31 21:44:39,043 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,046 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos nodes] ******************************************************************************************************************************************** -2023-08-31 21:44:39,067 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,067 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,069 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,074 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,079 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: clear tmp dir] ************************************************************************************************************************************************** -2023-08-31 21:44:39,090 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,094 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ********************************************************************************************************************************* -2023-08-31 21:44:39,114 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,115 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,117 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,121 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,124 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: stop nodes id] ************************************************************************************************************************************************** -2023-08-31 21:44:39,145 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,148 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,153 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,158 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,161 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after stop] ************************************************************************************************************************************************ -2023-08-31 21:44:39,173 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,175 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start nodes id] ************************************************************************************************************************************************* -2023-08-31 21:44:39,195 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,199 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,203 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,209 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,212 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after start] *********************************************************************************************************************************************** -2023-08-31 21:44:39,224 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,227 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait, b/c the ping often failed without a short break] ********************************************************************************************************** -2023-08-31 21:44:39,237 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,239 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: do ping test] *************************************************************************************************************************************************** -2023-08-31 21:44:39,259 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,259 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,262 p=71926 u=rob n=ansible | skipping: [central] => (item=10.0.2.100) -2023-08-31 21:44:39,264 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,269 p=71926 u=rob n=ansible | skipping: [branch] => (item=10.0.1.100) -2023-08-31 21:44:39,270 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,273 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: execute test commands] ****************************************************************************************************************************************** -2023-08-31 21:44:39,287 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,295 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,301 p=71926 u=rob n=ansible | skipping: [central] => (item={'desc': 'Test if IP is set to interface', 'command': "ip -4 addr show dev eth2 | grep inet | tr -s ' ' | cut -d' ' -f3 | head -n 1", 'wait_for': ['result[0] contains "10.0.1.254/24"']}) -2023-08-31 21:44:39,303 p=71926 u=rob n=ansible | skipping: [central] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.1/24 u/u VPN-to-Branch"']}) -2023-08-31 21:44:39,304 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,305 p=71926 u=rob n=ansible | skipping: [branch] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.2/24 u/u VPN-to-central"']}) -2023-08-31 21:44:39,307 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,310 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register stdout commands] *************************************************************************************************************************************** -2023-08-31 21:44:39,324 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,332 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,338 p=71926 u=rob n=ansible | skipping: [central] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) -2023-08-31 21:44:39,340 p=71926 u=rob n=ansible | skipping: [central] => (item={'name': 'ping_branch_pc', 'command': 'ping 10.0.2.100 count 4'}) -2023-08-31 21:44:39,341 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,343 p=71926 u=rob n=ansible | skipping: [branch] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) -2023-08-31 21:44:39,344 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,347 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************************************************************************************** -2023-08-31 21:44:39,361 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:39,369 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,372 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,377 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,381 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: make sure output dir exist] ************************************************************************************************************************************* -2023-08-31 21:44:39,404 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,406 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,411 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,531 p=71926 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:44:39,535 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: make sure output include dir exist] ***************************************************************************************************************************** -2023-08-31 21:44:39,558 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,561 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,567 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,688 p=71926 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:44:39,691 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Get timestamp from the system] ********************************************************************************************************************************** -2023-08-31 21:44:39,710 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,712 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,717 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,855 p=71926 u=rob n=ansible | changed: [eveng] -2023-08-31 21:44:39,862 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************************************************************************************** -2023-08-31 21:44:39,889 p=71926 u=rob n=ansible | ok: [eveng] -2023-08-31 21:44:39,892 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,892 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,897 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:39,901 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: generate lab rst file] ****************************************************************************************************************************************** -2023-08-31 21:44:39,925 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:39,927 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:39,933 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:40,186 p=71926 u=rob n=ansible | changed: [eveng -> localhost] -2023-08-31 21:44:40,190 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: find all *.conf files in Lab] *********************************************************************************************************************************** -2023-08-31 21:44:40,213 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:40,216 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:40,221 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:40,413 p=71926 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:44:40,420 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy all *.conf files] ****************************************************************************************************************************************** -2023-08-31 21:44:40,445 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:40,447 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:40,455 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:40,700 p=71926 u=rob n=ansible | changed: [eveng -> localhost] => (item={'path': 'labs/Wireguard/branch.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 736, 'inode': 11076329, 'dev': 16777229, 'nlink': 1, 'atime': 1686132323.93998, 'mtime': 1686132322.6753035, 'ctime': 1686132322.6753035, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:44:40,952 p=71926 u=rob n=ansible | changed: [eveng -> localhost] => (item={'path': 'labs/Wireguard/central.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 730, 'inode': 11076330, 'dev': 16777229, 'nlink': 1, 'atime': 1686132323.972668, 'mtime': 1686132322.6754813, 'ctime': 1686132322.6754813, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:44:40,957 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: find all *.config files in Lab] ********************************************************************************************************************************* -2023-08-31 21:44:40,980 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:40,982 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:40,988 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:41,104 p=71926 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:44:41,108 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy all *.config files] **************************************************************************************************************************************** -2023-08-31 21:44:41,126 p=71926 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:44:41,135 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:41,137 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:41,142 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:41,146 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: find all *.png files in Lab] ************************************************************************************************************************************ -2023-08-31 21:44:41,169 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:41,172 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:41,178 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:41,296 p=71926 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:44:41,301 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy all *.png files] ******************************************************************************************************************************************* -2023-08-31 21:44:41,326 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:41,329 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:41,336 p=71926 u=rob n=ansible | skipping: [branch] -2023-08-31 21:44:41,560 p=71926 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/Wireguard/topology.png', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 158227, 'inode': 362576, 'dev': 16777229, 'nlink': 1, 'atime': 1676403697.132659, 'mtime': 1648155110.0, 'ctime': 1675368464.81138, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:44:41,566 p=71926 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy ansible log files] ***************************************************************************************************************************************** -2023-08-31 21:44:41,588 p=71926 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:44:41,590 p=71926 u=rob n=ansible | skipping: [central] -2023-08-31 21:44:41,595 p=71926 u=rob n=ansible | skipping: [branch] +2024-01-13 13:48:36,229 p=4891 u=rob n=ansible | changed: [central] +2024-01-13 13:48:36,610 p=4891 u=rob n=ansible | changed: [branch] +2024-01-13 13:48:36,615 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ******************************************************* +2024-01-13 13:48:36,629 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:48:36,631 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:48:36,633 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:48:37,835 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:48:37,837 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: stop nodes id] ************************************************************************ +2024-01-13 13:48:37,851 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:48:37,852 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:48:37,854 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:48:37,857 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:48:37,859 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after stop] ********************************************************************** +2024-01-13 13:48:37,867 p=4891 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:48:37,867 p=4891 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:48:42,871 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:48:42,875 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start nodes id] *********************************************************************** +2024-01-13 13:48:42,887 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:48:42,888 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:48:42,891 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:48:42,894 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:48:42,896 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after start] ********************************************************************* +2024-01-13 13:48:42,904 p=4891 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:48:42,904 p=4891 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:48:47,909 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:48:47,913 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait, b/c the ping often failed without a short break] ******************************** +2024-01-13 13:48:47,922 p=4891 u=rob n=ansible | Pausing for 30 seconds +2024-01-13 13:48:47,922 p=4891 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:49:17,926 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:49:17,938 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: do ping test] ************************************************************************* +2024-01-13 13:49:17,971 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:17,985 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:23,418 p=4891 u=rob n=ansible | ok: [branch] => (item=10.0.1.100) +2024-01-13 13:49:23,450 p=4891 u=rob n=ansible | ok: [central] => (item=10.0.2.100) +2024-01-13 13:49:23,455 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: execute test commands] **************************************************************** +2024-01-13 13:49:23,474 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:23,475 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:24,499 p=4891 u=rob n=ansible | ok: [central] => (item={'desc': 'Test if IP is set to interface', 'command': "ip -4 addr show dev eth2 | grep inet | tr -s ' ' | cut -d' ' -f3 | head -n 1", 'wait_for': ['result[0] contains "10.0.1.254/24"']}) +2024-01-13 13:49:24,939 p=4891 u=rob n=ansible | ok: [branch] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.2/24 u/u VPN-to-central"']}) +2024-01-13 13:49:25,888 p=4891 u=rob n=ansible | ok: [central] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.1/24 u/u VPN-to-Branch"']}) +2024-01-13 13:49:25,895 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register stdout commands] ************************************************************* +2024-01-13 13:49:25,915 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:25,918 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:27,311 p=4891 u=rob n=ansible | ok: [central] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) +2024-01-13 13:49:27,321 p=4891 u=rob n=ansible | ok: [branch] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) +2024-01-13 13:49:31,485 p=4891 u=rob n=ansible | ok: [central] => (item={'name': 'ping_branch_pc', 'command': 'ping 10.0.2.100 count 4'}) +2024-01-13 13:49:31,492 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************ +2024-01-13 13:49:31,513 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:31,513 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:31,538 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:49:31,539 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:49:31,541 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Reboot vyos] ************************************************************************** +2024-01-13 13:49:31,551 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:31,552 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:32,676 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:49:32,677 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:49:32,681 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait while shutdown] ****************************************************************** +2024-01-13 13:49:32,690 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:32,692 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos nodes] ****************************************************************** +2024-01-13 13:49:32,705 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:32,706 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:34,320 p=5647 u=rob n=p=5647 u=rob | paramiko [branch] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:49:34,321 p=5646 u=rob n=p=5646 u=rob | paramiko [central] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:49:34,562 p=5647 u=rob n=p=5647 u=rob | paramiko [branch] | Authentication (publickey) successful! +2024-01-13 13:49:34,562 p=5646 u=rob n=p=5646 u=rob | paramiko [central] | Authentication (publickey) successful! +2024-01-13 13:49:35,798 p=4891 u=rob n=ansible | ok: [central] +2024-01-13 13:49:35,798 p=4891 u=rob n=ansible | ok: [branch] +2024-01-13 13:49:35,800 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ******************************************************* +2024-01-13 13:49:35,811 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:35,811 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:49:35,815 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:49:36,531 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:49:36,535 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: stop nodes id] ************************************************************************ +2024-01-13 13:49:36,554 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:36,555 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:36,558 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:49:36,562 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:49:36,564 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after stop] ********************************************************************** +2024-01-13 13:49:36,572 p=4891 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:49:36,573 p=4891 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:49:41,582 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:49:41,587 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start nodes id] *********************************************************************** +2024-01-13 13:49:41,609 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:49:41,612 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:49:41,615 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:49:41,619 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:49:41,621 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after start] ********************************************************************* +2024-01-13 13:49:41,630 p=4891 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:49:41,631 p=4891 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:49:46,638 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:49:46,643 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait, b/c the ping often failed without a short break] ******************************** +2024-01-13 13:49:46,655 p=4891 u=rob n=ansible | Pausing for 30 seconds +2024-01-13 13:49:46,655 p=4891 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:50:16,661 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:50:16,665 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: do ping test] ************************************************************************* +2024-01-13 13:50:16,683 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:16,684 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:22,047 p=4891 u=rob n=ansible | ok: [branch] => (item=10.0.1.100) +2024-01-13 13:50:22,070 p=4891 u=rob n=ansible | ok: [central] => (item=10.0.2.100) +2024-01-13 13:50:22,076 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: execute test commands] **************************************************************** +2024-01-13 13:50:22,097 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:22,098 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:23,111 p=4891 u=rob n=ansible | ok: [central] => (item={'desc': 'Test if IP is set to interface', 'command': "ip -4 addr show dev eth2 | grep inet | tr -s ' ' | cut -d' ' -f3 | head -n 1", 'wait_for': ['result[0] contains "10.0.1.254/24"']}) +2024-01-13 13:50:23,453 p=4891 u=rob n=ansible | ok: [branch] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.2/24 u/u VPN-to-central"']}) +2024-01-13 13:50:24,378 p=4891 u=rob n=ansible | ok: [central] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.1/24 u/u VPN-to-Branch"']}) +2024-01-13 13:50:24,393 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register stdout commands] ************************************************************* +2024-01-13 13:50:24,428 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,438 p=4891 u=rob n=ansible | skipping: [central] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) +2024-01-13 13:50:24,445 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,446 p=4891 u=rob n=ansible | skipping: [central] => (item={'name': 'ping_branch_pc', 'command': 'ping 10.0.2.100 count 4'}) +2024-01-13 13:50:24,448 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,454 p=4891 u=rob n=ansible | skipping: [branch] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) +2024-01-13 13:50:24,455 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,466 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************ +2024-01-13 13:50:24,488 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,504 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,518 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,528 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,541 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: ake sure tmp dir exist] *************************************************************** +2024-01-13 13:50:24,562 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,575 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,590 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,595 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,610 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register status of tmp/] ************************************************************** +2024-01-13 13:50:24,632 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,651 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,668 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,672 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,684 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: download upgrade_iso] ***************************************************************** +2024-01-13 13:50:24,706 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,721 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,736 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,745 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,771 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Copy iso to host] ********************************************************************* +2024-01-13 13:50:24,793 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,804 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,809 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,812 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,814 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: upgrade vyos] ************************************************************************* +2024-01-13 13:50:24,825 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,826 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,827 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,830 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,831 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Reboot vyos] ************************************************************************** +2024-01-13 13:50:24,839 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,844 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,844 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,848 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,850 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait while shutdown] ****************************************************************** +2024-01-13 13:50:24,855 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,857 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Wait for vyos nodes] ****************************************************************** +2024-01-13 13:50:24,865 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,869 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,871 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,875 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,876 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: clear tmp dir] ************************************************************************ +2024-01-13 13:50:24,883 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,884 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Login to EVE-NG and get Cookie] ******************************************************* +2024-01-13 13:50:24,895 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,895 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,897 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,899 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,901 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: stop nodes id] ************************************************************************ +2024-01-13 13:50:24,913 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,914 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,917 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,921 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,922 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after stop] ********************************************************************** +2024-01-13 13:50:24,929 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,931 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: start nodes id] *********************************************************************** +2024-01-13 13:50:24,943 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,944 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,948 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,951 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,953 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait after start] ********************************************************************* +2024-01-13 13:50:24,958 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,960 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: wait, b/c the ping often failed without a short break] ******************************** +2024-01-13 13:50:24,966 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,968 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: do ping test] ************************************************************************* +2024-01-13 13:50:24,982 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:24,982 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:24,985 p=4891 u=rob n=ansible | skipping: [central] => (item=10.0.2.100) +2024-01-13 13:50:24,985 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:24,988 p=4891 u=rob n=ansible | skipping: [branch] => (item=10.0.1.100) +2024-01-13 13:50:24,988 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:24,990 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: execute test commands] **************************************************************** +2024-01-13 13:50:25,002 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:25,003 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,005 p=4891 u=rob n=ansible | skipping: [central] => (item={'desc': 'Test if IP is set to interface', 'command': "ip -4 addr show dev eth2 | grep inet | tr -s ' ' | cut -d' ' -f3 | head -n 1", 'wait_for': ['result[0] contains "10.0.1.254/24"']}) +2024-01-13 13:50:25,005 p=4891 u=rob n=ansible | skipping: [central] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.1/24 u/u VPN-to-Branch"']}) +2024-01-13 13:50:25,006 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,008 p=4891 u=rob n=ansible | skipping: [branch] => (item={'desc': 'show interfaces wireguard', 'command': 'show interfaces wireguard', 'wait_for': ['result[0] contains "S - State, L - Link, u - Up, D - Down, A - Admin Down"', 'result[0] contains "Interface IP Address S/L Description"', 'result[0] contains "--------- ---------- --- -----------"', 'result[0] contains "wg01 192.168.0.2/24 u/u VPN-to-central"']}) +2024-01-13 13:50:25,009 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,011 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: register stdout commands] ************************************************************* +2024-01-13 13:50:25,022 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:25,023 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,024 p=4891 u=rob n=ansible | skipping: [central] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) +2024-01-13 13:50:25,025 p=4891 u=rob n=ansible | skipping: [central] => (item={'name': 'ping_branch_pc', 'command': 'ping 10.0.2.100 count 4'}) +2024-01-13 13:50:25,025 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,028 p=4891 u=rob n=ansible | skipping: [branch] => (item={'name': 'show_interfaces_wireguard', 'command': 'show interfaces wireguard'}) +2024-01-13 13:50:25,028 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,030 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************ +2024-01-13 13:50:25,041 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:25,041 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,043 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,045 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,047 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: make sure output dir exist] *********************************************************** +2024-01-13 13:50:25,058 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,059 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,064 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,205 p=4891 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:50:25,207 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: make sure output include dir exist] *************************************************** +2024-01-13 13:50:25,219 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,221 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,223 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,380 p=4891 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:50:25,397 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Get timestamp from the system] ******************************************************** +2024-01-13 13:50:25,435 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,454 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,462 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,694 p=4891 u=rob n=ansible | changed: [eveng] +2024-01-13 13:50:25,697 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: Set variables] ************************************************************************ +2024-01-13 13:50:25,709 p=4891 u=rob n=ansible | ok: [eveng] +2024-01-13 13:50:25,709 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,711 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,715 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:25,717 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: generate lab rst file] **************************************************************** +2024-01-13 13:50:25,729 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:25,731 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:25,734 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:26,007 p=4891 u=rob n=ansible | changed: [eveng -> localhost] +2024-01-13 13:50:26,009 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: find all *.conf files in Lab] ********************************************************* +2024-01-13 13:50:26,020 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:26,021 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:26,025 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:26,209 p=4891 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:50:26,210 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy all *.conf files] **************************************************************** +2024-01-13 13:50:26,222 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:26,224 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:26,226 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:26,505 p=4891 u=rob n=ansible | changed: [eveng -> localhost] => (item={'path': 'labs/master/Wireguard/branch.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 736, 'inode': 22902870, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4573534, 'mtime': 1701342323.3212438, 'ctime': 1701346520.0276117, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:50:26,776 p=4891 u=rob n=ansible | changed: [eveng -> localhost] => (item={'path': 'labs/master/Wireguard/central.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 730, 'inode': 22902871, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4573667, 'mtime': 1701342323.3214147, 'ctime': 1701346520.0279238, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:50:26,779 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: find all *.config files in Lab] ******************************************************* +2024-01-13 13:50:26,791 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:26,792 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:26,795 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:26,929 p=4891 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:50:26,931 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy all *.config files] ************************************************************** +2024-01-13 13:50:26,942 p=4891 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:50:26,943 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:26,944 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:26,948 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:26,950 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: find all *.png files in Lab] ********************************************************** +2024-01-13 13:50:26,960 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:26,962 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:26,966 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:27,103 p=4891 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:50:27,105 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy all *.png files] ***************************************************************** +2024-01-13 13:50:27,116 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:27,117 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:27,120 p=4891 u=rob n=ansible | skipping: [branch] +2024-01-13 13:50:27,377 p=4891 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/master/Wireguard/topology.png', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 158227, 'inode': 22902868, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4574172, 'mtime': 1648155110.0, 'ctime': 1701346520.0270474, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:50:27,380 p=4891 u=rob n=ansible | TASK [eve-ng-lab-test : Wireguard: copy ansible log files] *************************************************************** +2024-01-13 13:50:27,391 p=4891 u=rob n=ansible | skipping: [oobm-xcnelw] +2024-01-13 13:50:27,393 p=4891 u=rob n=ansible | skipping: [central] +2024-01-13 13:50:27,395 p=4891 u=rob n=ansible | skipping: [branch] diff --git a/docs/configexamples/autotest/Wireguard/Wireguard.rst b/docs/configexamples/autotest/Wireguard/Wireguard.rst index 7e287bcf..1feb03e8 100644 --- a/docs/configexamples/autotest/Wireguard/Wireguard.rst +++ b/docs/configexamples/autotest/Wireguard/Wireguard.rst @@ -3,8 +3,8 @@ Wireguard ######### -| Testdate: 2023-08-31 -| Version: 1.4-rolling-202308240020 +| Testdate: 2024-01-13 +| Version: 1.5-rolling-202401121239 This simple structure show how to connect two offices. One remote branch and the @@ -44,9 +44,9 @@ After this, the public key can be displayed, to save for later. .. code-block:: none - vyos@central:~$ generate pki wireguard key-pair - Private key: cMNGHtb5dW92ORG3HS8JJlvQF8pmVGt2Ydny8hTBLnY= - Public key: WyfLCTXi31gL+YbYOwoAHCl2RgS+y56cYHEK6pQsTQ8= + vyos@central:~$ generate pki wireguard + Private key: wHQS+ib3eMIp2DxRiAeXfFVaSCMMP1YHBaKfSR1xfV8= + Public key: RCMy6BAER0uEcPvspUb3K38MHyHJpK5kiV5IOX943HI= After you have each public key. The wireguard interfaces can be setup. @@ -102,11 +102,11 @@ And ping the Branch PC from your central router to check the response. vyos@central:~$ ping 10.0.2.100 count 4 PING 10.0.2.100 (10.0.2.100) 56(84) bytes of data. - 64 bytes from 10.0.2.100: icmp_seq=1 ttl=63 time=0.641 ms - 64 bytes from 10.0.2.100: icmp_seq=2 ttl=63 time=0.836 ms - 64 bytes from 10.0.2.100: icmp_seq=3 ttl=63 time=0.792 ms - 64 bytes from 10.0.2.100: icmp_seq=4 ttl=63 time=1.09 ms + 64 bytes from 10.0.2.100: icmp_seq=1 ttl=63 time=0.894 ms + 64 bytes from 10.0.2.100: icmp_seq=2 ttl=63 time=0.869 ms + 64 bytes from 10.0.2.100: icmp_seq=3 ttl=63 time=0.966 ms + 64 bytes from 10.0.2.100: icmp_seq=4 ttl=63 time=0.998 ms --- 10.0.2.100 ping statistics --- - 4 packets transmitted, 4 received, 0% packet loss, time 3013ms - rtt min/avg/max/mdev = 0.641/0.838/1.086/0.160 ms + 4 packets transmitted, 4 received, 0% packet loss, time 3004ms + rtt min/avg/max/mdev = 0.869/0.931/0.998/0.052 ms diff --git a/docs/configexamples/autotest/Wireguard/_include/branch.conf b/docs/configexamples/autotest/Wireguard/_include/branch.conf index b995ad04..f66c3687 100644 --- a/docs/configexamples/autotest/Wireguard/_include/branch.conf +++ b/docs/configexamples/autotest/Wireguard/_include/branch.conf @@ -1,14 +1,14 @@ set interface ethernet eth2 address 10.0.2.254/24 set interface ethernet eth1 address 198.51.100.2/24 -set interfaces wireguard wg01 private-key 'oDZ2S/4S6UEuhOyk0MvNSQTebugihX5RKCrI3exmHV8=' +set interfaces wireguard wg01 private-key 'QM3ZtmaxstxIDoz00AVLE/F/UVjmdcrOvfKYW/TVw18=' set interfaces wireguard wg01 address 192.168.0.2/24 set interfaces wireguard wg01 description 'VPN-to-central' set interfaces wireguard wg01 peer central allowed-ips 10.0.1.0/24 set interfaces wireguard wg01 peer central allowed-ips 192.168.0.0/24 set interfaces wireguard wg01 peer central address 198.51.100.1 set interfaces wireguard wg01 peer central port 51820 -set interfaces wireguard wg01 peer central public-key 'WyfLCTXi31gL+YbYOwoAHCl2RgS+y56cYHEK6pQsTQ8=' +set interfaces wireguard wg01 peer central public-key 'RCMy6BAER0uEcPvspUb3K38MHyHJpK5kiV5IOX943HI=' set interfaces wireguard wg01 port 51820 set protocols static route 10.0.1.0/24 interface wg01 \ No newline at end of file diff --git a/docs/configexamples/autotest/Wireguard/_include/central.conf b/docs/configexamples/autotest/Wireguard/_include/central.conf index 7bfd9fb0..df6e4002 100644 --- a/docs/configexamples/autotest/Wireguard/_include/central.conf +++ b/docs/configexamples/autotest/Wireguard/_include/central.conf @@ -1,14 +1,14 @@ set interface ethernet eth2 address 10.0.1.254/24 set interface ethernet eth1 address 198.51.100.1/24 -set interfaces wireguard wg01 private-key 'cMNGHtb5dW92ORG3HS8JJlvQF8pmVGt2Ydny8hTBLnY=' +set interfaces wireguard wg01 private-key 'wHQS+ib3eMIp2DxRiAeXfFVaSCMMP1YHBaKfSR1xfV8=' set interfaces wireguard wg01 address 192.168.0.1/24 set interfaces wireguard wg01 description 'VPN-to-Branch' set interfaces wireguard wg01 peer branch allowed-ips 10.0.2.0/24 set interfaces wireguard wg01 peer branch allowed-ips 192.168.0.0/24 set interfaces wireguard wg01 peer branch address 198.51.100.2 set interfaces wireguard wg01 peer branch port 51820 -set interfaces wireguard wg01 peer branch public-key '9ySVcjER2cY1tG/L7598zHg8g1xyggjxALqzeCxLgw4=' +set interfaces wireguard wg01 peer branch public-key 'nWhMTjGQbQiJwaNqHpZ/p8+iAH29HaJDNsdfsRdW9As=' set interfaces wireguard wg01 port 51820 set protocols static route 10.0.2.0/24 interface wg01 \ No newline at end of file diff --git a/docs/configexamples/autotest/tunnelbroker/tunnelbroker.log b/docs/configexamples/autotest/tunnelbroker/tunnelbroker.log index e67e82cb..c1496e16 100644 --- a/docs/configexamples/autotest/tunnelbroker/tunnelbroker.log +++ b/docs/configexamples/autotest/tunnelbroker/tunnelbroker.log @@ -1,728 +1,750 @@ -2023-08-31 21:48:26,936 p=73753 u=rob n=ansible | PLAY [Automatic VyOS Lab test] ********************************************************************************************************************************************************************* -2023-08-31 21:48:26,975 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: fail if node_template_iso is empty] *********************************************************************************************************************** -2023-08-31 21:48:26,993 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:26,994 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:26,995 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:26,999 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:27,002 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: fail if node_template_version is empty] ******************************************************************************************************************* -2023-08-31 21:48:27,015 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:27,023 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:27,025 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:27,030 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:27,033 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: install requirements] ************************************************************************************************************************************* -2023-08-31 21:48:27,052 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:27,055 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:27,060 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:28,942 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:28,960 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Login to EVE-NG and get Cookie] *************************************************************************************************************************** -2023-08-31 21:48:28,994 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:28,996 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:29,000 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:29,700 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:29,704 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: get template facts] *************************************************************************************************************************************** -2023-08-31 21:48:29,722 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:29,725 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:29,734 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,220 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:30,225 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Register path status] ************************************************************************************************************************************* -2023-08-31 21:48:30,250 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,253 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,260 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,472 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:30,477 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: create path] ********************************************************************************************************************************************** -2023-08-31 21:48:30,498 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,500 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,501 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,505 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,508 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Upload iso to eve-ng] ************************************************************************************************************************************* -2023-08-31 21:48:30,520 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,527 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,530 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,535 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,538 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: create virtioa.qcow2 file] ******************************************************************************************************************************** -2023-08-31 21:48:30,557 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,557 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,559 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,563 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,566 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Login to EVE-NG and get Cookie] *************************************************************************************************************************** -2023-08-31 21:48:30,579 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,585 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,587 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,591 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,594 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: create lab for node install] ****************************************************************************************************************************** -2023-08-31 21:48:30,612 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,613 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,615 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,619 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,622 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: open lab] ************************************************************************************************************************************************* -2023-08-31 21:48:30,636 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,642 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,645 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,649 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,652 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] *************************************************************************************************************************************************************** -2023-08-31 21:48:30,664 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,671 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,673 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,678 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,681 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: add node to lab] ****************************************************************************************************************************************** -2023-08-31 21:48:30,694 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,701 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,703 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,707 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,710 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: start node] *********************************************************************************************************************************************** -2023-08-31 21:48:30,728 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,728 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,730 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,734 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,737 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : debug] ****************************************************************************************************************************************************************** -2023-08-31 21:48:30,755 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,756 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,758 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,761 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,764 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: get node infos] ******************************************************************************************************************************************* -2023-08-31 21:48:30,777 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,783 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,785 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,789 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,791 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] *************************************************************************************************************************************************************** -2023-08-31 21:48:30,809 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,811 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,811 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,815 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,818 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: copy file] ************************************************************************************************************************************************ -2023-08-31 21:48:30,836 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,837 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,838 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,842 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,846 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: run expect script] **************************************************************************************************************************************** -2023-08-31 21:48:30,866 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,866 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,868 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,872 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,875 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Login to EVE-NG and get Cookie (due timeout)] ************************************************************************************************************* -2023-08-31 21:48:30,893 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,893 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,895 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,899 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,902 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: stop node] ************************************************************************************************************************************************ -2023-08-31 21:48:30,915 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,921 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,923 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,927 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,930 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Pause to wait node is shutdown] *************************************************************************************************************************** -2023-08-31 21:48:30,940 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,943 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: delete iso] *********************************************************************************************************************************************** -2023-08-31 21:48:30,962 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,962 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,964 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,968 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,971 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: commit virtioa.qcow2] ************************************************************************************************************************************* -2023-08-31 21:48:30,990 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:30,991 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:30,992 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:30,996 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:30,999 p=73753 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: delete lab for node install] ****************************************************************************************************************************** -2023-08-31 21:48:31,017 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:31,018 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:31,019 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:31,023 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:31,031 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : Get env file content] ****************************************************************************************************************************************************** -2023-08-31 21:48:31,258 p=73753 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:48:31,259 p=73753 u=rob n=ansible | ok: [vyos-oobm -> localhost] -2023-08-31 21:48:31,259 p=73753 u=rob n=ansible | ok: [vyos-wan -> localhost] -2023-08-31 21:48:31,259 p=73753 u=rob n=ansible | ok: [client -> localhost] -2023-08-31 21:48:31,262 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Load facts] ************************************************************************************************************************************************** -2023-08-31 21:48:31,281 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:32,232 p=73753 u=rob n=ansible | network_os is set to vyos -2023-08-31 21:48:32,233 p=73753 u=rob n=ansible | network_os is set to vyos -2023-08-31 21:48:32,234 p=73753 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko +2024-01-13 13:34:01,981 p=3127 u=rob n=ansible | PLAY [Automatic VyOS Lab test] ******************************************************************************************* +2024-01-13 13:34:01,999 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: fail if node_template_iso is empty] ********************************************* +2024-01-13 13:34:02,011 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:02,012 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:02,012 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:02,015 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:02,016 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: fail if node_template_version is empty] ***************************************** +2024-01-13 13:34:02,027 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:02,027 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:02,028 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:02,031 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:02,033 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: install requirements] *********************************************************** +2024-01-13 13:34:02,044 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:02,046 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:02,049 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:04,434 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:04,440 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Login to EVE-NG and get Cookie] ************************************************* +2024-01-13 13:34:04,467 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:04,468 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:04,471 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:05,222 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:05,227 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: get template facts] ************************************************************* +2024-01-13 13:34:05,247 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:05,249 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:05,253 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:05,690 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:05,693 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Register path status] *********************************************************** +2024-01-13 13:34:05,704 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:05,706 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:05,709 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:05,904 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:05,906 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: create path] ******************************************************************** +2024-01-13 13:34:05,923 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:05,925 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:05,928 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:05,933 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:05,936 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Upload iso to eve-ng] *********************************************************** +2024-01-13 13:34:05,961 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:05,962 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:05,964 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:05,970 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:05,974 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: create virtioa.qcow2 file] ****************************************************** +2024-01-13 13:34:05,998 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:05,999 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,001 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,007 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,011 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Login to EVE-NG and get Cookie] ************************************************* +2024-01-13 13:34:06,035 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,036 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,038 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,046 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,048 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: create lab for node install] **************************************************** +2024-01-13 13:34:06,074 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,075 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,076 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,082 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,084 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: open lab] *********************************************************************** +2024-01-13 13:34:06,111 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,112 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,115 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,120 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,123 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] ************************************************************************************* +2024-01-13 13:34:06,147 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,148 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,151 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,156 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,158 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: add node to lab] **************************************************************** +2024-01-13 13:34:06,182 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,183 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,187 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,190 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,192 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: start node] ********************************************************************* +2024-01-13 13:34:06,222 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,223 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,225 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,231 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,234 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : debug] **************************************************************************************** +2024-01-13 13:34:06,251 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,259 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,264 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,271 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,274 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: get node infos] ***************************************************************** +2024-01-13 13:34:06,298 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,299 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,302 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,306 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,308 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : set_fact] ************************************************************************************* +2024-01-13 13:34:06,331 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,332 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,335 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,339 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,342 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: copy file] ********************************************************************** +2024-01-13 13:34:06,367 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,370 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,371 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,378 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,380 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: run expect script] ************************************************************** +2024-01-13 13:34:06,391 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,392 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,393 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,397 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,399 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Login to EVE-NG and get Cookie (due timeout)] *********************************** +2024-01-13 13:34:06,410 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,410 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,411 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,414 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,416 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: stop node] ********************************************************************** +2024-01-13 13:34:06,427 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,428 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,428 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,432 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,434 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: Pause to wait node is shutdown] ************************************************* +2024-01-13 13:34:06,441 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,443 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: delete iso] ********************************************************************* +2024-01-13 13:34:06,453 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,454 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,455 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,458 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,459 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: commit virtioa.qcow2] *********************************************************** +2024-01-13 13:34:06,471 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,472 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,473 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,476 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,477 p=3127 u=rob n=ansible | TASK [eve-ng-create-node : tunnelbroker: delete lab for node install] **************************************************** +2024-01-13 13:34:06,488 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,488 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,489 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,492 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,495 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : Get env file content] **************************************************************************** +2024-01-13 13:34:06,715 p=3127 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:34:06,715 p=3127 u=rob n=ansible | ok: [vyos-wan -> localhost] +2024-01-13 13:34:06,715 p=3127 u=rob n=ansible | ok: [client -> localhost] +2024-01-13 13:34:06,716 p=3127 u=rob n=ansible | ok: [oobm-z65ole -> localhost] +2024-01-13 13:34:06,718 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Load facts] ************************************************************************ +2024-01-13 13:34:06,734 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:06,752 p=3127 u=rob n=ansible | ok: [oobm-z65ole] +2024-01-13 13:34:06,755 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:34:06,759 p=3127 u=rob n=ansible | ok: [client] +2024-01-13 13:34:06,760 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : decode oobm default startupconfig] *************************************************************** +2024-01-13 13:34:06,771 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,772 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,775 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,776 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:06,778 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: fail if node_template_version is empty] ******************************************** +2024-01-13 13:34:06,786 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:06,790 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,791 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,794 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:06,796 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:34:06,806 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:06,808 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:06,811 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:07,416 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:07,421 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: get running lab list] ************************************************************** +2024-01-13 13:34:07,433 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:07,434 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:07,436 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:07,842 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:07,844 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: kill running lab] ****************************************************************** +2024-01-13 13:34:07,852 p=3127 u=rob n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: +(response.json.message != "No nodes running (60071).") and (item.labname == "{{ eve_ng_folder_name }}/{{ lab }}") -2023-08-31 21:48:32,234 p=73753 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko +2024-01-13 13:34:07,854 p=3127 u=rob n=ansible | skipping: [eveng] => (item={'podid': '1', 'username': 'ansible', 'online': '1', 'uuid': '118775ba-26f6-434a-8dd5-62b0edaa4cd1', 'size': 0.0709, 'sat': '0', 'sat_name': 'master', 'labid': '2', 'labname': '/labtest/DHCPRelay_through_GRE', 'cpu': 0.5, 'mem': 4.51}) +2024-01-13 13:34:07,855 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:07,857 p=3127 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '588b9164-a3b7-4522-8058-0f6ff6286564', 'size': 0.1878, 'sat': '0', 'sat_name': 'master', 'labid': 1002, 'labname': '/Common\n', 'cpu': 0, 'mem': 0}) +2024-01-13 13:34:07,858 p=3127 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '61cc6cd0-78f4-4302-830b-482b642a5e74', 'size': 0.534, 'sat': '0', 'sat_name': 'master', 'labid': 1003, 'labname': '/MSS-Clambing\n', 'cpu': 0, 'mem': 0}) +2024-01-13 13:34:07,858 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:07,860 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:07,860 p=3127 u=rob n=ansible | skipping: [eveng] => (item={'podid': '1', 'username': 'ansible', 'online': '1', 'uuid': 'a0e4e4ed-9da3-4c84-9947-144e76edaa6b', 'size': 0.0755, 'sat': '0', 'sat_name': 'master', 'labid': '1', 'labname': '/labtest/L3VPN_EVPN', 'cpu': 1.5, 'mem': 5.21}) +2024-01-13 13:34:07,861 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:07,863 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: delete existing lab] *************************************************************** +2024-01-13 13:34:07,875 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:07,875 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:07,878 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:08,287 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:08,290 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Ensure labtest is present] ********************************************************* +2024-01-13 13:34:08,302 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:08,303 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:08,306 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:08,518 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:08,520 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Create tunnelbroker Lab] *********************************************************** +2024-01-13 13:34:08,531 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:08,531 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:08,534 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:09,028 p=3127 u=rob n=ansible | changed: [eveng] +2024-01-13 13:34:09,032 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:34:09,060 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:09,067 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:09,076 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:09,725 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:09,730 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start vyos-oobm] ******************************************************************* +2024-01-13 13:34:09,742 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:34:09,744 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:09,746 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:10,872 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:34:10,874 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos-oobm] **************************************************************** +2024-01-13 13:34:10,885 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:34:10,886 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:34:10,890 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:34:11,770 p=3127 u=rob n=ansible | network_os is set to vyos +2024-01-13 13:34:11,771 p=3127 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko -2023-08-31 21:48:32,244 p=73753 u=rob n=ansible | network_os is set to vyos -2023-08-31 21:48:32,248 p=73753 u=rob n=ansible | [WARNING]: ansible-pylibssh not installed, falling back to paramiko - -2023-08-31 21:48:32,254 p=73753 u=rob n=ansible | ok: [vyos-oobm] -2023-08-31 21:48:32,255 p=73753 u=rob n=ansible | ok: [client] -2023-08-31 21:48:32,257 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:48:32,265 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : debug] ********************************************************************************************************************************************************************* -2023-08-31 21:48:32,295 p=73753 u=rob n=ansible | ok: [eveng] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:48:33,243 p=73753 u=rob n=ansible | ok: [vyos-wan] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:48:33,243 p=73753 u=rob n=ansible | ok: [client] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:48:33,244 p=73753 u=rob n=ansible | ok: [vyos-oobm] => { - "msg": "vyos-1.4-rolling-202308240020-amd64" -} -2023-08-31 21:48:33,252 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: fail if node_template_version is empty] ********************************************************************************************************************** -2023-08-31 21:48:33,276 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:33,284 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:33,287 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:33,293 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:33,297 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:48:33,317 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:33,319 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:33,326 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:33,956 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:33,966 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: get running lab list] **************************************************************************************************************************************** -2023-08-31 21:48:34,000 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:34,001 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:34,005 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:34,447 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:34,455 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: kill running lab] ******************************************************************************************************************************************** -2023-08-31 21:48:34,481 p=73753 u=rob n=ansible | [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: item.labname == "{{ eve_ng_folder_name }}/{{ lab }}" - -2023-08-31 21:48:34,482 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:34,486 p=73753 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '0fc5edef-8cf2-4400-9a1c-0c4c41a1a881', 'size': 0.1996, 'sat': '0', 'sat_name': 'master', 'labid': 1001, 'labname': '/ecmp wireguard\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:48:34,487 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:34,489 p=73753 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '588b9164-a3b7-4522-8058-0f6ff6286564', 'size': 1.0595, 'sat': '0', 'sat_name': 'master', 'labid': 1002, 'labname': '/Common\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:48:34,491 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:34,494 p=73753 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': '9785926c-63ec-42c0-a1ca-a386b9013151', 'size': 0.4469, 'sat': '0', 'sat_name': 'master', 'labid': 1003, 'labname': '/layer2 via IPSec\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:48:34,496 p=73753 u=rob n=ansible | skipping: [eveng] => (item={'podid': '0', 'username': 'admin', 'online': '1', 'uuid': 'aa98095e-3b64-45aa-b883-e2b7fdfac08c', 'size': 0.5229, 'sat': '0', 'sat_name': 'master', 'labid': 1004, 'labname': '/ospf\n', 'cpu': 0, 'mem': 0}) -2023-08-31 21:48:34,498 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:34,501 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: delete existing lab] ***************************************************************************************************************************************** -2023-08-31 21:48:34,519 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:34,522 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:34,527 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:34,959 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:34,970 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Ensure labtest is present] *********************************************************************************************************************************** -2023-08-31 21:48:35,001 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:35,002 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:35,006 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:35,208 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:35,213 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Create tunnelbroker Lab] ************************************************************************************************************************************* -2023-08-31 21:48:35,234 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:35,236 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:35,243 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:35,753 p=73753 u=rob n=ansible | changed: [eveng] -2023-08-31 21:48:35,758 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:48:35,778 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:35,781 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:35,785 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:36,447 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:36,456 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start vyos-oobm] ********************************************************************************************************************************************* -2023-08-31 21:48:36,486 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:48:36,487 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:36,491 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:37,502 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:48:37,513 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos-oobm] ****************************************************************************************************************************************** -2023-08-31 21:48:37,536 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:48:37,547 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:48:37,553 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:48:38,430 p=73753 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:49:08,523 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:49:08,539 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:49:08,540 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:49:08,541 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | buf = self.packetizer.readline(timeout) -2023-08-31 21:49:08,541 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:49:08,542 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | buf += self._read_timeout(timeout) -2023-08-31 21:49:08,543 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:49:08,543 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | raise socket.timeout() -2023-08-31 21:49:08,544 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | socket.timeout -2023-08-31 21:49:08,545 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:49:08,545 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | During handling of the above exception, another exception occurred: -2023-08-31 21:49:08,546 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:49:08,547 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:49:08,547 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:49:08,548 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | self._check_banner() -2023-08-31 21:49:08,548 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:49:08,549 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | raise SSHException( -2023-08-31 21:49:08,549 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:49:08,550 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:49:39,569 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:49:39,571 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:49:39,571 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:49:39,572 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | buf = self.packetizer.readline(timeout) -2023-08-31 21:49:39,572 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:49:39,572 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | buf += self._read_timeout(timeout) -2023-08-31 21:49:39,572 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:49:39,572 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | raise socket.timeout() -2023-08-31 21:49:39,572 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | socket.timeout -2023-08-31 21:49:39,573 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:49:39,573 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | During handling of the above exception, another exception occurred: -2023-08-31 21:49:39,573 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:49:39,573 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:49:39,573 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:49:39,573 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | self._check_banner() -2023-08-31 21:49:39,574 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:49:39,574 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | raise SSHException( -2023-08-31 21:49:39,574 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:49:39,574 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:50:10,677 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:50:10,681 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:50:10,682 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:50:10,684 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | buf = self.packetizer.readline(timeout) -2023-08-31 21:50:10,685 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:50:10,686 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | buf += self._read_timeout(timeout) -2023-08-31 21:50:10,687 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:50:10,688 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | raise socket.timeout() -2023-08-31 21:50:10,688 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | socket.timeout -2023-08-31 21:50:10,689 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:50:10,690 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | During handling of the above exception, another exception occurred: -2023-08-31 21:50:10,691 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:50:10,691 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Traceback (most recent call last): -2023-08-31 21:50:10,692 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:50:10,692 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | self._check_banner() -2023-08-31 21:50:10,693 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:50:10,694 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | raise SSHException( -2023-08-31 21:50:10,694 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:50:10,695 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | -2023-08-31 21:50:12,568 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:50:12,825 p=74113 u=rob n=p=74113 u=rob | paramiko [vyos-oobm] | Authentication (publickey) successful! -2023-08-31 21:50:13,908 p=73753 u=rob n=ansible | ok: [vyos-oobm] -2023-08-31 21:50:13,910 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:50:13,929 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:50:13,932 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:50:13,939 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:50:14,868 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:50:14,877 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: get lab status] ********************************************************************************************************************************************** -2023-08-31 21:50:14,908 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:50:14,910 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:50:14,916 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:50:15,380 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:50:15,389 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start all nodes] ********************************************************************************************************************************************* -2023-08-31 21:50:15,417 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:50:15,420 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:50:15,427 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:50:16,519 p=73753 u=rob n=ansible | ok: [eveng] => (item=4) -2023-08-31 21:50:17,120 p=73753 u=rob n=ansible | ok: [eveng] => (item=1) -2023-08-31 21:50:18,354 p=73753 u=rob n=ansible | ok: [eveng] => (item=2) -2023-08-31 21:50:18,367 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos nodes] ***************************************************************************************************************************************** -2023-08-31 21:50:18,390 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:50:18,399 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:50:19,313 p=73753 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:50:19,317 p=73753 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:50:37,800 p=73997 u=rob n=ansible | persistent connection idle timeout triggered, timeout value is 120 secs. +2024-01-13 13:34:11,773 p=3127 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This +feature will be removed in version 2.18. Deprecation warnings can be disabled by setting deprecation_warnings=False in +ansible.cfg. +2024-01-13 13:35:27,263 p=3449 u=rob n=p=3449 u=rob | paramiko [oobm-z65ole] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:35:27,563 p=3449 u=rob n=p=3449 u=rob | paramiko [oobm-z65ole] | Authentication (publickey) successful! +2024-01-13 13:35:28,840 p=3127 u=rob n=ansible | ok: [oobm-z65ole] +2024-01-13 13:35:28,842 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:35:28,854 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:35:28,854 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:35:28,857 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:35:30,040 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:35:30,046 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: get lab status] ******************************************************************** +2024-01-13 13:35:30,064 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:35:30,064 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:35:30,067 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:35:30,516 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:35:30,520 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start all nodes] ******************************************************************* +2024-01-13 13:35:30,531 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:35:30,533 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:35:30,535 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:35:31,563 p=3127 u=rob n=ansible | ok: [eveng] => (item=4) +2024-01-13 13:35:32,108 p=3127 u=rob n=ansible | ok: [eveng] => (item=1) +2024-01-13 13:35:33,376 p=3127 u=rob n=ansible | ok: [eveng] => (item=2) +2024-01-13 13:35:33,381 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos nodes] *************************************************************** +2024-01-13 13:35:33,388 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:35:33,392 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:35:34,286 p=3127 u=rob n=ansible | network_os is set to vyos +2024-01-13 13:35:34,286 p=3127 u=rob n=ansible | network_os is set to vyos +2024-01-13 13:36:04,323 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:04,325 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:04,325 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:04,326 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:04,326 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:04,326 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:04,326 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:04,327 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) +2024-01-13 13:36:04,327 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:04,327 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:04,328 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise socket.timeout() +2024-01-13 13:36:04,328 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:04,328 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | TimeoutError +2024-01-13 13:36:04,328 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:04,328 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:04,328 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:04,329 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:04,329 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:04,329 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:04,329 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:04,329 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:04,329 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf += self._read_timeout(timeout) +2024-01-13 13:36:04,330 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:04,330 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:04,330 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:04,330 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | self._check_banner() +2024-01-13 13:36:04,330 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise socket.timeout() +2024-01-13 13:36:04,331 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:04,331 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | TimeoutError +2024-01-13 13:36:04,331 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise SSHException( +2024-01-13 13:36:04,331 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:04,331 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:04,331 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:04,332 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:04,332 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:04,332 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:04,332 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:04,333 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | self._check_banner() +2024-01-13 13:36:04,333 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:04,333 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise SSHException( +2024-01-13 13:36:04,334 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:04,334 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:11,143 p=3455 u=rob n=ansible | persistent connection idle timeout triggered, timeout value is 120 secs. See the timeout setting options in the Network Debug and Troubleshooting Guide. -2023-08-31 21:50:37,906 p=73997 u=rob n=ansible | shutdown complete -2023-08-31 21:50:49,351 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:50:49,353 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:50:49,357 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): -2023-08-31 21:50:49,357 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:50:49,358 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) -2023-08-31 21:50:49,358 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:50:49,358 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Traceback (most recent call last): -2023-08-31 21:50:49,358 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) -2023-08-31 21:50:49,358 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:50:49,358 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:50:49,358 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) -2023-08-31 21:50:49,358 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | raise socket.timeout() -2023-08-31 21:50:49,359 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:50:49,359 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | socket.timeout -2023-08-31 21:50:49,359 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | buf += self._read_timeout(timeout) -2023-08-31 21:50:49,359 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:50:49,359 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:50:49,359 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: -2023-08-31 21:50:49,359 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | raise socket.timeout() -2023-08-31 21:50:49,359 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:50:49,359 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | socket.timeout -2023-08-31 21:50:49,359 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): -2023-08-31 21:50:49,360 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:50:49,360 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:50:49,360 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: -2023-08-31 21:50:49,360 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | self._check_banner() -2023-08-31 21:50:49,360 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:50:49,360 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:50:49,360 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Traceback (most recent call last): -2023-08-31 21:50:49,360 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | raise SSHException( -2023-08-31 21:50:49,360 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:50:49,360 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:50:49,361 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | self._check_banner() -2023-08-31 21:50:49,361 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:50:49,361 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:50:49,361 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | raise SSHException( -2023-08-31 21:50:49,361 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:50:49,361 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:20,413 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:51:20,414 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Traceback (most recent call last): -2023-08-31 21:51:20,414 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:51:20,414 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) -2023-08-31 21:51:20,414 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:51:20,414 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | buf += self._read_timeout(timeout) -2023-08-31 21:51:20,415 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:51:20,415 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | raise socket.timeout() -2023-08-31 21:51:20,415 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | socket.timeout -2023-08-31 21:51:20,415 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:20,415 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: -2023-08-31 21:51:20,416 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:20,416 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Traceback (most recent call last): -2023-08-31 21:51:20,416 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:51:20,416 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | self._check_banner() -2023-08-31 21:51:20,416 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:51:20,416 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | raise SSHException( -2023-08-31 21:51:20,417 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:51:20,417 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:20,420 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:51:20,421 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): -2023-08-31 21:51:20,421 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:51:20,421 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) -2023-08-31 21:51:20,421 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:51:20,422 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) -2023-08-31 21:51:20,422 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:51:20,422 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | raise socket.timeout() -2023-08-31 21:51:20,422 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | socket.timeout -2023-08-31 21:51:20,422 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:51:20,422 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: -2023-08-31 21:51:20,423 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:51:20,423 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): -2023-08-31 21:51:20,423 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:51:20,423 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | self._check_banner() -2023-08-31 21:51:20,423 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:51:20,423 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | raise SSHException( -2023-08-31 21:51:20,424 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:51:20,424 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:51:51,470 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:51:51,471 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Traceback (most recent call last): -2023-08-31 21:51:51,471 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:51:51,471 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) -2023-08-31 21:51:51,471 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner -2023-08-31 21:51:51,471 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:51:51,471 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | buf += self._read_timeout(timeout) -2023-08-31 21:51:51,471 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): -2023-08-31 21:51:51,472 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:51:51,472 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2270, in _check_banner -2023-08-31 21:51:51,472 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | raise socket.timeout() -2023-08-31 21:51:51,472 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) -2023-08-31 21:51:51,472 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | socket.timeout -2023-08-31 21:51:51,472 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 374, in readline -2023-08-31 21:51:51,472 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:51,472 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) -2023-08-31 21:51:51,472 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: -2023-08-31 21:51:51,472 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/packet.py", line 611, in _read_timeout -2023-08-31 21:51:51,472 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:51,473 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | raise socket.timeout() -2023-08-31 21:51:51,473 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Traceback (most recent call last): -2023-08-31 21:51:51,473 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | socket.timeout -2023-08-31 21:51:51,473 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:51:51,473 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:51:51,473 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | self._check_banner() -2023-08-31 21:51:51,473 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: -2023-08-31 21:51:51,473 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:51:51,473 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:51:51,473 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | raise SSHException( -2023-08-31 21:51:51,473 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): -2023-08-31 21:51:51,474 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:51:51,474 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2093, in run -2023-08-31 21:51:51,474 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | -2023-08-31 21:51:51,474 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | self._check_banner() -2023-08-31 21:51:51,474 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.9/site-packages/paramiko/transport.py", line 2274, in _check_banner -2023-08-31 21:51:51,474 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | raise SSHException( -2023-08-31 21:51:51,474 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner -2023-08-31 21:51:51,475 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | -2023-08-31 21:51:53,546 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:51:53,564 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:51:53,817 p=74223 u=rob n=p=74223 u=rob | paramiko [client] | Authentication (publickey) successful! -2023-08-31 21:51:53,836 p=74222 u=rob n=p=74222 u=rob | paramiko [vyos-wan] | Authentication (publickey) successful! -2023-08-31 21:51:55,165 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:51:55,165 p=73753 u=rob n=ansible | ok: [client] -2023-08-31 21:51:55,168 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : setup nodes] *************************************************************************************************************************************************************** -2023-08-31 21:51:55,190 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:51:55,190 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:51:56,125 p=74000 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use +2024-01-13 13:36:11,246 p=3455 u=rob n=ansible | shutdown complete +2024-01-13 13:36:15,421 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:15,422 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:15,423 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:15,423 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:15,423 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:15,423 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:15,424 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf += self._read_timeout(timeout) +2024-01-13 13:36:15,424 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:15,424 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:15,425 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise socket.timeout() +2024-01-13 13:36:15,425 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | TimeoutError +2024-01-13 13:36:15,425 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:15,425 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:15,426 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:15,426 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:15,426 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:15,427 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | self._check_banner() +2024-01-13 13:36:15,427 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:15,427 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise SSHException( +2024-01-13 13:36:15,427 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:15,428 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:15,433 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:15,433 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:15,434 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:15,434 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:15,434 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:15,434 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:15,435 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) +2024-01-13 13:36:15,435 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:15,435 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:15,436 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise socket.timeout() +2024-01-13 13:36:15,436 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | TimeoutError +2024-01-13 13:36:15,436 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:15,436 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:15,437 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:15,437 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:15,437 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:15,438 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | self._check_banner() +2024-01-13 13:36:15,438 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:15,438 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise SSHException( +2024-01-13 13:36:15,438 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:15,439 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:26,523 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:26,524 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:26,524 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:26,525 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:26,525 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:26,525 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:26,526 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) +2024-01-13 13:36:26,526 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:26,526 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:26,526 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:26,527 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise socket.timeout() +2024-01-13 13:36:26,527 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | TimeoutError +2024-01-13 13:36:26,527 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:26,527 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:26,527 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:26,527 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:26,527 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:26,527 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:26,528 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:26,528 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:26,528 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:26,528 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:26,528 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | self._check_banner() +2024-01-13 13:36:26,528 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf += self._read_timeout(timeout) +2024-01-13 13:36:26,528 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:26,528 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:26,529 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise SSHException( +2024-01-13 13:36:26,529 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:26,529 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:26,529 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise socket.timeout() +2024-01-13 13:36:26,529 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:26,529 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | TimeoutError +2024-01-13 13:36:26,529 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:26,530 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:26,530 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:26,530 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:26,530 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:26,531 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | self._check_banner() +2024-01-13 13:36:26,531 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:26,531 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise SSHException( +2024-01-13 13:36:26,531 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:26,532 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:37,625 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:37,627 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:37,629 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:37,630 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:37,630 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:37,631 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:37,631 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:37,632 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:37,632 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:37,632 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:37,633 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:37,634 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:37,634 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) +2024-01-13 13:36:37,634 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf += self._read_timeout(timeout) +2024-01-13 13:36:37,635 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:37,635 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:37,635 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:37,636 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:37,636 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise socket.timeout() +2024-01-13 13:36:37,636 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise socket.timeout() +2024-01-13 13:36:37,637 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | TimeoutError +2024-01-13 13:36:37,637 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | TimeoutError +2024-01-13 13:36:37,637 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:37,638 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:37,638 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:37,639 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:37,639 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:37,639 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:37,639 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:37,640 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:37,640 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:37,641 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:37,641 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | self._check_banner() +2024-01-13 13:36:37,642 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | self._check_banner() +2024-01-13 13:36:37,642 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:37,642 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:37,643 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise SSHException( +2024-01-13 13:36:37,643 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise SSHException( +2024-01-13 13:36:37,644 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:37,644 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:37,644 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:37,644 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:48,770 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:48,773 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Exception (client): Error reading SSH protocol banner +2024-01-13 13:36:48,777 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:48,777 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:48,778 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:48,778 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2327, in _check_banner +2024-01-13 13:36:48,779 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:48,780 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf = self.packetizer.readline(timeout) +2024-01-13 13:36:48,780 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:48,782 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:48,783 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:48,783 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 381, in readline +2024-01-13 13:36:48,785 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | buf += self._read_timeout(timeout) +2024-01-13 13:36:48,785 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | buf += self._read_timeout(timeout) +2024-01-13 13:36:48,786 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:48,786 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +2024-01-13 13:36:48,787 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:48,787 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/packet.py", line 626, in _read_timeout +2024-01-13 13:36:48,788 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise socket.timeout() +2024-01-13 13:36:48,788 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise socket.timeout() +2024-01-13 13:36:48,789 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | TimeoutError +2024-01-13 13:36:48,789 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | TimeoutError +2024-01-13 13:36:48,789 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:48,789 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:48,790 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:48,790 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | During handling of the above exception, another exception occurred: +2024-01-13 13:36:48,791 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:48,791 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:48,791 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Traceback (most recent call last): +2024-01-13 13:36:48,792 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Traceback (most recent call last): +2024-01-13 13:36:48,792 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:48,793 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2143, in run +2024-01-13 13:36:48,793 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | self._check_banner() +2024-01-13 13:36:48,794 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | self._check_banner() +2024-01-13 13:36:48,794 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:48,794 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | File "/Users/rob/.local/share/virtualenvs/vyos-eveng-b9X2mBdh/lib/python3.12/site-packages/paramiko/transport.py", line 2331, in _check_banner +2024-01-13 13:36:48,795 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | raise SSHException( +2024-01-13 13:36:48,796 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | raise SSHException( +2024-01-13 13:36:48,796 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:48,798 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner +2024-01-13 13:36:48,798 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | +2024-01-13 13:36:48,798 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | +2024-01-13 13:36:52,514 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:36:52,577 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:36:53,797 p=3541 u=rob n=p=3541 u=rob | paramiko [vyos-wan] | Authentication (publickey) successful! +2024-01-13 13:36:53,923 p=3542 u=rob n=p=3542 u=rob | paramiko [client] | Authentication (publickey) successful! +2024-01-13 13:36:55,449 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:36:55,665 p=3127 u=rob n=ansible | ok: [client] +2024-01-13 13:36:55,669 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : setup nodes] ************************************************************************************* +2024-01-13 13:36:55,706 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:36:55,707 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:36:57,437 p=3549 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:51:56,125 p=74001 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use +2024-01-13 13:36:57,440 p=3550 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:51:57,018 p=74000 u=rob n=p=74000 u=rob | paramiko [client] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:51:57,025 p=74001 u=rob n=p=74001 u=rob | paramiko [vyos-wan] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:51:57,267 p=74000 u=rob n=p=74000 u=rob | paramiko [client] | Authentication (publickey) successful! -2023-08-31 21:51:57,271 p=74001 u=rob n=p=74001 u=rob | paramiko [vyos-wan] | Authentication (publickey) successful! -2023-08-31 21:52:03,730 p=73753 u=rob n=ansible | [WARNING]: To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if present in the running configuration on device including the indentation +2024-01-13 13:36:58,058 p=3550 u=rob n=p=3550 u=rob | paramiko [client] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:36:58,072 p=3549 u=rob n=p=3549 u=rob | paramiko [vyos-wan] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:36:58,735 p=3550 u=rob n=p=3550 u=rob | paramiko [client] | Authentication (publickey) successful! +2024-01-13 13:36:58,770 p=3549 u=rob n=p=3549 u=rob | paramiko [vyos-wan] | Authentication (publickey) successful! +2024-01-13 13:37:07,037 p=3127 u=rob n=ansible | [WARNING]: To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if +present in the running configuration on device including the indentation -2023-08-31 21:52:03,731 p=73753 u=rob n=ansible | changed: [client] -2023-08-31 21:52:04,862 p=73753 u=rob n=ansible | changed: [vyos-wan] -2023-08-31 21:52:04,879 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : Register external IP in Tunnelbroker] ************************************************************************************************************************************** -2023-08-31 21:52:04,905 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:52:04,913 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:04,923 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:17,562 p=73753 u=rob n=ansible | ok: [vyos-wan -> eveng(eve-ng)] -2023-08-31 21:52:17,569 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : get ipv4 address of vyos-wan (eth1)] *************************************************************************************************************************************** -2023-08-31 21:52:17,597 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:52:17,606 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:17,617 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:18,676 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:52:18,688 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : Set variables] ************************************************************************************************************************************************************* -2023-08-31 21:52:18,717 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:52:18,727 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:18,738 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:19,628 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:52:19,641 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : setup vyos-wan] ************************************************************************************************************************************************************ -2023-08-31 21:52:19,671 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:52:19,682 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:19,691 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:27,796 p=73753 u=rob n=ansible | changed: [vyos-wan] -2023-08-31 21:52:27,813 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:52:27,842 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:27,845 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:52:27,851 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:28,511 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:52:28,521 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: stop nodes id] *********************************************************************************************************************************************** -2023-08-31 21:52:28,553 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:52:28,556 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:28,560 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:52:28,566 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:28,570 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after stop] ********************************************************************************************************************************************* -2023-08-31 21:52:28,583 p=73753 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:52:28,584 p=73753 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:52:33,601 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:52:33,618 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start nodes id] ********************************************************************************************************************************************** -2023-08-31 21:52:33,650 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:52:33,652 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:52:33,659 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:52:33,666 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:52:33,670 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after start] ******************************************************************************************************************************************** -2023-08-31 21:52:33,682 p=73753 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:52:33,683 p=73753 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:52:38,701 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:52:38,719 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait, b/c the ping often failed without a short break] ******************************************************************************************************* -2023-08-31 21:52:38,736 p=73753 u=rob n=ansible | Pausing for 30 seconds -2023-08-31 21:52:38,736 p=73753 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:53:08,754 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:53:08,768 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: do ping test] ************************************************************************************************************************************************ -2023-08-31 21:53:08,802 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:08,805 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:14,549 p=73753 u=rob n=ansible | ok: [vyos-wan] => (item=tunnelbroker.net) -2023-08-31 21:53:15,162 p=73753 u=rob n=ansible | ok: [client] => (item=2001:470:20::2) -2023-08-31 21:53:15,177 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: execute test commands] *************************************************************************************************************************************** -2023-08-31 21:53:15,210 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:15,211 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:15,216 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:53:15,222 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:53:15,226 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register stdout commands] ************************************************************************************************************************************ -2023-08-31 21:53:15,248 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:15,251 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:19,509 p=73753 u=rob n=ansible | ok: [client] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) -2023-08-31 21:53:19,515 p=73753 u=rob n=ansible | ok: [vyos-wan] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) -2023-08-31 21:53:24,065 p=73753 u=rob n=ansible | ok: [vyos-wan] => (item={'name': 'ping_name', 'command': 'ping tunnelbroker.net count 4'}) -2023-08-31 21:53:24,080 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] *********************************************************************************************************************************************** -2023-08-31 21:53:24,110 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:24,113 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:25,039 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:53:25,040 p=73753 u=rob n=ansible | ok: [client] -2023-08-31 21:53:25,049 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Reboot vyos] ************************************************************************************************************************************************* -2023-08-31 21:53:25,079 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:25,080 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:26,212 p=73753 u=rob n=ansible | ok: [client] -2023-08-31 21:53:26,212 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:53:26,223 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait while shutdown] ***************************************************************************************************************************************** -2023-08-31 21:53:26,246 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:26,251 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos nodes] ***************************************************************************************************************************************** -2023-08-31 21:53:26,268 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:26,277 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:27,200 p=73753 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:53:27,200 p=73753 u=rob n=ansible | [DEPRECATION WARNING]: PlayContext.verbosity is deprecated, use ansible.utils.display.Display.verbosity instead. This feature will be removed in version 2.18. Deprecation warnings can be disabled - by setting deprecation_warnings=False in ansible.cfg. -2023-08-31 21:53:28,164 p=74415 u=rob n=p=74415 u=rob | paramiko [client] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:53:28,164 p=74414 u=rob n=p=74414 u=rob | paramiko [vyos-wan] | Connected (version 2.0, client OpenSSH_9.2p1) -2023-08-31 21:53:28,454 p=74415 u=rob n=p=74415 u=rob | paramiko [client] | Authentication (publickey) successful! -2023-08-31 21:53:28,489 p=74414 u=rob n=p=74414 u=rob | paramiko [vyos-wan] | Authentication (publickey) successful! -2023-08-31 21:53:29,492 p=73753 u=rob n=ansible | ok: [client] -2023-08-31 21:53:29,493 p=73753 u=rob n=ansible | ok: [vyos-wan] -2023-08-31 21:53:29,496 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:53:29,516 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:29,519 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:53:29,525 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:53:30,437 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:53:30,443 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: stop nodes id] *********************************************************************************************************************************************** -2023-08-31 21:53:30,474 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:30,479 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:30,485 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:53:30,491 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:53:30,495 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after stop] ********************************************************************************************************************************************* -2023-08-31 21:53:30,510 p=73753 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:53:30,510 p=73753 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:53:35,527 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:53:35,546 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start nodes id] ********************************************************************************************************************************************** -2023-08-31 21:53:35,573 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:53:35,577 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:53:35,584 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:53:35,590 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:53:35,594 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after start] ******************************************************************************************************************************************** -2023-08-31 21:53:35,608 p=73753 u=rob n=ansible | Pausing for 5 seconds -2023-08-31 21:53:35,609 p=73753 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:53:40,634 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:53:40,643 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait, b/c the ping often failed without a short break] ******************************************************************************************************* -2023-08-31 21:53:40,664 p=73753 u=rob n=ansible | Pausing for 30 seconds -2023-08-31 21:53:40,665 p=73753 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) -2023-08-31 21:54:10,684 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:54:10,700 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: do ping test] ************************************************************************************************************************************************ -2023-08-31 21:54:10,738 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:10,741 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,091 p=73753 u=rob n=ansible | ok: [client] => (item=2001:470:20::2) -2023-08-31 21:54:16,273 p=73753 u=rob n=ansible | ok: [vyos-wan] => (item=tunnelbroker.net) -2023-08-31 21:54:16,283 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: execute test commands] *************************************************************************************************************************************** -2023-08-31 21:54:16,316 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,318 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,325 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,330 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,335 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register stdout commands] ************************************************************************************************************************************ -2023-08-31 21:54:16,358 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,361 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,367 p=73753 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) -2023-08-31 21:54:16,370 p=73753 u=rob n=ansible | skipping: [client] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) -2023-08-31 21:54:16,373 p=73753 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_name', 'command': 'ping tunnelbroker.net count 4'}) -2023-08-31 21:54:16,374 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,374 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,378 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] *********************************************************************************************************************************************** -2023-08-31 21:54:16,398 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,401 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,405 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,409 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,413 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: ake sure tmp dir exist] ************************************************************************************************************************************** -2023-08-31 21:54:16,430 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,439 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,439 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,446 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,449 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register status of tmp/] ************************************************************************************************************************************* -2023-08-31 21:54:16,463 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,472 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,474 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,479 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,483 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: ownload upgrade_iso] ***************************************************************************************************************************************** -2023-08-31 21:54:16,500 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,508 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,510 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,515 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,519 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Copy iso to host] ******************************************************************************************************************************************** -2023-08-31 21:54:16,533 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,541 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,544 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,549 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,553 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: upgrade vyos] ************************************************************************************************************************************************ -2023-08-31 21:54:16,574 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,575 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,577 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,582 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,585 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Reboot vyos] ************************************************************************************************************************************************* -2023-08-31 21:54:16,607 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,607 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,609 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,613 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,616 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait while shutdown] ***************************************************************************************************************************************** -2023-08-31 21:54:16,627 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,630 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos nodes] ***************************************************************************************************************************************** -2023-08-31 21:54:16,652 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,652 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,654 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,659 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,663 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: clear tmp dir] *********************************************************************************************************************************************** -2023-08-31 21:54:16,673 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,676 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] ****************************************************************************************************************************** -2023-08-31 21:54:16,696 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,697 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,699 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,704 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,707 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: stop nodes id] *********************************************************************************************************************************************** -2023-08-31 21:54:16,727 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,730 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,735 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,740 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,744 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after stop] ********************************************************************************************************************************************* -2023-08-31 21:54:16,754 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,757 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start nodes id] ********************************************************************************************************************************************** -2023-08-31 21:54:16,777 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,780 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,785 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,790 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,793 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after start] ******************************************************************************************************************************************** -2023-08-31 21:54:16,806 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,809 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait, b/c the ping often failed without a short break] ******************************************************************************************************* -2023-08-31 21:54:16,819 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,822 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: do ping test] ************************************************************************************************************************************************ -2023-08-31 21:54:16,842 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,842 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,845 p=73753 u=rob n=ansible | skipping: [vyos-wan] => (item=tunnelbroker.net) -2023-08-31 21:54:16,847 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,852 p=73753 u=rob n=ansible | skipping: [client] => (item=2001:470:20::2) -2023-08-31 21:54:16,854 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,857 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: execute test commands] *************************************************************************************************************************************** -2023-08-31 21:54:16,878 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,880 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,880 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,885 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,888 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register stdout commands] ************************************************************************************************************************************ -2023-08-31 21:54:16,908 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,908 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,915 p=73753 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) -2023-08-31 21:54:16,917 p=73753 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_name', 'command': 'ping tunnelbroker.net count 4'}) -2023-08-31 21:54:16,919 p=73753 u=rob n=ansible | skipping: [client] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) -2023-08-31 21:54:16,920 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,920 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,924 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] *********************************************************************************************************************************************** -2023-08-31 21:54:16,943 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:16,944 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,946 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,952 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:16,956 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: make sure output dir exist] ********************************************************************************************************************************** -2023-08-31 21:54:16,979 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:16,981 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:16,987 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:17,109 p=73753 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:54:17,114 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: make sure output include dir exist] ************************************************************************************************************************** -2023-08-31 21:54:17,136 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:17,139 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:17,145 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:17,270 p=73753 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:54:17,272 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Get timestamp from the system] ******************************************************************************************************************************* -2023-08-31 21:54:17,291 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:17,294 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:17,300 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:17,489 p=73753 u=rob n=ansible | changed: [eveng] -2023-08-31 21:54:17,495 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] *********************************************************************************************************************************************** -2023-08-31 21:54:17,520 p=73753 u=rob n=ansible | ok: [eveng] -2023-08-31 21:54:17,523 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:17,523 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:17,529 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:17,533 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: generate lab rst file] *************************************************************************************************************************************** -2023-08-31 21:54:17,555 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:17,557 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:17,563 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:17,814 p=73753 u=rob n=ansible | changed: [eveng -> localhost] -2023-08-31 21:54:17,819 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: find all *.conf files in Lab] ******************************************************************************************************************************** -2023-08-31 21:54:17,841 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:17,843 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:17,849 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:18,021 p=73753 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:54:18,027 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy all *.conf files] *************************************************************************************************************************************** -2023-08-31 21:54:18,055 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:18,055 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:18,062 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:18,307 p=73753 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/tunnelbroker/vyos-wan_tun0.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 931, 'inode': 11076333, 'dev': 16777229, 'nlink': 1, 'atime': 1686132323.9467034, 'mtime': 1686132322.67604, 'ctime': 1686132322.67604, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:54:18,553 p=73753 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/tunnelbroker/client.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 50, 'inode': 362570, 'dev': 16777229, 'nlink': 1, 'atime': 1675370047.0673313, 'mtime': 1648155110.0, 'ctime': 1675368464.8110585, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:54:18,810 p=73753 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/tunnelbroker/vyos-wan.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 42, 'inode': 362571, 'dev': 16777229, 'nlink': 1, 'atime': 1675370047.0698297, 'mtime': 1648155110.0, 'ctime': 1675368464.8110874, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:54:19,050 p=73753 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/tunnelbroker/transport.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 107, 'inode': 362574, 'dev': 16777229, 'nlink': 1, 'atime': 1675370047.104907, 'mtime': 1648155110.0, 'ctime': 1675368464.8111699, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:54:19,056 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: find all *.config files in Lab] ****************************************************************************************************************************** -2023-08-31 21:54:19,079 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:19,081 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:19,087 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:19,204 p=73753 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:54:19,207 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy all *.config files] ************************************************************************************************************************************* -2023-08-31 21:54:19,226 p=73753 u=rob n=ansible | skipping: [eveng] -2023-08-31 21:54:19,235 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:19,237 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:19,243 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:19,247 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: find all *.png files in Lab] ********************************************************************************************************************************* -2023-08-31 21:54:19,270 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:19,272 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:19,279 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:19,400 p=73753 u=rob n=ansible | ok: [eveng -> localhost] -2023-08-31 21:54:19,406 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy all *.png files] **************************************************************************************************************************************** -2023-08-31 21:54:19,431 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:19,434 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:19,440 p=73753 u=rob n=ansible | skipping: [client] -2023-08-31 21:54:19,671 p=73753 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/tunnelbroker/topology.png', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 34614, 'inode': 362567, 'dev': 16777229, 'nlink': 1, 'atime': 1676403697.1329076, 'mtime': 1648155110.0, 'ctime': 1675368464.8109767, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) -2023-08-31 21:54:19,676 p=73753 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy ansible log files] ************************************************************************************************************************************** -2023-08-31 21:54:19,698 p=73753 u=rob n=ansible | skipping: [vyos-oobm] -2023-08-31 21:54:19,701 p=73753 u=rob n=ansible | skipping: [vyos-wan] -2023-08-31 21:54:19,708 p=73753 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:07,038 p=3127 u=rob n=ansible | changed: [client] +2024-01-13 13:37:07,164 p=3127 u=rob n=ansible | changed: [vyos-wan] +2024-01-13 13:37:07,169 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : Register external IP in Tunnelbroker] ************************************************************ +2024-01-13 13:37:07,209 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:37:07,210 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:07,228 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:09,588 p=3127 u=rob n=ansible | ok: [vyos-wan -> eveng(eve-ng)] +2024-01-13 13:37:09,593 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : get ipv4 address of vyos-wan (eth1)] ************************************************************* +2024-01-13 13:37:09,608 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:37:09,608 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:09,612 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:10,606 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:37:10,607 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : Set variables] *********************************************************************************** +2024-01-13 13:37:10,620 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:37:10,620 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:10,624 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:10,642 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:37:10,644 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : setup vyos-wan] ********************************************************************************** +2024-01-13 13:37:10,656 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:37:10,656 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:10,661 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:19,755 p=3127 u=rob n=ansible | changed: [vyos-wan] +2024-01-13 13:37:19,760 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:37:19,782 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:19,783 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:37:19,787 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:20,518 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:37:20,521 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: stop nodes id] ********************************************************************* +2024-01-13 13:37:20,536 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:37:20,536 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:20,541 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:37:20,545 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:20,547 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after stop] ******************************************************************* +2024-01-13 13:37:20,555 p=3127 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:37:20,556 p=3127 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:37:25,561 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:37:25,566 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start nodes id] ******************************************************************** +2024-01-13 13:37:25,600 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:37:25,606 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:37:25,611 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:37:25,619 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:37:25,624 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after start] ****************************************************************** +2024-01-13 13:37:25,640 p=3127 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:37:25,641 p=3127 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:37:30,650 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:37:30,658 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait, b/c the ping often failed without a short break] ***************************** +2024-01-13 13:37:30,676 p=3127 u=rob n=ansible | Pausing for 30 seconds +2024-01-13 13:37:30,677 p=3127 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:38:00,688 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:38:00,701 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: do ping test] ********************************************************************** +2024-01-13 13:38:00,727 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:00,729 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:06,158 p=3127 u=rob n=ansible | ok: [client] => (item=2001:470:20::2) +2024-01-13 13:38:06,448 p=3127 u=rob n=ansible | ok: [vyos-wan] => (item=tunnelbroker.net) +2024-01-13 13:38:06,456 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: execute test commands] ************************************************************* +2024-01-13 13:38:06,480 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:06,482 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:06,486 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:38:06,489 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:38:06,491 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register stdout commands] ********************************************************** +2024-01-13 13:38:06,505 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:06,507 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:10,858 p=3127 u=rob n=ansible | ok: [vyos-wan] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) +2024-01-13 13:38:10,869 p=3127 u=rob n=ansible | ok: [client] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) +2024-01-13 13:38:15,465 p=3127 u=rob n=ansible | ok: [vyos-wan] => (item={'name': 'ping_name', 'command': 'ping tunnelbroker.net count 4'}) +2024-01-13 13:38:15,476 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] ********************************************************************* +2024-01-13 13:38:15,491 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:15,493 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:15,516 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:38:15,520 p=3127 u=rob n=ansible | ok: [client] +2024-01-13 13:38:15,522 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Reboot vyos] *********************************************************************** +2024-01-13 13:38:15,534 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:15,534 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:16,652 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:38:16,656 p=3127 u=rob n=ansible | ok: [client] +2024-01-13 13:38:16,662 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait while shutdown] *************************************************************** +2024-01-13 13:38:16,674 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:16,676 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos nodes] *************************************************************** +2024-01-13 13:38:16,688 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:16,688 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:18,405 p=3721 u=rob n=p=3721 u=rob | paramiko [vyos-wan] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:38:18,450 p=3722 u=rob n=p=3722 u=rob | paramiko [client] | Connected (version 2.0, client OpenSSH_9.2p1) +2024-01-13 13:38:18,742 p=3722 u=rob n=p=3722 u=rob | paramiko [client] | Authentication (publickey) successful! +2024-01-13 13:38:18,745 p=3721 u=rob n=p=3721 u=rob | paramiko [vyos-wan] | Authentication (publickey) successful! +2024-01-13 13:38:20,109 p=3127 u=rob n=ansible | ok: [client] +2024-01-13 13:38:20,111 p=3127 u=rob n=ansible | ok: [vyos-wan] +2024-01-13 13:38:20,112 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:38:20,124 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:20,124 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:38:20,129 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:38:21,472 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:38:21,474 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: stop nodes id] ********************************************************************* +2024-01-13 13:38:21,487 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:21,488 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:21,491 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:38:21,495 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:38:21,497 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after stop] ******************************************************************* +2024-01-13 13:38:21,505 p=3127 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:38:21,506 p=3127 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:38:26,515 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:38:26,526 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start nodes id] ******************************************************************** +2024-01-13 13:38:26,549 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:38:26,551 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:38:26,556 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:38:26,560 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:38:26,562 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after start] ****************************************************************** +2024-01-13 13:38:26,573 p=3127 u=rob n=ansible | Pausing for 5 seconds +2024-01-13 13:38:26,573 p=3127 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:38:31,582 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:38:31,588 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait, b/c the ping often failed without a short break] ***************************** +2024-01-13 13:38:31,605 p=3127 u=rob n=ansible | Pausing for 30 seconds +2024-01-13 13:38:31,605 p=3127 u=rob n=ansible | (ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort) +2024-01-13 13:39:01,610 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:39:01,615 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: do ping test] ********************************************************************** +2024-01-13 13:39:01,630 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:01,634 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:06,919 p=3127 u=rob n=ansible | ok: [client] => (item=2001:470:20::2) +2024-01-13 13:39:07,332 p=3127 u=rob n=ansible | ok: [vyos-wan] => (item=tunnelbroker.net) +2024-01-13 13:39:07,335 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: execute test commands] ************************************************************* +2024-01-13 13:39:07,348 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,348 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,352 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,355 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,357 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register stdout commands] ********************************************************** +2024-01-13 13:39:07,371 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,372 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,376 p=3127 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) +2024-01-13 13:39:07,377 p=3127 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_name', 'command': 'ping tunnelbroker.net count 4'}) +2024-01-13 13:39:07,378 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,380 p=3127 u=rob n=ansible | skipping: [client] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) +2024-01-13 13:39:07,382 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,383 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] ********************************************************************* +2024-01-13 13:39:07,395 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,397 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,398 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,402 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,404 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: ake sure tmp dir exist] ************************************************************ +2024-01-13 13:39:07,416 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,416 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,417 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,421 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,423 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register status of tmp/] *********************************************************** +2024-01-13 13:39:07,432 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,436 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,438 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,440 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,442 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: download upgrade_iso] ************************************************************** +2024-01-13 13:39:07,450 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,454 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,456 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,459 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,463 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Copy iso to host] ****************************************************************** +2024-01-13 13:39:07,472 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,477 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,477 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,481 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,483 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: upgrade vyos] ********************************************************************** +2024-01-13 13:39:07,491 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,495 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,496 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,500 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,501 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Reboot vyos] *********************************************************************** +2024-01-13 13:39:07,513 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,514 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,515 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,518 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,519 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait while shutdown] *************************************************************** +2024-01-13 13:39:07,525 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,527 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Wait for vyos nodes] *************************************************************** +2024-01-13 13:39:07,534 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,538 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,540 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,543 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,544 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: clear tmp dir] ********************************************************************* +2024-01-13 13:39:07,551 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,553 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Login to EVE-NG and get Cookie] **************************************************** +2024-01-13 13:39:07,564 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,565 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,565 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,569 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,571 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: stop nodes id] ********************************************************************* +2024-01-13 13:39:07,583 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,585 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,587 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,591 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,593 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after stop] ******************************************************************* +2024-01-13 13:39:07,600 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,601 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: start nodes id] ******************************************************************** +2024-01-13 13:39:07,613 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,615 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,618 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,621 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,622 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait after start] ****************************************************************** +2024-01-13 13:39:07,629 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,631 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: wait, b/c the ping often failed without a short break] ***************************** +2024-01-13 13:39:07,638 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,639 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: do ping test] ********************************************************************** +2024-01-13 13:39:07,648 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,652 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,654 p=3127 u=rob n=ansible | skipping: [vyos-wan] => (item=tunnelbroker.net) +2024-01-13 13:39:07,655 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,658 p=3127 u=rob n=ansible | skipping: [client] => (item=2001:470:20::2) +2024-01-13 13:39:07,659 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,661 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: execute test commands] ************************************************************* +2024-01-13 13:39:07,669 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,673 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,675 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,677 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,679 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: register stdout commands] ********************************************************** +2024-01-13 13:39:07,692 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,692 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,694 p=3127 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) +2024-01-13 13:39:07,695 p=3127 u=rob n=ansible | skipping: [vyos-wan] => (item={'name': 'ping_name', 'command': 'ping tunnelbroker.net count 4'}) +2024-01-13 13:39:07,696 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,698 p=3127 u=rob n=ansible | skipping: [client] => (item={'name': 'ping_ip', 'command': 'ping 2001:470:20::2 count 4'}) +2024-01-13 13:39:07,698 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,700 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] ********************************************************************* +2024-01-13 13:39:07,712 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:07,713 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,713 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,717 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,720 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: make sure output dir exist] ******************************************************** +2024-01-13 13:39:07,731 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,732 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,735 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:07,883 p=3127 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:39:07,885 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: make sure output include dir exist] ************************************************ +2024-01-13 13:39:07,898 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:07,898 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:07,901 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:08,048 p=3127 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:39:08,050 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Get timestamp from the system] ***************************************************** +2024-01-13 13:39:08,061 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:08,063 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:08,066 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:08,320 p=3127 u=rob n=ansible | changed: [eveng] +2024-01-13 13:39:08,322 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: Set variables] ********************************************************************* +2024-01-13 13:39:08,334 p=3127 u=rob n=ansible | ok: [eveng] +2024-01-13 13:39:08,334 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:08,336 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:08,339 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:08,341 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: generate lab rst file] ************************************************************* +2024-01-13 13:39:08,354 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:08,355 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:08,359 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:08,652 p=3127 u=rob n=ansible | changed: [eveng -> localhost] +2024-01-13 13:39:08,654 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: find all *.conf files in Lab] ****************************************************** +2024-01-13 13:39:08,666 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:08,667 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:08,670 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:08,866 p=3127 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:39:08,868 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy all *.conf files] ************************************************************* +2024-01-13 13:39:08,880 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:08,881 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:08,884 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:09,164 p=3127 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/master/tunnelbroker/vyos-wan_tun0.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 931, 'inode': 22902859, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4576929, 'mtime': 1701342323.3234093, 'ctime': 1701346519.9683046, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:39:09,444 p=3127 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/master/tunnelbroker/client.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 50, 'inode': 22902860, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4575586, 'mtime': 1648155110.0, 'ctime': 1701346519.9686172, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:39:09,723 p=3127 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/master/tunnelbroker/vyos-wan.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 42, 'inode': 22902861, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4576807, 'mtime': 1648155110.0, 'ctime': 1701346519.9688697, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:39:10,002 p=3127 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/master/tunnelbroker/transport.conf', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 107, 'inode': 22902864, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4576118, 'mtime': 1648155110.0, 'ctime': 1701346519.9698136, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:39:10,005 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: find all *.config files in Lab] **************************************************** +2024-01-13 13:39:10,017 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:10,018 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:10,021 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:10,164 p=3127 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:39:10,166 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy all *.config files] *********************************************************** +2024-01-13 13:39:10,177 p=3127 u=rob n=ansible | skipping: [eveng] +2024-01-13 13:39:10,178 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:10,179 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:10,182 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:10,184 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: find all *.png files in Lab] ******************************************************* +2024-01-13 13:39:10,196 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:10,198 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:10,202 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:10,346 p=3127 u=rob n=ansible | ok: [eveng -> localhost] +2024-01-13 13:39:10,348 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy all *.png files] ************************************************************** +2024-01-13 13:39:10,360 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:10,361 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:10,364 p=3127 u=rob n=ansible | skipping: [client] +2024-01-13 13:39:10,637 p=3127 u=rob n=ansible | ok: [eveng -> localhost] => (item={'path': 'labs/master/tunnelbroker/topology.png', 'mode': '0644', 'isdir': False, 'ischr': False, 'isblk': False, 'isreg': True, 'isfifo': False, 'islnk': False, 'issock': False, 'uid': 501, 'gid': 20, 'size': 34614, 'inode': 22902857, 'dev': 16777229, 'nlink': 1, 'atime': 1703974425.4576008, 'mtime': 1648155110.0, 'ctime': 1701346519.9677274, 'gr_name': 'staff', 'pw_name': 'rob', 'wusr': True, 'rusr': True, 'xusr': False, 'wgrp': False, 'rgrp': True, 'xgrp': False, 'woth': False, 'roth': True, 'xoth': False, 'isuid': False, 'isgid': False}) +2024-01-13 13:39:10,640 p=3127 u=rob n=ansible | TASK [eve-ng-lab-test : tunnelbroker: copy ansible log files] ************************************************************ +2024-01-13 13:39:10,653 p=3127 u=rob n=ansible | skipping: [oobm-z65ole] +2024-01-13 13:39:10,653 p=3127 u=rob n=ansible | skipping: [vyos-wan] +2024-01-13 13:39:10,656 p=3127 u=rob n=ansible | skipping: [client] diff --git a/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst b/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst index 4a822b04..96c2e1af 100644 --- a/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst +++ b/docs/configexamples/autotest/tunnelbroker/tunnelbroker.rst @@ -4,8 +4,8 @@ Tunnelbroker.net (IPv6) ####################### -| Testdate: 2023-08-31 -| Version: 1.4-rolling-202308240020 +| Testdate: 2024-01-13 +| Version: 1.5-rolling-202401121239 This guide walks through the setup of https://www.tunnelbroker.net/ for an IPv6 Tunnel. @@ -61,14 +61,14 @@ Now you should be able to ping a public IPv6 Address vyos@vyos-wan:~$ ping 2001:470:20::2 count 4 PING 2001:470:20::2(2001:470:20::2) 56 data bytes - 64 bytes from 2001:470:20::2: icmp_seq=1 ttl=64 time=39.4 ms - 64 bytes from 2001:470:20::2: icmp_seq=2 ttl=64 time=29.9 ms - 64 bytes from 2001:470:20::2: icmp_seq=3 ttl=64 time=30.0 ms - 64 bytes from 2001:470:20::2: icmp_seq=4 ttl=64 time=29.9 ms + 64 bytes from 2001:470:20::2: icmp_seq=1 ttl=64 time=33.8 ms + 64 bytes from 2001:470:20::2: icmp_seq=2 ttl=64 time=43.9 ms + 64 bytes from 2001:470:20::2: icmp_seq=3 ttl=64 time=43.4 ms + 64 bytes from 2001:470:20::2: icmp_seq=4 ttl=64 time=42.5 ms --- 2001:470:20::2 ping statistics --- - 4 packets transmitted, 4 received, 0% packet loss, time 3005ms - rtt min/avg/max/mdev = 29.885/32.293/39.371/4.086 ms + 4 packets transmitted, 4 received, 0% packet loss, time 2999ms + rtt min/avg/max/mdev = 33.802/40.920/43.924/4.139 ms Assuming the pings are successful, you need to add some DNS servers. @@ -85,14 +85,14 @@ You should now be able to ping something by IPv6 DNS name: vyos@vyos-wan:~$ ping tunnelbroker.net count 4 PING tunnelbroker.net(tunnelbroker.net (2001:470:0:63::2)) 56 data bytes - 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=1 ttl=46 time=200 ms - 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=2 ttl=46 time=176 ms - 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=3 ttl=46 time=244 ms - 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=4 ttl=46 time=176 ms + 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=1 ttl=48 time=285 ms + 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=2 ttl=48 time=186 ms + 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=3 ttl=48 time=178 ms + 64 bytes from tunnelbroker.net (2001:470:0:63::2): icmp_seq=4 ttl=48 time=177 ms --- tunnelbroker.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3002ms - rtt min/avg/max/mdev = 175.737/198.653/243.621/27.714 ms + rtt min/avg/max/mdev = 176.707/206.638/285.128/45.457 ms ***************** @@ -148,14 +148,14 @@ Now the Client is able to ping a public IPv6 address vyos@client:~$ ping 2001:470:20::2 count 4 PING 2001:470:20::2(2001:470:20::2) 56 data bytes - 64 bytes from 2001:470:20::2: icmp_seq=1 ttl=63 time=30.5 ms - 64 bytes from 2001:470:20::2: icmp_seq=2 ttl=63 time=29.6 ms - 64 bytes from 2001:470:20::2: icmp_seq=3 ttl=63 time=29.9 ms - 64 bytes from 2001:470:20::2: icmp_seq=4 ttl=63 time=29.8 ms + 64 bytes from 2001:470:20::2: icmp_seq=1 ttl=63 time=32.1 ms + 64 bytes from 2001:470:20::2: icmp_seq=2 ttl=63 time=41.8 ms + 64 bytes from 2001:470:20::2: icmp_seq=3 ttl=63 time=41.7 ms + 64 bytes from 2001:470:20::2: icmp_seq=4 ttl=63 time=47.1 ms --- 2001:470:20::2 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms - rtt min/avg/max/mdev = 29.578/29.959/30.490/0.333 ms + rtt min/avg/max/mdev = 32.128/40.688/47.107/5.403 ms Multiple LAN/DMZ Setup From 0740593f13225ad72a127e99aaa49d5a32ba5325 Mon Sep 17 00:00:00 2001 From: rebortg Date: Sat, 13 Jan 2024 23:11:49 +0100 Subject: [PATCH 31/91] update sphinx and dependencies --- Pipfile | 18 ------------ docs/conf.py | 2 +- docs/index.rst | 76 +++++++++++++++++++++++++----------------------- requirements.txt | 14 ++++----- 4 files changed, 47 insertions(+), 63 deletions(-) delete mode 100644 Pipfile diff --git a/Pipfile b/Pipfile deleted file mode 100644 index 0d7f836f..00000000 --- a/Pipfile +++ /dev/null @@ -1,18 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] -sphinx-rtd-theme = "*" -docutils = "*" -lxml = "*" -sphinx-notfound-page = "*" -Sphinx = ">=1.4.3" -sphinx-panels = "*" -transifex-client = "*" - -[dev-packages] - -[requires] -python_version = "3.9" diff --git a/docs/conf.py b/docs/conf.py index 3fe1c6e1..4414286d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -47,7 +47,7 @@ extensions = ['sphinx.ext.intersphinx', 'notfound.extension', 'autosectionlabel', 'myst_parser', - 'sphinx_panels', + 'sphinx_design', 'vyos' ] diff --git a/docs/index.rst b/docs/index.rst index c1ac38ed..4db014a9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,49 +4,51 @@ VyOS User Guide ############### -.. panels:: - :container: container-lg pb-3 - :column: col-lg-4 col-md-4 col-sm-6 col-xs-12 p-2 + + +.. grid:: 3 + :gutter: 2 - Get / Build VyOS - ^^^^^^^^^^^^^^^^ - Quickly :ref:`Build` your own Image or take a look at how to :ref:`download` a free or supported version. - --- + .. grid-item-card:: Get / Build VyOS - Install VyOS - ^^^^^^^^^^^^ - Read about how to install VyOS on :ref:`Bare Metal` or in a - :ref:`Virtual Environment` and - how to use an image with the usual :ref:`cloud` providers - --- + + Quickly :ref:`Build` your own Image or take a look at how to :ref:`download` a free or supported version. + - Configuration and Operation - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Use the :ref:`Quickstart Guide`, to have a fast overview. Or go deeper and - set up :ref:`advanced routing`, - :ref:`VRFs`, or - :ref:`VPNs` for example. - --- + .. grid-item-card:: Install VyOS - Automate - ^^^^^^^^ - Integrate VyOS in your automation Workflow with - :ref:`Ansible`, - have your own :ref:`local scripts`, or configure VyOS with the :ref:`HTTPS-API`. - --- + Read about how to install VyOS on :ref:`Bare Metal` or in a + :ref:`Virtual Environment` and + how to use an image with the usual :ref:`cloud` providers + - Examples - ^^^^^^^^ - Get some inspiration from the :ref:`Configuration Blueprints` - to build your infrastructure. - --- + .. grid-item-card:: Configuration and Operation - Contribute and Community - ^^^^^^^^^^^^^^^^^^^^^^^^ - | There are many ways to contribute to the project. - | Add missing parts or improve the :ref:`Documentation`. - | Discuss in `Slack `_ or the `Forum `_. - | Or you can pick up a `Task `_ and fix the :ref:`code`. + Use the :ref:`Quickstart Guide`, to have a fast overview. Or go deeper and + set up :ref:`advanced routing`, + :ref:`VRFs`, or + :ref:`VPNs` for example. + + + .. grid-item-card:: Automate + + Integrate VyOS in your automation Workflow with + :ref:`Ansible`, + have your own :ref:`local scripts`, or configure VyOS with the :ref:`HTTPS-API`. + + + .. grid-item-card:: Examples + + Get some inspiration from the :ref:`Configuration Blueprints` + to build your infrastructure. + + + .. grid-item-card:: Contribute and Community + + | There are many ways to contribute to the project. + | Add missing parts or improve the :ref:`Documentation`. + | Discuss in `Slack `_ or the `Forum `_. + | Or you can pick up a `Task `_ and fix the :ref:`code`. .. toctree:: diff --git a/requirements.txt b/requirements.txt index 9ca1cac2..08a1fd15 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -urllib3==1.26.18 -Sphinx==4.5.0 -sphinx-rtd-theme==1.0.0 +urllib3==2.1.0 +Sphinx==7.2.6 +sphinx-rtd-theme==2.0.0 sphinx-autobuild==2021.3.14 -sphinx-notfound-page==0.8 -lxml==4.9.1 -myst-parser==0.17.1 -sphinx-panels==0.6.0 +sphinx-notfound-page==1.0.0 +lxml==5.1.0 +myst-parser==2.0.0 +sphinx_design==0.5.0 \ No newline at end of file From e6ade0470d59cf0ed45101f525e80d575f3a08d4 Mon Sep 17 00:00:00 2001 From: sarthurdev <965089+sarthurdev@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:40:18 +0100 Subject: [PATCH 32/91] dhcp: T3316: Update documentation for changes in PR vyos/vyos-1x#2650 --- docs/configuration/service/dhcp-server.rst | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/configuration/service/dhcp-server.rst b/docs/configuration/service/dhcp-server.rst index b99e5baa..6813d2c0 100644 --- a/docs/configuration/service/dhcp-server.rst +++ b/docs/configuration/service/dhcp-server.rst @@ -178,11 +178,17 @@ MAC address of the station and your desired IP address. The address must be inside the subnet definition but can be outside of the range statement. .. cfgcmd:: set service dhcp-server shared-network-name subnet - static-mapping mac-address
+ static-mapping mac
Create a new DHCP static mapping named `` which is valid for the host identified by its MAC `
`. +.. cfgcmd:: set service dhcp-server shared-network-name subnet + static-mapping duid + + Create a new DHCP static mapping named `` which is valid for + the host identified by its DHCP unique identifier (DUID) ``. + .. cfgcmd:: set service dhcp-server shared-network-name subnet static-mapping ip-address
@@ -205,7 +211,7 @@ inside the subnet definition but can be outside of the range statement. set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 subnet-id 1 set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 ip-address 192.168.1.100 - set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 mac-address aa:bb:11:22:33:00 + set service dhcp-server shared-network-name 'NET1' subnet 192.168.1.0/24 static-mapping client1 mac aa:bb:11:22:33:00 The configuration will look as follows: @@ -215,7 +221,7 @@ The configuration will look as follows: subnet 192.168.1.0/24 { static-mapping client1 { ip-address 192.168.1.100 - mac-address aa:bb:11:22:33:00 + mac aa:bb:11:22:33:00 } subnet-id 1 } @@ -641,7 +647,7 @@ be created. The following example explains the process. set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 ipv6-address 2001:db8::101 set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 ipv6-prefix 2001:db8:0:101::/64 - set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 identifier 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff + set service dhcpv6-server shared-network-name 'NET1' subnet 2001:db8::/64 static-mapping client1 duid 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff The configuration will look as follows: @@ -652,7 +658,7 @@ The configuration will look as follows: show service dhcpv6-server shared-network-name NET1 subnet 2001:db8::/64 { static-mapping client1 { - identifier 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff + duid 00:01:00:01:12:34:56:78:aa:bb:cc:dd:ee:ff ipv6-address 2001:db8::101 ipv6-prefix 2001:db8:0:101::/64 } From a11428c495ebd75eb7351f2e3becaad915c9d3cc Mon Sep 17 00:00:00 2001 From: rebortg Date: Mon, 15 Jan 2024 06:02:35 +0000 Subject: [PATCH 33/91] Github: update translations --- docs/_locale/de/404.pot | 8 + docs/_locale/de/LC_MESSAGES/404.mo | Bin 984 -> 1252 bytes docs/_locale/de/LC_MESSAGES/automation.mo | Bin 35418 -> 37840 bytes docs/_locale/de/LC_MESSAGES/cli.mo | Bin 29208 -> 30414 bytes docs/_locale/de/LC_MESSAGES/configexamples.mo | Bin 123543 -> 127575 bytes docs/_locale/de/LC_MESSAGES/configuration.mo | Bin 1067443 -> 1148357 bytes docs/_locale/de/LC_MESSAGES/contributing.mo | Bin 109457 -> 111651 bytes docs/_locale/de/LC_MESSAGES/installation.mo | Bin 102022 -> 102388 bytes docs/_locale/de/LC_MESSAGES/quick-start.mo | Bin 19890 -> 22278 bytes docs/_locale/de/automation.pot | 130 +- docs/_locale/de/cli.pot | 48 +- docs/_locale/de/configexamples.pot | 194 +- docs/_locale/de/configuration.pot | 5647 +++++++---------- docs/_locale/de/contributing.pot | 288 +- docs/_locale/de/index.pot | 30 +- docs/_locale/de/installation.pot | 114 +- docs/_locale/de/quick-start.pot | 110 +- docs/_locale/en/LC_MESSAGES/404.mo | Bin 930 -> 1198 bytes docs/_locale/en/LC_MESSAGES/automation.mo | Bin 35418 -> 37840 bytes docs/_locale/en/LC_MESSAGES/cli.mo | Bin 29208 -> 30414 bytes docs/_locale/en/LC_MESSAGES/configexamples.mo | Bin 123532 -> 127564 bytes docs/_locale/en/LC_MESSAGES/configuration.mo | Bin 1067404 -> 1148318 bytes docs/_locale/en/LC_MESSAGES/contributing.mo | Bin 107118 -> 109312 bytes docs/_locale/en/LC_MESSAGES/installation.mo | Bin 102022 -> 102388 bytes docs/_locale/en/LC_MESSAGES/quick-start.mo | Bin 19890 -> 22278 bytes docs/_locale/es/404.pot | 8 + docs/_locale/es/LC_MESSAGES/404.mo | Bin 979 -> 1247 bytes docs/_locale/es/LC_MESSAGES/automation.mo | Bin 38270 -> 40692 bytes docs/_locale/es/LC_MESSAGES/cli.mo | Bin 31126 -> 32332 bytes docs/_locale/es/LC_MESSAGES/configexamples.mo | Bin 131348 -> 135380 bytes docs/_locale/es/LC_MESSAGES/configuration.mo | Bin 1147773 -> 1228687 bytes docs/_locale/es/LC_MESSAGES/contributing.mo | Bin 114847 -> 117041 bytes docs/_locale/es/LC_MESSAGES/installation.mo | Bin 109558 -> 109924 bytes docs/_locale/es/LC_MESSAGES/quick-start.mo | Bin 20335 -> 22723 bytes docs/_locale/es/automation.pot | 130 +- docs/_locale/es/cli.pot | 48 +- docs/_locale/es/configexamples.pot | 194 +- docs/_locale/es/configuration.pot | 5647 +++++++---------- docs/_locale/es/contributing.pot | 288 +- docs/_locale/es/index.pot | 30 +- docs/_locale/es/installation.pot | 114 +- docs/_locale/es/quick-start.pot | 110 +- docs/_locale/ja/404.pot | 8 + docs/_locale/ja/LC_MESSAGES/404.mo | Bin 917 -> 1185 bytes docs/_locale/ja/LC_MESSAGES/automation.mo | Bin 35405 -> 37827 bytes docs/_locale/ja/LC_MESSAGES/cli.mo | Bin 29195 -> 30401 bytes docs/_locale/ja/LC_MESSAGES/configexamples.mo | Bin 123519 -> 127551 bytes docs/_locale/ja/LC_MESSAGES/configuration.mo | Bin 1067391 -> 1148305 bytes docs/_locale/ja/LC_MESSAGES/contributing.mo | Bin 107105 -> 109299 bytes docs/_locale/ja/LC_MESSAGES/installation.mo | Bin 102009 -> 102375 bytes docs/_locale/ja/LC_MESSAGES/quick-start.mo | Bin 19877 -> 22265 bytes docs/_locale/ja/automation.pot | 130 +- docs/_locale/ja/cli.pot | 48 +- docs/_locale/ja/configexamples.pot | 194 +- docs/_locale/ja/configuration.pot | 5647 +++++++---------- docs/_locale/ja/contributing.pot | 288 +- docs/_locale/ja/index.pot | 30 +- docs/_locale/ja/installation.pot | 114 +- docs/_locale/ja/quick-start.pot | 110 +- docs/_locale/pt/404.pot | 8 + docs/_locale/pt/LC_MESSAGES/404.mo | Bin 938 -> 1206 bytes docs/_locale/pt/LC_MESSAGES/automation.mo | Bin 35426 -> 37848 bytes docs/_locale/pt/LC_MESSAGES/cli.mo | Bin 29216 -> 30422 bytes docs/_locale/pt/LC_MESSAGES/configexamples.mo | Bin 123540 -> 127572 bytes docs/_locale/pt/LC_MESSAGES/configuration.mo | Bin 1067412 -> 1148326 bytes docs/_locale/pt/LC_MESSAGES/contributing.mo | Bin 107126 -> 109320 bytes docs/_locale/pt/LC_MESSAGES/installation.mo | Bin 102030 -> 102396 bytes docs/_locale/pt/LC_MESSAGES/quick-start.mo | Bin 19898 -> 22286 bytes docs/_locale/pt/automation.pot | 130 +- docs/_locale/pt/cli.pot | 48 +- docs/_locale/pt/configexamples.pot | 194 +- docs/_locale/pt/configuration.pot | 5647 +++++++---------- docs/_locale/pt/contributing.pot | 288 +- docs/_locale/pt/index.pot | 30 +- docs/_locale/pt/installation.pot | 114 +- docs/_locale/pt/quick-start.pot | 110 +- docs/_locale/uk/404.pot | 8 + docs/_locale/uk/LC_MESSAGES/404.mo | Bin 1007 -> 1275 bytes docs/_locale/uk/LC_MESSAGES/automation.mo | Bin 35495 -> 37917 bytes docs/_locale/uk/LC_MESSAGES/cli.mo | Bin 29285 -> 30491 bytes docs/_locale/uk/LC_MESSAGES/configexamples.mo | Bin 123609 -> 127641 bytes docs/_locale/uk/LC_MESSAGES/configuration.mo | Bin 1067481 -> 1148395 bytes docs/_locale/uk/LC_MESSAGES/contributing.mo | Bin 107195 -> 109389 bytes docs/_locale/uk/LC_MESSAGES/installation.mo | Bin 102099 -> 102465 bytes docs/_locale/uk/LC_MESSAGES/quick-start.mo | Bin 19967 -> 22355 bytes docs/_locale/uk/automation.pot | 130 +- docs/_locale/uk/cli.pot | 48 +- docs/_locale/uk/configexamples.pot | 194 +- docs/_locale/uk/configuration.pot | 5647 +++++++---------- docs/_locale/uk/contributing.pot | 288 +- docs/_locale/uk/index.pot | 30 +- docs/_locale/uk/installation.pot | 114 +- docs/_locale/uk/quick-start.pot | 110 +- 93 files changed, 15020 insertions(+), 17825 deletions(-) diff --git a/docs/_locale/de/404.pot b/docs/_locale/de/404.pot index 7ef03f50..57b3b68d 100644 --- a/docs/_locale/de/404.pot +++ b/docs/_locale/de/404.pot @@ -24,6 +24,14 @@ msgstr "`1.2.x (crux) `_" msgid "`1.3.x (equuleus) `_" msgstr "`1.3.x (equuleus) `_" +#: ../../404.rst:11 +msgid "`1.4.x (sagitta) `_" +msgstr "`1.4.x (sagitta) `_" + +#: ../../404.rst:12 +msgid "`rolling release (circinus) `_" +msgstr "`rolling release (circinus) `_" + #: ../../404.rst:11 msgid "`rolling release (sagitta) `_" msgstr "`Rolling Release (Sagitta) `_" diff --git a/docs/_locale/de/LC_MESSAGES/404.mo b/docs/_locale/de/LC_MESSAGES/404.mo index 5cfb6e0ccc3f5d3dc80399ab494f8be151107dae..e992b14fe4b78722507c9859fcbbe21ef691b3f4 100644 GIT binary patch delta 317 zcmbWvKMMhI7{Kx8=f4ysBSjflT#9Vx9k3b{mo8mh)G;tw8Fd*HqtWC=V6sXvc@I|K z!z=LA_xJfN&vOkwqq9dcuo5OhX=+o9HssBT;&i4KT}h*|5~-nqRa|2oFQ{X}Cvw9E zrm*N2nWK*0{t?;N<;BN4pas4MO!N-ykXyq3XTrR}-#>(`No2Xb2g{{OY2q$aK0h-0 v)_81adbcB8XK35jpr3V2+cZXIw$QVjo;7frD&y`|>@Zb1-=Dkg+FySI*%>;m delta 179 zcmaFDd4s+Fo)F7a1|VPqVi_Rz0b*_-t^r~YSOLU*K)e!&BY=1Z5bFc6AR_~VIgoY) z(sn?)5=h?y(mQ~(2#}u4#K6!2q*nlGka|OAi26hz4N^Z7NCTD1F#zS^fECVSU;xT9 Wuua^1cXAqw;ATZ8ex}LGSnL4!;}g38 diff --git a/docs/_locale/de/LC_MESSAGES/automation.mo b/docs/_locale/de/LC_MESSAGES/automation.mo index 0c571a2e256a681fc6614125191dcdab8f376266..cb431fe919284366f1f2d1d3e4a9e0a410d9a24c 100644 GIT binary patch delta 6930 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 Ra<-fOa4I|hpGU}Y`5$%yQ#Akp diff --git a/docs/_locale/de/LC_MESSAGES/cli.mo b/docs/_locale/de/LC_MESSAGES/cli.mo index efb26dae50aea8c8c87b84467bb769bd04eeda32..1722898e1a47b45c63da06ab9f654ac49343bd7c 100644 GIT binary patch delta 2645 zcmcK6`%l$%9LMqZ2`?xpH!s{2*;&>E?5s>@5{O z^qL|v8{ftryo5`zZmLKsp2dC~Mn9XlV=ZpuYP^hGMSdc~*p7FRXP0B4B7JxUpTWW~5nfWdFaq7kyUKUC2S?GL`^#3= zeG%3pbJB^Mu^;uxXYx98a0OPP16g(X67`1P<1IYNx;tT%T{(2l(OHIfa1+jp7CD9cunK)*MAoAd1GwNI+8JM;$Nr-)Pk8}5F`Vx= z&1ZlOaUxICZHzb99YCEAOb}T}H)sLtzl6@31tQCFAJ*Wfc!VEDCvqeFAW0;d`7u5s z7|-OdU&W;t?r?LLLq>ShFbD4<8 z7RI~NMN04iKEUm~uAYG{8Jq{af=BRtrrF!{Cs{SdMaVPDLDWU)K^8%V@dVma7g_z?ZEeS=BI`^Y6^$3_#!ix|Q9GWu!$N9kxD@1g!-9T8ZB2TXXM7m^kKRCF2J4!5^^?Z{jWNC^T_wVgK$k{tY#bBhQ;SzQbGkaes;9>U%LA zHI8o7IR1m&Q_{AWI3C9;#$j7c91o$!@msVrKeEllF?_p;V=rnP%Zm9D4?0X7Unw!y z9YU9W5m{>T7*%EtM*(skC?=W%vqr${7mSxa5X7hBq=U-KuIPT_; zbt?x@;~31oX&ifT1(w!ve?7Hl>r5VR)SFmLf6>IzjxGG~aD$1XZ=;FhPUIR=+hpQ6 zj7J!M-fZ?Z$7y0#jfu>k!udFW8pkm_fdRW%f6ZgZE_35AQ1|$@$DrLNjv1(jtQgrw zc?o%LVL_}ddIGi0rhKS%6iKt%Ts|YHl@!ly{XJN1HTSocdIm0`bl)?ncq)yWK(W1# z8~=_72mEpK^7LXb+|yt0k#lBkpFX%Yf+nO}Ht2xHqKk_&C6UxZDv;7;)g{tK(j<$@ zp!}$5ls0zBY7RaVD0az8$YLB%l~B6e#Z&;LE39oY6>Rm){?m0y5TBeUtL5^^*%1z| z?6hV~B0OE;99m5el{Rl`qt!E!O{bqt6;PV_Ra72DFswG+V=7LhDm4GmbfTy*N?R4B z{|=;3FHqWisX3I!Y%P^cY2#ctXl4Hh{I9kY%OUF3$Q0=mRC1Dn$n-y8)Mx2GeQFYm&<-;`xnRwWvu`J delta 2409 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 delta 14435 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 S()|D5FQJjk$_3A@i~j|)pHNBw diff --git a/docs/_locale/de/LC_MESSAGES/configuration.mo b/docs/_locale/de/LC_MESSAGES/configuration.mo index 0bbe8f6ce3b40de8615c0d238143bcc19adbc758..5d09f4b502e8267fca0f84d8c566c0c92cde2f13 100644 GIT binary patch delta 158053 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