Stop deploying Ceph during the overcloud deployment
This patch blocks the operators to deploy Ceph during the overcloud deployment stage, suggesting the right command that should be run. However, if users are trying to configure an external ceph cluster (which means the client role should be run), the tripleoclient command works as expected. Change-Id: I6e6a016e8b413f8db43584c4d9d80c97d26f7de5
This commit is contained in:
parent
b640b16428
commit
da75b98bb5
|
@ -792,6 +792,59 @@ class TestWaitForStackUtil(TestCase):
|
|||
utils.check_ceph_ansible(res_reg.get('resource_registry', {}),
|
||||
'DeployOvercloud')
|
||||
|
||||
def test_check_deployed_ceph_stage(self):
|
||||
|
||||
env = {
|
||||
'resource_registry': {
|
||||
'OS::Tripleo::Services::CephMon': '/path/cephadm/ceph-mon.yml',
|
||||
'OS::TripleO::Services::CephMgr': '/path/cephadm/ceph-mgr.yml',
|
||||
'OS::TripleO::Services::CephMon': '/path/cephadm/ceph-mon.yml',
|
||||
'OS::TripleO::Services::CephOSD': '/path/cephadm/ceph-osd.yml',
|
||||
'OS::TripleO::Services::CephMds': '/path/cephadm/ceph-mds.yml',
|
||||
'OS::TripleO::Services::CephNfs': '/path/cephadm/ceph-nfs.yml',
|
||||
'OS::TripleO::Services::CephRgw': '/path/cephadm/ceph-rgw.yml',
|
||||
},
|
||||
'parameter_defaults': {
|
||||
'DeployedCeph': True
|
||||
}
|
||||
}
|
||||
|
||||
utils.check_deployed_ceph_stage(env)
|
||||
|
||||
def test_check_deployed_ceph_stage_fail(self):
|
||||
|
||||
env = {
|
||||
'resource_registry': {
|
||||
'OS::Tripleo::Services::CephMon': '/path/cephadm/ceph-mon.yml',
|
||||
'OS::TripleO::Services::CephMgr': '/path/cephadm/ceph-mgr.yml',
|
||||
'OS::TripleO::Services::CephMon': '/path/cephadm/ceph-mon.yml',
|
||||
'OS::TripleO::Services::CephOSD': '/path/cephadm/ceph-osd.yml',
|
||||
'OS::TripleO::Services::CephMds': '/path/cephadm/ceph-mds.yml',
|
||||
'OS::TripleO::Services::CephNfs': '/path/cephadm/ceph-nfs.yml',
|
||||
'OS::TripleO::Services::CephRgw': '/path/cephadm/ceph-rgw.yml',
|
||||
},
|
||||
'parameter_defaults': {
|
||||
'DeployedCeph': False
|
||||
}
|
||||
}
|
||||
|
||||
with self.assertRaises(exceptions.InvalidConfiguration):
|
||||
utils.check_deployed_ceph_stage(env)
|
||||
|
||||
def test_check_deployed_ceph_stage_external(self):
|
||||
|
||||
env = {
|
||||
'resource_registry': {
|
||||
'OS::Tripleo::Services::CephExternal': '/path/cephadm/ceph-client.yml', # noqa E501
|
||||
},
|
||||
'parameter_defaults': {
|
||||
'DeployedCeph': False
|
||||
}
|
||||
}
|
||||
|
||||
with self.assertRaises(exceptions.InvalidConfiguration):
|
||||
utils.check_deployed_ceph_stage(env)
|
||||
|
||||
def test_check_swift_and_rgw(self):
|
||||
stack_reg = {
|
||||
'OS::TripleO::Services::SwiftProxy': 'OS::Heat::None',
|
||||
|
|
|
@ -1077,6 +1077,51 @@ def check_ceph_ansible(resource_registry, stage):
|
|||
'file.')
|
||||
|
||||
|
||||
def check_deployed_ceph_stage(environment):
|
||||
"""Raises an exception if Ceph is being deployed without DeployedCeph:True.
|
||||
|
||||
If Ceph is not being deployed or DeployedCeph is true, then return
|
||||
nothing, so the program that calls this function can continue without
|
||||
error. This function also looks for the external Ceph Heat resource to
|
||||
make sure in this scenario an error is not raised regardless of the
|
||||
DeployedCeph boolean value.
|
||||
"""
|
||||
|
||||
resource_registry = environment.get('resource_registry', {})
|
||||
|
||||
if not resource_registry:
|
||||
return
|
||||
|
||||
ceph_external = environment.get('resource_registry', {}).get(
|
||||
'OS::TripleO::Services::CephExternal', 'OS::Heat::None')
|
||||
|
||||
if ceph_external != "OS::Heat::None":
|
||||
return
|
||||
|
||||
# it's not an external Ceph cluster, let's evaluate the DeployedCeph param
|
||||
# and the Ceph resources provided
|
||||
deployed_ceph = environment.get('parameter_defaults',
|
||||
{}).get('DeployedCeph', False)
|
||||
|
||||
# for each ceph resource, if the path contains cephadm and the DeployedCeph
|
||||
# boolean is not True, raise an exception and guide the operator through
|
||||
# the right path of deploying ceph
|
||||
|
||||
for name, path in resource_registry.items():
|
||||
if 'Ceph' in name and 'cephadm' in path and not deployed_ceph:
|
||||
raise exceptions.InvalidConfiguration('Ceph deployment is not '
|
||||
'available anymore during '
|
||||
'overcloud deploy. If you '
|
||||
'want to deploy Ceph, '
|
||||
'please see "openstack '
|
||||
' overcloud ceph deploy '
|
||||
'--help" to deploy ceph '
|
||||
' before deploying the '
|
||||
'overcloud and then include '
|
||||
'the cephadm environment '
|
||||
'file.')
|
||||
|
||||
|
||||
def check_ceph_fsid_matches_env_files(old_env, environment):
|
||||
"""Check CephClusterFSID against proposed env files
|
||||
|
||||
|
|
|
@ -355,6 +355,9 @@ class DeployOvercloud(command.Command):
|
|||
# warning if necessary
|
||||
self._check_limit_skiplist_warning(env)
|
||||
|
||||
# check if we're trying to deploy ceph during the overcloud deployment
|
||||
utils.check_deployed_ceph_stage(env)
|
||||
|
||||
old_stack_env = utils.get_saved_stack_env(
|
||||
self.working_dir, parsed_args.stack)
|
||||
if old_stack_env:
|
||||
|
|
|
@ -758,6 +758,9 @@ class Deploy(command.Command):
|
|||
environments, self.tht_render, parsed_args.templates,
|
||||
cleanup=parsed_args.cleanup)
|
||||
|
||||
# check if we're trying to deploy ceph during the overcloud deployment
|
||||
utils.check_deployed_ceph_stage(env)
|
||||
|
||||
roles_data = utils.fetch_roles_file(
|
||||
roles_file_path, parsed_args.templates)
|
||||
|
||||
|
|
Loading…
Reference in New Issue