Last active
April 12, 2020 07:21
-
-
Save nohtyp/d219961d91e8ea95157e0c40e4eddb5e to your computer and use it in GitHub Desktop.
This gist is for copying the launch configurations of an existing launch configuration in AWS.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import boto3 | |
import argparse | |
def create_launch_configuration(lcargs): | |
lc_dict = {} | |
try: | |
if lcargs.get('user_data'): | |
#The file to use for userdata | |
userdata = lcargs.get('user_data') | |
f = open(userdata, "r") | |
autoscaling_client = boto3.client('autoscaling') | |
lc = autoscaling_client.describe_launch_configurations(LaunchConfigurationNames=[lcargs.get('copy_from')]) | |
lc_data = lc.get('LaunchConfigurations')[0] | |
for key,value in lc_data.items(): | |
if key == 'LaunchConfigurationName': | |
lc_dict[key] = value + '-' + lcargs.get('name') | |
elif key == 'ImageId': | |
lc_dict[key] = lcargs.get('ami_id') | |
else: | |
lc_dict[key] = value | |
response = autoscaling_client.create_launch_configuration( | |
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'), | |
ImageId=lc_dict.get('ImageId'), | |
KeyName=lc_dict.get('KeyName'), | |
SecurityGroups=lc_dict.get('SecurityGroups'), | |
UserData=f.read(), | |
InstanceType=lc_dict.get('InstanceType'), | |
BlockDeviceMappings=lc_dict.get('BlockDeviceMappings'), | |
InstanceMonitoring=lc_dict.get('InstanceMonitoring'), | |
IamInstanceProfile=lc_dict.get('IamInstanceProfile'), | |
EbsOptimized=lc_dict.get('EbsOptimized'), | |
) | |
f.close() | |
if lcargs.get('update_ag'): | |
ag_update = autoscaling_client.update_auto_scaling_group( | |
AutoScalingGroupName=lcargs.get('update_ag'), | |
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'), | |
MinSize=1, | |
MaxSize=1, | |
DesiredCapacity=1, | |
AvailabilityZones=[lcargs.get('azs')] | |
) | |
else: | |
autoscaling_client = boto3.client('autoscaling') | |
lc = autoscaling_client.describe_launch_configurations(LaunchConfigurationNames=[lcargs.get('copy_from')]) | |
lc_data = lc.get('LaunchConfigurations')[0] | |
for key,value in lc_data.items(): | |
if key == 'LaunchConfigurationName': | |
lc_dict[key] = value + '-' + lcargs.get('name') | |
elif key == 'ImageId': | |
lc_dict[key] = lcargs.get('ami_id') | |
else: | |
lc_dict[key] = value | |
response = autoscaling_client.create_launch_configuration( | |
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'), | |
ImageId=lc_dict.get('ImageId'), | |
KeyName=lc_dict.get('KeyName'), | |
SecurityGroups=lc_dict.get('SecurityGroups'), | |
InstanceType=lc_dict.get('InstanceType'), | |
BlockDeviceMappings=lc_dict.get('BlockDeviceMappings'), | |
InstanceMonitoring=lc_dict.get('InstanceMonitoring'), | |
IamInstanceProfile=lc_dict.get('IamInstanceProfile'), | |
EbsOptimized=lc_dict.get('EbsOptimized'), | |
) | |
if lcargs.get('update_ag'): | |
ag_update = autoscaling_client.update_auto_scaling_group( | |
AutoScalingGroupName=lcargs.get('update_ag'), | |
LaunchConfigurationName=lc_dict.get('LaunchConfigurationName'), | |
MinSize=1, | |
MaxSize=1, | |
DesiredCapacity=1, | |
AvailabilityZones=[lcargs.get('azs')] | |
) | |
except autoscaling_client.exceptions.AlreadyExistsFault: | |
print("Launch Configuration {} exists. Please try a new name for you launch configuration.".format(lc_dict.get('LaunchConfigurationName'))) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser(description='Copy the Launch Configuration.', prog='copy_launch_configurations') | |
subparsers = parser.add_subparsers() | |
create_parser = subparsers.add_parser('create', description="Create a launch configuration", help='create launch configuration') | |
create_parser.add_argument('--name', required=True, help='New launch configuration name') | |
create_parser.add_argument('--copy-from', required=True, help='Launch cfg to copy') | |
create_parser.add_argument('--user-data', required=False, help='File that holds userdata') | |
create_parser.add_argument('--ami-id', required=True, help='The ami-id to replace in launch configuration') | |
create_parser.add_argument('--update-ag', required=True, help='Update autoscaling group launch configuration') | |
create_parser.add_argument('--azs', required=True, help='Availability Zone for Auto-Scaling configuration') | |
args = vars(parser.parse_args()) | |
if 'copy_from' in args: | |
create_launch_configuration(args) | |
else: | |
parser.print_help() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment