First version. Most definitely a work in progress.
[nodemanager.git] / delegate.py
diff --git a/delegate.py b/delegate.py
new file mode 100644 (file)
index 0000000..6dd85e8
--- /dev/null
@@ -0,0 +1,34 @@
+import accounts
+import logger
+import tools
+
+
+class Delegate:
+    SHELL = '/bin/forward_api_calls'
+    TYPE = 'delegate'
+
+    def __init__(self, name): self.name = name
+
+    @staticmethod
+    def create(name):
+        add_shell(Delegate.SHELL)
+        logger.log_call('/usr/sbin/useradd',
+                        '-p', '*', '-s', Delegate.SHELL, name)
+
+    @staticmethod
+    def destroy(name): logger.log_call('/usr/sbin/userdel', '-r', name)
+
+    def configure(self, rec): accounts.install_ssh_keys(rec)
+    def start(self): pass
+    def stop(self): pass
+
+
+def add_shell(shell):
+    """Add <shell> to /etc/shells if it's not already there."""
+    etc_shells = open('/etc/shells')
+    valid_shells = etc_shells.read().split()
+    etc_shells.close()
+    if shell not in valid_shells:
+        etc_shells = open('/etc/shells', 'a')
+        print >>etc_shells, shell
+        etc_shells.close()