CMDB IRE API は順序を挿入し、ビジネスルールを実行できます<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } ビジネスルールはすべての挿入/更新/削除に対して常に実行されることが想定されていますが、多くのサーバーサイド API データベース操作には当てはまりません。これは相互に関連する複数のレコードがバッチで更新され、これは CMDB 識別および調整 API によって実行されるデータベース操作に適用されます。 入力ペイロード 最後にはスクリプトがあり、この API に IRE ペイロードを提供します。これは、削減されたディスカバリーペイロードと、課題を示すために選択された CI タイプに基づいています。 これには次の項目が含まれています。 Windows サーバー CIIP アドレス CIネットワークアダプタ CI アイテム間には関係があります。 サーバーはネットワークアダプタを「所有」します。IP アドレスを「所有」するネットワークアダプタサーバーが IP アドレスを「所有」している 次に、アイテム間で直接定義された参照: ネットワークアダプタは [cmdb_ci] フィールドでサーバーを参照しています。IP アドレスは、NIC フィールドのネットワークアダプタを参照します。 ペイロードの処理 IRE API は、このペイロードを処理するときに、これら 8 つの箇条書きをペイロードにある順序で順番に実行します。 わかりやすくするために、このサーバーはすでに CMDB ではないと仮定します。IRE はこれらを挿入します。それらが存在し、更新されている場合、ビジネスルールが実行されるかどうかは同じことが適用されます。 CI 3 つの CI が最初に挿入されます。次のフィールドが入力されます: ペイロードアイテムでのみ定義された属性IRE 監査フィールド - discovery_source、first_discovered、last_discoveredプラットフォーム監査フィールド - sys_created_on/sys_created_by、sys_updated_on/sys_updated_byなど 挿入時のビジネスルールは、これらの挿入ごとに実行されます。 注意:参照フィールドはまだ入力されていません。挿入時にビジネスルールスクリプトの参照フィールドを使用して、これらの CI 間をドット連結することはできません。 関係性 次に、関係が挿入されます。これらはcmdb_rel_ciレコードで、[親]、[タイプ]、および [子] フィールドがあります。 この時点で CI は既に存在しているため、親 CI または子 CI から値を読み取るためにドット連結するビジネスルールを使用することができます。関係レコードの挿入時に実行されるビジネスルールがこれらの CI に変更を加えることは、まだ完了していないため危険です (以下を参照)。 デフォルトでは、これらの挿入に対してビジネスルールは実行されません。 システムプロパティ glide.identification_engine.insert_relation_disable_workflow を使用してビジネスルールの実行を有効にすることはできますが、これにより API の速度が低下します。たとえば、10 万台のサーバーに対してディスカバリースケジュールを夜間に実行している場合、CMDB を更新するための数百万の API 呼び出しが発生すると、合計されます。 元々、API はこれらの挿入に対してビジネスルールを実行しませんでした。顧客の要求により、このオプションは 2019 年に追加されましたが、まだ推奨されていません。 詳細については、以下を参照してください。 KB0694512 - 挿入時のビジネスルールは、ディスカバリー後にcmdb_rel_ci (CI 関係) テーブルで実行されない この挿入は GlideRecord を使用して行われ、.setWorkflow() はそのプロパティに応じて設定されます。 参照 最初のステップで挿入された CI は、任意の参照値で更新されます。 これらの更新は、ビジネスルールエンジン、監査およびロールバックをバイパスする Java DBUpdate を使用して行われます。つまり、更新時にその更新に対してビジネスルールはまったく実行されません。また、SQL デバッグに対してセッションデバッグを有効にしていない限り、これが別の更新として発生したことを確認することも困難になります。 この更新のビジネスルールを有効にする方法はありません。 両方の CI が挿入された後に参照を追加するということは、参照が破損することなく、参照するものが挿入されるのを待つことを意味します。これにより、挿入のビジネスルールが参照フィールドに値を表示してドット連結を試みるのを防ぎます。参照対象のレコードが挿入される前に参照がある場合、null クエリによって単一のレコードではなくテーブル全体が返されるリスクがあり、間違ったレコードが更新されたり、制御されていないループによってパフォーマンスの問題が発生したりします。 IP 挿入で実行されているビジネスルールは、その最初の挿入時に NIC を介して CI にドット連結することはできません。 これをテストする これは、[スクリプト - バックグラウンド] ページからアドミンユーザーとしてグローバルスコープで実行できます。 ビジネスルール、ログ、およびSQLを有効にしたセッションデバッグでは、すべてのデータベース操作と、ビジネスルールエンジンがこれらの操作に関与しているかどうかを確認できます。 IRE API デバッグをオンにして glide.cmdb.logger.source.identification_engine=info,warn,error,debug,debugVerbose プロパティを追加すると、セッションデバッグでインラインで IRE ペイロード処理のさまざまなステップを確認できます。注意:ログがスパム送信され、最終的にインスタンスのパフォーマンスに影響を与えるため、後でそのプロパティを削除することを忘れないでください。 var payload = {"items" : [ {"className" : "cmdb_ci_win_server","values" : {"sys_class_name" : "cmdb_ci_win_server","serial_number" : "KB1284595 Test Server","ip_address" : "10.229.13.28","name" : "CS6476368 TEST2 Server"}},{"className" : "cmdb_ci_ip_address","values" : {"ip_version" : "4","install_status" : "1","netmask" : "255.255.255.0","ip_address" : "10.0.0.1","sys_class_name" : "cmdb_ci_ip_address"}}, {"className" : "cmdb_ci_network_adapter","values" : {"dhcp_enabled" : "False","install_status" : "1","netmask" : "255.255.255.0","mac_address" : "00:aa:bb:cc:dd:ee","name" : "KB1284595 Test NIC","ip_address" : "10.0.0.1","ip_default_gateway" : "10.0.0.254","sys_class_name" : "cmdb_ci_network_adapter"}} ],"relations" : [ {"type" : "Owns::Owned by","child" : 2,"parent" : 0}, {"type" : "Owns::Owned by","child" : 1,"parent" : 2}, {"type" : "Owns::Owned by","child" : 1,"parent" : 0} ],"references" : [ {"referenceField" : "cmdb_ci","referenceDirection" : "childToParent","child" : 2,"parent" : 0}, {"referenceField" : "nic","referenceDirection" : "childToParent","child" : 1,"parent" : 2} ],"mainCiType" : "cmdb_ci_win_server"};var input = JSON.stringify((payload));var output = sn_cmdb.IdentificationEngine.createOrUpdateCIEnhanced('ServiceNow', input, {});gs.info(JSON.stringify(JSON.parse(output), null, 2));