Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

Juniper Junos を Junos PyEZ (Python)から操作する!

こんにちは、鯨井貴博@opensourcetechです。

 

今回は、Juniper Junos を Python + そのモジュールであるJunos PyEZ APIを使用して操作してみます。

 

[はじめに]

Junos PyEZとは?

www.juniper.net

 

なお、Junos PyEZをインストールする環境ですが、CentOS6.9へ行いました。

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)

 

(注意)

CentOS6.9でデフォルトでインストールされるPythonがバージョン2.6となる為、

Python実施時には「DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of PyEZ will drop support for Python 2.6」という繰り返し出力されますが、

 

以下のリンクにあるように2017/3/19をもって、

PythonコアチームによってPython2.6のサポートが終了したとの旨を示しています。

※なので、Python2.7以上の環境でやったほうがいいかもしれません。

https://github.com/pypa/pip/pull/4343

https://github.com/overviewer/Minecraft-Overviewer/issues/1372

 

なおJunos PyEZは、Python2.6にも対応しています。

f:id:opensourcetech:20170908151450p:plain

http://www.juniper.net/documentation/en_US/junos-pyez/information-products/pathway-pages/junos-pyez-developer-guide.pdf

 

 

 [Junos PyEZ のソースコード]

githubにいます。

github.com

 

 [Junos PyEZ の依存関係]

以下にあるように、pip / python-devel / libxml2-devel / libxslt-devel / gcc/ openssl / libffi-develが必要です。

f:id:opensourcetech:20170908163343p:plain

Installing Junos PyEZ - Technical Documentation - Support - Juniper Networks

 py-junos-eznc/INSTALL-FEDORA-CENTOS.md at master · Juniper/py-junos-eznc · GitHub

 

[Junos PyEZ 環境構築]

python-devel のインストール

[root@localhost ~]# rpm -q python-pip python-devel
パッケージ python-pip はインストールされていません。
パッケージ python-devel はインストールされていません。
[root@localhost ~]# yum install python-pip python-devel
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Determining fastest mirrors
* base: www.ftp.ne.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
base | 3.7 kB 00:00
extras | 3.4 kB 00:01
updates | 3.4 kB 00:00
updates/primary_db | 3.1 MB 00:24
パッケージ python-pip は利用できません。
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package python-devel.x86_64 0:2.6.6-66.el6_8 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

=========================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
=========================================================================================
インストールしています:
python-devel x86_64 2.6.6-66.el6_8 base 173 k

トランザクションの要約
=========================================================================================
インストール 1 パッケージ

総ダウンロード容量: 173 k
インストール済み容量: 456 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
python-devel-2.6.6-66.el6_8.x86_64.rpm | 173 kB 00:02
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
Package: centos-release-6-9.el6.12.3.x86_64 (@anaconda-CentOS-201703281317.x86_64/6.9)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
これでいいですか? [y/N]y
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています : python-devel-2.6.6-66.el6_8.x86_64 1/1
Verifying : python-devel-2.6.6-66.el6_8.x86_64 1/1

インストール:
python-devel.x86_64 0:2.6.6-66.el6_8

完了しました!

 

pip (python-pip) のインストール

