netmiko使用時のtextFSM参照に関して
いつもお世話になっております。
LibraryでPythonのnetmikoを使用して、実行結果をtextFSMでパースしたいのですが、
下記のようなエラーが表示されます。
LinuxにPythonをインストールして動かしており、そのLinuxの環境変数のNET_TEXTFSMの指定した場所にtextfsmファイルは配置してあります。
TextFSM のファイルまたは環境変数をLibraryが認識できない原因を教えていただければと思います。
'show_users' failed: ValueError: Directory containing TextFSM index file not found.
-
正式なコメント
弊社側でも確認してみますので、どのような手順で netmiko や textFSM をインストールされたのか、具体的なコマンドレベルでご教示いただけますでしょうか?
コメントアクション -
環境変数 NET_TEXTFSM はどのように指定しましたでしょうか?
Kompira の Library オブジェクトで定義した関数は、Kompira エンジンプロセスの実行時の環境変数を引き継ぎますので、通常は、NET_TEXTFSM は未定義の状態になるかと思います。
Libraryオブジェクトの関数の中で、呼び出された直後に、os.environ にで明示的に環境変数をセットする必要があるかと思います。
なお、Kompira から netmiko を利用したNW機器設定の自動化については、
https://support.kompira.jp/column/use_netmiko/
のコラムが参考になるかと思います。
-
os.environでセットしましたが、やはりエラーが出てしまいました。
Librayのコードを共有しますので原因を教えていただければと思います。
(セキュリティ上非公開の部分は~になっています。)from netmiko import Netmiko
import os
def main():
#ログイン・コマンドの投入
result = execute()
return result
def execute():
os.environ["NET_TEXTFSM"] = "/~/~/cisco_nxos_show_interface.textfsm"
remoteDevice = {
"username" : "~",
"password" : "~",
"ip" : "~",
"port" : ~,
"device_type" : "cisco_nxos",
'auth_timeout': 60
}
#機器への接続
connection = Netmiko(**remoteDevice)
#コマンドの実行
output = "#show interface \n"
output += connection.send_command("show interface",use_textfsm=True)
#切断
connection.disconnect()
return outputエラーメッセージは
ValueError: Directory containing TextFSM index file not found.
以上よろしくお願いいたします。
-
ご確認ありがとうございます。
以下の結果が表示されましたので、内容は正しく取得できているかと思われます。Value Required INTERFACE (\S+) Value LINK_STATUS (.+?) Value ADMIN_STATE (.+?) Value HARDWARE_TYPE (.*) Value ADDRESS ([a-zA-Z0-9]+.[a-zA-Z0-9]+.[a-zA-Z0-9]+) Value BIA ([a-zA-Z0-9]+.[a-zA-Z0-9]+.[a-zA-Z0-9]+) Value DESCRIPTION (.*) Value IP_ADDRESS (\d+\.\d+\.\d+\.\d+\/\d+) Value MTU (\d+) Value MODE (\S+) Value DUPLEX (.+duplex?) Value SPEED (.+?) Value INPUT_PACKETS (\d+) Value OUTPUT_PACKETS (\d+) Value INPUT_ERRORS (\d+) Value OUTPUT_ERRORS (\d+) Value BANDWIDTH (\d+\s+\w+) Value DELAY (\d+\s+\w+) Value ENCAPSULATION (\w+) Value LAST_LINK_FLAPPED (.+?) Start ^\S+\s+is.+ -> Continue.Record ^${INTERFACE}\s+is\s+${LINK_STATUS},\sline\sprotocol\sis\s${ADMIN_STATE}$$ ^${INTERFACE}\s+is\s+${LINK_STATUS}$$ ^admin\s+state\s+is\s+${ADMIN_STATE}, ^\s+Hardware(:|\s+is)\s+${HARDWARE_TYPE},\s+address(:|\s+is)\s+${ADDRESS}(.*bia\s+${BIA})* ^\s+Description:\s+${DESCRIPTION} ^\s+Internet\s+Address\s+is\s+${IP_ADDRESS} ^\s+Port\s+mode\s+is\s+${MODE} ^\s+${DUPLEX}, ${SPEED}(,|$$) ^\s+MTU\s+${MTU}.*BW\s+${BANDWIDTH}.*DLY\s+${DELAY} ^\s+Encapsulation\s+${ENCAPSULATION} ^\s+${INPUT_PACKETS}\s+input\s+packets\s+\d+\s+bytes\s*$$ ^\s+${INPUT_ERRORS}\s+input\s+error\s+\d+\s+short\s+frame\s+\d+\s+overrun\s+\d+\s+underrun\s+\d+\s+ignored\s*$$ ^\s+${OUTPUT_PACKETS}\s+output\s+packets\s+\d+\s+bytes\s*$$ ^\s+${OUTPUT_ERRORS}\s+output\s+error\s+\d+\s+collision\s+\d+\s+deferred\s+\d+\s+late\s+collision\s*$$ ^\s+Last\s+link\s+flapped\s+${LAST_LINK_FLAPPED}\s*$$ -
弊社側であらためて以下の手順で再度確認してみたところ、問題無く取得できましたので、御社の環境でも同じて手順で実施して上手くいくかどうか試してみていただけますでしょうか?
(1) KEにrootユーザでSSHログインして、/tmp に ntc-templates をgit クローンする
# cd /tmp
# git clone https://github.com/networktocode/ntc-templates(2) 以下のライブラリオブジェクトを /root/net という名前で作成する(ユーザ名とパスワード、IPアドレスは適宜置き換えてください)
from netmiko import Netmiko
import os
def execute():
os.environ["NET_TEXTFSM"] = "/tmp/ntc-templates/ntc_templates/templates"
remoteDevice = {
"username" : "<ユーザ名>",
"password" : "<パスワード>",
"ip" : "<IPアドレス>",
"port" : 22,
"device_type" : "cisco_nxos",
'auth_timeout': 60
}
#機器への接続
connection = Netmiko(**remoteDevice)
#コマンドの実行
output = "{host}#show interface \n"
ret = connection.send_command("show interface", use_textfsm=True)
#切断
connection.disconnect()
return ret(3) netオブジェクトと同じディレクトリの場所に、以下のジョブフロー(/root/job)を作成する
[./net.execute] ->
[result = $RESULT] ->
print(result) ->
return(result)(4) (3)で作成したジョブフロー(/root/job) を実行する
以下のような結果がコンソールに出力されました
[{'interface': 'BRI0', 'link_status': 'administratively down', 'admin_state': ...
サインインしてコメントを残してください。
コメント
16件のコメント