Beispiel #1
0
def test_upgrade_run(use_repo_digest, cephadm_module: CephadmOrchestrator):
    with with_host(cephadm_module, 'test'):
        cephadm_module.set_container_image('global', 'from_image')
        if use_repo_digest:
            cephadm_module.use_repo_digest = True
        with with_service(cephadm_module, ServiceSpec('mgr'), CephadmOrchestrator.apply_mgr, 'test'):
            assert wait(cephadm_module, cephadm_module.upgrade_start(
                'to_image', None)) == 'Initiating upgrade to to_image'

            assert wait(cephadm_module, cephadm_module.upgrade_status()).target_image == 'to_image'

            def _versions_mock(cmd):
                return json.dumps({
                    'mgr': {
                        'myversion': 1
                    }
                })

            cephadm_module._mon_command_mock_versions = _versions_mock

            with mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm(json.dumps({
                'image_id': 'image_id',
                'repo_digest': 'to_image@repo_digest',
            }))):

                cephadm_module.upgrade._do_upgrade()

            assert cephadm_module.upgrade_status is not None

            with mock.patch("cephadm.module.CephadmOrchestrator._run_cephadm", _run_cephadm(
                json.dumps([
                    dict(
                        name=list(cephadm_module.cache.daemons['test'].keys())[0],
                        style='cephadm',
                        fsid='fsid',
                        container_id='container_id',
                        container_image_id='image_id',
                        version='version',
                        state='running',
                    )
                ])
            )):
                cephadm_module._refresh_hosts_and_daemons()

            cephadm_module.upgrade._do_upgrade()

            _, image, _ = cephadm_module.check_mon_command({
                'prefix': 'config get',
                'who': 'global',
                'key': 'container_image',
            })
            if use_repo_digest:
                assert image == 'to_image@repo_digest'
            else:
                assert image == 'to_image'
Beispiel #2
0
def test_upgrade_run(cephadm_module: CephadmOrchestrator):
    with with_host(cephadm_module, 'test'):
        cephadm_module.check_mon_command({
            'prefix': 'config set',
            'name': 'container_image',
            'value': 'from_image',
            'who': 'global',
        })
        with with_service(cephadm_module, ServiceSpec('mgr'),
                          CephadmOrchestrator.apply_mgr, 'test'):
            assert wait(cephadm_module,
                        cephadm_module.upgrade_start(
                            'to_image',
                            None)) == 'Initiating upgrade to to_image'

            assert wait(
                cephadm_module,
                cephadm_module.upgrade_status()).target_image == 'to_image'

            def _versions_mock(cmd):
                return json.dumps({'mgr': {'myversion': 1}})

            cephadm_module._mon_command_mock_versions = _versions_mock

            cephadm_module.upgrade._do_upgrade()

            _, image, _ = cephadm_module.check_mon_command({
                'prefix':
                'config get',
                'who':
                'global',
                'key':
                'container_image',
            })

            assert image == 'to_image'
Beispiel #3
0
def test_upgrade_run(use_repo_digest, cephadm_module: CephadmOrchestrator):
    with with_host(cephadm_module, 'host1'):
        with with_host(cephadm_module, 'host2'):
            cephadm_module.set_container_image('global', 'from_image')
            cephadm_module.use_repo_digest = use_repo_digest
            with with_service(cephadm_module, ServiceSpec('mgr', placement=PlacementSpec(host_pattern='*', count=2)),
                              CephadmOrchestrator.apply_mgr, '', status_running=True),\
                mock.patch("cephadm.module.CephadmOrchestrator.lookup_release_name",
                           return_value='foo'),\
                mock.patch("cephadm.module.CephadmOrchestrator.version",
                           new_callable=mock.PropertyMock) as version_mock,\
                mock.patch("cephadm.module.CephadmOrchestrator.get",
                           return_value={
                               # capture fields in both mon and osd maps
                               "require_osd_release": "pacific",
                               "min_mon_release": 16,
                           }):
                version_mock.return_value = 'ceph version 18.2.1 (somehash)'
                assert wait(
                    cephadm_module,
                    cephadm_module.upgrade_start(
                        'to_image',
                        None)) == 'Initiating upgrade to docker.io/to_image'

                assert wait(cephadm_module, cephadm_module.upgrade_status()
                            ).target_image == 'docker.io/to_image'

                def _versions_mock(cmd):
                    return json.dumps(
                        {'mgr': {
                            'ceph version 1.2.3 (asdf) blah': 1
                        }})

                cephadm_module._mon_command_mock_versions = _versions_mock

                with mock.patch(
                        "cephadm.serve.CephadmServe._run_cephadm",
                        _run_cephadm(
                            json.dumps({
                                'image_id':
                                'image_id',
                                'repo_digests': ['to_image@repo_digest'],
                                'ceph_version':
                                'ceph version 18.2.3 (hash)',
                            }))):

                    cephadm_module.upgrade._do_upgrade()

                assert cephadm_module.upgrade_status is not None

                with mock.patch(
                        "cephadm.serve.CephadmServe._run_cephadm",
                        _run_cephadm(
                            json.dumps([
                                dict(
                                    name=list(cephadm_module.cache.
                                              daemons['host1'].keys())[0],
                                    style='cephadm',
                                    fsid='fsid',
                                    container_id='container_id',
                                    container_image_id='image_id',
                                    container_image_digests=[
                                        'to_image@repo_digest'
                                    ],
                                    deployed_by=['to_image@repo_digest'],
                                    version='version',
                                    state='running',
                                )
                            ]))):
                    receive_agent_metadata(cephadm_module, 'host1', ['ls'])
                    receive_agent_metadata(cephadm_module, 'host2', ['ls'])

                with mock.patch(
                        "cephadm.serve.CephadmServe._run_cephadm",
                        _run_cephadm(
                            json.dumps({
                                'image_id':
                                'image_id',
                                'repo_digests': ['to_image@repo_digest'],
                                'ceph_version':
                                'ceph version 18.2.3 (hash)',
                            }))):
                    cephadm_module.upgrade._do_upgrade()

                _, image, _ = cephadm_module.check_mon_command({
                    'prefix':
                    'config get',
                    'who':
                    'global',
                    'key':
                    'container_image',
                })
                if use_repo_digest:
                    assert image == 'to_image@repo_digest'
                else:
                    assert image == 'docker.io/to_image'