Discussion:
[Fab-user] Fabric 1.13.1 seems not reload the ssh_config file
Sergei Vorobyov
2017-01-25 08:23:04 UTC
Permalink
Greetings!

Fabric seems to ignore dynamic changes happening in the

env.ssh_config_path

It looks like that this file is loaded just once and cached, and any
subsequent changes to this file are simply ignored. Below is the example:
in the first iteration my code (shown in the end) greps this file, shows
that the initial IP address value for remoteit host is ...56, and then
correctly executes ifconfig on this host.

30 seconds pass before the next iteration, and during this time I alter the
config file, remoteit becomes ...80, as seen on the second grep, but fabric
continues to connect to a *stale* address 56

env.ssh_config_path=/home/autotest/code/repo/pftest/conf/ssh/config
[localhost] local: grep -A 1 "remoteit$"
/home/autotest/code/repo/pftest/conf/ssh/config
Host remoteit
HostName 10.46.29.56
[remoteit] run: ifconfig | grep "10\.46\."
[remoteit] out: inet addr:10.46.29.56 Bcast:10.46.29.255
Mask:255.255.255.0

env.ssh_config_path=/home/autotest/code/repo/pftest/conf/ssh/config
[localhost] local: grep -A 1 "remoteit$"
/home/autotest/code/repo/pftest/conf/ssh/config
Host remoteit
HostName 10.46.29.80
[remoteit] run: ifconfig | grep "10\.46\."
[remoteit] out: inet addr:10.46.29.56 Bcast:10.46.29.255
Mask:255.255.255.0


The full code of the test is:

def tst_03():
while True:
print('env.ssh_config_path={}'.format(env.ssh_config_path))
local('grep -A 1 "remoteit$" {}'.format(env.ssh_config_path))
with settings(use_ssh_config=True, host_string='remoteit',
path='/sbin'):
run('ifconfig | grep "10\.46\."')
time.sleep(30) # to let me alter def tst_03():
while True:
print('env.ssh_config_path={}'.format(env.ssh_config_path))
local('grep -A 1 "remoteit$" {}'.format(env.ssh_config_path))
with settings(use_ssh_config=True, host_string='remoteit',
path='/sbin'):
run('ifconfig | grep "10\.46\."')
time.sleep(30) # to let me alter
#
env.ssh_config_path=/home/autotest/code/repo/pftest/conf/ssh/config
Brandon Whaley
2017-01-25 15:15:23 UTC
Permalink
Fabric performs this caching of the ssh config file deliberately to improve
performance. The easiest way for you to break this functionality is to
delete the '_ssh_config' key from the env dictionary, since that key's
existence is what Fabric tests for before loading the config from disk
here: https://github.com/fabric/fabric/blob/master/fabric/network.py#L192
Post by Sergei Vorobyov
Greetings!
Fabric seems to ignore dynamic changes happening in the
env.ssh_config_path
It looks like that this file is loaded just once and cached, and any
in the first iteration my code (shown in the end) greps this file, shows
that the initial IP address value for remoteit host is ...56, and then
correctly executes ifconfig on this host.
30 seconds pass before the next iteration, and during this time I alter
the config file, remoteit becomes ...80, as seen on the second grep, but
fabric continues to connect to a *stale* address 56
env.ssh_config_path=/home/autotest/code/repo/pftest/conf/ssh/config
[localhost] local: grep -A 1 "remoteit$"
/home/autotest/code/repo/pftest/conf/ssh/config
Host remoteit
HostName 10.46.29.56
[remoteit] run: ifconfig | grep "10\.46\."
[remoteit] out: inet addr:10.46.29.56 Bcast:10.46.29.255
Mask:255.255.255.0
env.ssh_config_path=/home/autotest/code/repo/pftest/conf/ssh/config
[localhost] local: grep -A 1 "remoteit$"
/home/autotest/code/repo/pftest/conf/ssh/config
Host remoteit
HostName 10.46.29.80
[remoteit] run: ifconfig | grep "10\.46\."
[remoteit] out: inet addr:10.46.29.56 Bcast:10.46.29.255
Mask:255.255.255.0
print('env.ssh_config_path={}'.format(env.ssh_config_path))
local('grep -A 1 "remoteit$" {}'.format(env.ssh_config_path))
with settings(use_ssh_config=True, host_string='remoteit',
run('ifconfig | grep "10\.46\."')
print('env.ssh_config_path={}'.format(env.ssh_config_path))
local('grep -A 1 "remoteit$" {}'.format(env.ssh_config_path))
with settings(use_ssh_config=True, host_string='remoteit',
run('ifconfig | grep "10\.46\."')
time.sleep(30) # to let me alter
#
env.ssh_config_path=/home/autotest/code/repo/pftest/conf/ssh/config
_______________________________________________
Fab-user mailing list
https://lists.nongnu.org/mailman/listinfo/fab-user
Loading...