转到正文

OneCMDB中文

研究和推广OneCMDB,传递ITIL&ITSM知识。

例子中没有如何建立策略的例子啊,现在我想在一个CI变更时调用一个java的类,貌似这里面优惠雕功能,但是不知道该具体怎么配置,不胜感激

以下为OneCMDB探索回复内容,可供参考

如果想在CI变更时调用Java类,则需要使用事件策略。登录之后再System View中定位到Policy->EventPolicy,然后切换到Edit Allowed视图,点击Add按钮就可以添加事件策略了。

几个重要参数:
callbackClass:需要调用的类名称,该类需实现org.onecmdb.core.IEventPolicyCallback,该接口只有onPolicyEvent这个方法,OneCMDB会自动调用onPolicyEvent方法。
OnRfc:标明作用于哪个RFC上,如果作用域修改属性请求上,则为org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeValue,其他类似,为ccb.rfc下面的类型。
attributePattern:应用事件策略的属性匹配表达式,应该和query函数中XPath语法一致。
callbackClassPath:类的寻找路径列表,OneCMDB会从给定的路径列表中查找callbackClass中指定的类,并加载该类。其本质是使用java.net.URLClassLoader.URLClassLoader加载类并实例化。

有效Rfc类别为
org.onecmdb.core.internal.ccb.rfc.RFCNewCi
org.onecmdb.core.internal.ccb.rfc.RFCNewAttribute
org.onecmdb.core.internal.ccb.rfc.RFCDestroy
org.onecmdb.core.internal.ccb.rfc.RFCModifyAlias
org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeType
org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeReferenceType
org.onecmdb.core.internal.ccb.rfc.RFCModifyDerivedAttributeValue
org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeValue
org.onecmdb.core.internal.ccb.rfc.RFCModifyDescription
org.onecmdb.core.internal.ccb.rfc.RFCModifyIsTemplate
org.onecmdb.core.internal.ccb.rfc.RFCModifyDescription
org.onecmdb.core.internal.ccb.rfc.RFCModifyDisplayNameExpression
org.onecmdb.core.internal.ccb.rfc.RFCModifyMaxOccurs
org.onecmdb.core.internal.ccb.rfc.RFCModifyMinOccurs

 

一个参考实现:

public class EventPolicyCallback implements IEventPolicyCallback {

    public static final String VALUE_NOT_ALLOWED = "ValueNotAllowed";

    public IRfcResult onPolicyEvent(IObjectScope scope, IRFC rfc, ICi ci) {
        RfcResult result = new RfcResult();
        if (rfc instanceof RFCModifyAttributeValue) {
            RFCModifyAttributeValue modValue = (RFCModifyAttributeValue)rfc;
            String newValue = modValue.getNewValue();
            if (newValue != null && newValue.equals(VALUE_NOT_ALLOWED)) {
                result.setRejectCause("POLICY-DENY: Value <" + VALUE_NOT_ALLOWED + "> s not allowed!!!");
            }
        }
        System.out.println("OnEVENT….");
        return(result);
    }
}

OneCMDB探索于2010-6-27 编辑。

本站文章除注明转载外,均为本站原创。本站翻译文章,如果作为商业用途,请取得作者许可。
本站原创文章版权归作者和OneCMDB中文共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载请注明:文章转载自:OneCMDB中文 [http://www.onecmdb.cn]
本文标题:建立策略时的问题
本文地址:http://www.onecmdb.cn/useonecmdb/question-about-creating-a-policy.htm 复制本文链接
  • 深海鱼
    2010 年 6 月 28日 16:07

    我把所有东西都配置好后,重启,修改值,保存,根本没有触发任何东西。心冷了……

  • OneCMDB探索
    2010 年 6 月 28日 11:37

    策略需要和PolicyTrigger 策略触发器配合使用。由于PolicyTrigger 可指定关联到模板所以attributePattern应该为正则表达式,哪位系统写个demo尝试一下?

  • OneCMDB探索
    2010 年 6 月 27日 15:29

    不知道是不是需要另外增加一个PolicyTrigger,请大家试试看。之前只对原理进行了了解,而没有去使用。

  • OneCMDB探索
    2010 年 6 月 27日 15:20

    如果想在CI变更时调用Java类,则需要使用事件策略。登录之后再System View中定位到Policy->EventPolicy,然后切换到Edit Allowed视图,点击Add按钮就可以添加事件策略了。
    几个重要参数:
    callbackClass:需要调用的类名称,该类需实现org.onecmdb.core.IEventPolicyCallback,该接口只有onPolicyEvent这个方法,OneCMDB会自动调用onPolicyEvent方法。
    OnRfc:标明作用于哪个RFC上,如果作用域修改属性请求上,则为org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeValue,其他类似,为ccb.rfc下面的类型。
    attributePattern:应用事件策略的属性匹配表达式,应该和query函数中XPath语法一致。
    callbackClassPath:类的寻找路径列表,OneCMDB会从给定的路径列表中查找callbackClass中指定的类,并加载该类。其本质是使用java.net.URLClassLoader.URLClassLoader加载类并实例化。

    有效Rfc类别为
    org.onecmdb.core.internal.ccb.rfc.RFCNewCi
    org.onecmdb.core.internal.ccb.rfc.RFCNewAttribute
    org.onecmdb.core.internal.ccb.rfc.RFCDestroy
    org.onecmdb.core.internal.ccb.rfc.RFCModifyAlias
    org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeType
    org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeReferenceType
    org.onecmdb.core.internal.ccb.rfc.RFCModifyDerivedAttributeValue
    org.onecmdb.core.internal.ccb.rfc.RFCModifyAttributeValue
    org.onecmdb.core.internal.ccb.rfc.RFCModifyDescription
    org.onecmdb.core.internal.ccb.rfc.RFCModifyIsTemplate
    org.onecmdb.core.internal.ccb.rfc.RFCModifyDescription
    org.onecmdb.core.internal.ccb.rfc.RFCModifyDisplayNameExpression
    org.onecmdb.core.internal.ccb.rfc.RFCModifyMaxOccurs
    org.onecmdb.core.internal.ccb.rfc.RFCModifyMinOccurs

    • 深海鱼
      2010 年 6 月 28日 10:41

      关键是在配置的地方不太明白,比如说写好的类放在哪里?是tomcat下的root工程里面吗?
      在OneCMDB中需要一个EventPolicy和一个PolicyTrigger吧,这两个配置项可不可以给一个简单的例子并加以说明?

      • OneCMDB探索
        2010 年 6 月 28日 11:04

        由于使用URLClassLoader加载类,故而位置应该没有特别要求的,只要权限对(linux下)应该没有问题。工作中没有用到这个,暂时没有sample。

        • 深海鱼
          2010 年 6 月 28日 11:23

          在配置PolicyTrigger的时候只能选择针对ci实例吗?可不可以针对某个模板下所有的Ci实例?

          • OneCMDB探索
            2010 年 6 月 28日 11:30

            策略触发器
            它是多个策略(CI策略、属性策略或者事件策略)和特定配置项模板之间的连接桥梁。策略将被应用到该模板的所有配置项和所有子配置项。

        • 深海鱼
          2010 年 6 月 28日 12:24

          文档上的确是这么写的,但是我在配置PolicyTrigge的时候,选择policy for属性时出来的全部都是CI下的实例啊,没办法选择某个模板的

          • OneCMDB探索
            2010 年 6 月 28日 16:04

            这个应该是OneCMDB 2.1.0的bug,不能选择模板。可以尝试先建立一个选择CI实例,导出XML之后再导入看看是否可以。


回复