coren has submitted this change and it was merged.
Change subject: Add cron for manage-keys.
......................................................................
Add cron for manage-keys.
Manage-keys will run on the labs nfs server and ensure that
the keys in /keys correspond to those in ldap.
Change-Id: Ia08a330c90b628197b8bb835542aff7ac50e67b9
---
M manifests/openstack.pp
A modules/ldap/files/scripts/manage-keys-nfs
M modules/ldap/manifests/client.pp
3 files changed, 137 insertions(+), 0 deletions(-)
Approvals:
coren: Looks good to me, approved
jenkins-bot: Verified
diff --git a/manifests/openstack.pp b/manifests/openstack.pp
index 9c8206e..1937963 100644
--- a/manifests/openstack.pp
+++ b/manifests/openstack.pp
@@ -144,6 +144,16 @@
ensure => running,
require => Generic::Upstart_job["manage-volumes"];
}
+
+ if ($::site == 'eqiad') {
+ cron { "Update labs ssh keys":
+ ensure => present,
+ user => root,
+ command => '/usr/local/sbin/manage-keys-nfs
--logfile=/var/log/manage-keys.log >/dev/null 2>&1',
+ hour => '*',
+ minute => '*/5',
+ }
+ }
}
class openstack::project-nfs-storage-service {
diff --git a/modules/ldap/files/scripts/manage-keys-nfs
b/modules/ldap/files/scripts/manage-keys-nfs
new file mode 100755
index 0000000..9487c6b
--- /dev/null
+++ b/modules/ldap/files/scripts/manage-keys-nfs
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+
+#####################################################################
+### THIS FILE IS MANAGED BY PUPPET
+### puppet:///files/ldap/scripts/manage-keys-nfs
+#####################################################################
+
+
+import sys
+import traceback
+import ldapsupportlib
+import os
+import socket
+import homedirectorymanager
+import datetime
+from optparse import OptionParser
+
+try:
+ import ldap
+ import ldap.modlist
+except ImportError:
+ sys.stderr.write("Unable to import LDAP library.\n")
+
+NONE = 0
+INFO = 10
+DEBUG = 20
+
+
+class ExportManager:
+ def __init__(self):
+ self.keysdir = "/srv/keys/"
+ self.loglevel = INFO
+ self.logfile = None
+ self.hostname = socket.gethostname()
+
+ def run(self):
+ parser = OptionParser(conflict_handler="resolve")
+ parser.set_usage('manage-exports [options]')
+
+ ldapSupportLib = ldapsupportlib.LDAPSupportLib()
+ ldapSupportLib.addParserOptions(parser)
+
+ parser.add_option("--logfile", dest="logfile", help="Write output to
the specified log file. (default: stdin)")
+ parser.add_option("--loglevel", dest="loglevel", help="Change level of
logging; NONE, INFO, DEBUG (default: INFO)")
+ (options, args) = parser.parse_args()
+ ldapSupportLib.setBindInfoByOptions(options, parser)
+
+ if options.logfile:
+ self.logfile = options.logfile
+ if options.loglevel:
+ self.loglevel = options.loglevel
+
+ base = ldapSupportLib.getBase()
+ ds = ldapSupportLib.connect()
+
+ # w00t We're in!
+ try:
+
+ # Grab keys
+ usersdata = ldapSupportLib.getUsers(ds, '*')
+ if not usersdata:
+ raise ldap.NO_SUCH_OBJECT()
+
+ # Should there be something here to ensure that keysdir is actually
+ # mounted?
+ if not os.path.exists(self.keysdir):
+ raise Exception('keysdir not found')
+ if not os.path.exists(self.keysdir + '/autofs_check'):
+ os.mkdir(self.keysdir + '/autofs_check', 0755)
+ if not os.path.exists(self.keysdir + '/SAVE'):
+ os.mkdir(self.keysdir + '/SAVE', 0755)
+
+ # Hand off the job of writing out keys to homedirectorymanager.py
+ hdm = homedirectorymanager.HomeDirectoryManager()
+ if options.logfile:
+ hdm.logfile = options.logfile
+ if options.loglevel:
+ hdm.loglevel = options.loglevel
+ hdm.setUsersData(usersdata)
+ hdm.basedir = self.keysdir
+ hdm.run()
+ except ldap.NO_SUCH_OBJECT:
+ sys.stderr.write("The key search returned no entries.\n")
+ ds.unbind()
+ return 1
+ except ldap.PROTOCOL_ERROR:
+ sys.stderr.write("There was an LDAP protocol error; see
traceback.\n")
+ traceback.print_exc(file=sys.stderr)
+ ds.unbind()
+ return 1
+ except Exception:
+ try:
+ sys.stderr.write("There was a general error, this is
unexpected; see traceback.\n")
+ traceback.print_exc(file=sys.stderr)
+ ds.unbind()
+ except Exception:
+ sys.stderr.write("Also failed to unbind.\n")
+ traceback.print_exc(file=sys.stderr)
+ return 1
+
+ ds.unbind()
+ return 0
+
+ def log(self, logstring):
+ if self.loglevel >= INFO:
+ log = datetime.datetime.now().strftime("%m/%d/%Y - %H:%M:%S - ") +
logstring + "\n"
+ if self.logfile:
+ lf = open(self.logfile, 'a')
+ lf.write(log)
+ lf.close()
+ else:
+ print log
+
+
+def main():
+ export_manager = ExportManager()
+ export_manager.run()
+
+if __name__ == "__main__":
+ main()
diff --git a/modules/ldap/manifests/client.pp b/modules/ldap/manifests/client.pp
index 5afe9bb..c1fbfc0 100644
--- a/modules/ldap/manifests/client.pp
+++ b/modules/ldap/manifests/client.pp
@@ -197,6 +197,13 @@
source => 'puppet:///modules/ldap/scripts/manage-nfs-volumes-daemon',
}
+ file { '/usr/local/sbin/manage-keys-nfs':
+ owner => 'root',
+ group => 'root',
+ mode => '0544',
+ source => 'puppet:///modules/ldap/scripts/manage-keys-nfs',
+ }
+
file { '/usr/local/sbin/manage-volumes':
ensure => absent,
}
--
To view, visit https://gerrit.wikimedia.org/r/113955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia08a330c90b628197b8bb835542aff7ac50e67b9
Gerrit-PatchSet: 5
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Andrew Bogott <[email protected]>
Gerrit-Reviewer: coren <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits