from . import exc
from . import conf
from .cliutil import priority
-
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
for hostname in args.client:
LOG.debug('Pushing admin keys and conf to %s', hostname)
try:
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
-
+ sudo = args.pushy(get_transport(hostname))
write_conf_r = sudo.compile(conf.write_conf)
write_conf_r(
cluster=args.cluster,
overwrite=args.overwrite_conf,
)
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
+ sudo = args.pushy(get_transport(hostname))
write_file_r = sudo.compile(write_file)
error = write_file_r(
'/etc/ceph/%s.client.admin.keyring' % args.cluster,
from . import conf
from . import misc
from .cliutil import priority
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
for hostname in args.client:
LOG.debug('Pushing config to %s', hostname)
try:
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
-
+ sudo = args.pushy(get_transport(hostname))
write_conf_r = sudo.compile(conf.write_conf)
write_conf_r(
cluster=args.cluster,
for hostname in args.client:
try:
LOG.debug('Checking %s for %s', hostname, frompath)
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
get_file_r = sudo.compile(misc.get_file)
conf_file = get_file_r(path=frompath)
if conf_file is not None:
from .cliutil import priority
from . import misc
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
else:
for hostname in hosts:
LOG.debug('Checking %s for %s', hostname, frompath)
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
get_file_r = sudo.compile(misc.get_file)
key = get_file_r(path=frompath.format(hostname=hostname))
if key is not None:
from . import exc
from . import lsb
from .cliutil import priority
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
LOG.debug('Detecting platform for host %s ...', hostname)
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
(distro, release, codename) = lsb.get_lsb_release(sudo)
LOG.debug('Distro %s release %s codename %s', distro, release, codename)
LOG.debug('Detecting platform for host %s ...', hostname)
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
(distro, release, codename) = lsb.get_lsb_release(sudo)
LOG.debug('Distro %s codename %s', distro, codename)
LOG.debug('Detecting platform for host %s ...', hostname)
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
(distro, release, codename) = lsb.get_lsb_release(sudo)
LOG.debug('Distro %s codename %s', distro, codename)
for hostname in args.host:
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
LOG.debug('Purging data from host %s ...', hostname)
purge_data_any_r = sudo.compile(purge_data_any)
from . import exc
from . import lsb
from .cliutil import priority
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
for hostname, name in args.mds:
try:
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
(distro, release, codename) = lsb.get_lsb_release(sudo)
init = lsb.choose_init(distro, codename)
from . import exc
from . import lsb
from .cliutil import priority
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
def mon_create(args):
+
cfg = conf.load(args)
if not args.mon:
try:
LOG.debug('Deploying mon to %s', hostname)
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
(distro, release, codename) = lsb.get_lsb_release(sudo)
init = lsb.choose_init(distro, codename)
LOG.debug('Removing mon from %s', hostname)
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(hostname=hostname))
+ sudo = args.pushy(get_transport(hostname))
destroy_mon_r = sudo.compile(destroy_mon)
destroy_mon_r(
from . import exc
from . import lsb
from .cliutil import priority
+from .sudo_pushy import get_transport
LOG = logging.getLogger(__name__)
for hostname, disk, journal in args.disk:
try:
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
+ sudo = args.pushy(get_transport(hostname))
if hostname not in bootstrapped:
bootstrapped.add(hostname)
for hostname, disk, journal in args.disk:
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
+ sudo = args.pushy(get_transport(hostname))
LOG.debug('Activating host %s disk %s', hostname, disk)
LOG.debug('zapping %s on %s', disk, hostname)
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
+ sudo = args.pushy(get_transport(hostname))
zap_r = sudo.compile(zap)
zap_r(disk)
for hostname, disk, journal in args.disk:
# TODO username
- sudo = args.pushy('ssh+sudo:{hostname}'.format(
- hostname=hostname,
- ))
+ sudo = args.pushy(get_transport(hostname))
+
LOG.debug('Listing disks on {hostname}...'.format(hostname=hostname))
list_disk_r = sudo.compile(list_disk)
import pushy.transport.ssh
+import pushy.transport.local
+import os, shutil, subprocess, sys
+def __init__(self, command, address, **kwargs):
+ pushy.transport.BaseTransport.__init__(self, address)
+
+ self.__proc = subprocess.Popen(command, stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ bufsize=65535)
+
+ self.stdout = self.__proc.stdout
+ self.stderr = self.__proc.stderr
+ self.stdin = self.__proc.stdin
class SshSudoTransport(object):
@staticmethod
command = ['sudo'] + command
return pushy.transport.ssh.Popen(command, *a, **kw)
+class LocalSudoTransport(object):
+ @staticmethod
+ def Popen(command, *a, **kw):
+ command = ['sudo'] + command
+ # Overide the original initializer
+ pushy.transport.local.Popen.__init__ = __init__
+ return pushy.transport.local.Popen(command, *a, **kw)
+
+def get_transport(hostname):
+ import socket
+
+ myhostname = socket.gethostname().split('.')[0]
+ if hostname == myhostname:
+ return 'local+sudo:'
+ else:
+ return 'ssh+sudo:{hostname}'.format(hostname=hostname)
def patch():
"""
sudo on the remote host.
"""
pushy.transports['ssh+sudo'] = SshSudoTransport
+ pushy.transports['local+sudo'] = LocalSudoTransport