Cisco UCS Director Open Automation の手順書、リリース 5.4
トリガー条件の管理
トリガー条件の管理

トリガー条件の管理

この章は、次の項で構成されています。

トリガー条件

特定の目的に使用するトリガーを作成するには、正しく定義されたトリガー条件を準備する必要があります。トリガー条件がまだ存在しない場合は、それを実装する必要があります。同様に、適切で必要な条件の構成要素がまだ定義されていない場合は、ここに示す情報を使用してそれらを実装することができます。

トリガー作成ウィザード([ポリシー](Policies) > [オーケストレーション(Orchestration)] > [トリガー(Triggers)] の下)の [条件の指定(Specify Conditions)] ステップに、新しいトリガー条件をセットアップするためのオプションが表示されるはずです。

トリガーは、次の 2 つの要素で構成されます。

  • com.cloupia.service.cIM.inframgr.thresholdmonitor.MonitoredContextIf の実装。

  • com.cloupia.service.cIM.inframgr.thresholdmonitor.MonitoredParameterIf の 1 つ以上の実装。

MonitoredContextIf は、監視するオブジェクトを記述し、そのオブジェクトへの参照リストを指定するために使用されます。ウィザードの [トリガーの編集(Edit Trigger)] > [条件の指定(Specify Conditions)] 要素を使用する場合は、オブジェクトとそれへの参照を選択可能にするコントロールと関連オプションが表示されるはずです。たとえば、MonitoredContextIf を使用して、「ダミー デバイス」オブジェクトを監視し、使用可能なすべてのダミー デバイスのリストを返すことができます。

MonitoredParamterIf は、次のようなトリガー条件の定義で使用されます。
  • 特定のパラメータの検査を行います。たとえば、MonitorContextIf で定義した特定のダミー デバイス(ddTwo など)のステータスを表すパラメータにすることができます。
  • パラメータに適用できる演算を行います。一般的な演算には以下が含まれます。
    • より少ない
    • 次の値と等しい
    • より大きい
    (適切な演算は、実装によって異なります)。
  • 値のリストを提供し、その各値とパラメータを論理的に比較してトリガーをアクティブにします。
そのため、たとえば、「Dummy Device ddTwo Status is down」などのトリガー条件は 1 つの条件として論理的にテストすることができます。監視対象の Status パラメータがステートメント True を意味する場合に、トリガー条件が満たされます。

トリガー条件の追加

はじめる前に

インターフェイスの実装の詳細については、Open Automation の javadoc を参照してください。

