diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index ffbcbb567de..cce32ca934d 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -4026,12 +4026,15 @@ def command_bootstrap(ctx): # initial vars fsid = ctx.fsid or make_fsid() + if not is_fsid(fsid): + raise Error('not an fsid: %s' % fsid) + logger.info('Cluster fsid: %s' % fsid) + hostname = get_hostname() if '.' in hostname and not ctx.allow_fqdn_hostname: raise Error('hostname is a fully qualified domain name (%s); either fix (e.g., "sudo hostname %s" or similar) or pass --allow-fqdn-hostname' % (hostname, hostname.split('.')[0])) mon_id = ctx.mon_id or hostname mgr_id = ctx.mgr_id or generate_service_id() - logger.info('Cluster fsid: %s' % fsid) lock = FileLock(ctx, fsid) lock.acquire() diff --git a/src/cephadm/tests/test_cephadm.py b/src/cephadm/tests/test_cephadm.py index 6b231573fe6..6faea4aec3c 100644 --- a/src/cephadm/tests/test_cephadm.py +++ b/src/cephadm/tests/test_cephadm.py @@ -1157,3 +1157,24 @@ class TestBootstrap(TestCephAdm): with with_cephadm_ctx(cmd, hostname=hostname) as ctx: retval = cd.command_bootstrap(ctx) assert retval == 0 + + @pytest.mark.parametrize('fsid, err', + [ + ('', None), + ('00000000-0000-0000-0000-0000deadbeef', None), + ('00000000-0000-0000-0000-0000deadbeez', 'not an fsid'), + ]) + def test_fsid(self, fsid, err, cephadm_fs): + cmd = self._get_cmd( + '--mon-ip', '192.168.1.1', + '--skip-mon-network', + '--fsid', fsid, + ) + + with with_cephadm_ctx(cmd) as ctx: + if err: + with pytest.raises(cd.Error, match=err): + cd.command_bootstrap(ctx) + else: + retval = cd.command_bootstrap(ctx) + assert retval == 0