[root@localhost ~]# wget https://bootstrap.pypa.io/get-pip.py -O - | python
--2017-09-07 16:33:36-- https://bootstrap.pypa.io/get-pip.py
bootstrap.pypa.io をDNSに問いあわせています... 151.101.0.175, 151.101.64.175, 151.101.128.175, ...
bootstrap.pypa.io|151.101.0.175|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1595408 (1.5M) [text/x-python]
`STDOUT' に保存中

100%[===============================================>] 1,595,408 556K/s 時間 2.8s

2017-09-07 16:33:39 (556 KB/s) - stdout へ出力完了 [1595408/1595408]

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
Collecting pip
/tmp/tmpwHbmVT/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
/tmp/tmpwHbmVT/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 582kB/s
Collecting setuptools
Downloading setuptools-36.4.0-py2.py3-none-any.whl (478kB)
100% |████████████████████████████████| 481kB 780kB/s
Collecting wheel
Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
100% |████████████████████████████████| 71kB 787kB/s
Collecting argparse; python_version == "2.6" (from wheel)
Downloading argparse-1.4.0-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, argparse, wheel
Found existing installation: argparse 1.2.1
Uninstalling argparse-1.2.1:
Successfully uninstalled argparse-1.2.1
Successfully installed argparse-1.4.0 pip-9.0.1 setuptools-36.4.0 wheel-0.29.0
/tmp/tmpwHbmVT/pip.zip/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.

 

 libxml2-devel libxslt-devel gcc openssl-devel libffi-devel redhat-rpm-config のインストール

[root@localhost ~]# rpm -q libxml2-devel libxslt-devel gcc openssl-devel libffi-devel redhat-rpm-config
パッケージ libxml2-devel はインストールされていません。
パッケージ libxslt-devel はインストールされていません。
gcc-4.4.7-18.el6.x86_64
パッケージ openssl-devel はインストールされていません。
パッケージ libffi-devel はインストールされていません。
redhat-rpm-config-9.0.3-51.el6.centos.noarch
[root@localhost ~]# yum install libxml2-devel libxslt-devel gcc openssl-devel libffi-devel redhat-rpm-config
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
パッケージ gcc-4.4.7-18.el6.x86_64 はインストール済みか最新バージョンです
パッケージ redhat-rpm-config-9.0.3-51.el6.centos.noarch はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package libffi-devel.x86_64 0:3.0.5-3.2.el6 will be インストール
---> Package libxml2-devel.x86_64 0:2.7.6-21.el6_8.1 will be インストール
--> 依存性の処理をしています: zlib-devel のパッケージ: libxml2-devel-2.7.6-21.el6_8.1.x86_64
---> Package libxslt-devel.x86_64 0:1.1.26-2.el6_3.1 will be インストール
--> 依存性の処理をしています: libgcrypt-devel のパッケージ: libxslt-devel-1.1.26-2.el6_3.1.x86_64
---> Package openssl-devel.x86_64 0:1.0.1e-57.el6 will be インストール
--> 依存性の処理をしています: krb5-devel のパッケージ: openssl-devel-1.0.1e-57.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package krb5-devel.x86_64 0:1.10.3-65.el6 will be インストール
--> 依存性の処理をしています: libselinux-devel のパッケージ: krb5-devel-1.10.3-65.el6.x86_64
--> 依存性の処理をしています: libcom_err-devel のパッケージ: krb5-devel-1.10.3-65.el6.x86_64
--> 依存性の処理をしています: keyutils-libs-devel のパッケージ: krb5-devel-1.10.3-65.el6.x86_64
---> Package libgcrypt-devel.x86_64 0:1.4.5-12.el6_8 will be インストール
--> 依存性の処理をしています: libgpg-error-devel のパッケージ: libgcrypt-devel-1.4.5-12.el6_8.x86_64
---> Package zlib-devel.x86_64 0:1.2.3-29.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package keyutils-libs-devel.x86_64 0:1.4-5.el6 will be インストール
---> Package libcom_err-devel.x86_64 0:1.41.12-23.el6 will be インストール
---> Package libgpg-error-devel.x86_64 0:1.7-4.el6 will be インストール
---> Package libselinux-devel.x86_64 0:2.0.94-7.el6 will be インストール
--> 依存性の処理をしています: libsepol-devel >= 2.0.32-1 のパッケージ: libselinux-devel-2.0.94-7.el6.x86_64
--> 依存性の処理をしています: pkgconfig(libsepol) のパッケージ: libselinux-devel-2.0.94-7.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package libsepol-devel.x86_64 0:2.0.41-4.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

=========================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
=========================================================================================
インストールしています:
libffi-devel x86_64 3.0.5-3.2.el6 base 18 k
libxml2-devel x86_64 2.7.6-21.el6_8.1 base 1.1 M
libxslt-devel x86_64 1.1.26-2.el6_3.1 base 561 k
openssl-devel x86_64 1.0.1e-57.el6 base 1.2 M
依存性関連でのインストールをします。:
keyutils-libs-devel x86_64 1.4-5.el6 base 29 k
krb5-devel x86_64 1.10.3-65.el6 base 504 k
libcom_err-devel x86_64 1.41.12-23.el6 base 33 k
libgcrypt-devel x86_64 1.4.5-12.el6_8 base 118 k
libgpg-error-devel x86_64 1.7-4.el6 base 14 k
libselinux-devel x86_64 2.0.94-7.el6 base 137 k
libsepol-devel x86_64 2.0.41-4.el6 base 64 k
zlib-devel x86_64 1.2.3-29.el6 base 44 k

トランザクションの要約
=========================================================================================
インストール 12 パッケージ

総ダウンロード容量: 3.7 M
インストール済み容量: 17 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
(1/12): keyutils-libs-devel-1.4-5.el6.x86_64.rpm | 29 kB 00:00
(2/12): krb5-devel-1.10.3-65.el6.x86_64.rpm | 504 kB 00:01
(3/12): libcom_err-devel-1.41.12-23.el6.x86_64.rpm | 33 kB 00:00
(4/12): libffi-devel-3.0.5-3.2.el6.x86_64.rpm | 18 kB 00:00
(5/12): libgcrypt-devel-1.4.5-12.el6_8.x86_64.rpm | 118 kB 00:00
(6/12): libgpg-error-devel-1.7-4.el6.x86_64.rpm | 14 kB 00:00
(7/12): libselinux-devel-2.0.94-7.el6.x86_64.rpm | 137 kB 00:00
(8/12): libsepol-devel-2.0.41-4.el6.x86_64.rpm | 64 kB 00:00
(9/12): libxml2-devel-2.7.6-21.el6_8.1.x86_64.rpm | 1.1 MB 00:07
http://www.ftp.ne.jp/Linux/packages/CentOS/6.9/os/x86_64/Packages/libxml2-devel-2.7.6-21.el6_8.1.x86_64.rpm: [Errno -1] パッケージは予定したダウンロードと一致しません。 提案: 「yum --enablerepo=base clean metadata」の実行
他のミラーを試します。
(9/12): libxml2-devel-2.7.6-21.el6_8.1.x86_64.rpm | 1.1 MB 00:01
(10/12): libxslt-devel-1.1.26-2.el6_3.1.x86_64.rpm | 561 kB 00:00
(11/12): openssl-devel-1.0.1e-57.el6.x86_64.rpm | 1.2 MB 00:02
(12/12): zlib-devel-1.2.3-29.el6.x86_64.rpm | 44 kB 00:00
-----------------------------------------------------------------------------------------
合計 211 kB/s | 3.7 MB 00:18
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています : zlib-devel-1.2.3-29.el6.x86_64 1/12
インストールしています : libxml2-devel-2.7.6-21.el6_8.1.x86_64 2/12
インストールしています : libgpg-error-devel-1.7-4.el6.x86_64 3/12
インストールしています : libgcrypt-devel-1.4.5-12.el6_8.x86_64 4/12
インストールしています : libcom_err-devel-1.41.12-23.el6.x86_64 5/12
インストールしています : libsepol-devel-2.0.41-4.el6.x86_64 6/12
インストールしています : libselinux-devel-2.0.94-7.el6.x86_64 7/12
インストールしています : keyutils-libs-devel-1.4-5.el6.x86_64 8/12
インストールしています : krb5-devel-1.10.3-65.el6.x86_64 9/12
インストールしています : openssl-devel-1.0.1e-57.el6.x86_64 10/12
インストールしています : libxslt-devel-1.1.26-2.el6_3.1.x86_64 11/12
インストールしています : libffi-devel-3.0.5-3.2.el6.x86_64 12/12
Verifying : keyutils-libs-devel-1.4-5.el6.x86_64 1/12
Verifying : libsepol-devel-2.0.41-4.el6.x86_64 2/12
Verifying : openssl-devel-1.0.1e-57.el6.x86_64 3/12
Verifying : libxml2-devel-2.7.6-21.el6_8.1.x86_64 4/12
Verifying : krb5-devel-1.10.3-65.el6.x86_64 5/12
Verifying : libffi-devel-3.0.5-3.2.el6.x86_64 6/12
Verifying : libcom_err-devel-1.41.12-23.el6.x86_64 7/12
Verifying : libgpg-error-devel-1.7-4.el6.x86_64 8/12
Verifying : libselinux-devel-2.0.94-7.el6.x86_64 9/12
Verifying : libxslt-devel-1.1.26-2.el6_3.1.x86_64 10/12
Verifying : libgcrypt-devel-1.4.5-12.el6_8.x86_64 11/12
Verifying : zlib-devel-1.2.3-29.el6.x86_64 12/12

インストール:
libffi-devel.x86_64 0:3.0.5-3.2.el6 libxml2-devel.x86_64 0:2.7.6-21.el6_8.1
libxslt-devel.x86_64 0:1.1.26-2.el6_3.1 openssl-devel.x86_64 0:1.0.1e-57.el6

依存性関連をインストールしました:
keyutils-libs-devel.x86_64 0:1.4-5.el6 krb5-devel.x86_64 0:1.10.3-65.el6
libcom_err-devel.x86_64 0:1.41.12-23.el6 libgcrypt-devel.x86_64 0:1.4.5-12.el6_8
libgpg-error-devel.x86_64 0:1.7-4.el6 libselinux-devel.x86_64 0:2.0.94-7.el6
libsepol-devel.x86_64 0:2.0.41-4.el6 zlib-devel.x86_64 0:1.2.3-29.el6

完了しました!

 

junos-eznc のインストール

[root@localhost ~]# pip install junos-eznc
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
Collecting junos-eznc
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Downloading junos_eznc-2.1.6-py2.py3-none-any.whl (150kB)
100% |████████████████████████████████| 153kB 1.7MB/s
Collecting pyserial (from junos-eznc)
Downloading pyserial-3.4-py2.py3-none-any.whl (193kB)
100% |████████████████████████████████| 194kB 824kB/s
Collecting PyYAML>=3.10 (from junos-eznc)
Downloading PyYAML-3.12.tar.gz (253kB)
100% |████████████████████████████████| 256kB 2.0MB/s
Collecting lxml>=3.2.4 (from junos-eznc)
Downloading lxml-3.8.0.tar.gz (3.8MB)
100% |████████████████████████████████| 3.8MB 139kB/s
Collecting scp>=0.7.0 (from junos-eznc)
Downloading scp-0.10.2-py2.py3-none-any.whl
Collecting ncclient>=0.5.3 (from junos-eznc)
Downloading ncclient-0.5.3.tar.gz (63kB)
100% |████████████████████████████████| 71kB 386kB/s
Requirement already satisfied: netaddr in /usr/lib/python2.6/site-packages (from junos-eznc)
Collecting six (from junos-eznc)
Downloading six-1.10.0-py2.py3-none-any.whl
Collecting paramiko>=1.15.2 (from junos-eznc)
Downloading paramiko-2.2.1-py2.py3-none-any.whl (176kB)
100% |████████████████████████████████| 184kB 612kB/s
Collecting jinja2>=2.7.1 (from junos-eznc)
Downloading Jinja2-2.9.6-py2.py3-none-any.whl (340kB)
100% |████████████████████████████████| 348kB 1.1MB/s
Requirement already satisfied: setuptools>0.6 in /usr/lib/python2.6/site-packages (from ncclient>=0.5.3->junos-eznc)
Collecting cryptography>=1.1 (from paramiko>=1.15.2->junos-eznc)
Downloading cryptography-2.0.3-cp26-cp26mu-manylinux1_x86_64.whl (2.2MB)
100% |████████████████████████████████| 2.2MB 311kB/s
Collecting bcrypt>=3.1.3 (from paramiko>=1.15.2->junos-eznc)
Downloading bcrypt-3.1.3-cp26-cp26mu-manylinux1_x86_64.whl (57kB)
100% |████████████████████████████████| 61kB 1.1MB/s
Collecting pyasn1>=0.1.7 (from paramiko>=1.15.2->junos-eznc)
Downloading pyasn1-0.3.4-py2.py3-none-any.whl (63kB)
100% |████████████████████████████████| 71kB 721kB/s
Collecting pynacl>=1.0.1 (from paramiko>=1.15.2->junos-eznc)
Downloading PyNaCl-1.1.2.tar.gz (3.1MB)
100% |████████████████████████████████| 3.1MB 321kB/s
Collecting MarkupSafe>=0.23 (from jinja2>=2.7.1->junos-eznc)
Downloading MarkupSafe-1.0.tar.gz
Collecting idna>=2.1 (from cryptography>=1.1->paramiko>=1.15.2->junos-eznc)
Downloading idna-2.6-py2.py3-none-any.whl (56kB)
100% |████████████████████████████████| 61kB 720kB/s
Collecting ipaddress (from cryptography>=1.1->paramiko>=1.15.2->junos-eznc)
Downloading ipaddress-1.0.18-py2-none-any.whl
Collecting asn1crypto>=0.21.0 (from cryptography>=1.1->paramiko>=1.15.2->junos-eznc)
Downloading asn1crypto-0.22.0-py2.py3-none-any.whl (97kB)
100% |████████████████████████████████| 102kB 946kB/s
Collecting enum34 (from cryptography>=1.1->paramiko>=1.15.2->junos-eznc)
Downloading enum34-1.1.6-py2-none-any.whl
Collecting cffi>=1.7 (from cryptography>=1.1->paramiko>=1.15.2->junos-eznc)
Downloading cffi-1.10.0-cp26-cp26mu-manylinux1_x86_64.whl (392kB)
100% |████████████████████████████████| 399kB 629kB/s
Collecting pycparser (from cffi>=1.7->cryptography>=1.1->paramiko>=1.15.2->junos-eznc)
Downloading pycparser-2.18.tar.gz (245kB)
100% |████████████████████████████████| 256kB 909kB/s
Building wheels for collected packages: PyYAML, lxml, ncclient, pynacl, MarkupSafe, pycparser
Running setup.py bdist_wheel for PyYAML ... done
Stored in directory: /root/.cache/pip/wheels/2c/f7/79/13f3a12cd723892437c0cfbde1230ab4d82947ff7b3839a4fc
Running setup.py bdist_wheel for lxml ... done
Stored in directory: /root/.cache/pip/wheels/e2/52/c3/a7b7aa7dc1294d715fa6eb49d5c63e0d9713652fcc6a609857
Running setup.py bdist_wheel for ncclient ... done
Stored in directory: /root/.cache/pip/wheels/86/30/68/153d65b60834981c1960737f3f2de488574ba5355fe1329558
Running setup.py bdist_wheel for pynacl ... done
Stored in directory: /root/.cache/pip/wheels/b9/22/e4/be67410b6321ec7ce5db32d30320b4fe30c62add6faf24c565
Running setup.py bdist_wheel for MarkupSafe ... done
Stored in directory: /root/.cache/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57
Running setup.py bdist_wheel for pycparser ... done
Stored in directory: /root/.cache/pip/wheels/95/14/9a/5e7b9024459d2a6600aaa64e0ba485325aff7a9ac7489db1b6
Successfully built PyYAML lxml ncclient pynacl MarkupSafe pycparser
Installing collected packages: pyserial, PyYAML, lxml, idna, six, ipaddress, asn1crypto, enum34, pycparser, cffi, cryptography, bcrypt, pyasn1, pynacl, paramiko, scp, ncclient, MarkupSafe, jinja2, junos-eznc
Found existing installation: lxml 2.2.3
Uninstalling lxml-2.2.3:
Successfully uninstalled lxml-2.2.3
Found existing installation: paramiko 1.7.5
Uninstalling paramiko-1.7.5:
Successfully uninstalled paramiko-1.7.5
Successfully installed MarkupSafe-1.0 PyYAML-3.12 asn1crypto-0.22.0 bcrypt-3.1.3 cffi-1.10.0 cryptography-2.0.3 enum34-1.1.6 idna-2.6 ipaddress-1.0.18 jinja2-2.9.6 junos-eznc-2.1.6 lxml-3.8.0 ncclient-0.5.3 paramiko-2.2.1 pyasn1-0.3.4 pycparser-2.18 pynacl-1.1.2 pyserial-3.4 scp-0.10.2 six-1.10.0

 

pythonの起動確認

[root@localhost ~]# python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from jnpr.junos import Device
/usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/jnpr/junos/__init__.py", line 2, in <module>
from jnpr.junos.console import Console
File "/usr/lib/python2.6/site-packages/jnpr/junos/console.py", line 15, in <module>
from jnpr.junos.transport.tty_serial import Serial
File "/usr/lib/python2.6/site-packages/jnpr/junos/transport/tty_serial.py", line 1, in <module>
import serial
File "/usr/lib/python2.6/site-packages/serial/__init__.py", line 11, in <module>
import importlib
ImportError: No module named importlib  <-----importlibがない!!!
>>>
[root@localhost ~]#

 

importlib のインストール

http://qiita.com/conservativerad/items/a61a9658b763523c5499を参考にさせてもらいました。

[root@localhost ~]# pip install importlib
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
Collecting importlib
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/usr/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Downloading importlib-1.0.4.zip
Building wheels for collected packages: importlib
Running setup.py bdist_wheel for importlib ... done
Stored in directory: /root/.cache/pip/wheels/b7/98/51/599a86632ab36b53c8cabd2923e9131a68cbc92c2c89296e22
Successfully built importlib
Installing collected packages: importlib
Successfully installed importlib-1.0.4

 

改めて、python の起動確認

[root@localhost ~]# python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from jnpr.junos import Device
/usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
/usr/lib/python2.6/site-packages/jnpr/junos/__init__.py:23: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of PyEZ will drop support for Python 2.6
DeprecationWarning

>>>

 

 

[Junos PyEZ によるJunosオペレーション]

 NW構成:

CentOS 6.9 (192.168.1.3/24)-----------Junos (SRX, 192.168.1.1/24)

 

参考サイト:

vMX(VCP/VFP)をPyEZで制御してみるだけの優しい世界

http://www.juniper.net/documentation/en_US/junos-pyez/information-products/pathway-pages/junos-pyez-developer-guide.pdf

https://junos-pyez.readthedocs.io/en/2.1.6/jnpr.junos.html

https://junos-pyez.readthedocs.io/en/1.2.3/jnpr.junos.html

 

Junosへの接続と機器情報の取得

>>> from jnpr.junos import Device・・・・ライブラリのインポート
/usr/lib64/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
/usr/lib/python2.6/site-packages/jnpr/junos/__init__.py:23: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of PyEZ will drop support for Python 2.6
DeprecationWarning
>>>

>>> dev=Device(host='192.168.1.1', user="root", password="password", port='22')

・・・・デバイス情報を変数devに格納
/usr/lib/python2.6/site-packages/jnpr/junos/device.py:1039: DeprecationWarning: object.__new__() takes no parameters
return super(Device, cls).__new__(cls, *args, **kwargs)
>>> dev.open()・・・・デバイスへ接続
Device(192.168.1.1)
>>> print(dev.facts)・・・・デバイス情報を取得
{'2RE': False, 'HOME': '/root', 'RE0': {'status': 'OK', 'last_reboot_reason': '0x1:power cycle/failure', 'model': 'RE-SRX220H2', 'up_time': '1 hour, 11 minutes, 22 seconds', 'mastership_state': 'master'}, 'RE1': None, 'RE_hw_mi': False, 'current_re': ['master', 'node', 'fwdd', 'member', 'pfem', 'backup', 're0', 'fpc0.pic0'], 'domain': None, 'fqdn': 'SRX1', 'hostname': 'SRX1', 'hostname_info': {'re0': 'SRX1'}, 'ifd_style': 'CLASSIC', 'junos_info': {'re0': {'text': '12.1X46-D60.4', 'object': junos.version_info(major=(12, 1), type=X, minor=(46, 'D', 60), build=4)}}, 'master': 'RE0', 'model': 'SRX220H2', 'model_info': {'re0': 'SRX220H2'}, 'personality': 'SRX_BRANCH', 're_info': {'default': {'default': {'status': 'OK', 'last_reboot_reason': '0x1:power cycle/failure', 'model': 'RE-SRX220H2', 'mastership_state': 'master'}, '0': {'status': 'OK', 'last_reboot_reason': '0x1:power cycle/failure', 'model': 'RE-SRX220H2', 'mastership_state': 'master'}}}, 're_master': {'default': '0'}, 'serialnumber': 'AA1234BB5678', 'srx_cluster': False, 'srx_cluster_id': None, 'srx_cluster_redundancy_group': None, 'switch_style': 'VLAN', 'vc_capable': False, 'vc_fabric': None, 'vc_master': None, 'vc_mode': None, 'version': '12.1X46-D60.4', 'version_RE0': '12.1X46-D60.4', 'version_RE1': None, 'version_info': junos.version_info(major=(12, 1), type=X, minor=(46, 'D', 60), build=4), 'virtual': False}
>>>
>>>dev.close()・・・・デバイスを切断
>>>

 

root@SRX1> show chassis hardware・・・・比較用にCLIでの情報取得してみました
Hardware inventory:
Item Version Part number Serial number Description
Chassis AA1234BB5678 SRX220H2
Routing Engine REV 05 750-048778 ACMT4921 RE-SRX220H2
FPC 0 FPC
PIC 0 8x GE Base PIC
Power Supply 0

 

 Junos Configuration modeへの切り替え

>>> from jnpr.junos.utils.config import Config・・・・ライブラリのインポート
>>> dev.open()・・・・デバイスへ接続
Device(192.168.1.1)
>>>
>>> dev.bind(cu=Config)・・・・インスタンスをクラスへ割り当てる
>>> dev.cu.lock()・・・・configuration modeへ切り替え(configure exclusive)
True
>>>


root@SRX1> configure・・・・比較用にCLIでconfigureとしてみたが、確かにconfigure exclusiveとなっている
Entering configuration mode
Users currently editing the configuration:
root (pid 2292) on since 2017-09-07 17:08:45 UTC
exclusive

 

 

Junos 設定の追加1 (階層形式設定)

>>> testconf1='''・・・・追加設定を変数testconf1へ格納
... vlans {
...    valn10 {
...       vlan-id 10;
...       }
...       valn20 {
...       vlan-id 20;
...       }
...       valn30 {
...       vlan-id 30;
...       }
... }
... '''
>>> dev.cu.load(testconf1, format='text')・・・・testconf1(階層形式設定)をロード
<Element load-configuration-results at 0x7f949428ecb0>
>>> print(dev.cu.diff())・・・・差分の出力(show | compare)

[edit vlans]
+ valn10 {
+    vlan-id 10;
+ }
+ valn20 {
+    vlan-id 20;
+ }
+ valn30 {
+    vlan-id 30;
+ }

>>> dev.cu.commit(comment='commit by PyEZ')・・・・コミット(commit comment "commit by PyEZ")
True
>>> dev.cu.unlock()・・・・operational modeへの切り替え
True
>>>

 

root@SRX1> show configuration・・・・比較用にCLIでshow configuration
## Last commit: 2017-09-07 17:42:11 UTC by root
version 12.1X46-D60.4;

.

.

(省略)

.

.
vlans {
    valn10 {
       vlan-id 10;
    }
    valn20 {
       vlan-id 20;
    }
    valn30 {
       vlan-id 30;
    }                     ・・・・追加された設定
    vlan-trust {
       vlan-id 3;
       l3-interface vlan.0;
    }
}


root@SRX1> show system commit・・・・コミット履歴の確認
0 2017-09-07 17:42:11 UTC by root via netconf
commit by PyEZ・・・・ちゃんとコメントも記録されている
1 2017-09-07 17:35:01 UTC by root via cli
2 2017-09-07 15:37:32 UTC by root via cli
3 2017-09-07 15:37:04 UTC by root via cli
4 2017-06-01 15:28:04 UTC by root via cli
5 2017-06-01 15:06:52 UTC by root via cli

 

Junos 設定の追加2 (set形式設定)

>>> dev.cu.lock()
True
>>> testconf2='''・・・・追加設定を変数testconf2へ格納
... set vlans vlan40 vlan-id 40
... set vlans vlan50 vlan-id 50
... '''
>>> dev.cu.load(testconf2, format='set')・・・・testconf2(set形式設定)をロード
<Element load-configuration-results at 0x7f9494296b90>
>>> print(dev.cu.diff())

[edit vlans]
+ vlan40 {
+    vlan-id 40;
+    }
+ vlan50 {
+    vlan-id 50;
+    }

>>> dev.cu.commit(comment='commit by PyEZ2')
True
>>>
>>> dev.cu.unlock()
True
 

root@SRX1> show system commit
0 2017-09-07 17:50:01 UTC by root via netconf
commit by PyEZ2・・・・ちゃんとコメントも記録されている
1 2017-09-07 17:42:11 UTC by root via netconf
commit by PyEZ
2 2017-09-07 17:35:01 UTC by root via cli
3 2017-09-07 15:37:32 UTC by root via cli
4 2017-09-07 15:37:04 UTC by root via cli
5 2017-06-01 15:28:04 UTC by root via cli

 

 Junos のパワーオフ

>>> from jnpr.junos.utils.sw import SW・・・・ライブラリのインポート
>>> dev.bind(po=SW)・・・・インスタンスをクラスへ割り当てる
>>> dev.po.poweroff()・・・・Junosのパワーオフ
'Shutdown NOW!\n[pid 2413]'


root@SRX1>・・・・CLIでパワーオフを確認
*** FINAL System shutdown message from root@SRX1 ***

System going down IMMEDIATELY


SWaiting (max 60 seconds) for system process `vnlru_mem' to stop...done
Waiting (max 60 seconds) for system process `vnlru' to stop...done
Waiting (max 60 seconds) for system process `bufdaemon' to stop...done
Waiting (max 60 seconds) for system process `syncer' to stop...
Syncing disks, vnodes remaining...0 0 0 0 done

syncing disks... All buffers synced.
Uptime: 2h28m3s
The operating system has halted.
Turning the system power off.

 

少し慣れるまでが大変でしたが、

Python + Junos PyEZの環境でも Junosの操作が出来ました!!

 

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

Opensourcetech by Takahiro Kujirai