import ./make-test-python.nix ( { lib, pkgs, ... }: let # See https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html. iniFormat = pkgs.formats.ini { }; region = "ap-northeast-1"; sharedConfigurationDefaultProfile = "default"; sharedConfigurationFile = iniFormat.generate "config" { "${sharedConfigurationDefaultProfile}" = { region = region; }; }; sharedCredentialsFile = iniFormat.generate "credentials" { "${sharedConfigurationDefaultProfile}" = { aws_access_key_id = "placeholder"; aws_secret_access_key = "placeholder"; aws_session_token = "placeholder"; }; }; sharedConfigurationDirectory = pkgs.runCommand ".aws" { } '' mkdir $out cp ${sharedConfigurationFile} $out/config cp ${sharedCredentialsFile} $out/credentials ''; in { name = "amazon-cloudwatch-agent"; meta.maintainers = pkgs.amazon-cloudwatch-agent.meta.maintainers; nodes.machine = { config, pkgs, ... }: { services.amazon-cloudwatch-agent = { enable = true; commonConfiguration = { credentials = { shared_credential_profile = sharedConfigurationDefaultProfile; shared_credential_file = "${sharedConfigurationDirectory}/credentials"; }; }; configuration = { agent = { # Required despite documentation saying the agent ignores it in "onPremise" mode. region = region; # Show debug logs and write to a file for interactive debugging. debug = true; logfile = "/var/log/amazon-cloudwatch-agent/amazon-cloudwatch-agent.log"; }; logs = { logs_collected = { files = { collect_list = [ { file_path = "/var/log/amazon-cloudwatch-agent/amazon-cloudwatch-agent.log"; log_group_name = "/var/log/amazon-cloudwatch-agent/amazon-cloudwatch-agent.log"; log_stream_name = "{local_hostname}"; } ]; }; }; }; traces = { local_mode = true; traces_collected = { xray = { }; }; }; }; mode = "onPremise"; }; # Keep the runtime directory for interactive debugging. systemd.services.amazon-cloudwatch-agent.serviceConfig.RuntimeDirectoryPreserve = true; }; testScript = '' start_all() machine.wait_for_unit("amazon-cloudwatch-agent.service") machine.wait_for_file("/run/amazon-cloudwatch-agent/amazon-cloudwatch-agent.pid") machine.wait_for_file("/run/amazon-cloudwatch-agent/amazon-cloudwatch-agent.toml") # "config-translator" omits this file if no trace configurations are specified. # # See https://github.com/aws/amazon-cloudwatch-agent/issues/1320. machine.wait_for_file("/run/amazon-cloudwatch-agent/amazon-cloudwatch-agent.yaml") machine.wait_for_file("/run/amazon-cloudwatch-agent/env-config.json") ''; } )