Go to main content

Guía de administración de Oracle® ZFS Storage Appliance, versión OS8.8.x

Salir de la Vista de impresión

Actualización: Agosto de 2021
 
 

Auditoría y generación de informes de ejecución de flujos de trabajo

Los flujos de trabajo pueden emitir registros de auditoría si llaman a la función audit(). El único argumento de la función audit es una cadena que se colocará en el log de auditoría.

La función audit() muestra el usuario real que ejecutó el flujo de trabajo solo si setid está configurado en false. Sin embargo, si el propietario de un flujo de trabajo es el usuario root y setid está configurado en true, los logs de auditoría mostrarán root como el usuario de ejecución, aun si el flujo de trabajo fue ejecutado por otro usuario.

Para determinar qué usuario está ejecutando el flujo de trabajo independientemente de la configuración de setid, use la función whoami().

Ejemplo 13  Función whoami de prueba de flujo de trabajo
   var workflow = {
        name: "Test whoami",
        description: "Print current username",
        execute: function () {
                return ("Hello " + whoami());
        }
};

Para los flujos de trabajo complicados cuya ejecución requiere bastante tiempo, puede ser útil proporcionar información clara acerca del progreso para el usuario que ejecuta el flujo de trabajo. Para permitir que se genere un informe sobre la ejecución de un flujo de trabajo de esta manera, el miembro execute debe devolver una matriz de pasos. Cada elemento de la matriz debe contener los siguientes miembros:

Tabla 156  Miembros requeridos para la generación de informes de ejecución
Miembro obligatorio
Tipo
Descripción
step
Cadena
Cadena que denota el nombre del paso de ejecución.
execute
Función
Función que ejecuta el paso del flujo de trabajo.

Al igual que con la función execute para el flujo de trabajo como un todo, el miembro execute de cada paso toma como argumento un objeto que contiene los parámetros del flujo de trabajo.

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

Como ejemplo, en el siguiente flujo de trabajo, se crea un nuevo proyecto, recurso compartido y registro de auditoría en tres pasos:

var steps = [ {
	step: 'Checking for associated project',
	execute: function (params) {
		try {
			run('shares select ' + params.unit);
		} catch (err) {
			if (err.code != EAKSH_ENTITY_BADSELECT)
				throw (err);

			/*
			 * We haven't yet created a project that corresponds to
			 * this business unit; create it now.
			 */
			run('shares project ' + params.unit);
			set('mountpoint', '/export/' + params.unit);
			run('commit');
			run('shares select ' + params.unit);
		}
	}
}, {
	step: 'Creating share',
	execute: function (params) {
		run('filesystem ' + params.name);
		run('commit');
	}
}, {
	step: 'Creating audit record',
	execute: function (params) {
		audit('created "' + params.name + '" in "' + params.unit);
	}
} ];

var workflow = {
	name: 'Create share',
	description: 'Creates a new share in a business unit',
	parameters: {
		name: {
			label: 'Name of new share',
			type: 'String'
		},
		unit: {
			label: 'Business unit',
			type: 'ChooseOne',
			options: [ 'development', 'finance', 'qa', 'sales' ],
			optionlabels: [ 'Development', 'Finance',
			    'Quality Assurance', 'Sales/Administrative' ],
		}
	},
	validate: function (params) {
		try {
			run('shares select ' + params.unit);
			run('select ' + params.name);
		} catch (err) {
			if (err.code == EAKSH_ENTITY_BADSELECT)
				return;
		}

		return ({ name: 'share already exists' });
	},
	execute: function (params) { return (steps); }
};

Mediante el uso de la función de correo, los flujos de trabajo pueden enviar ciertas salidas del flujo de trabajo por correo electrónico. La función de correo debe contener los siguientes argumentos: un objeto con to y subject, y una cadena messageBody.

Ejemplo 15  Ejecución del flujo de trabajo con una aplicación de correo
    var workflow = {
       name: 'email controller state',
       description: 'email controller state',
       execute: function () {

           // verify state of the controller
           var faulted = run('maintenance hardware "chassis-000" get faulted');

           var messageBody = faulted;

           emailAddress = 'first.last@xyz.com';
           subjectLine = 'Controller State';
           mail({To: emailAddress, Subject: subjectLine}, messageBody);

       }
};