検出デバイスの IP アドレスIssue 検出の一環として、構成アイテム (CI) の IP アドレスが更新されることがあります。この KB では、このような IP アドレスを更新するために検出ロジックが従う手順を中心に説明します。 注意: この記事は、検出された CI のフィールド ip_address (cmdb_ci_computer.ip_address など) に焦点を絞っています。CI が検出されると、その CI に対して検出された IP アドレスがテーブル cmdb_ci_ip_address にも入力されます。 検出された CI IP アドレス CI の IP アドレスは、検出の識別フェーズ中に設定されます。 プローブ/センサー: 識別フェーズでは、cidata と呼ばれるペイロードが識別および調整エンジン (IRE) に渡されます。IRE はこのような cidata を使用して CI を作成/更新します。 cidata 内の ip_address が現在 CI に設定されている IP アドレスと異なる場合、CI の IP アドレスが更新されます。 cidata 内の IP アドレスは、CI の検出に使用されている IP アドレスと同じです。 ほとんどの場合、検出のたびに IP アドレスが変更されることは望ましくありません。したがって、検出では、ペイロードが IRE に渡される前に、ペイロードから ip_address を削除するかどうかが判断されます。ペイロードから ip_address を削除すると、CI の IP アドレスは更新されません。 スクリプトインクルード DiscoveryJSONIDSensor では、関数 processIPAddressField(ciRecord) を使用して、次の手順を実行します。 識別エンジンで一致する CI が検出されていましたか? いいえ:今回初めてデバイスが検出されました。cidata の IP アドレスを使用しますはい:続行します 既存の CI に IP アドレスはありますか? いいえ:CI の更新に cidata の IP アドレスを使用しますはい:続行します CI の現在の IP アドレスは cidata の IP アドレスと一致していますか? いいえ:続行しますはい:cidata から IP を削除する必要はありません。CI が IP アドレスを保持します この時点で、CI の現在の IP アドレスと一致しない IP アドレスが cidata にあります。この IP アドレスを cidata に残すと、CI の IP アドレスが更新/反転されます。識別フェーズでは、ネットワークアダプターも収集されます。つまり、CI の現在の IP アドレスは、ネットワークカードで検出された IP アドレスの 1 つでしょうか? はい:これはまだ有効な IP アドレスのため、保持しておきます。そのため、CI の現在の IP アドレスが不必要に更新されないように、cidata IP アドレスをクリアしておきます。いいえ:CI レコードに無効になった IP アドレスがあります。CI レコードが更新されるように、cidata 内で IP アドレスを保持してください パターン: パターンでは DiscoveryJSONIDSensor を使用しません。CI の ip_address は、パターン内のロジックに従って設定されます。各パターンには、$<class_name>[].ip_address が設定されるステップがあります。ステップをパターンに追加またはパターンから削除して、どの IP アドレスを使用するかを制御し、フィールド ip_address を更新できます。 Orlando パッチ 5 以前 パターンを介して検出された CI の ip_address は、フィールド ip_address に対して返された内容に従って更新されます。ip_address フィールドは、異なる IP アドレスを介して CI が検出されるたびに更新されます。この PRB1343838 での反転を防ぐために、水平検出センサーにロジックが追加されました。 Orlando パッチ 5 以降 関数 preventFlappingAttributeOnParentClassReturnIreTime() が検出センサー (PRB1343838) に追加されました。この関数は ip_address フィールドが CI で既に入力されているかどうかをチェックし、入力されている場合は更新しません。ただし、既に入力されている場合、IP アドレスフィールドはまったく変更されなくなります。IP アドレスフィールドは手動で更新する必要があり、CI に更新された値が維持されます (検出によって更新されなくなります)。Rome では PRB1443223 がこれを修正します。 Rome PRB1443223 により、CI の現在の IP アドレスがまだ検出されているかどうかを確認するロジックが追加されました。検出されていない場合は、CI に対して検出された新しい IP アドレスに置き換えられます。プローブでの処理と同じです。 検出後: CI の検出が完了すると、discovery.device.complete イベントが作成されます。このイベントに応答するスクリプトアクションが、スクリプトインクルード IPAddressFixup を呼び出します。IPAddressFixup は、次のプロパティによってコントロールされます。 glide.discovery.enforce_ip_syncglide.discovery.exclude_ip_sync_classesglide.discovery.enforce_unique_ips 注意: 検出後、プローブとパターンベースディスカバリーの両方で ip_address フィールドを更新できます。 ディスカバリーのプロパティ glide.discovery.enforce_ip_sync: CI レコード内で検出された IP アドレスがデバイス上の NIC のアドレスと一致しない場合、システムによるその IP アドレスの使用を防ぎます。このプロパティが true の場合、返された IP アドレスをディスカバリーがチェックし、デバイスの NIC に関連付けられているかどうかを判断します。アドレスが NIC に関連付けられていない場合、ディスカバリーはいずれかの NIC の IP アドレスを代わりに使用します。使用される IP アドレスは CI に属する IP アドレスのリストで最初に見つかったものであり、IP アドレスは ip_address 列順に並べられます。 glide.discovery.exclude_ip_sync_classes: ディスカバリーによって返されたアドレスがデバイスの NIC のいずれかと一致しない場合、IP アドレスを置き換えない CI クラスを定義します。複数のクラスを定義するには、カンマ区切りリストを使用します。デフォルトでは、ロードバランサーのいずれかの NIC の IP アドレスを代替するのではなく、CI レコード内のディスカバリーによって返されるロードバランサーの管理 IP が使用されます。 glide.discovery.enforce_unique_ips: コンピューター、プリンター、またはネットワーク機器が検出され、そのデバイスに有効な IP アドレスがある場合、IP アドレスフィールドに同じ IP アドレスを持つ他のデバイスが消去されます。 問題 検出完了後に「システム」アカウントによって CI IP アドレスフィールドが更新される これは通常、システムプロパティ glide.discovery.enforce_ip_sync が true に設定されていることが原因です。これにより、IP アドレスを更新するスクリプトインクルード IPAddressFixup のコードがトリガーされます。glide.discovery.enforce_ip_sync を false に設定すると、この動作は停止します。または、CI クラスをシステムプロパティ glide.discovery.exclude_ip_sync_classes に追加することもできます。 [IP アドレス] フィールドが、プローブからパターンへの移行後にディスカバリーが実行されるたびに更新される これは、Orlando パッチ 5 以前のバージョンで想定されている動作です。event discovery.device.complete によってトリガーされるカスタムスクリプトアクションを実装すると、IP アドレスの更新方法に関するカスタムロジックを追加したり、sa_pattern_prepost_script でそのようなアクションを実行したりすることができます。 プローブからパターンへの移行後、[IP アドレス] フィールドがディスカバリーによって更新されなくなる Orlando パッチ 5 以降、ip_address フィールドが空でなければこのフィールドは更新されなくなりました。CI の ip_address フィールドを空にして再検出すれば、ディスカバリーによってそのフィールドに値を入力することができます。あるいは、カスタムスクリプトアクションまたは sa_pattern_prepost_script でそのようなアクションを実行することもできます。システムプロパティ glide.discovery.enforce_ip_sync により、IP アドレスが「有効/現在」の値に更新されます。このプロパティについては、このドキュメントの前の部分で説明しています。この問題は、PRB1443223 によって Rome で修正されています。