"""
import logging
from ceph_deploy import exc, lsb
-from ceph_deploy.util import wrappers
from ceph_deploy.sudo_pushy import get_transport
from ceph_deploy.hosts import debian, centos, fedora, suse
:param hostname: A hostname that is reachable/resolvable over the network
:param fallback: Optional fallback to use if no supported distro is found
"""
- sudo_conn = pushy.connect(get_transport(hostname))
+ transport = get_transport(hostname)
+ sudo_conn = pushy.connect(transport)
(distro, release, codename) = lsb.get_lsb_release(sudo_conn)
module = _get_distro(distro)
+import getpass
+import logging
+import socket
import pushy.transport.ssh
import pushy.transport.local
-import subprocess
+import subprocess
+
+logger = logging.getLogger(__name__)
class Local_Popen(pushy.transport.local.Popen):
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
def close(self):
self.stdin.close()
self.__proc.wait()
-
+
+
class SshSudoTransport(object):
@staticmethod
def Popen(command, *a, **kw):
command = ['sudo'] + command
return pushy.transport.ssh.Popen(command, *a, **kw)
+
class LocalSudoTransport(object):
@staticmethod
def Popen(command, *a, **kw):
command = ['sudo'] + command
return Local_Popen(command, *a, **kw)
-def get_transport(hostname):
- import socket
+def get_transport(hostname):
+ use_sudo = needs_sudo()
myhostname = socket.gethostname().split('.')[0]
if hostname == myhostname:
- return 'local+sudo:'
+ if use_sudo:
+ logger.debug('will use a local connection with sudo')
+ return 'local+sudo:'
+ logger.debug('will use a local connection without sudo')
+ return 'local:'
else:
- return 'ssh+sudo:{hostname}'.format(hostname=hostname)
+ if use_sudo:
+ logger.debug('will use a remote connection with sudo')
+ return 'ssh+sudo:{hostname}'.format(hostname=hostname)
+ logger.debug('will use a remote connection without sudo')
+ return 'ssh:{hostname}'.format(hostname=hostname)
+
+
+def needs_sudo():
+ if getpass.getuser() == 'root':
+ return False
+ return True
+
def patch():
"""