Conductor provisioning of managed router nodes (a.k.a. assets) is accomplished using salt. When the conductor is unable to communicate with the salt minion running on a 128T router node, the administrator will be unable to provision or upgrade that node.
The conductor shows the router node (a.k.a asset) in the disconnected state. This condition is rendered a bit differently in the pcli and GUI. 1. From the PCLI:
'show assets'
[email protected]# show assets Wed 2021-06-02 17:57:34 UTC ============== =============== ===================== ============== ============== ================ ======== Router Node Asset Id 128T Version Status Time in Status Errors ============== =============== ===================== ============== ============== ================ ======== bostonsite1 datacenter1 datacenter-router-1 5.1.0-1.el7 Running 19h 46m 26s 0 dallassite1 branchoffice2 branch-2-router 5.1.0-1.el7 Running 19h 46m 27s 0 nycsite1 conductor1 conductor 5.1.0-1.el7 Running 19h 54m 41s 0 seattlesite1 branchoffice1 branch-1-router None Disconnected 31s 0 None None datacenter-router-2 None Pending 19h 56m 24s 0 Completed in 0.03 seconds [email protected]#
1. In some circumstances, it is normal for a router node / asset to be in the Disconnected state for a few minutes or longer:
The router node / asset status displayed by the conductor is updated from status messages sent once every minute by the router node. For this reason, the conductor status may lag behind the actual state of the node.
2. If administrative actions known to to temporarily affect the asset connection have been ruled out, there are several potential causes:
3. The router node /asset's salt-minion node is not running due to a failure. Before triaging further, try restarting the router node's salt-minion systemd service from the conductor PCLI. First, obtain the router and node name of the affected node / asset:
[email protected]# show assets Wed 2021-06-02 22:09:53 UTC ============== =============== ===================== ============== ============== ================ ======== Router Node Asset Id 128T Version Status Time in Status Errors ============== =============== ===================== ============== ============== ================ ======== bostonsite1 datacenter1 datacenter-router-1 5.1.0-1.el7 Running 23h 58m 45s 0 dallassite1 branchoffice2 branch-2-router 5.1.0-1.el7 Running 23h 58m 46s 0 nycsite1 conductor1 conductor 5.1.0-1.el7 Running 1d 7m 0s 0 seattlesite1 branchoffice1 branch-1-router None Disconnected 4h 12m 50s 0 None None datacenter-router-2 None Pending 1d 8m 43s 0 Completed in 0.03 seconds
The commands and examel output in the section are based on the 5.1.0 router software.
now issue the command, ' send command reconnect router <router-name> node <node-name> '.
'
reconnect router <router-name> node <node-name>
[email protected]# send command reconnect router seattlesite1 node branchoffice1 ✔ Restarting minion 1/1 targets complete. Attempted to reconnect: branchoffice1.seattlesite1.
within a minute or perhaps even seconds, the status should change to Connected. The connected status simply means that the router node's salt minion has established a connection to the conductor's salt master.
[email protected]# show assets Thu 2021-06-03 00:24:24 UTC ============== =============== ===================== ============== =========== ================ ======== Router Node Asset Id 128T Version Status Time in Status Errors ============== =============== ===================== ============== =========== ================ ======== bostonsite1 datacenter1 datacenter-router-1 5.1.0-1.el7 Running 1d 2h 13m 17s 0 dallassite1 branchoffice2 branch-2-router 5.1.0-1.el7 Running 1d 2h 13m 18s 0 nycsite1 conductor1 conductor 5.1.0-1.el7 Running 1d 2h 21m 32s 0 seattlesite1 branchoffice1 branch-1-router None Connected 8s 0 None None datacenter-router-2 None Pending 1d 2h 23m 15s 0 Completed in 0.03 seconds
While it is possible to use the GUI to follow the asset status by looking at the dashboard (or router) page's router Provisioner [Status] column, 'send command reconnect' and many of the additional tools in this workflow are not available in the GUI
In another minute, if the router node is healthy the status will change to running and the problem is resolved. No further triage is required.
[email protected]# show ass Thu 2021-06-03 00:25:14 UTC ============== =============== ===================== ============== ========= ================ ======== Router Node Asset Id 128T Version Status Time in Status Errors ============== =============== ===================== ============== ========= ================ ======== bostonsite1 datacenter1 datacenter-router-1 5.1.0-1.el7 Running 1d 2h 14m 6s 0 dallassite1 branchoffice2 branch-2-router 5.1.0-1.el7 Running 1d 2h 14m 8s 0 nycsite1 conductor1 conductor 5.1.0-1.el7 Running 1d 2h 22m 21s 0 seattlesite1 branchoffice1 branch-1-router 5.1.0-1.el7 Running 4s 0 None None datacenter-router-2 None Pending 1d 2h 24m 4s 0 Completed in 0.04 seconds
The 'Time in Status' column can be used to keep track of how much time has elapsed since the last change in status. If it has been at least 2 minutes since the reconnect command was issued, and the status is Disconnected then further triage is indicated. If after 2 minutes, the status is something other than Running or Disconnected, there may be problems with one or more processes on the router node. Triaging this condition is beyond the scope of this document. Please refer to "Understanding and troubleshooting asset status" . 4. Conductor PCLI 'send command reconnect' was unsuccessful (asset status still Disconnected) If the asset status is still disconnected, it will be necessary to enter the router node or asset's PCLI. It is important to note that many of the commands which will be used to continue triage require further access to the Linux shell as user root. Establish a terminal session to the router node with disconnected asset status:
connect router router-name node node-name username t128
[email protected]# connect router seattlesite1 node branchoffice1 Connecting... The authenticity of host '[127.127.0.1]:16386 ([127.127.0.1]:16386)' can't be established. RSA key fingerprint is SHA256:FMfsnHxv6Lbssmmipn3Rqk5/gaPmyk+u4tgvJ5O1zGQ. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[127.127.0.1]:16386' (RSA) to the list of known hosts. [email protected]'s password: FIPS mode initialized. SSH client running in FIPS 140-2 mode Last login: Tue Jun 1 22:20:13 2021 ___ ____ _____ ____ _ ____ / _ \ | _ \ |___ | | __ ) / | | _ \ | | | | | |_) | / / _____ | _ \ | | | |_) | | |_| | | _ < / / |_____| | |_) | | | | _ < \___/ |_| \_\ /_/ |____/ |_| |_| \_\ [email protected]#
show config run flat | egrep ‘router < router-name> peer.*? name’
[email protected]# show config run flat | egrep 'router seattlesite1 peer.*? name' ✔ Piping output... config authority router seattlesite1 peer bostonsite1 name bostonsite1
[email protected]# show peers router bostonsite1 | egrep seattlesite1 ✔ Piping output... bostonsite1 -> seattlesite1 datacenter1 bo1 10.0.128.0 up unavailable unavailable bostonsite1 -> seattlesite1 datacenter1 internet 1.1.1.128 up unavailable unavailable [email protected]#
[email protected]# show peers router bostonsite1 | egrep seattlesite1 ✔ Piping output... bostonsite1 -> seattlesite1 datacenter1 bo1 10.0.128.0 down unavailable unavailable bostonsite1 -> seattlesite1 datacenter1 internet 1.1.1.128 down unavailable unavailable
send command reconnec
[email protected]# shell [admin@branch-1-router ~]$ su - t128 Password: Last login: Thu Jun 3 17:43:09 UTC 2021 from gateway on pts/0 [t128@branch-1-router ~]$
[t128t@branch-1-router ~]# sudo systemctl status salt-minion ● salt-minion.service - The Salt Minion Loaded: loaded (/usr/lib/systemd/system/salt-minion.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/salt-minion.service.d └─dnsTimeout.conf, minionWatchdog.conf, restartAlways.conf Active: inactive (dead) since Thu 2021-06-03 18:00:37 UTC; 50m ago Docs: man:salt-minion(1) file:///usr/share/doc/salt/html/contents.html https://docs.saltstack.com/en/latest/contents.html Process: 4528 ExecStart=/usr/bin/salt-minion (code=exited, status=0/SUCCESS) Main PID: 4528 (code=exited, status=0/SUCCESS) Jun 03 17:58:40 branch-1-router salt-minion[4528]: [WARNING ] The function "module.run" is using its deprecated version and will expire in version "Phosphorus". Jun 03 17:58:41 branch-1-router salt-minion[4528]: [WARNING ] The function "module.run" is using its deprecated version and will expire in version "Phosphorus". Jun 03 17:58:55 branch-1-router salt-minion[4528]: [WARNING ] The function "module.run" is using its deprecated version and will expire in version "Phosphorus". Jun 03 17:58:56 branch-1-router salt-minion[4528]: [WARNING ] The function "module.run" is using its deprecated version and will expire in version "Phosphorus". Jun 03 17:59:25 branch-1-router salt-minion[4528]: [WARNING ] The function "module.run" is using its deprecated version and will expire in version "Phosphorus". Jun 03 17:59:27 branch-1-router salt-minion[4528]: 2048 SHA256:jMLuWaTJjpbpWdN/k+V5ysEnz78GDiAW3CRwoRJncUQ branch-1-router (RSA) Jun 03 18:00:36 branch-1-router systemd[1]: Stopping The Salt Minion... Jun 03 18:00:36 branch-1-router salt-minion[4528]: [WARNING ] Minion received a SIGTERM. Exiting. Jun 03 18:00:37 branch-1-router salt-minion[4528]: The Salt Minion is shutdown. Minion received a SIGTERM. Exited. Jun 03 18:00:37 branch-1-router systemd[1]: Stopped The Salt Minion.
Active: active (running) since Thu 2021-06-03 17:40:15 UTC; 10m ago
'send command reconnect'
inactive (dead)
[t128@branch-1-router ~]# sudo systemctl restart salt-minion [t128@branch-1-router ~]# sudo systemctl status salt-minion ● salt-minion.service - The Salt Minion Loaded: loaded (/usr/lib/systemd/system/salt-minion.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/salt-minion.service.d └─dnsTimeout.conf, minionWatchdog.conf, restartAlways.conf Active: active (running) since Thu 2021-06-03 18:15:39 UTC; 8s ago Docs: man:salt-minion(1) file:///usr/share/doc/salt/html/contents.html https://docs.saltstack.com/en/latest/contents.html Main PID: 11087 (salt-minion) Tasks: 8 Memory: 68.8M CGroup: /system.slice/salt-minion.service ├─11087 /usr/bin/python3 /usr/bin/salt-minion ├─11094 /usr/bin/python3 /usr/bin/salt-minion └─11096 /usr/bin/python3 /usr/bin/salt-minion Jun 03 18:15:39 branch-1-router systemd[1]: Starting The Salt Minion... Jun 03 18:15:39 branch-1-router systemd[1]: Started The Salt Minion.
[email protected]# show assets Thu 2021-06-03 18:19:04 UTC ============== =============== ===================== ============== ========= ================ ======== Router Node Asset Id 128T Version Status Time in Status Errors ============== =============== ===================== ============== ========= ================ ======== bostonsite1 datacenter1 datacenter-router-1 5.1.0-1.el7 Running 1d 20h 7m 57s 0 dallassite1 branchoffice2 branch-2-router 5.1.0-1.el7 Running 1d 20h 7m 58s 0 nycsite1 conductor1 conductor 5.1.0-1.el7 Running 1d 20h 16m 12s 0 seattlesite1 branchoffice1 branch-1-router 5.1.0-1.el7 Running 2m 22s 0 None None datacenter-router-2 None Pending 1d 20h 17m 55s 0
systemctl status salt-minion
t128@branch-1-router ~]# sudo systemctl status salt-minion ● salt-minion.service - The Salt Minion Loaded: loaded (/usr/lib/systemd/system/salt-minion.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/salt-minion.service.d └─dnsTimeout.conf, minionWatchdog.conf, restartAlways.conf Active: active (running) since Thu 2021-06-03 17:40:15 UTC; 10min ago Docs: man:salt-minion(1) file:///usr/share/doc/salt/html/contents.html https://docs.saltstack.com/en/latest/contents.html Main PID: 18688 (salt-minion) Tasks: 14 Memory: 76.3M CGroup: /system.slice/salt-minion.service ├─18688 /usr/bin/python3 /usr/bin/salt-minion ├─18732 /usr/bin/python3 /usr/bin/salt-minion └─18734 /usr/bin/python3 /usr/bin/salt-minion Jun 03 17:40:56 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:40:56 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:41:25 branch-1-router salt-minion[18688]: [WARNING ] The function "module.run" is using its deprecated version and will expire in version "Phosphorus". Jun 03 17:41:25 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:41:25 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:41:25 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:41:27 branch-1-router salt-minion[18688]: 2048 SHA256:jMLuWaTJjpbpWdN/k+V5ysEnz78GDiAW3CRwoRJncUQ branch-1-router (RSA) Jun 03 17:41:27 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:41:27 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure Jun 03 17:41:27 branch-1-router salt-minion[18688]: [ERROR ] Exception during resolving address: [Errno 2] Host name lookup failure [root@branch-1-router ~]#
[email protected]# configure authority asset-connection-resiliency enabled false true
conf authority router <router-name> system asset-connection-resiliency enabled
[email protected]# configure authority router seattlesite1 system asset-connection-resiliency enabled false true use-authority-setting
This feature must be used with caution as each salt-minion to salt-master ssh connection consumes additional conductor memory and CPU. Enabling this for all routers managed by a conductor could overwhelm the conductor!
In order to enable this feature, the conductor uses salt to install the 128T-minion-connector rpm on the router. If a new salt-minion -> salt-master connection can never be established, it may not be possible to enable this feature!!!
config authority conductor-address <ip-address>
[email protected]# show config run flat | grep 'conductor-address' ✔ Piping output... config authority conductor-address 4.4.4.3
config authority router <route-name> node <node-name> device <device-name> network-interface <network-interface-name> conductor [true|false]
[email protected]# show config run flat | egrep 'network-interface internet.*?conductor' ✔ Piping output... config authority router seattlesite1 node branchoffice1 device-interface wan1 network-interface internet conductor true config authority router bostonsite1 node datacenter1 device-interface wan1 network-interface internet conductor true config authority router dallassite1 node branchoffice2 device-interface wan1 network-interface internet conductor true
config authority router seattlesite1 service-route _conductor_1_route_1 name _conductor_1_route_1 config authority router seattlesite1 service-route _conductor_1_route_1 service-name _conductor_1 config authority router seattlesite1 service-route _conductor_1_route_1 generated true config authority router seattlesite1 service-route _conductor_1_route_1 next-hop branchoffice1 internet node-name branchoffice1 config authority router seattlesite1 service-route _conductor_1_route_1 next-hop branchoffice1 internet interface internet config authority router seattlesite1 service-route _conductor_1_route_1 next-hop branchoffice1 internet gateway-ip 1.1.1.1 config authority router seattlesite1 service-route _conductor_1_route_1 reachability-detection enabled false config authority router bostonsite1 service-route _conductor_1_route_1 name _conductor_1_route_1 config authority router bostonsite1 service-route _conductor_1_route_1 service-name _conductor_1 config authority router bostonsite1 service-route _conductor_1_route_1 generated true config authority router bostonsite1 service-route _conductor_1_route_1 next-hop datacenter1 internet node-name datacenter1 config authority router bostonsite1 service-route _conductor_1_route_1 next-hop datacenter1 internet interface internet config authority router bostonsite1 service-route _conductor_1_route_1 next-hop datacenter1 internet gateway-ip 3.3.3.1 config authority router bostonsite1 service-route _conductor_1_route_1 reachability-detection enabled false config authority router dallassite1 service-route _conductor_1_route_1 name _conductor_1_route_1 config authority router dallassite1 service-route _conductor_1_route_1 service-name _conductor_1 config authority router dallassite1 service-route _conductor_1_route_1 generated true config authority router dallassite1 service-route _conductor_1_route_1 next-hop branchoffice2 internet node-name branchoffice2 config authority router dallassite1 service-route _conductor_1_route_1 next-hop branchoffice2 internet interface internet config authority router dallassite1 service-route _conductor_1_route_1 next-hop branchoffice2 internet gateway-ip 2.2.2.1 config authority router dallassite1 service-route _conductor_1_route_1 reachability-detection enabled false config authority service _conductor_1 name _conductor_1 config authority service _conductor_1 enabled true config authority service _conductor_1 scope private config authority service _conductor_1 tap-multiplexing false config authority service _conductor_1 transport icmp protocol icmp config authority service _conductor_1 transport tcp protocol tcp config authority service _conductor_1 transport tcp port-range 443 start-port 443 config authority service _conductor_1 transport tcp port-range 443 end-port 443 config authority service _conductor_1 transport tcp port-range 930 start-port 930 config authority service _conductor_1 transport tcp port-range 930 end-port 930 config authority service _conductor_1 transport tcp port-range 4505 start-port 4505 config authority service _conductor_1 transport tcp port-range 4505 end-port 4505 config authority service _conductor_1 transport tcp port-range 4506 start-port 4506 config authority service _conductor_1 transport tcp port-range 4506 end-port 4506 config authority service _conductor_1 address 4.4.4.3/32 config authority service _conductor_1 generate-categories false config authority service _conductor_1 access-policy-generated true config authority service _conductor_1 access-policy _internal_ source _internal_ config authority service _conductor_1 access-policy _internal_ permission allow config authority service _conductor_1 service-policy _conductor_ config authority service _conductor_1 share-service-routes false config authority service _conductor_1 source-nat network-interface config authority service _conductor_1 application-type generic config authority service _conductor_1 fqdn-resolution-type v4 config authority service _conductor_1 generated true
show config run flat | egrep 'network-interface <network-interface-name> .*?source-nat'
[email protected]# show config run flat | egrep 'network-interface internet.*?source-nat' ✔ Piping output... config authority router seattlesite1 node branchoffice1 device-interface wan1 network-interface internet source-nat true config authority router bostonsite1 node datacenter1 device-interface wan1 network-interface internet source-nat true config authority router dallassite1 node branchoffice2 device-interface wan1 network-interface internet source-nat true
[email protected]# show fib router seattlesite1 | egrep 4.4.4.3 ✔ Piping output... 4.4.4.3/32 0 ICMP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 443 TCP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 930 TCP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 4505 TCP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 4506 TCP _internal_ _conductor_1 1.1.1.1
[email protected]# show fib | egrep 4.4.4.3 ✔ Piping output... 4.4.4.3/32 0 ICMP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 443 TCP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 930 TCP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 4505 TCP _internal_ _conductor_1 1.1.1.1 4.4.4.3/32 4506 TCP _internal_ _conductor_1 1.1.1.1
sho config run flat | egrep 'network-interface <network-interface> .*?gateway'
[email protected]# sho config run flat | egrep 'network-interface internet.*?gateway' ✔ Piping output... config authority router seattlesite1 node branchoffice1 device-interface wan1 network-interface internet address 1.1.1.128 gateway 1.1.1.1
[email protected]# ping 1.1.1.1 PING 1.1.1.1 56 bytes of data. Ping from 1.1.1.1 (1.1.1.1): icmp_seq=0 ttl=64 time=3.073ms Ping from 1.1.1.1 (1.1.1.1): icmp_seq=1 ttl=64 time=79.775ms Ping from 1.1.1.1 (1.1.1.1): icmp_seq=2 ttl=64 time=90.799ms Ping from 1.1.1.1 (1.1.1.1): icmp_seq=3 ttl=64 time=89.572ms --- 1.1.1.1 ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss
service-ping tenant _internal service-name _conductor_1 <conductor-address>
[email protected]# service-ping tenant _internal_ service-name _conductor_1 4.4.4.3 PING 4.4.4.3 56 bytes of data. Ping from 4.4.4.3 (4.4.4.3): icmp_seq=0 ttl=63 time=66.948ms Ping from 4.4.4.3 (4.4.4.3): icmp_seq=1 ttl=63 time=17.402ms Ping from 4.4.4.3 (4.4.4.3): icmp_seq=2 ttl=63 time=1.898ms Ping from 4.4.4.3 (4.4.4.3): icmp_seq=3 ttl=63 time=89.977ms --- 4.4.4.3 ping statistics --- 4 packets transmitted, 4 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 1.898/44.056/89.977/41.314
show config run flat | egrep 'router <router-name> node <node-name> .*?network-interface <network-interface-name> .*?source-nat'