diff --git a/octane/commands/osd_upgrade.py b/octane/commands/osd_upgrade.py index 5e648fa3..b581acb2 100644 --- a/octane/commands/osd_upgrade.py +++ b/octane/commands/osd_upgrade.py @@ -20,10 +20,12 @@ import time from cliff import command as cmd from fuelclient.objects import environment as env_obj +from fuelclient.objects import release as rel_obj from octane.handlers import backup_restore from octane import magic_consts from octane.util import apt +from octane.util import deployment as deploy from octane.util import env from octane.util import fuel_client from octane.util import ssh @@ -183,6 +185,17 @@ def get_repos_for_upgrade(orig_env, seed_env): return results +def add_upgrade_attrs_to_settings(env, repos, ceph_rel, hosts): + attrs = env.get_settings_data() + attrs['editable']['repo_setup']['upgrade_osd'] = {'value': repos, + 'type': 'hidden'} + attrs['editable']['common']['ceph_upgrade_release'] = {'value': ceph_rel, + 'type': 'hidden'} + attrs['editable']['common']['ceph_upgrade_hostnames'] = {'value': hosts, + 'type': 'hidden'} + env.set_settings_data(attrs) + + def upgrade_osd(orig_env_id, seed_env_id, user, password): with fuel_client.set_auth_context( backup_restore.NailgunCredentialsContext(user, password)): @@ -214,6 +227,26 @@ def upgrade_osd(orig_env_id, seed_env_id, user, password): raise Exception(msg) +def upgrade_osd_with_graph(orig_env_id, seed_env_id): + orig_env = env_obj.Environment(orig_env_id) + seed_env = env_obj.Environment(seed_env_id) + seed_repos = get_repos_for_upgrade(orig_env, seed_env) + seed_rel = rel_obj.Release(seed_env.data['release_id']) + ceph_rel = magic_consts.CEPH_RELEASES.get(seed_rel.data['version']) + osd_nodes = list(env.get_nodes(orig_env, ["ceph-osd"])) + hostnames = [n.data['hostname'] for n in osd_nodes] + + add_upgrade_attrs_to_settings(orig_env, seed_repos, ceph_rel, hostnames) + add_upgrade_attrs_to_settings(seed_env, seed_repos, ceph_rel, hostnames) + + deploy.upload_graph(orig_env_id, 'orig') + deploy.upload_graph(seed_env_id, 'seed') + + deploy.execute_graph_and_wait('upgrade-osd-pre', orig_env_id) + deploy.execute_graph_and_wait('upgrade-osd', seed_env_id) + deploy.execute_graph_and_wait('upgrade-osd-post', orig_env_id) + + class UpgradeOSDCommand(cmd.Command): """Upgrade osd servers""" @@ -236,11 +269,20 @@ class UpgradeOSDCommand(cmd.Command): dest="admin_password", required=True, help="Fuel admin password") + parser.add_argument( + '--with-graph', action='store_true', + help='EXPERIMENTAL: Use Fuel deployment graphs' + ' instead of python-based commands.') return parser def take_action(self, parsed_args): - upgrade_osd( - parsed_args.orig_env_id, - parsed_args.seed_env_id, - 'admin', - parsed_args.admin_password) + if parsed_args.with_graph: + upgrade_osd_with_graph( + parsed_args.orig_env_id, + parsed_args.seed_env_id) + else: + upgrade_osd( + parsed_args.orig_env_id, + parsed_args.seed_env_id, + 'admin', + parsed_args.admin_password) diff --git a/octane/magic_consts.py b/octane/magic_consts.py index 17ed36b8..f68a9a87 100644 --- a/octane/magic_consts.py +++ b/octane/magic_consts.py @@ -169,3 +169,7 @@ COMPUTE_PREUPGRADE_PACKAGES = { ASTUTE_YAML = "/etc/fuel/astute.yaml" CINDER_CONF = "/etc/cinder/cinder.conf" + +CEPH_RELEASES = {'kilo-7.0': 'firefly', + 'liberty-8.0': 'hammer', + 'mitaka-9.0': 'hammer'}