Skip to content

control for loading configurations from settings.yaml before each chaos run #10

@venkivijay

Description

@venkivijay

I am not sure if there is any standard way for defining configurations that would be used by multiple chaos experiments. For example, the aws chaos extension requires to define aws_region in each experiment. I wanted this value to be dynamic so I defined it in the configuration block of each experiment. Now that the number of experiments is growing, it is getting real difficult to manage this parameter on the experiment level. I came up with a solution by writing a control which would load the configurations defined on the settings.yaml file before each chaos run.

  • Few things to note
    • Variable that is defined on the settings.yaml file will be used by default
    • Variable defined in experiment top level will override the settings.yaml variable
    • Variable passed from the command line argument chaos run --var key=value will override the experiment defined variable
def configure_control(configuration: Configuration = None,
                      secrets: Secrets = None, settings: Settings = None,
                      experiment: Experiment = None):
    """
    Load configuration values from settings file
    Settings value can be overwritten by defining it in the experiment
    Usage: On settings file
        controls:
        global_values:
            provider:
            type: python
            module: custommodule.utils.control
    """
    settings_config = settings['configuration']
    for (setting_key, setting_value) in settings_config.items():
        if (configuration.get(setting_key)):
            logger.info("Using %s:%s from local experiment",setting_key,setting_value)
        else:
            logger.info("Using %s:%s from settings file",setting_key,setting_value)
            configuration[setting_key] = setting_value

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions