def fill_disk(filter: str = None, duration: int = 120, timeout: int = 60, size: int = 1000, path: str = None, instance_criteria: Iterable[Mapping[str, any]] = None, configuration: Configuration = None, secrets: Secrets = None): """ Fill the VMSS machine disk with random data. Similar to the fill_disk action of the machine.actions module. """ logger.debug("Starting fill_disk: configuration='{}', filter='{}'," " duration='{}', size='{}', path='{}', timeout='{}'".format( configuration, filter, duration, size, path, timeout)) vmss = fetch_vmss(filter, configuration, secrets) vmss_records = Records() for scale_set in vmss: instances_records = Records() instances = fetch_instances(scale_set, instance_criteria, configuration, secrets) for instance in instances: command_id, script_content = command.prepare(instance, 'fill_disk') fill_path = command.prepare_path(instance, path) parameters = { 'command_id': command_id, 'script': [script_content], 'parameters': [{ 'name': "duration", 'value': duration }, { 'name': "size", 'value': size }, { 'name': "path", 'value': fill_path }] } logger.debug("Filling disk of VMSS instance: '{}'".format( instance['name'])) _timeout = duration + timeout command.run(scale_set['resourceGroup'], instance, _timeout, parameters, secrets, configuration) instances_records.add(cleanse.vmss_instance(instance)) scale_set['virtualMachines'] = instances_records.output() vmss_records.add(cleanse.vmss(scale_set)) return vmss_records.output_as_dict('resources')
def fill_disk(filter: str = None, duration: int = 120, timeout: int = 60, size: int = 1000, path: str = None, configuration: Configuration = None, secrets: Secrets = None): """ Fill the disk with random data. Parameters ---------- filter : str, optional Filter the virtual machines. If the filter is omitted all machines in the subscription will be selected as potential chaos candidates. duration : int, optional Lifetime of the file created. Defaults to 120 seconds. timeout : int Additional wait time (in seconds) for filling operation to be completed. Getting and sending data from/to Azure may take some time so it's not recommended to set this value to less than 30s. Defaults to 60 seconds. size : int Size of the file created on the disk. Defaults to 1GB. path : str, optional The absolute path to write the fill file into. Defaults: C:/burn for Windows clients, /root/burn for Linux clients. Examples -------- Some calling examples. Deep dive into the filter syntax: https://docs.microsoft.com/en-us/azure/kusto/query/ >>> fill_disk("where resourceGroup=='rg'", configuration=c, secrets=s) Fill all machines from the group 'rg' >>> fill_disk("where resourceGroup=='rg' and name='name'", configuration=c, secrets=s) Fill the machine from the group 'rg' having the name 'name' >>> fill_disk("where resourceGroup=='rg' | sample 2", configuration=c, secrets=s) Fill two machines at random from the group 'rg' """ msg = "Starting fill_disk: configuration='{}', filter='{}'," \ " duration='{}', size='{}', path='{}', timeout='{}'" \ .format(configuration, filter, duration, size, path, timeout) logger.debug(msg) machines = __fetch_machines(filter, configuration, secrets) machine_records = Records() for machine in machines: command_id, script_content = command.prepare(machine, 'fill_disk') fill_path = command.prepare_path(machine, path) parameters = { 'command_id': command_id, 'script': [script_content], 'parameters': [{ 'name': "duration", 'value': duration }, { 'name': "size", 'value': size }, { 'name': "path", 'value': fill_path }] } logger.debug("Filling disk of machine: {}".format(machine['name'])) _timeout = duration + timeout command.run(machine['resourceGroup'], machine, _timeout, parameters, secrets, configuration) machine_records.add(cleanse.machine(machine)) return machine_records.output_as_dict('resources')