]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
add the calamari module
authorAlfredo Deza <alfredo.deza@inktank.com>
Tue, 1 Apr 2014 18:41:07 +0000 (14:41 -0400)
committerAlfredo Deza <alfredo.deza@inktank.com>
Tue, 1 Apr 2014 18:41:07 +0000 (14:41 -0400)
Signed-off-by: Alfredo Deza <alfredo.deza@inktank.com>
ceph_deploy/calamari.py [new file with mode: 0644]

diff --git a/ceph_deploy/calamari.py b/ceph_deploy/calamari.py
new file mode 100644 (file)
index 0000000..8db935c
--- /dev/null
@@ -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,
+    )