JavaScript is required to for searching.
Omitir Vínculos de navegación
Salir de la Vista de impresión
Guía de administración de Oracle® ZFS Storage Appliance
Red de tecnología de Oracle
Biblioteca
PDF
Vista de impresión
Comentarios
search filter icon
search icon

Información del documento

Uso de esta documentación

Capítulo 1 Descripción general de Oracle ZFS Storage Appliance

Capítulo 2 Estado

Capítulo 3 Configuración inicial

Capítulo 4 Configuración de red

Capítulo 5 Configuración del almacenamiento

Capítulo 6 Configuración de red de área de almacenamiento

Capítulo 7 Configuración de usuario

Capítulo 8 Configuración de preferencias de dispositivos ZFSSA

Capítulo 9 Configuración de alertas

Capítulo 10 Configuración de cluster

Capítulo 11 Servicios del dispositivo ZFSSA

Capítulo 12 Recursos compartidos, proyectos y esquemas

Capítulo 13 Replicación

Capítulo 14 Migración shadow

Capítulo 15 Secuencias de comandos de la CLI

Capítulo 16 Flujos de trabajo de mantenimiento

Uso de los flujos de trabajo

Contexto de ejecución de flujos de trabajo

Parámetros de flujos de trabajo

Parámetros restringidos

Parámetros opcionales

Manejo de errores de flujo de trabajo

Validación de entradas de flujo de trabajo

Auditoría de ejecución de flujos de trabajo

Generación de informes de ejecución de flujos de trabajo

Control de versiones

Control de versiones de dispositivo

Control de versiones de flujos de trabajo

Flujos de trabajo como acciones de alerta

Contexto de ejecución de las acciones de alerta

Auditoría de acciones de alerta

Uso de flujos de trabajo programados

Uso de la CLI

Codificación del programa

Ejemplo: selección de tipo de dispositivo

BUI

CLI

Descarga de flujos de trabajo

Visualización de flujos de trabajo

Ejecución de flujos de trabajo

Capítulo 17 Integración

Índice

Ejemplo: selección de tipo de dispositivo

El siguiente ejemplo es un flujo de trabajo que crea una hoja de trabajo basada en un tipo de unidad especificada:

var steps = [ {
	step: 'Checking for existing worksheet',
	execute: function (params) {
		/*
		 * In this step, we're going to see if the worksheet that
		 * we're going to create already exists.  If the worksheet
		 * already exists, we blow it away if the user has indicated
		 * that they desire this behavior.  Note that we store our
		 * derived worksheet name with the parameters, even though
		 * it is not a parameter per se; this is explicitly allowed,
		 * and it allows us to build state in one step that is
		 * processed in another without requiring additional global
		 * variables.
		 */
		params.worksheet = 'Drilling down on ' + params.type + ' disks';

		try {
			run('analytics worksheets select name="' +
			    params.worksheet + '"');

			if (params.overwrite) {
				run('confirm destroy');
				return;
			}
				
			throw ('Worksheet called "' + params.worksheet +
			    '" already exists!');
		} catch (err) {
			if (err.code != EAKSH_ENTITY_BADSELECT)
				throw (err);
		}
	}
 }, {
	step: 'Finding disks of specified type',
	execute: function (params) {
		/*
		 * In this step, we will iterate over all chassis, and for
		 * each chassis iterates over all disks in the chassis,
		 * looking for disks that match the specified type.
		 */
		var chassis, name, disks;
		var i, j;

		run('cd /');
		run('maintenance hardware');

		chassis = list();
		params.disks = [];

		for (i = 0; i < chassis.length; i++) {
			run('select ' + chassis[i]);

			name = get('name');
			run('select disk');
			disks = list();

			for (j = 0; j < disks.length; j++) {
				run('select ' + disks[j]);

				if (get('use') == params.type) {
					params.disks.push(name + '/' +
					    get('label'));
				}

				run('cd ..');
			}

			run('cd ../..');
		}

		if (params.disks.length === 0)
			throw ('No ' + params.type + ' disks found');
		run('cd /');
	}
 }, {
	step: 'Creating worksheet',
	execute: function (params) {
		/*
		 * In this step, we're ready to actually create the worksheet
		 * itself:  we have the disks of the specified type and
		 * we know that we can create the worksheet.  Note that we
		 * create several datasets:  first, I/O bytes broken down
		 * by disk, with each disk of the specified type highlighted
		 * as a drilldown.  Then, we create a separate dataset for
		 * each disk of the specified type.  Finally, note that we
		 * aren't saving the datasets -- we'll let the user do that
		 * from the created worksheet if they so desire.  (It would
		 * be straightforward to add a boolean parameter to this
		 * workflow that allows that last behavior to be optionally
		 * changed.)
		 */
		var disks = [], i;

		run('analytics worksheets');
		run('create "' + params.worksheet + '"');
		run('select name="' + params.worksheet + '"');
		run('dataset');
		run('set name=io.bytes[disk]');

		for (i = 0; i < params.disks.length; i++)
			disks.push('"' + params.disks[i] + '"');

		run('set drilldowns=' + disks.join(','));
		run('commit');

		for (i = 0; i < params.disks.length; i++) {
			run('dataset');
			run('set name="io.bytes[disk=' +
			    params.disks[i] + ']"');
			run('commit');
		}
	}
} ];

var workflow = {
	name: 'Disk drilldown',
	description: 'Creates a worksheet that drills down on system, ' +
	    'cache, or log devices',
	parameters: {
		type: {
			label: 'Create a new worksheet drilling down on',
			type: 'ChooseOne',
			options: [ 'cache', 'log', 'system' ],
			optionlabels: [ 'Cache', 'Log', 'System' ]
		},
		overwrite: {
			label: 'Overwrite the worksheet if it exists',
			type: 'Boolean'
		}
	},
	execute: function (params) { return (steps); }
};