import my_aws_api_library
import argparse
import os
[docs]def run():
"""Check the command line arguments and decide the library function will be called
Returns:
True on successful calls, otherwise False.
"""
if args.action == "create":
if args.customer_id and args.node_type:
my_aws = createaws()
node_id = my_aws.create_ec2_instance(args.customer_id, args.node_type)
print("Node Created: ", node_id, "\n")
return True
else:
print("Missed command parameters for Instance Creation")
return False
elif args.action == "list-nodes":
if args.customer_id:
my_aws = createaws()
instance_lst = my_aws.get_instance_by_customer_id(args.customer_id)
print("Customer", args.customer_id, "has " + str(len(instance_lst)) + " Instances: ", ",".join(instance_lst)
,"\n")
return True
else:
print("Missed command parameters for Instance Listing")
return False
elif args.action == "list-all":
my_aws = createaws()
cust_inst_ip = my_aws.get_all_instances()
print("All the Instances: customer_id, instance_id, instance_ip formatted\n")
if len(cust_inst_ip) > 0:
for rec in cust_inst_ip:
print(', '.join(rec))
else:
print("No Instances!")
return False
return True
elif args.action == "execute":
instance_ids, succ_id_list, not_worked_is_list, outs = [], [], [], []
if args.script and (args.customer_id or args.node_type):
my_aws = createaws()
commands = args.script
if args.customer_id:
instance_ids.extend(my_aws.get_instance_by_customer_id(args.customer_id))
if args.node_type:
instance_ids.extend(my_aws.get_instance_by_node_type(args.node_type))
instance_ids = list(set(instance_ids))
succ_id_list, not_worked_is_list, outs = \
my_aws.execute_commands_on_linux_instances(commands, instance_ids)
print("\nInstances that run the commands:\n", '\n '.join(succ_id_list))
print("\nInstances that don't run the commands: (Instance is not running or its SSM agent doesn't work or "
"command couldn't be executed\n", '\n '.join(not_worked_is_list))
print("\nOutputs of the Instances that run the commands:")
for i in outs:
print("\n")
for k, v in dict(i).items():
print(str(k).lstrip(), "-->", str(v).replace('\n', ""))
return True
else:
print("Missed command parameters for Execution on Instance")
return False
elif args.action == "backup":
if args.node_id:
my_aws = createaws()
s_id = my_aws.make_backup(args.node_id)
print(s_id)
else:
return False
elif args.action == "list-backups":
if args.node_id:
my_aws = createaws()
backup_list = my_aws.list_backups(args.node_id)
if len(backup_list) > 0:
for rec in backup_list:
print(', '.join(rec))
return True
else:
print("Snapshot yok !")
return True
else:
return False
elif args.action == "roll-back":
if args.backup_id:
my_aws = createaws()
my_aws.roll_back(args.backup_id, args.node_id)
elif args.action == "terminate-all":
my_aws = createaws()
my_aws.terminate_instances('ALL')
else:
print("Please select a proper action")
[docs]def createaws() -> my_aws_api_library.MyAws:
"""Reads the credentials and instantiates a MyAws object.
.. note::
Required Environmental Variables:
**AWS_CRED_FILE** --> Indicates the .csv file that consists AWS Access key ID, Secret access key to access AWS
APIs.
**COMPANY_PUBKEY** --> Indicates the .pub file that consists Public Key to access Aws Instances.
Returns:
object: :class:`~my_aws_api_library.MyAws` object
"""
aws_cred_file_path = os.environ['AWS_CRED_FILE']
comp_pubkey = os.environ['COMPANY_PUBKEY']
my_aws = my_aws_api_library.MyAws(aws_cred_file_path, comp_pubkey)
return my_aws
[docs]def read_args():
"""Read the command line arguments
"""
global args
parser = argparse.ArgumentParser(
description='Executes create, list-nodes, list-all, execute, backup, list-backups and rollback tasks on AWS '
'system')
# What the code will do? The actions...
parser.add_argument('action', help='Type of work', choices=["create", "list-nodes", "list-all", "execute", "backup",
"list-backups", "roll-back", "terminate-all"])
parser.add_argument('--customer-id', help='Shows customer ID', required=False)
parser.add_argument('--node-type', help='Shows node type, values can be "Manager" or "Peer"',
choices=["Manager", "Peer"], required=False)
parser.add_argument('--script', help='Shows the script that will be executed on Aws instance', required=False)
parser.add_argument('--node-id', help='Shows node (Instance) ID on AWS', required=False)
parser.add_argument('--backup-id', help='Shows snapshot ID on AWS', required=False)
args = parser.parse_args()
if __name__ == "__main__":
read_args()
run()
# Globals
args = None