in source/Tools Integration/MGN-Integration/MGN-automation-scripts/3-Verify-instance-status.py [0:0]
def verify_instance_status(get_servers, token, UserHOST):
auth = {"Authorization": token}
instance_not_ready = 1
while instance_not_ready > 0:
instance_not_ready = 0
print("******************************")
print("* Getting Target Instance Id *")
print("******************************")
serverlist = InstanceList = GetInstanceId(get_servers)
for account in serverlist:
target_account_session = assume_role(str(account['aws_accountid']), account['aws_region'])
print("")
print("######################################################")
print("#### In Account: " + account['aws_accountid'], ", region: " + account['aws_region'] + " ####")
print("######################################################")
#### Change this line, and not hardcoded endpoint_url
ec2_client = target_account_session.client("ec2", region_name=account['aws_region'])
instanceIds = []
for server in account['servers']:
if 'target_ec2InstanceID' in server:
if server['target_ec2InstanceID'] != '':
instanceIds.append(server['target_ec2InstanceID'])
try:
resp = ec2_client.describe_instance_status(InstanceIds=instanceIds, IncludeAllInstances=True)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == 'InvalidInstanceID.NotFound':
print("")
print("*** Target instance IDs in MGN are no longer available, this is most likely due to the status being reverted and instances terminated. ***")
return
else:
raise e
return
for instance in account['servers']:
if 'target_ec2InstanceID' in instance:
if instance['target_ec2InstanceID'] != '':
for status in resp['InstanceStatuses']:
if status['InstanceState']['Name'] == "running":
if instance['target_ec2InstanceID'] == status['InstanceId']:
if status['InstanceStatus']['Status'].lower() == "ok" and status['SystemStatus']['Status'].lower() == "ok":
instance['Status'] = "ok"
elif status['InstanceStatus']['Status'].lower() == "impaired" and status['SystemStatus']['Status'].lower() == "ok":
instance['Status'] = "impaired"
else:
instance['Status'] = "failed"
else:
instance['Status'] = "failed"
else:
instance['Status'] = "target_not_exist"
else:
instance['Status'] = "not_in_mgn"
# Print out result
server_passed = {}
server_failed = {}
server_not_in_mgn = {}
target_server_not_exist = {}
for instance in account['servers']:
if instance['Status'] == "ok":
server_passed[instance['server_fqdn']] = "ok"
elif instance['Status'] == "failed":
server_failed[instance['server_fqdn']] = "failed"
elif instance['Status'] == 'target_not_exist':
target_server_not_exist[instance['server_fqdn']] = "target_not_exist"
elif instance['Status'] == 'not_in_mgn':
server_not_in_mgn[instance['server_fqdn']] = "not_in_mgn"
elif instance['Status'] == "impaired":
server_failed[instance['server_fqdn']] = "impaired"
if len(server_passed) > 0:
print("----------------------------------------------------")
print("- The following instances PASSED 2/2 status checks -")
print("----------------------------------------------------")
for passed in server_passed.keys():
print(passed)
print("")
if len(server_failed) > 0:
instance_not_ready = instance_not_ready + 1
print("-----------------------------------------------------------------")
print("- WARNING: the following instances FAILED 2/2 status checks -----")
print("-----------------------------------------------------------------")
for failed in server_failed.keys():
print(failed)
print("")
if len(target_server_not_exist) > 0:
instance_not_ready = instance_not_ready + 1
print("----------------------------------------------------------------")
print("- The following source servers do not have a target instance -")
print("----------------------------------------------------------------")
for target_not_exist in target_server_not_exist.keys():
print(target_not_exist)
print("")
if len(server_not_in_mgn) > 0:
print("------------------------------------------------------------------")
print("- The following source servers do not exist in App Mig Service -")
print("------------------------------------------------------------------")
for not_in_mgn in server_not_in_mgn.keys():
print(not_in_mgn)
print("")
# Updating migration factory migration_status attributes
for instance in account['servers']:
serverattr = ''
if instance['Status'] == "ok":
serverattr = {"migration_status": "2/2 status checks : Passed"}
elif instance['Status'] == "failed":
serverattr = {"migration_status": "2/2 status checks : Failed"}
elif instance['Status'] == "target_not_exist":
serverattr = {"migration_status": "2/2 status checks : Target instance not exist"}
elif instance['Status'] == "not_in_mgn":
serverattr = {"migration_status": "2/2 status checks : Server not in MGN"}
elif instance['Status'] == "impaired":
serverattr = {"migration_status": "2/2 status checks : Failed"}
updateserver = requests.put(UserHOST + serverendpoint + '/' + instance['server_id'], headers=auth, data=json.dumps(serverattr))
if updateserver.status_code == 401:
print("Error: Access to migration_status attribute is denied")
sys.exit()
elif updateserver.status_code != 200:
print("Error: Update migration_status attribute failed")
sys.exit()
if instance_not_ready > 0:
print("")
print("***********************************************")
print("* Instance booting up - retry after 2 minutes *")
print("***********************************************")
print("")
time.sleep(120)