import logging
from ceph_deploy import exc
from ceph_deploy.util import versions
-from ceph_deploy.hosts import debian, centos, fedora, suse, remotes, rhel, arch, alt
+from ceph_deploy.hosts import debian, centos, fedora, suse, remotes, rhel, arch, alt, clear
from ceph_deploy.connection import get_connection
logger = logging.getLogger()
'fedora', 'scientific', 'suse', 'oracle', 'virtuozzo', 'alt']
module.is_deb = module.normalized_name in ['debian', 'ubuntu']
module.is_pkgtarxz = module.normalized_name in ['arch']
+ module.is_swupd = module.normalized_name in ['clear']
module.release = release
module.codename = codename
module.conn = conn
'suse': suse,
'virtuozzo': centos,
'arch': arch,
- 'alt': alt
+ 'alt': alt,
+ 'clear': clear
}
if distro == 'redhat' and use_rhceph:
return 'arch'
elif distro.startswith(('alt', 'altlinux', 'basealt', 'alt linux')):
return 'alt'
+ elif distro.startswith('clear'):
+ return 'clear'
return distro
--- /dev/null
+from . import mon # noqa
+from .install import install # noqa
+from .uninstall import uninstall # noqa
+from ceph_deploy.util import pkg_managers
+
+# Allow to set some information about this distro
+#
+
+distro = None
+release = None
+codename = None
+
+
+def choose_init(module):
+ """
+ Select a init system
+
+ Returns the name of a init system (upstart, sysvinit ...).
+ """
+ # Currently clearlinux only has systemd.
+ return 'systemd'
+
+
+def get_packager(module):
+ return pkg_managers.Swupd(module)
--- /dev/null
+
+def install(distro, version_kind, version, adjust_repos, **kw):
+ """
+ Install bundle that contains ceph on the clear host.
+
+ Since clear does not have alternate channels, we will just run the command
+ """
+ logger = distro.conn.logger
+ packages = ['storage-cluster']
+
+ logger.info("Installing storage-cluster bundle")
+ distro.packager.install(
+ packages
+ )
--- /dev/null
+from ceph_deploy.hosts.common import mon_add as add # noqa
+from ceph_deploy.hosts.common import mon_create as create # noqa
--- /dev/null
+import logging
+
+from ceph_deploy.util.system import disable_service, stop_service
+
+SYSTEMD_UNITS = [
+ 'ceph-mds.target',
+ 'ceph-mon.target',
+ 'ceph-osd.target',
+ 'ceph-radosgw.target',
+ 'ceph-fuse.target',
+ 'ceph-mgr.target',
+ 'ceph-rbd-mirror.target',
+ 'ceph.target',
+ 'ceph-mds*service',
+ 'ceph-mon*service',
+ 'ceph-osd*service',
+ 'ceph-radosgw*service',
+ 'ceph-fuse*service',
+ 'ceph-mgr*service',
+ 'ceph-rbd-mirror*service',
+ 'ceph*service',
+]
+
+
+def uninstall(distro, purge=False):
+
+ hostname = distro.conn.hostname
+ LOG = logging.getLogger(hostname)
+
+ # I need to stop and disable services prior package removal
+ LOG.info('stopping and disabling services on {}'.format(hostname))
+ for unit in SYSTEMD_UNITS:
+ stop_service(distro.conn, unit)
+ disable_service(distro.conn, unit)
+
+ packages = [
+ 'storage-cluster',
+ 'ceph'
+ ]
+
+ distro.packager.remove(packages)
+ distro.packager.clean()
tmp_file = tempfile.NamedTemporaryFile('w', dir='/etc/ceph', delete=False)
err_msg = 'config file %s exists with different content; use --overwrite-conf to overwrite' % path
+ if not os.path.isdir('/etc/ceph'):
+ err_msg = '/etc/ceph/ does not exist - could not write config'
+ raise RuntimeError(err_msg)
+
if os.path.exists(path):
with open(path, 'r') as f:
old = f.read()
tmp_file.write(conf)
tmp_file.close()
shutil.move(tmp_file.name, path)
- os.chmod(path, 0o644)
- return
- if os.path.exists('/etc/ceph'):
+ else:
with open(path, 'w') as f:
f.write(conf)
- os.chmod(path, 0o644)
- else:
- err_msg = '/etc/ceph/ does not exist - could not write config'
- raise RuntimeError(err_msg)
+ os.chmod(path, 0o644)
def write_keyring(path, key, uid=-1, gid=-1):
def clean(self):
cmd = self.executable + ['update']
return self._run(cmd)
+
+
+class Swupd(PackageManager):
+ """
+ Swupd package manager from ClearLinux distribution
+ """
+
+ executable = [
+ 'swupd',
+ ]
+ name = 'swupd'
+
+ def install(self, packages, **kw):
+ if isinstance(packages, str):
+ packages = [packages]
+
+ extra_flags = kw.pop('extra_install_flags', None)
+ # Prior to installing packages, make sure we create folders for ceph
+ # config and logging which do not exist in Clear
+ cmd = ['mkdir', '-p', '/etc/ceph/']
+ self._run(cmd)
+ cmd = ['mkdir', '-p', '/var/log/ceph/']
+ self._run(cmd)
+
+ cmd = self.executable + ['bundle-add']
+
+ if extra_flags:
+ if isinstance(extra_flags, str):
+ extra_flags = [extra_flags]
+ cmd.extend(extra_flags)
+ cmd.extend(packages)
+ return self._run(cmd)
+
+ def remove(self, packages, **kw):
+ if isinstance(packages, str):
+ packages = [packages]
+
+ extra_flags = kw.pop('extra_remove_flags', None)
+ cmd = self.executable + ['bundle-remove']
+
+ if extra_flags:
+ if isinstance(extra_flags, str):
+ extra_flags = [extra_flags]
+ cmd.extend(extra_flags)
+ cmd.extend(packages)
+ return self._run(cmd)
+
+ def clean(self):
+ cmd = self.executable + ['clean']
+ return self._run(cmd)