Grump, I didn't read the rest of the thread hard enough. If newlines don't
work I'd double check the manual for your switch in case that continuation
option exists - otherwise, as mentioned, you may be out of luck :( SSH
simply isn't built the way you need it to be.

On Fri, Nov 18, 2016 at 8:52 AM, Jeff Forcier <[email protected]> wrote:

> This isn't a limitation of Fabric itself, but is specific to how SSH works
> - to encapsulate each command as a discrete result of output, exit code,
> etc, one must use a distinct command-execution call to the SSH daemon for
> each command. (This is in the FAQ as http://www.fabfile.org/faq.
> html#my-cd-workon-export-etc-calls-don-t-seem-to-work though the title is
> a bit specific.)
>
> If your use case can deal with that limitation - i.e. if your intent is to
> just run the commands and not do programmatic things with its output or
> exit codes partway through - you could try submitting a multiline string as
> the argument to `run`, e.g.:
>
>     run("""screen-length disable
> display current-configuration""")
>
> (Or use '\n', etc.)
>
> How well that will work depends on how your switch's shell behaves with
> that style of 'batched' input.
>
> If the switch's shell supports any sort of single-line continuations (like
> '&&' or ';' in typical Unix shells) that's another approach. You could
> leverage the 'with prefix()' feature of Fabric then too (
> http://docs.fabfile.org/en/latest/api/core/context_
> managers.html#fabric.context_managers.prefix).
>
> Good luck,
> Jeff
>
>
> On Fri, Nov 18, 2016 at 7:00 AM, Brandon Whaley <[email protected]>
> wrote:
>
>> You may be able to use the underlying paramiko library that Fabric itself
>> relies on, but I don't have any personal experience with it.
>>
>> On Fri, Nov 18, 2016 at 3:57 AM <[email protected]> wrote:
>>
>>> Hello Brandon,
>>>
>>>
>>> (sorry for the direct reply, I didn't notice that the To: wasn't to the
>>> ML)
>>>
>>> Thank you for your reply.
>>> Unfortunately sending newlines (or carriage return) between two commands
>>> inside one run() didn't help.
>>> Since between each run() I'm loosing my execution session, are you aware
>>> about another ssh module for Python that doesn't have this behaviour?
>>>
>>> Many Thanks,
>>>
>>> Regards,
>>>
>>>
>>> Alexandre
>>>
>>>
>>> ----- Original Message -----
>>> From: "Brandon Whaley" <[email protected]>
>>> To: "a hocquel" <[email protected]>, [email protected]
>>> Sent: Thursday, 17 November, 2016 7:54:24 PM
>>> Subject: Re: [Fab-user] HP switches and run() received nonzero return
>>> code -1 while executing
>>>
>>>
>>> Fabric was written with accessing *nix based servers in mind, so some
>>> things it does don't work correctly with non-standard ssh implementations.
>>> I'm not sure if HP is returning the -1 code or if Fabric is not getting one
>>> at all and as such returns -1 as an error value. Either way, it sounds like
>>> you'll always need to use warn_only=True for this device.
>>>
>>>
>>> One of the biggest differences between an interactive ssh session and
>>> Fabric is that when you use run(), while only one ssh connection is ever
>>> made, a new command execution session is initiated over that connection for
>>> each operation. That means things like environment variables are "fresh" at
>>> every call to run(). I suspect this is why your "screen-length disable"
>>> command does not take effect, since HP's docs state "Note that this command
>>> is applicable to the current user only and when a user re-logs in, the
>>> settings restore to the system default."
>>>
>>>
>>> Have you tried sending newlines between two commands in the same run()?
>>> That might be a workaround for you if the switch allows it.
>>>
>>>
>>> On Thu, Nov 17, 2016 at 10:43 AM < [email protected] > wrote:
>>>
>>>
>>> Hello,
>>>
>>>
>>> I'm new here, and before writing this email I searched on the archives
>>> without success, so please excuse me if this question was already asked.
>>>
>>> I'm trying to "display current-configuration" through ssh on HP 5820
>>> series switches with this piece of code :
>>>
>>> from fabric.api import *
>>>
>>> env.user = 'toto'
>>> env.hosts = ['192.168.72.10']
>>> def displaycurr():
>>> with settings(hide('warnings'), warn_only=True):
>>> # below command is normally used to prevent the "more"
>>> run('screen-length disable ', shell=False)
>>> run('display current-configuration ', shell=False)
>>>
>>>
>>> As written in the email's subject, every ran command returns a nonzero
>>> code, implying that even if I forced the "keep running" with the
>>> warn_only=True option, after each run command the ssh session is exited.
>>> Therefore I lost the first command advantage and then I got the "more"
>>> during the second.
>>>
>>> Same code (without warn_only) and the right Cisco commands does work
>>> well on Cisco switches.
>>>
>>>
>>> By any chance, is there someone that experienced the same issue (not
>>> necessarily with HP switches) and managed to keep the ssh session opened
>>> between both commands?
>>>
>>>
>>> Many Thanks,
>>>
>>> Regards,
>>>
>>>
>>> Alexandre
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Fab-user mailing list
>>> [email protected]
>>> https://lists.nongnu.org/mailman/listinfo/fab-user
>>>
>>> _______________________________________________
>>> Fab-user mailing list
>>> [email protected]
>>> https://lists.nongnu.org/mailman/listinfo/fab-user
>>>
>>
>> _______________________________________________
>> Fab-user mailing list
>> [email protected]
>> https://lists.nongnu.org/mailman/listinfo/fab-user
>>
>>
>
>
> --
> Jeff Forcier
> Unix sysadmin; Python engineer
> http://bitprophet.org
>



-- 
Jeff Forcier
Unix sysadmin; Python engineer
http://bitprophet.org
_______________________________________________
Fab-user mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/fab-user

Reply via email to