]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commit
mgr/cephadm: fix rgw spec migration with simple specs
authorAdam King <adking@redhat.com>
Mon, 3 Jul 2023 18:33:34 +0000 (14:33 -0400)
committerAdam King <adking@redhat.com>
Wed, 5 Jul 2023 15:01:25 +0000 (11:01 -0400)
commit1860ef83877c76c51a20aac48036bd9590572cc2
tree96f0a33ba81e4c8269f319ec9a13022a3d3a54ff
parent4de76bf550e0553b8250d07a35605e6c3884aa06
mgr/cephadm: fix rgw spec migration with simple specs

The rgw spec migration code, intended to formalize
the rgw_frontend_type spec option, doesn't work with
simple specs i.e.

service_type: rgw
service_id: rgw.1
service_name: rgw.rgw.1
placement:
  label: rgw

because the migration code assumes there will always be
a "spec" section inside the spec. This is the case for
more involved rgw specs such as

service_type: rgw
service_id: foo
placement:
  label: rgw
  count_per_host: 2
spec:
  rgw_realm: myrealm
  rgw_zone: myzone
  rgw_frontend_type: "beast"
  rgw_frontend_port: 5000

which is what the migration is actually concerned about
(verification of the rgw_frontend_type in these specs).

In the case where the spec is more simple, we should
just leave the spec alone and move on. Unfortunately
the current code assumes the field will always be
there and hits an unhandled KeyError when trying to
migrate the more simple specs. This causes the
cephadm module to crash shortly after starting an
upgrade to a version that includes this migration
and it's very difficult to find the root cause. This
can be worked around by adding fields to the rgw
spec before upgrade so the "spec" field exists in
the spec and the migration works as intended.

This commit fixes the migration in the simple
case as well as adding testing for that case to
both the unit tests and orch/cephadm teuthology
upgrade tests

Fixes: https://tracker.ceph.com/issues/61889
Signed-off-by: Adam King <adking@redhat.com>
qa/suites/orch/cephadm/upgrade/3-upgrade/simple.yaml
src/pybind/mgr/cephadm/migrations.py
src/pybind/mgr/cephadm/tests/test_migration.py