Add copy_file() to scp files between remotes

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Add skeleton devstack task

Currently only installs devstack on one node, and creates some pools on
the ceph cluster.

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Fix linter errors.

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Add optional 'owner' arg to sudo_write_file()

This gets passed directly to chown as 'sudo chown $owner $file'

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Copy ceph auth keys over to devstack node

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Split out devstack-ceph configuration

This is starting to get long, so create configure_devstack_and_ceph()

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Add set_libvirt_secret() and split out other steps

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Add update_devstack_config_files()

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Split out key generation

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Use get_file() and sudo_write_file()

... instead of copy_file()

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Don't pass owner to copy_key()

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Fix typoed virsh call

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Call seek(0) on StringIO objects before reading

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Work around a bug in ConfigParser

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Use ConfigParser.set() instead of update()

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
get_file() returns a str, not a StringIO...

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Add Remote.hostname property

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Add Remote.is_online property

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Remote instances can now establish SSH connections

Previously, they required an active ssh connection object to be passed
to them. That behavior is still functional.

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>
Make Remote.is_online more accurate

To really know if the connection is active, we need to read something
from the remote host.

Signed-off-by: Zack Cerza <zack.cerza@inktank.com>