問題の概要
ロードされていない NED を使用しているデバイスがコンフィグ内に存在する場合、エラーが発生し NSO は起動できません。これは、例えば以下のようなシナリオで発生します。
1.環境 A では以下のデバイスが登録されていて、必要な NED もロードされています。
admin@ncs# show devices list NAME ADDRESS DESCRIPTION NED ID ADMIN STATE ------------------------------------------------------- device0 127.0.0.1 - cisco-ios unlocked device1 127.0.0.1 - cisco-nx unlocked
admin@ncs# show packages | display-level 1 packages package cisco-ios packages package cisco-nx |
2.環境 A の CDB ファイルを新しい環境 B にコピーして NSO を起動します。ただし、環境 B に cisco-nx NED がロードされていない場合、以下のようなエラーが発生して NSO は起動できません。
#ncs CDB: Upgrade failed: Upgrade transaction failed to validate: /ncs:devices/device{device1}/device-type/cli/ned-id is not configured
|
3.ただし、上記のエラーでは NED のタイプが不明なため、どの NED を環境 B にロードすれば良いのか分かりません。
本ドキュメントではこのような状況で問題の NED タイプを調べる方法について記載します。
devel.log で確認する
devel.log のログレベルを info 以上に設定すれば以下のようなログが出力されますので NED タイプを確認することができます。
devel.log の設定に関しては man ncs.conf を参照してください。
ncs --cdb-debug-dump で確認する
ncs --cdb-debug-dump <CDB directory> コマンドで CDB の内容を確認することができますので、この出力から NED タイプを確認することができます。
#ncs --cdb-debug-dump ncs-cdb | grep device1 | grep ned-id /ncs:devices/device{device1}/'device-type'/cli/'ned-id' = {44,{1850480213,1488855246}}, #ncs --cdb-debug-dump ncs-cdb | grep 1850480213 1850480213 http://tail-f.com/ned/cisco-nx-id /ncs:devices/device{device1}/'device-type'/cli/'ned-id' = {44,{1850480213,1488855246}}, |
(Optional) 対象のデバイスを削除する
もし必要な NED が手元に無い場合、問題となっているデバイスの設定を CDB から削除することで NSO を起動することも可能です。
#ncs --start-phase0 #ncs_load -Fp -P "/ncs:devices/device/name[not (../device-type/netconf or ../device-type/*/ned-id!='')]" \ > | sed 's/<device>/<device nc:operation="delete" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">/' \ > | ncs_load -lmi #ncs --start-phase1 #ncs --start-phase2 #ncs_cli -u admin -C admin@ncs# admin@ncs# show devices list NAME ADDRESS DESCRIPTION NED ID ADMIN STATE ------------------------------------------------------- device0 127.0.0.1 - cisco-ios unlocked |
ncs_load コマンドについては man ncs_load を参照してください。上記の例では device-type が netconf 以外で ned-id が設定されていない device を検索して削除しています。