(この記事はネットワーク自動化 Advent Calendar 2019 13日目として書いています)
pyATS/Genie のインストール方法を以前ブログに書いたが、新しいインストール方法のオプションや注意点があるので、それを今回紹介します。
目次
従来のインストール方法
pyATSのみ
(pyats)$ pip install pyats
pyATS + Genie
(pyats)$ pip install pyats genie
OR
(pyats)$ pip install genie
Genie は pyATS に依存しているため、genie をインストールする場合には pyATS もインストールされるため、pyats は指定しなくても良い。
pyATS + Genie + Robot
(pyats)$ pip install pyats genie genie.libs.robot
OR
(pyats)$ pip install genie genie.libs.robot
イマドキなインストール方法
pip install 時に [] で指定することによりインストールするパッケージ群を指定できるようになりました。
pip install pyats
コアフレームワークだけのインストール。pyATS と Unicon のみ。
(pyats)$ pip install pyats
(snip)
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
pyats 19.11
pyats.aereport 19.11
pyats.aetest 19.11
pyats.async 19.11
pyats.connections 19.11
pyats.datastructures 19.11
pyats.easypy 19.11.1
pyats.kleenex 19.11
pyats.log 19.11
pyats.reporter 19.11
pyats.results 19.11
pyats.tcl 19.11
pyats.topology 19.11
pyats.utils 19.11
unicon 19.11
unicon.plugins 19.11.1
pip install pyats[library]
pyATS + Unicon + Genie (でも genie.libs.robot は含まれない)
(pyats)$ pip install pyats[library]
(snip)
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
genie 19.11
genie.abstract 19.11
genie.conf 19.11
genie.harness 19.11
genie.libs.conf 19.11
genie.libs.filetransferutils 19.11
genie.libs.ops 19.11
genie.libs.parser 19.11
genie.libs.sdk 19.11
genie.libs.telemetry 19.11
genie.metaparser 19.11
genie.ops 19.11
genie.parsergen 19.11
genie.predcore 19.11
genie.telemetry 19.11
genie.trafficgen 19.11
genie.utils 19.11
pyats 19.11
pyats.aereport 19.11
pyats.aetest 19.11
pyats.async 19.11
pyats.connections 19.11
pyats.datastructures 19.11
pyats.easypy 19.11.1
pyats.kleenex 19.11
pyats.log 19.11
pyats.reporter 19.11
pyats.results 19.11
pyats.tcl 19.11
pyats.topology 19.11
pyats.utils 19.11
unicon 19.11
unicon.plugins 19.11.1
NOTE: [] はシェルの環境によってはエスケープするかパッケージ名をクォーツで囲む必要がある場合があります
(pyats)$ pip install pyats\[library\]
OR
(pyats)$ pip install 'pyats[library]'
pip install pyats[robot]
pyATS + Robot Framework。Genie はインストールされないので注意。
(pyats)$ pip install pyats[robot]
(snip)
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
genie.libs.robot 19.11
pyats 19.11
pyats.aereport 19.11
pyats.aetest 19.11
pyats.async 19.11
pyats.connections 19.11
pyats.datastructures 19.11
pyats.easypy 19.11.1
pyats.kleenex 19.11
pyats.log 19.11
pyats.reporter 19.11
pyats.results 19.11
pyats.robot 19.11
pyats.tcl 19.11
pyats.topology 19.11
pyats.utils 19.11
unicon 19.11
unicon.plugins 19.11.1
pip install pyats[full]
pyATS + Genie + Robot Framework。Genie も使うならこれ。
ただし、REST(rest.connector) や Netconf(yang.connector) を使うコネクタは含まれない。
(pyats)$ pip install pyats[full]
(snip)
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
genie 19.11
genie.abstract 19.11
genie.conf 19.11
genie.harness 19.11
genie.libs.conf 19.11
genie.libs.filetransferutils 19.11
genie.libs.ops 19.11
genie.libs.parser 19.11
genie.libs.robot 19.11
genie.libs.sdk 19.11
genie.libs.telemetry 19.11
genie.metaparser 19.11
genie.ops 19.11
genie.parsergen 19.11
genie.predcore 19.11
genie.telemetry 19.11
genie.trafficgen 19.11
genie.utils 19.11
pyats 19.11
pyats.aereport 19.11
pyats.aetest 19.11
pyats.async 19.11
pyats.connections 19.11
pyats.datastructures 19.11
pyats.easypy 19.11.1
pyats.kleenex 19.11
pyats.log 19.11
pyats.reporter 19.11
pyats.results 19.11
pyats.robot 19.11
pyats.tcl 19.11
pyats.topology 19.11
pyats.utils 19.11
unicon 19.11
unicon.plugins 19.11.1
本当の全部入りはコレだ!(個人的オススメ)
REST も使いたいし、Netconf も pyATS/Genie でやりたい!という方がパッケージ漏れがないようにするには、下記が全部入りです。
(pyats)$ pip install pyats[full] rest.connector yang.connector
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
genie 19.11
genie.abstract 19.11
genie.conf 19.11
genie.harness 19.11
genie.libs.conf 19.11
genie.libs.filetransferutils 19.11
genie.libs.ops 19.11
genie.libs.parser 19.11
genie.libs.robot 19.11
genie.libs.sdk 19.11
genie.libs.telemetry 19.11
genie.metaparser 19.11
genie.ops 19.11
genie.parsergen 19.11
genie.predcore 19.11
genie.telemetry 19.11
genie.trafficgen 19.11
genie.utils 19.11
pyats 19.11
pyats.aereport 19.11
pyats.aetest 19.11
pyats.async 19.11
pyats.connections 19.11
pyats.datastructures 19.11
pyats.easypy 19.11.1
pyats.kleenex 19.11
pyats.log 19.11
pyats.reporter 19.11
pyats.results 19.11
pyats.robot 19.11
pyats.tcl 19.11
pyats.topology 19.11
pyats.utils 19.11
rest.connector 19.8.1
unicon 19.11
unicon.plugins 19.11.1
yang.connector 19.7
pyATS/Genie は毎月リリース
現在 pyATS/Genie パッケージはマンスリーリリースになっており、バージョンからいつリリースされたかが分かるようなっています。
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
genie 19.11
genie.abstract 19.11
genie.conf 19.11
(snip)
19.11 は 19 -> 2019 年、11 -> 11月となっており、月末リリースとなるため、
本日12 月7日(執筆時)ですが、11月末にリリースされた 19.11 が最新となります。
そのため、毎月全てのパッケージのバージョンが上がります。19.9 -> 19.10 -> 19.11 -> 19.12。但し例外もあり、rest.connector や yang.connector などは変更があった場合のみのバージョンアップとなっています。そのため、genie.xxx, pyats.xxx, unicon.xxx が原則バージョン番号が毎月上がると覚えておくといいかと思います。
pyats version : 最新バージョンの確認
pyats version コマンドで現在のバージョンと最新バージョンを確認できます。
最新バージョンを確認するには –outdated オプションを付け、genie/unicon/rest.connector/yang.connectorもチェックするように–includeも追加。(defaultだとpyats.xxxしかチェックされない)
(pyats)$ pyats version --outdated --include genie unicon rest yang
You are currently running pyATS version: 19.10
Python: 3.7.3 [64bit]
Checking for outdated packages...
Package Version Latest
---------------------------- ------- -------
genie 19.10 19.11
genie.abstract 19.10 19.11
genie.conf 19.10 19.11
genie.harness 19.10 19.11
genie.libs.conf 19.10 19.11
genie.libs.filetransferutils 19.10 19.11
genie.libs.ops 19.10.1 19.11
genie.libs.parser 19.10 19.11
genie.libs.robot 19.10 19.11
genie.libs.sdk 19.10 19.11
genie.libs.telemetry 19.10 19.11
genie.metaparser 19.10 19.11
genie.ops 19.10.1 19.11
genie.parsergen 19.10 19.11
genie.predcore 19.10 19.11
genie.telemetry 19.10 19.11
genie.trafficgen 19.10 19.11
genie.utils 19.10 19.11
pyats 19.10 19.11
pyats.aereport 19.10 19.11
pyats.aetest 19.10.2 19.11
pyats.async 19.10 19.11
pyats.connections 19.10 19.11
pyats.datastructures 19.10 19.11
pyats.easypy 19.10.1 19.11.1
pyats.kleenex 19.10 19.11
pyats.log 19.10.1 19.11
pyats.reporter 19.10.1 19.11
pyats.results 19.10 19.11
pyats.robot 19.10 19.11
pyats.tcl 19.10 19.11
pyats.topology 19.10 19.11
pyats.utils 19.10 19.11
rest.connector 19.8.1
unicon 19.10 19.11
yang.connector 19.7
Note - you can upgrade outdated packages with:
pip install --upgrade genie genie.abstract genie.conf
pip install --upgrade genie.harness genie.libs.conf genie.libs.filetransferutils
pip install --upgrade genie.libs.ops genie.libs.parser genie.libs.robot
pip install --upgrade genie.libs.sdk genie.libs.telemetry genie.metaparser
pip install --upgrade genie.ops genie.parsergen genie.predcore
pip install --upgrade genie.telemetry genie.trafficgen genie.utils
pip install --upgrade pyats pyats.aereport pyats.aetest
pip install --upgrade pyats.async pyats.connections pyats.datastructures
pip install --upgrade pyats.easypy pyats.kleenex pyats.log
pip install --upgrade pyats.reporter pyats.results pyats.robot
pip install --upgrade pyats.tcl pyats.topology pyats.utils
pip install --upgrade unicon
上記は現在使っているバージョンが 19.10 場合の例。最新バージョンとして latest の項目に 19.11 と表示され、最後には Note としてどうやって最新バージョンへアップグレードするかの方法が記載されています。
しかし、上記の提案は特定のモジュールのみが古いことを想定しているため、個別のパッケージをそれぞれ指定してアップグレードする形になっています。が、この方法が手間はかかりますが、確実な方法ではあります。
重要: Unicon v19.10 -> v19.11 要再インストール
Unicon は v19.11 でプラグインがオープンソースになり、unicon/unicon.plugins という2つのパッケージに分割されました。その分割が pip の不具合と思われる状況にヒットしてしまい、正常にインストールされません。
(pyats)$ pyats version --outdated --include genie unicon rest yang
Traceback (most recent call last):
File "/Users/ccieojisan/.pyenv/versions/pyats6/bin/pyats", line 8, in <module>
sys.exit(main())
File "src/pyats/cli/__main__.py", line 29, in pyats.cli.__main__.main
File "src/pyats/cli/core.py", line 38, in pyats.cli.core.CLI.__init__
File "src/pyats/cli/core.py", line 79, in pyats.cli.core.CLI.load_commands
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2411, in load
return self.resolve()
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2417, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "src/genie/cli/commands/diff.py", line 18, in init genie.cli.commands.diff
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/genie/conf/__init__.py", line 19, in <module>
from .main import Genie
File "src/genie/conf/main.py", line 4, in init genie.conf.main
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/genie/conf/base/__init__.py", line 4, in <module>
from .device import Device
File "src/genie/conf/base/device.py", line 11, in init genie.conf.base.device
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/genie/libs/parser/__init__.py", line 16, in <module>
from .base import tcl_invoke_ats_cmd,\
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/genie/libs/parser/base.py", line 17, in <module>
from genie.metaparser import MetaParser
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/genie/metaparser/__init__.py", line 7, in <module>
from ._metaparser import *
File "src/genie/metaparser/_metaparser.py", line 11, in init genie.metaparser._metaparser
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/unicon/__init__.py", line 10, in <module>
from unicon.core.pluginmanager import PluginManager
File "src/unicon/core/pluginmanager.py", line 18, in init unicon.core.pluginmanager
ImportError: cannot import name supported_chassis
そのため、下記 uninstall & install が必要となります。
(pyats)$ pip uninstall unicon unicon.plugins -y
(pyats)$ pip install unicon
Unicon を再インストールしたら、全て最新になり最後に “All your packages are up to date!” と表示されていたら全て最新になっている状態です。
(pyats)$ pyats version --outdated --include genie unicon rest yang
You are currently running pyATS version: 19.11
Python: 3.7.3 [64bit]
Checking for outdated packages...
Package Version Latest
---------------------------- ------- ------
genie 19.11
genie.abstract 19.11
genie.conf 19.11
genie.harness 19.11
genie.libs.conf 19.11
genie.libs.filetransferutils 19.11
genie.libs.ops 19.11
genie.libs.parser 19.11
genie.libs.robot 19.11
genie.libs.sdk 19.11
genie.libs.telemetry 19.11
genie.metaparser 19.11
genie.ops 19.11
genie.parsergen 19.11
genie.predcore 19.11
genie.telemetry 19.11
genie.trafficgen 19.11
genie.utils 19.11
pyats 19.11
pyats.aereport 19.11
pyats.aetest 19.11
pyats.async 19.11
pyats.connections 19.11
pyats.datastructures 19.11
pyats.easypy 19.11.1
pyats.kleenex 19.11
pyats.log 19.11
pyats.reporter 19.11
pyats.results 19.11
pyats.robot 19.11
pyats.tcl 19.11
pyats.topology 19.11
pyats.utils 19.11
rest.connector 19.8.1
unicon 19.11
unicon.plugins 19.11.1
yang.connector 19.7
All your packages are up to date!
推奨は全て同じバージョン&最新
pyATS/Genie は毎月リリースで新機能も追加されています。そのため、最新と過去のバージョンが混在すると正常に動作しない場合があります。そのため、推奨は全て同じバージョン&最新です。同じバージョンとは同じ月バージョンです。19.11.xx など。
余計なトラシューを避けるため混在バージョンでは動かない
例えば、現在 19.10 を使用しておりパーサーの不具合に遭遇して genie.libs.parser をアップグレードするとします。
(pyats)$ pip install genie.libs.parser --upgrade
(snip)
Successfully installed genie.libs.parser-19.11
すると genie.libs.parser のみ 19.11 になってしまいます。
(pyats)$ pip list | egrep 'ats|genie|unicon|rest|yang'
genie 19.10
genie.abstract 19.10
genie.conf 19.10
genie.harness 19.10
genie.libs.conf 19.10
genie.libs.filetransferutils 19.10
genie.libs.ops 19.10.1
genie.libs.parser 19.11
genie.libs.robot 19.10
genie.libs.sdk 19.10
genie.libs.telemetry 19.10
genie.metaparser 19.10
genie.ops 19.10.1
genie.parsergen 19.10
genie.predcore 19.10
genie.telemetry 19.10
genie.trafficgen 19.10
genie.utils 19.10
pyats 19.10
pyats.aereport 19.10
pyats.aetest 19.10.2
pyats.async 19.10
pyats.connections 19.10
pyats.datastructures 19.10
pyats.easypy 19.10.1
pyats.kleenex 19.10
pyats.log 19.10.1
pyats.reporter 19.10.1
pyats.results 19.10
pyats.robot 19.10
pyats.tcl 19.10
pyats.topology 19.10
pyats.utils 19.10
rest.connector 19.8.1
unicon 19.10
yang.connector 19.7
この状態ではバージョンチェックが失敗する結果になり正常に動きません。
(pyats)$ genie shell --testbed-file tb.yaml
Traceback (most recent call last):
File "/Users/ccieojisan/.pyenv/versions/pyats6/bin/genie", line 8, in <module>
sys.exit(main())
File "src/genie/cli/__main__.py", line 31, in genie.cli.__main__.main
File "src/pyats/cli/core.py", line 38, in pyats.cli.core.CLI.__init__
File "src/pyats/cli/core.py", line 99, in genexpr
File "src/pyats/cli/core.py", line 99, in genexpr
File "src/pyats/cli/base.py", line 313, in pyats.cli.base.CommandWithSubcommands.__init__
File "src/pyats/cli/base.py", line 317, in pyats.cli.base.CommandWithSubcommands.load_subcmds
File "src/pyats/cli/base.py", line 121, in pyats.cli.base._BaseCommand.load_subcmds
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2410, in load
self.require(*args, **kwargs)
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2433, in require
items = working_set.resolve(reqs, env, installer, extras=self.extras)
File "/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages/pkg_resources/__init__.py", line 791, in resolve
raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.VersionConflict: (genie.libs.parser 19.11 (/Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages), Requirement.parse('genie.libs.parser<19.11.0,>=19.10.0'))
そのため、特定のパッケージのバージョンアップでメジャーリリース番号(月番号)が混在する状態になった場合には、下記コマンドで全体をアップグレードするようにしてください。
(pyats)$ pip install 'pyats[full]' --upgrade
おまけ: ベータパッケージ
GitHub Issues で不具合報告され臨時で修正した不具合などは月末のリリース前にベータパッケージとしてリリースされていたりします。
pipy のパッケージの画面に行きます。この場合は genie.libs.parser。左側の “Release history” をクリックします。
すると末尾に b<番号> が付いたパッケージがリリースされているのが見えます。これがベータパッケージです。
これは通常の pip install –upgrade ではインストールされず、–pre を追加で付ける必要があります。
(pyats)$ pip install genie.libs.parser --upgrade --pre
Collecting genie.libs.parser
Downloading https://files.pythonhosted.org/packages/27/5c/13271bda161500da3780156703de79bff99d4a56de42dce83c1e56fe5651/genie.libs.parser-19.11.1b2-py3-none-any.whl (2.4MB)
|████████████████████████████████| 2.4MB 438kB/s
Requirement already satisfied, skipping upgrade: xmltodict in /Users/ccieojisan/.pyenv/versions/3.7.3/envs/pyats6/lib/python3.7/site-packages (from genie.libs.parser) (0.12.0)
Installing collected packages: genie.libs.parser
Found existing installation: genie.libs.parser 19.11
Uninstalling genie.libs.parser-19.11:
Successfully uninstalled genie.libs.parser-19.11
Successfully installed genie.libs.parser-19.11.1b2
もし不具合っぽい動作に遭遇した場合にはベータパッケージがあるか確認、試すというのもいいかもしれません。
genie.libs.xxx は外部からの貢献や報告が多いパッケージとなり、比較的ベータパッケージを見ることが多いため、下記でベータに上げるコマンドとしてメモしてもいいかもしれません。
(pyats)$ pip install genie.libs.parser genie.libs.conf genie.libs.ops genie.libs.sdk --upgrade --pre
まとめ
- pip install pyats[xxx] でパッケージの組み合わせが指定できるようになった
- pip install pyats[full] rest.connector yang.connector が全部入り!
- pyATS/Genie は毎月末リリース
- pyats version で現在のバージョンと最新バージョンが確認できる(バージョンアップの手順も教えてくれる)
- 推奨は最新バージョンそして同じ月リリースの使用(異なる月のバージョン混在はエラーになります)
- v19.10 -> v19.11 の Unicon は正常にアップグレードできない。要再インストール
- ベータパッケージがリリースされていたりするので、不具合時にはベータパッケージを試してみるというのもあり
pyATS/Genie では python パッケージがたくさんある(分割されている)ので、チェックが少し大変ですが、上のような pyats version などのツールや推奨バージョンの使用などを理解していれば、特に問題になることはないかと思います。