Skip to content
Snippets Groups Projects

fix: more robust source cloud keypair selection

3 files
+ 37
7
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 31
5
@@ -311,8 +311,8 @@ def get_dst_server_flavor_name_noassert(args, src_server, dst_ostack_conn):
return destination_server_flavor_name
def get_source_keypairs(args):
""" receive source openstack keypairs from ceph migrator host as xml formatted sql dump """
def download_source_keypairs(args):
""" download/receive source openstack keypairs from ceph migrator host as xml formatted sql dump """
reply_stdout, _, reply_ecode = remote_cmd_exec(args.ceph_migrator_host,
args.ceph_migrator_user,
args.ceph_migrator_sshkeyfile.name,
@@ -329,6 +329,13 @@ def get_source_keypair(keypairs, keypair_name, user_id):
return keypairs_selected[0]
return None
def get_source_keypairs(keypairs, keypair_name, user_id=None):
""" get specific source cloud keypairs based on keypair_name and optionally user_id """
if user_id:
return [ i_keypair for i_keypair in keypairs if i_keypair.get("name", "") == keypair_name and i_keypair.get("user_id", "") == user_id ]
return [ i_keypair for i_keypair in keypairs if i_keypair.get("name", "") == keypair_name ]
def create_keypair(args, ostack_connection, keypair):
""" create openstack keypair object """
return ostack_connection.compute.create_keypair(name=get_dst_resource_name(args, keypair['name']),
@@ -336,9 +343,28 @@ def create_keypair(args, ostack_connection, keypair):
def get_or_create_dst_server_keypair(args, source_keypairs, src_server, dst_ostack_conn):
""" assure destination cloud keypair exists """
source_server_keypair = get_source_keypair(source_keypairs,
src_server.key_name,
src_server.user_id)
# select keypairs based on key_name and user_id
source_server_keypair = None
source_server_keypairs = get_source_keypairs(source_keypairs,
src_server.key_name,
src_server.user_id)
if not(source_server_keypairs):
args.logger.warning(f"F.7 No source keypair found when searching with (key_name={src_server.key_name}, used_id={src_server.user_id}). " \
"Retrying with key_name only.")
# select keypairs based on key_name only
source_server_keypairs = get_source_keypairs(source_keypairs, src_server.key_name)
log_or_assert(args,
f"F.7 Single (unambiguous) Source OpenStack server keypair found ({src_server.key_name}) when searching with key_name only.",
len(source_server_keypairs) == 1,
msg_guidance="We encountered situation when we are unable to detect source keypair. Search with (key_name, used_id) returned " \
"no result and search with key_name only returned multiple results. " \
"Most likely it is necessary to reimplement olib.get_or_create_dst_server_keypair().")
else:
source_server_keypair = source_server_keypairs[0]
if len(source_server_keypairs) > 1:
args.logger.warning(f"F.7 Multiple source keypairs found when searching with (key_name={src_server.key_name}, used_id={src_server.user_id}). " \
"Picking the first detected keypair.")
log_or_assert(args,
f"F.7 Source OpenStack server keypair found ({src_server.key_name}).",
source_server_keypair,
Loading