手順
    ステップ 1   MonitoredContextIf とすべての適用可能な MonitoredParameterIf を実装します。
    public class MonitorDummyDeviceStatusParam implements MonitoredParameterIf {
    @Override
    public String getParamLabel() {
    //this is the label of this parameter shown in the ui
    return "Dummy Device Status";
    }
    @Override
    public String getParamName() {
    //each parameter needs a unique string, it's a good idea to //prefix each
    parameter
    //with your module id, this way it basically guarantees //uniqueness
    return "foo.dummy.device.status";
    }
    @Override
    public FormLOVPair[] getSupportedOps() {
    //this should return all the supported operations that can be //applied to
    this parameter
    FormLOVPair isOp = new FormLOVPair("is", "is");
    FormLOVPair[] ops = { isOp };
    return ops;
    }
    @Override
    public int getValueConstraintType() {
    return 0;
    }
    @Override
    public FormLOVPair[] getValueLOVs() {
    //this should return all the values you want to compare against //e.g.
    threshold values
    FormLOVPair valueUP = new FormLOVPair("Up", "up");
    FormLOVPair valueDOWN = new FormLOVPair("Down", "down");
    FormLOVPair valueUNKNOWN = new FormLOVPair("Unknown", "unknown");
    FormLOVPair[] statuses = { valueDOWN, valueUNKNOWN, valueUP };
    return statuses;
    }
    @Override
    public int getApplicableContextType() {
    //this parameter is binded to MonitorDummyDeviceType, so it needs //to return
    the same
    //value returned by MonitorDummyDeviceType.getContextType()
    DynReportContext dummyContextOneType =
    ReportContextRegistry.getInstance().getContextByName(FooConstants.DUMMY_CONTEX
    T_ONE);
    return dummyContextOneType.getType();
    }
    @Override
    public String getApplicableCloudType() {
    return null;
    }
    @Override
    public int checkTrigger(StringBuffer messageBuf, int contextType,
    String objects, String param, String op, String values) {
    //you want to basically do if (objects.param op values) { //activate } else {
    not activate }
    //first step, you'd look up what objects is pointing to, usually objects
    should be an identifier
    //for some other object you actually want
    //in this example, objects is either ddOne (dummy device) or ddTwo, for
    simplicity's sake, we'll
    //say ddOne is always up and ddTwo is always down
    if (objects.equals("ddOne")) {
    if (op.equals("is")) {
    //ddOne is always up, so trigger only gets activated when "ddOne is up"
    if (values.equals("up")) {
    return RULE_CHECK_TRIGGER_ACTIVATED;
    } else {
    return RULE_CHECK_TRIGGER_NOT_ACTIVATED;
    }
    } else {
    return RULE_CHECK_ERROR;
    }
    } else {
    if (op.equals("is")) {
    //ddTwo is always down, so trigger only gets activated when "ddTwo is not up"
    if (values.equals("up")) {
    return RULE_CHECK_TRIGGER_NOT_ACTIVATED;
    } else {
    return RULE_CHECK_TRIGGER_ACTIVATED;
    }
    } else {
    return RULE_CHECK_ERROR;
    }
    }
    }
    }
    public class MonitorDummyDeviceType implements MonitoredContextIf {
    @Override
    public int getContextType() {
    //each monitored type is uniquely identified by an integer
    //we usually use the report context type
    DynReportContext dummyContextOneType =
    ReportContextRegistry.getInstance().getContextByName(FooConstants.DUMMY_CONTEX
    T_ONE);
    return dummyContextOneType.getType();
    }
    @Override
    public String getContextLabel() {
    //this is the label shown in the ui
    return "Dummy Device";
    }
    @Override
    public FormLOVPair[] getPossibleLOVs(WizardSession session)
    //this should return all the dummy devices that could potentially be monitored
    //in this example i only have two dummy devices, usually the value should be
    an identifier you can use
    //to reference back to the actual object
    FormLOVPair deviceOne = new FormLOVPair("ddOne", "ddOne");
    FormLOVPair deviceTwo = new FormLOVPair("ddTwo", "ddTwo");
    FormLOVPair[] dummyDevices = { deviceOne, deviceTwo };
    return dummyDevices;
    }
    @Override
    public String getContextValueDetail(String selectedContextValue) {
    //this is additional info to display in the ui, i'm just returning a dummy
    string
    return "you picked " + selectedContextValue;
    }
    @Override
    public String getCloudType(String selectedContextValue) {
    // TODO Auto‐generated method stub
    return null;
    }
    }
    ステップ 2   システムにトリガー条件を登録します。

    com.cloupia.service.cIM.inframgr.thresholdmonitor.MonitoringTriggerUtil にこのための静的メソッドが含まれています。

    // adding new monitoring trigger, note, these new trigger components
    // utilize the dummy context one i've just registered
    // you have to make sure to register contexts before you execute
    // this code, otherwise it won't work
    MonitoringTrigger monTrigger = new MonitoringTrigger(
    new MonitorDummyDeviceType(),new MonitorDummyDeviceStatusParam());
    MonitoringTriggerUtil.register(monTrigger);
    menuProvider.registerWithProvider();
    1. MonitoredContextIf とその MonitoredParameterIf をまとめて com.cloupia.service.cIM.inframgr.thresholdmonitor.MonitoringTrigger にグループ分けします。
    2. ユーティリティを使ってモニタリング トリガーを登録します。