Go to main content

Oracle® ZFS Storage Appliance 管理ガイド、Release OS8.8.x

印刷ビューの終了

更新: 2021 年 8 月
 
 

ワークフローの実行の監査およびレポート

ワークフローは、audit() 関数を呼び出すことによって監査レコードを発行できます。audit 関数の唯一の引数は、監査ログに記録される文字列です。

audit() 関数を使用すると、setidfalse に設定されている場合にのみ、ワークフローを実行した実際のユーザーが表示されます。ただし、ワークフローがルートによって所有され、setidtrue に設定されている場合は、そのワークフローが別のユーザーによって実行されたとしても、監査ログにはユーザーとしてルートが表示されます。

setid が何に設定されているかには関係なくワークフローを実行しているユーザーを特定するには、whoami() 関数を使用します。

使用例 13  whoami 関数をテストしているワークフロー
   var workflow = {
        name: "Test whoami",
        description: "Print current username",
        execute: function () {
                return ("Hello " + whoami());
        }
};

実行にある程度の時間が必要な複雑なワークフローの場合は、そのワークフローを実行しているユーザーに明確な進捗状況を表示すると有益です。ワークフローの実行をこの方法で報告できるようにするには、execute メンバーが手順の配列を返すべきです。各配列要素には、次のメンバーが必要です。

表 156  実行のレポートの必須メンバー
必須メンバー
タイプ
説明
step
文字列
実行段階の名前を示す文字列
execute
関数
ワークフローの段階を実行する関数

全体としてのワークフロー上の execute 関数と同様に、各段階の execute メンバーは、そのワークフローへのパラメータを含むオブジェクトを引数として受け取ります。

使用例 14  ワークフローの実行のレポート

例として、3 つの手順で新しいプロジェクト、シェア、および監査レコードを作成するワークフローを次に示します。

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

ワークフローは、メール関数を使用して、電子メールを介してワークフローの特定の出力を提供できます。メール関数には、tosubject を持つオブジェクト、および messageBody 文字列となどの引数が含まれている必要があります。

使用例 15  メーラーを使用したワークフローの実行
    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);

       }
};