From: Alfredo Deza Date: Tue, 1 Apr 2014 18:41:07 +0000 (-0400) Subject: add the calamari module X-Git-Tag: v1.5.0~16^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d6e8cce9327416433e35eadcf4c5ab75f0dcd5fb;p=ceph-deploy.git add the calamari module Signed-off-by: Alfredo Deza --- diff --git a/ceph_deploy/calamari.py b/ceph_deploy/calamari.py new file mode 100644 index 0000000..8db935c --- /dev/null +++ b/ceph_deploy/calamari.py @@ -0,0 +1,112 @@ +import logging +from ceph_deploy import hosts +from ceph_deploy.lib.remoto import process + + +LOG = logging.getLogger(__name__) + + +def distro_is_supported(distro_name): + """ + An enforcer of supported distros that can differ from what ceph-deploy + supports. + """ + supported = ['centos', 'redhat', 'ubuntu', 'debian'] + if distro_name in supported: + return True + return False + + +def connect(args): + cd_conf = getattr(args, 'cd_conf', None) + if not cd_conf: + raise RuntimeError( + 'a ceph-deploy configuration is required but was not found' + ) + + repo_name = args.release or 'calamari-minion' + has_minion_repo = cd_conf.has_section(repo_name) + + if not has_minion_repo: + raise RuntimeError('no calamari-minion repo found') + + # We rely on the default for repo installs that does not + # install ceph unless specified otherwise + options = dict(cd_conf.items(repo_name)) + + for hostname in args.hosts: + distro = hosts.get(hostname, username=args.username) + LOG.info( + 'Distro info: %s %s %s', + distro.name, + distro.release, + distro.codename + ) + rlogger = logging.getLogger(hostname) + rlogger.info('installing calamari-minion package on %s' % hostname) + rlogger.info('adding custom repository file') + try: + distro.repo_install( + distro, + repo_name, + options.pop('baseurl'), + options.pop('gpgkey', ''), # will probably not use a gpgkey + **options + ) + except KeyError as err: + raise RuntimeError( + 'missing required key: %s in config section: %s' % ( + err, + repo_name + ) + ) + + distro.pkg.install(distro, 'salt-minion') + + if distro.normalized_name in ['redhat', 'centos']: + process.run( + distro.conn, + ['chkconfig', 'salt-minion', 'on'] + ) + + process.run( + distro.conn, + ['service', 'salt-minion', 'start'] + ) + + distro.conn.exit() + + +def action(args): + if args.subcommand == 'connect': + connect(args) + + +def make(parser): + """ + Install and configure Calamari nodes + """ + parser.add_argument( + 'subcommand', + choices=[ + 'connect', + ], + ) + + parser.add_argument( + '--release', + nargs='?', + metavar='CODENAME', + help="Use a given release from repositories\ + defined in ceph-deploy's configuration", + + ) + + parser.add_argument( + 'hosts', + nargs='+', + ) + + parser.set_defaults( + func=action, + )