Request for testing: upgraded ssh handling now on development HEAD

Hi all,

A recent discussion on the development list introduced some great patches from Jerome Wagner, which have streamlined the number of SSH operations Ansible has to perform for a certain class of tasks. This makes the ssh implementation even faster (and especially so with Control Persist on, which we encourage!).

This works by not transferring files and creating tempdirs in many situations where a module doesn’t require file transfer, rather, by just pushing the module over the SSH channel and running it directly without saving it to disk.

It seems to be good for a 40-50% network performance upgrade in a basic case where some steps require file transfer and others don’t. It may be much more for many playbooks.

It won’t be very noticeable if your network is already great, but if it’s not, or you’re managing across the open internet, it’s pretty nice.

Naturally, this will do nothing for package update time, which is where you’ll be spending most of your management cycles in most playbooks anyway.

Rather than directly import this code for testing on the development branch, we’ve checked it in temporarily as “ssh_alt.py”. I’d be curious if you had regular playbooks you used if you could test this version to:

(A) see if there are any errors

(B) what sort of performance differences you see between -c ssh and -c ssh_alt. (Note: if your playbook has hard coded the connection in it, please remove the connection: line before testing, and be sure you are not using accelerate mode, as this will invalidate the tests).

(C) if possible, what data you get for accelerate mode.

Please don’t share local test (127.0.0.1) numbers, and after we get a few replies, we’ll mostly just be interested in hearing about any errors you might have encountered.

Remember you need to use -c ssh_alt to activate this for now.

Thanks very much and thanks for a very cool patch set Jerome!

Ok this was breaking async, we will get it working shortly!

ssh_alt has been merged in again with numerous fixes: https://github.com/ansible/ansible/pull/5247

We have seen impressive performance increases from using this connection method and I would like to thank Jerome Wagner for all the work he has put into it.

Per Michael’s previous email, please share your results.

Just built and installed ansible-1.5-0.git201312162123.fc20.noarch.rpm
ssh-alt Running well except Hitting the following issue:

ignore-errors in loop are failing with ssh_alt

The test I did with ssh_alt during its development was not showing the issue.

How to reproduce:

have a Play with one task like:

  • name: Make sure the following services are turned off
    service: name={{ item }} enabled=no state=stopped
    with_items: disabled_services_list_var
    ignore_errors: True
    tags:
  • service_disable

and a variable like

disabled_services_list_var:

  • ‘blk-availability’
  • ‘certmonger’
  • ‘cpuspeed’

Note: that certmonger rpm is not installed in the target system

run the play with -c ssh_alt gives:

TASK: [Make sure the following services are turned off] ***********************
changed: [targetsystem] => (item=blk-availability)
fatal: [targetsystem] => SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh
FATAL: all hosts have already failed – aborting

running without ssh_alt gives:

TASK: [Make sure the following services are turned off] ***********************
changed: [targetsystem] => (item=blk-availability)
failed: [targetsystem] => (item=certmonger) => {“failed”: true, “item”: “certmonger”}
msg: cannot find ‘service’ binary or init script for service, possible typo in service name?, aborting
…ignoring
ok: [targetsystem] => (item=cpuspeed)
PLAY RECAP ********************************************************************
targetsystem : ok=2 changed=1 unreachable=0 failed=0

Thanks Philippe, can you file a bug for this?

Done.
See https://github.com/ansible/ansible/issues/5320

Thanks

Phil.