Go to main content

Guide d'administration d'Oracle® ZFS Storage Appliance, version OS8.8.x

Quitter la vue de l'impression

Mis à jour : Août 2021
 
 

Audits et rapports sur l'exécution des workflows

Les workflows peuvent émettre des enregistrements d'audit en appelant la fonction audit(). Le seul argument de la fonction audit est une chaîne qui doit être placée dans le journal d'audit.

La fonction audit() affiche l'utilisateur actuel qui a exécuté le workflow uniquement si setid est défini sur false. Toutefois, si un workflow appartient à l'utilisateur root et setid est défini sur true, les journaux d'audit afficheront root comme utilisateur, même si le workflow a été exécuté par un autre utilisateur.

Pour déterminer l'utilisateur qui exécute le workflow indépendamment de la valeur définie pour setid, utilisez la fonction whoami().

Exemple 13  Fonction whoami de test du workflow
   var workflow = {
        name: "Test whoami",
        description: "Print current username",
        execute: function () {
                return ("Hello " + whoami());
        }
};

Pour les workflows complexes à durée d'exécution prolongée, il peut être utile de fournir à l'utilisateur qui exécute le workflow des informations claires sur l'avancement. Pour permettre un tel signalement de l'avancement de l'exécution d'un workflow, il faut que le membre execute retourne une série d'étapes. Chaque élément de la série doit contenir les membres suivants :

Table 156  Membres obligatoires des rapports sur l'exécution
Membre obligatoire
Type
Description
step
String
Chaîne indiquant le nom de l'étape d'exécution
execute
Fonction
Fonction exécutant l'étape du workflow

Comme pour la fonction execute appliquée au workflow dans son ensemble, le membre execute de chaque étape accepte comme argument un objet contenant les paramètres du workflow.

Exemple 14  Rapports sur l'exécution de workflows

L'exemple suivant illustre un workflow qui crée un nouveau projet, un nouveau partage et un nouvel enregistrement d'audit en trois étapes :

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); }
};

La fonction de messagerie permet aux workflows de livrer certains résultats par courrier électronique. Cette fonction doit inclure les arguments suivants : un objet sous la forme de commandes to et subject et une chaîne messageBody représentant le corps du message.

Exemple 15  Exécution de workflows à l'aide d'une fonction de messagerie
    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);

       }
};