[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Dynamically changing remote servers list
From: |
Douglas A. Augusto |
Subject: |
Re: Dynamically changing remote servers list |
Date: |
Sat, 30 Aug 2014 00:25:40 -0300 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On 28/08/2014 at 00:38,
Ole Tange <ole@tange.dk> wrote:
> You should test that it works with all the supported styles of
> sshlogins. From the man page:
Hi,
I made the script more robust and it now seems to support all the styles of
sshlogins:
################################################################################
cp original.slf updated.slf
while [ 1 ] ; do
nice parallel --timeout 1000% --nonall -j0 -k --slf original.slf --tag
echo | \
sed -e 's#\t$##' -e '#\t#d' | \
nice parallel -k "sed -n 's#^\([[:digit:]]\+/\)\{0,1\}{}\$#&#p'
original.slf | head -n 1" > tmp.slf
if ! cmp -s tmp.slf updated.slf; then
mv tmp.slf updated.slf
fi
sleep 10
done &
parallel --slf updated.slf ...
################################################################################
The command which, given a sshlogin string, recovers the full entry from the
original slf file (original.slf) is:
"sed -n 's#^\([[:digit:]]\+/\)\{0,1\}{}\$#&#p' original.slf | head -n 1"
Basically, it assembles a matching pattern that begins with the optional
specification of the number of slots (will match e.g. "16/" or none):
^\([[:digit:]]\+/\)\{0,1\}
then it appends the sshlogin string at hand until the end of the line:
{}\$
finally, the corresponding matched pattern (full entry) is printed by
#&#p
##########
There are two minor limitations, though:
1) If the original.slf contains duplicate entries differing only by the
specification of the number of slots, such as:
server.net
8/server.net
only the first one will be picked (this is what 'head -n 1' does).
2) I'd like to prevent the replacement {} from being quoted by GNU Parallel,
but it insists on converting something like:
ssh -p 2222 server.domain.net
into
ssh\ -p\ 2222\ server.domain.net
This by itself doesn't seem to be a problem within sed. The problem is that I
cannot quote the dots in server.domain.net (making it server\.domain\.net,
turning off their special meaning within sed) because GNU Parallel overrides
any attempt of doing so. For instance, the following would work:
parallel --rpl '{quote} s#\.#\\.#g' -k "sed -n
's#^\([[:digit:]]\+/\)\{0,1\}{quote}\$#&#p' original.slf | head -n 1"
but only if replace this line:
my $cmdstring =
$self->replace_placeholders($self->{'command'},$Global::quoting,$quote_arg);
by
my $cmdstring =
$self->replace_placeholders($self->{'command'},$Global::quoting,0);
in GNU Parallel's source code. Am I missing something?
--
Douglas A. Augusto
- Re: Dynamically changing remote servers list, (continued)
- Re: Dynamically changing remote servers list, ChessDoter, 2014/08/18
- Re: Dynamically changing remote servers list, Douglas A. Augusto, 2014/08/21
- Re: Dynamically changing remote servers list, Ole Tange, 2014/08/22
- Re: Dynamically changing remote servers list, Douglas A. Augusto, 2014/08/25
- Re: Dynamically changing remote servers list, Ole Tange, 2014/08/25
- Re: Dynamically changing remote servers list, Douglas A. Augusto, 2014/08/26
- Re: Dynamically changing remote servers list, Douglas A. Augusto, 2014/08/26
- Re: Dynamically changing remote servers list, Ole Tange, 2014/08/27
- Re: Dynamically changing remote servers list, Douglas A. Augusto, 2014/08/27
- Re: Dynamically changing remote servers list, Ole Tange, 2014/08/27
- Re: Dynamically changing remote servers list,
Douglas A. Augusto <=
- Re: Dynamically changing remote servers list, Ole Tange, 2014/08/30
- Re: Dynamically changing remote servers list, Douglas A. Augusto, 2014/08/27
- Re: Dynamically changing remote servers list, Ole Tange, 2014/08/27