2 # vim:set ts=4 sw=4 expandtab:
5 # NodeManager plugin to create special accounts
8 create/populate accounts/ssh keys for special persons such as root, site_admin, etc.
23 # right after conf_files
27 logger.log("specialaccounts: plugin starting up...")
29 def GetSlivers(data, conf = None, plc = None):
30 if 'accounts' not in data:
31 logger.log_missing_data("specialaccounts.GetSlivers",'accounts')
34 for account in data['accounts']:
35 name = account['name']
36 new_keys = account['keys']
38 logger.log('specialaccounts: dealing with account %s'%name)
40 # look up account name, which must exist
41 pw_info = pwd.getpwnam(name)
46 # populate account's .ssh/authorized_keys file
47 dot_ssh = os.path.join(pw_dir,'.ssh')
48 if not os.access(dot_ssh, os.F_OK): os.mkdir(dot_ssh)
49 auth_keys = os.path.join(dot_ssh,'authorized_keys')
51 # catenate all keys in string, add newlines just in case (looks like keys already have this, but)
52 auth_keys_contents = '\n'.join(new_keys)+'\n'
54 changes = tools.replace_file_with_string(auth_keys,auth_keys_contents)
56 logger.log("specialaccounts: keys file changed: %s" % auth_keys)
58 # always set permissions properly
59 os.chmod(dot_ssh, 0700)
60 os.chown(dot_ssh, uid,gid)
61 os.chmod(auth_keys, 0600)
62 os.chown(auth_keys, uid,gid)
64 logger.log('specialaccounts: installed ssh keys for %s' % name)