diff --git a/.bumpversion.cfg b/.bumpversion.cfg index aa747b32..0a15167a 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.15.2 +current_version = 1.15.3 commit = True message = Bumps version to {new_version} tag = False diff --git a/modules/lx-autoscale/watchmaker-lx-autoscale.template.cfn.yaml b/modules/lx-autoscale/watchmaker-lx-autoscale.template.cfn.yaml index dec977b8..79277182 100644 --- a/modules/lx-autoscale/watchmaker-lx-autoscale.template.cfn.yaml +++ b/modules/lx-autoscale/watchmaker-lx-autoscale.template.cfn.yaml @@ -201,7 +201,7 @@ Metadata: default: Force Cfn Init Update ToggleNewInstances: default: Force New Instances - Version: 1.15.2 + Version: 1.15.3 Outputs: ScaleDownScheduledAction: Condition: UseScheduledAction @@ -714,46 +714,45 @@ Resources: } /etc/cfn/scripts/aws-cw-agent/cloudwatch-applog-config.py: content: !Sub - - |- + - | import json import os - cloudwatch_baseline = "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json" - log_group_name = "/aws/ec2/lx/${AWS::StackName}" - log_paths_input = (r'''${local_addCWLtarget}''').split(",") + CWA_CONFIG = "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json" + LOG_GROUP = "/aws/ec2/lx/${AWS::StackName}" + LOG_PATHS = (r'''${local_addCWLtarget}''').split(",") - def get_stream_name(log_path): - log_no_ext = os.path.splitext(os.path.basename(log_path))[0] - return "{}_logs_{{instance_id}}".format(log_no_ext) + def get_stream_name(path): + return '{{instance_id}}/{}'.format(path.replace('*', '(')) - def load_baseline(): - print('Loading existing cwl baseline') - with open(cloudwatch_baseline, 'r') as f: - return json.load(f) + def load_json(path): + with open(path, 'r') as fh_: + return json.load(fh_) - def write_baseline(baseline): - print('Writing new cwl baseline') - with open(cloudwatch_baseline, 'w') as f: - f.write(json.dumps(baseline, sort_keys=True, indent=4)) + def dump_json(path, data): + with open(path, 'w') as fh_: + fh_.write(json.dumps(data, sort_keys=True, indent=4)) - if log_paths_input: - print('Additional cwl paths were defined.') - baseline = load_baseline() - for log_path in log_paths_input: - baseline['logs']['logs_collected']['files']['collect_list'].append({ - 'file_path': log_path, - 'log_group_name': log_group_name, - 'log_stream_name': get_stream_name(log_path), + if LOG_PATHS: + print('Additional cwl paths were defined...') + print('Loading existing cwl baseline') + config = load_json(CWA_CONFIG) + for log in LOG_PATHS: + config['logs']['logs_collected']['files']['collect_list'].append({ + 'file_path': log, + 'log_group_name': LOG_GROUP, + 'log_stream_name': get_stream_name(log), 'timestamp_format': "%H:%M:%S %y %b %-d" }) - write_baseline(baseline) + print('Writing new cwl baseline') + dump_json(CWA_CONFIG, config) print('CWL baseline modification complete') # convert CommaDelimitedList to a string for Fn::Sub compatibility - - local_addCWLtarget: !Join ["," ,!Ref CloudWatchAppLogs] + - local_addCWLtarget: !Join [",", !Ref CloudWatchAppLogs] finalize: commands: 10-signal-success: diff --git a/modules/lx-instance/watchmaker-lx-instance.template.cfn.yaml b/modules/lx-instance/watchmaker-lx-instance.template.cfn.yaml index c29dc3af..42c836dd 100644 --- a/modules/lx-instance/watchmaker-lx-instance.template.cfn.yaml +++ b/modules/lx-instance/watchmaker-lx-instance.template.cfn.yaml @@ -152,7 +152,7 @@ Metadata: ParameterLabels: ToggleCfnInitUpdate: default: Force Cfn Init Update - Version: 1.15.2 + Version: 1.15.3 Outputs: WatchmakerInstanceId: Description: Instance ID @@ -527,46 +527,45 @@ Resources: } /etc/cfn/scripts/aws-cw-agent/cloudwatch-applog-config.py: content: !Sub - - |- + - | import json import os - cloudwatch_baseline = "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json" - log_group_name = "/aws/ec2/lx/${AWS::StackName}" - log_paths_input = (r'''${local_addCWLtarget}''').split(",") + CWA_CONFIG = "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json" + LOG_GROUP = "/aws/ec2/lx/${AWS::StackName}" + LOG_PATHS = (r'''${local_addCWLtarget}''').split(",") - def get_stream_name(log_path): - log_no_ext = os.path.splitext(os.path.basename(log_path))[0] - return "{}_logs_{{instance_id}}".format(log_no_ext) + def get_stream_name(path): + return '{{instance_id}}/{}'.format(path.replace('*', '(')) - def load_baseline(): - print('Loading existing cwl baseline') - with open(cloudwatch_baseline, 'r') as f: - return json.load(f) + def load_json(path): + with open(path, 'r') as fh_: + return json.load(fh_) - def write_baseline(baseline): - print('Writing new cwl baseline') - with open(cloudwatch_baseline, 'w') as f: - f.write(json.dumps(baseline, sort_keys=True, indent=4)) + def dump_json(path, data): + with open(path, 'w') as fh_: + fh_.write(json.dumps(data, sort_keys=True, indent=4)) - if log_paths_input: - print('Additional cwl paths were defined.') - baseline = load_baseline() - for log_path in log_paths_input: - baseline['logs']['logs_collected']['files']['collect_list'].append({ - 'file_path': log_path, - 'log_group_name': log_group_name, - 'log_stream_name': get_stream_name(log_path), + if LOG_PATHS: + print('Additional cwl paths were defined...') + print('Loading existing cwl baseline') + config = load_json(CWA_CONFIG) + for log in LOG_PATHS: + config['logs']['logs_collected']['files']['collect_list'].append({ + 'file_path': log, + 'log_group_name': LOG_GROUP, + 'log_stream_name': get_stream_name(log), 'timestamp_format': "%H:%M:%S %y %b %-d" }) - write_baseline(baseline) + print('Writing new cwl baseline') + dump_json(CWA_CONFIG, config) print('CWL baseline modification complete') # convert CommaDelimitedList to a string for Fn::Sub compatibility - - local_addCWLtarget: !Join ["," ,!Ref CloudWatchAppLogs] + - local_addCWLtarget: !Join [",", !Ref CloudWatchAppLogs] finalize: commands: 10-signal-success: diff --git a/modules/win-autoscale/watchmaker-win-autoscale.template.cfn.yaml b/modules/win-autoscale/watchmaker-win-autoscale.template.cfn.yaml index 55d2e615..f303b85a 100644 --- a/modules/win-autoscale/watchmaker-win-autoscale.template.cfn.yaml +++ b/modules/win-autoscale/watchmaker-win-autoscale.template.cfn.yaml @@ -191,7 +191,7 @@ Metadata: default: Force Cfn Init Update ToggleNewInstances: default: Force New Instances - Version: 1.15.2 + Version: 1.15.3 Outputs: ScaleDownScheduledAction: Condition: UseScheduledAction @@ -702,47 +702,45 @@ Resources: } 'c:\cfn\scripts\AmazonCloudWatchAgent\cloudwatch-applog-config.py': content: !Sub - - |- + - | import json import os - cloudwatch_baseline = 'c:/cfn/scripts/AmazonCloudWatchAgent/aws-cloudwatch-agent-config.json' - log_group_name = "/aws/ec2/win/${AWS::StackName}" - log_paths_input = (r'''${local_addCWLtarget}''').split(",") + CWA_CONFIG = 'c:/cfn/scripts/AmazonCloudWatchAgent/aws-cloudwatch-agent-config.json' + LOG_GROUP = "/aws/ec2/win/${AWS::StackName}" + LOG_PATHS = (r'''${local_addCWLtarget}''').split(",") - def get_stream_name(log_path): - log_no_ext = os.path.splitext(os.path.basename(log_path))[0] - return "{}_logs_{{instance_id}}".format(log_no_ext) + def get_stream_name(path): + return '{{instance_id}}/{}'.format(path.replace('*', '(')) - def load_baseline(): - print('Loading existing cwl baseline') - with open(cloudwatch_baseline, 'r') as f: - return json.load(f) + def load_json(path): + with open(path, 'r') as fh_: + return json.load(fh_) - def write_baseline(baseline): - print('Writing new cwl baseline') - with open(cloudwatch_baseline, 'w') as f: - f.write(json.dumps(baseline, sort_keys=True, indent=4)) + def dump_json(path, data): + with open(path, 'w') as fh_: + fh_.write(json.dumps(data, sort_keys=True, indent=4)) - if log_paths_input: - print('Additional cwl paths were defined.') - baseline = load_baseline() - for log_path in log_paths_input: - baseline['logs']['logs_collected']['files']['collect_list'].append({ - 'file_path': log_path, - 'log_group_name': log_group_name, - 'log_stream_name': get_stream_name(log_path), + if LOG_PATHS: + print('Additional cwl paths were defined...') + print('Loading existing cwl baseline') + config = load_json(CWA_CONFIG) + for log in LOG_PATHS: + config['logs']['logs_collected']['files']['collect_list'].append({ + 'file_path': log, + 'log_group_name': LOG_GROUP, + 'log_stream_name': get_stream_name(log), 'timestamp_format': "%H:%M:%S %y %b %-d" }) - write_baseline(baseline) + print('Writing new cwl baseline') + dump_json(CWA_CONFIG, config) print('CWL baseline modification complete') - # convert CommanDelimitedList to a string for Fn::Sub compatibility - - - local_addCWLtarget: !Join ["," ,!Ref CloudWatchAppLogs] + # convert CommaDelimitedList to a string for Fn::Sub compatibility + - local_addCWLtarget: !Join [",", !Ref CloudWatchAppLogs] make-app: commands: 10-make-app: diff --git a/modules/win-instance/watchmaker-win-instance.template.cfn.yaml b/modules/win-instance/watchmaker-win-instance.template.cfn.yaml index e7511016..c367cdbf 100644 --- a/modules/win-instance/watchmaker-win-instance.template.cfn.yaml +++ b/modules/win-instance/watchmaker-win-instance.template.cfn.yaml @@ -140,7 +140,7 @@ Metadata: ParameterLabels: ToggleCfnInitUpdate: default: Force Cfn Init Update - Version: 1.15.2 + Version: 1.15.3 Outputs: WatchmakerInstanceId: Description: Instance ID @@ -511,47 +511,45 @@ Resources: } 'c:\cfn\scripts\AmazonCloudWatchAgent\cloudwatch-applog-config.py': content: !Sub - - |- + - | import json import os - cloudwatch_baseline = 'c:/cfn/scripts/AmazonCloudWatchAgent/aws-cloudwatch-agent-config.json' - log_group_name = "/aws/ec2/win/${AWS::StackName}" - log_paths_input = (r'''${local_addCWLtarget}''').split(",") + CWA_CONFIG = 'c:/cfn/scripts/AmazonCloudWatchAgent/aws-cloudwatch-agent-config.json' + LOG_GROUP = "/aws/ec2/win/${AWS::StackName}" + LOG_PATHS = (r'''${local_addCWLtarget}''').split(",") - def get_stream_name(log_path): - log_no_ext = os.path.splitext(os.path.basename(log_path))[0] - return "{}_logs_{{instance_id}}".format(log_no_ext) + def get_stream_name(path): + return '{{instance_id}}/{}'.format(path.replace('*', '(')) - def load_baseline(): - print('Loading existing cwl baseline') - with open(cloudwatch_baseline, 'r') as f: - return json.load(f) + def load_json(path): + with open(path, 'r') as fh_: + return json.load(fh_) - def write_baseline(baseline): - print('Writing new cwl baseline') - with open(cloudwatch_baseline, 'w') as f: - f.write(json.dumps(baseline, sort_keys=True, indent=4)) + def dump_json(path, data): + with open(path, 'w') as fh_: + fh_.write(json.dumps(data, sort_keys=True, indent=4)) - if log_paths_input: - print('Additional cwl paths were defined.') - baseline = load_baseline() - for log_path in log_paths_input: - baseline['logs']['logs_collected']['files']['collect_list'].append({ - 'file_path': log_path, - 'log_group_name': log_group_name, - 'log_stream_name': get_stream_name(log_path), + if LOG_PATHS: + print('Additional cwl paths were defined...') + print('Loading existing cwl baseline') + config = load_json(CWA_CONFIG) + for log in LOG_PATHS: + config['logs']['logs_collected']['files']['collect_list'].append({ + 'file_path': log, + 'log_group_name': LOG_GROUP, + 'log_stream_name': get_stream_name(log), 'timestamp_format': "%H:%M:%S %y %b %-d" }) - write_baseline(baseline) + print('Writing new cwl baseline') + dump_json(CWA_CONFIG, config) print('CWL baseline modification complete') - # convert CommanDelimitedList to a string for Fn::Sub compatibility - - - local_addCWLtarget: !Join ["," ,!Ref CloudWatchAppLogs] + # convert CommaDelimitedList to a string for Fn::Sub compatibility + - local_addCWLtarget: !Join [",", !Ref CloudWatchAppLogs] make-app: commands: 10-make-app: