shell: Add in a shell command
This just gives us a simple way to execvp ssh and have a normal, bog-standard
terminal. Very similar to the board.sh shell command.
Change-Id: I50fb7b96abae737a3d01481e8cc27ac9accd3b57
diff --git a/mdt/mdt.py b/mdt/mdt.py
index 61b99ba..de5a336 100755
--- a/mdt/mdt.py
+++ b/mdt/mdt.py
@@ -12,6 +12,7 @@
import config
import devices
import keys
+import shell
class HelpCommand:
def run(self, args):
@@ -25,7 +26,8 @@
'get': config.Get(),
'set': config.Set(),
'clear': config.Clear(),
- 'genkey': keys.GenKey()
+ 'genkey': keys.GenKey(),
+ 'shell': shell.Shell(),
}
diff --git a/mdt/shell.py b/mdt/shell.py
new file mode 100644
index 0000000..678ee3c
--- /dev/null
+++ b/mdt/shell.py
@@ -0,0 +1,63 @@
+from time import sleep
+
+import platform
+import subprocess
+import os
+
+import spur
+
+import discoverer
+import config
+import keys
+
+class Shell:
+ def __init__(self):
+ self.config = config.Config()
+ self.keystore = keys.Keystore()
+ self.discoverer = discoverer.Discoverer(self)
+
+ self.username = self.config.username()
+ self.private_key = self.keystore.privateKey()
+ self.ssh_command = self.config.sshCommand()
+
+ self.device = self.config.preferredDevice()
+ self.address = None
+
+ def add_device(self, hostname, address):
+ if not self.device:
+ self.device = hostname
+ self.address = address
+ elif self.device == hostname:
+ self.address = address
+
+ def run(self, args):
+ if len(args) > 1:
+ self.device = args[1]
+
+ if not self.private_key:
+ # Need to call genkey first.
+ print('Looks like you don\'t have a private key yet. Generating one.')
+
+ if not self.keystore.generateKey():
+ print('Unable to generate private key.')
+ return 1
+
+ if not self.address:
+ if self.device:
+ print('Waiting for device "{0}"...'.format(self.device))
+ else:
+ print('Waiting for a device...')
+
+ while not self.address:
+ sleep(0.1)
+
+ print('Found "{0}" at {1}'.format(self.device, self.address))
+
+ os.execvp(
+ self.ssh_command, [
+ self.ssh_command,
+ '-oStrictHostKeyChecking=no',
+ '-i{0}'.format(self.keystore.privateKeyPath()),
+ '-Ct',
+ '@'.join([self.username, self.address])
+ ])