juniper.junos

ドキュメントステータス

Junos向けJuniper Ansibleコレクション

概要

Juniper Networksは、Junosオペレーティングシステム(Junos OSおよびJunos Evolved)を実行しているデバイスの管理にAnsibleをサポートしています。 このコレクションは、Ansible Galaxyウェブサイトのコレクション juniper.deviceにホストされています。

juniper.deviceコレクションには、Junos OSを実行しているデバイス上で特定の操作および設定タスクを実行するAnsibleモジュールが含まれています。 これらのタスクには、Junos OSのインストールおよびアップグレード、ネットワーク内の新しいJunosデバイスのプロビジョニング、設定変更のロード、 情報の取得、および管理デバイスのリセット、再起動、またはシャットダウンが含まれます。 このコレクションのインストール手順については、INSTALLATION セクションを参照してください。

Junosデバイス向けの2つのセットのAnsibleモジュール

Ansibleバージョン >= 2.1以降、AnsibleにはJunos向けのコアモジュールも含まれています。 Ansibleコアに含まれるJunosモジュールの名前は、junos_というプレフィックスで始まります。 このjuniper.deviceコレクションに含まれるJunosモジュールは、モジュールタイプで始まる名前を持っています。 これら2つのJunosモジュールセットは同じAnsibleコントロールマシン上で共存でき、Ansibleプレイブックはどちらのセットのモジュールを呼び出すことが可能です。 Juniper Networksでは、Junosデバイスを管理する新しいプレイブックを書く際には、juniper.deviceコレクションのモジュールを使用することを推奨しています。

モジュールの概要

このjuniper.deviceコレクションには以下のモジュールが含まれています:

  • command — Junosデバイスで1つまたは複数のCLIコマンドを実行します。
  • config — Junosデバイスの設定を操作します。
  • facts — Junosデバイスからファクトを取得します。
  • file_copy - Junosデバイスとの間でファイルをコピーします。
  • jsnapy — Junosデバイス上でJSNAPyテストを実行します。
  • ping — Junosデバイスからpingを実行します。
  • pmtud — Junosデバイスから宛先へのパスMTUディスカバリを行います。
  • rpc — Junosデバイスで1つまたは複数のNETCONF RPCを実行します。
  • software — Junosデバイスにソフトウェアをインストールします。
  • srx_cluster — SRXシャーシクラスタ設定を追加または削除します。
  • system — Junosシステムで操作を開始します。
  • table — PyEZテーブル/ビューを使用してJunosデバイスからデータを取得します。

PyEZバージョン要件

Ansibleコレクションjuniper.deviceには、junos-ezncバージョン2.6.0以上をインストールする必要があります。

プラグインの概要

上記のモジュールに加えて、モジュールjsnapy用のコールバックプラグインjsnapyが利用可能です。

コールバックプラグインjsnapyは、jsnapyの失敗したテストに関する追加情報を画面に表示するのに役立ちます。 各失敗したテストについては、プレイブックのRECAPの後にログが表示されます。例:

PLAY RECAP *********************************************************************
qfx10002-01                : ok=3    changed=0    unreachable=0    failed=1
qfx10002-02                : ok=3    changed=0    unreachable=0    failed=1
qfx5100-01                 : ok=1    changed=0    unreachable=0    failed=1

JSNAPyの結果: qfx10002-01 **************************************************
'//bgp-information/bgp-peer''peer-state'の値が{"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}で'is-equal'ではありません。
'//bgp-information/bgp-peer''peer-state'の値が{"peer-as": "60021", "peer-state": "Idle", "peer-address": "192.168.0.1"}で'is-equal'ではありません。
'//interface-information/physical-interface[normalize-space(admin-status)='up' and logical-interface/address-family/address-family-name ]''oper-status'の値が{"oper-status": "down", "name": "et-0/0/18"}で'is-equal'ではありません。

JSNAPyの結果: qfx10002-02 **************************************************
'//bgp-information/bgp-peer''peer-state'の値が{"peer-as": "65200", "peer-state": "Active", "peer-address": "100.0.0.21"}で'is-equal'ではありません。

コールバックプラグインはデフォルトで有効になっていません。手動でAnsible設定ファイルの[defaults]セクションにcallback_whitelist変数を使って追加する必要があります。 jsnapyコールバックプラグインを有効にするために、Ansible設定ファイルに次の行を追加する必要があります:

[defaults]
callback_whitelist = jsnapy

ドキュメント

公式Juniperドキュメント(詳細な情報、例を含む)

Ansibleスタイルドキュメント

インストール

システムに依存関係をインストールする必要があります。 依存関係はrequirements.txtを確認してください。

注意事項

MacOS Mojaveおよび新しいバージョン

MacOS Mojave以上(>=10.14)では、システムのssh-keygenで作成されたSSHキーは、新しい'OPENSSH'キー形式を使用して作成されます。これにより、ssh_private_key_fileの使用に直接影響します。キーの作成/変換/確認の手順は以下の通りです:

  • 新しいRSAキーを作成: ssh-keygen -m PEM -t rsa -b 4096
  • 既存のキーを確認: head -n1 ~/.ssh/some_private_key RSAキーは-----BEGIN RSA PRIVATE KEY-----で、OPENSSHキーは-----BEGIN OPENSSH PRIVATE KEY-----になります。
  • OPENSSHキーをRSAキーに変換: ssh-keygen -p -m PEM -f ~/.ssh/some_key

Ansible Galaxyコレクション

juniper.deviceコレクションの最新バージョンをインストールするには、ansible-galaxy installコマンドを使用できます。

sudo ansible-galaxy collection install juniper.device

また、ansible-galaxy installコマンドを使って、GitHubから直接最新の開発バージョンのjunosコレクションをインストールすることもできます。

sudo ansible-galaxy collection install git+https://github.com/Juniper/ansible-junos-stdlib.git#/ansible_collections/juniper/device

詳細については、https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#specifying-the-location-to-search-for-collectionsを訪問してください。

Gitクローン

テストのためにこのリポジトリをgit cloneして、リポジトリディレクトリ内でenv-setupスクリプトを実行できます:

user@ansible-junos-stdlib> source env-setup

これにより、$ANSIBLE_LIBRARY変数がリポジトリの場所とインストールされたAnsibleライブラリパスに設定されます。例えば:

$ echo $ANSIBLE_LIBRARY /home/jeremy/Ansible/ansible-junos-stdlib/library:/usr/share/ansible

Docker

JSNAPyとPyEZを含むDockerコンテナとしてこれを実行するには、Docker Hubからプルして実行します。次のコマンドで最新のイメージをプルし、インタラクティブなashシェルで実行します。

docker run -it --rm juniper/pyez-ansible

おそらく、プレイブックや関連ファイルを含むホストディレクトリをバインドマウントしたいでしょう。次のコマンドで現在の作業ディレクトリをバインドマウントし、ashシェルを開始します。

docker run -it --rm -v $PWD:/project juniper/pyez-ansible

このコンテナを実行可能な方法として、自分のプレイブックを実行するのに利用することもできます。以下のような典型的なプレイブック構造があるとしましょう:

example
|playbook.yml
|hosts
|-vars
|-templates
|-scripts

exampleディレクトリに移動して、次のコマンドでプレイブックを実行します:

cd example/ docker run -it --rm -v $PWD:/playbooks juniper/pyez-ansible ansible-playbook -i hosts playbook.yml

コンテナ名の後に有効なコマンド文字列を渡すことができ、そのコマンドはBashで実行されます。

基本コマンドは常にほぼ同じであることに気付いたかもしれません。いくつかのキーストロークを節約するためにエイリアスを使用することもできます。

alias pb-ansible="docker run -it --rm -v $PWD:/project juniper/pyez-ansible ansible-playbook" pb-ansible -i hosts playbook.yml

追加パッケージでコンテナを拡張する

コンテナのインスタンス化時に、追加のOS(Alpine)パッケージ、Pythonパッケージ(pip経由)、Ansibleコレクションをインストールすることが可能です。これは、環境変数を渡すか、ファイルをバインドマウントすることで実行できます。

OSパッケージ

環境変数: $APK バインドマウント: /extras/apk.txt ファイルフォーマット:有効なAlpineパッケージのリスト(行ごとに1つ) 例:

環境変数として、パッケージリストが現在のディレクトリにある場合:

docker run -it --rm -v $PWD:/project -e APK="apk.txt" juniper/pyez-ansible

バインドマウントとして:

docker run -it --rm -v $PWD/apk.txt:/extras/apk.txt juniper/pyez-ansible

Pythonパッケージ

環境変数: $REQ バインドマウント: /extras/requirements.txt ファイルフォーマット:pip requirementsファイル

例:

docker run -it --rm -v $PWD:/project -e REQ="requirements.txt" juniper/pyez-ansible

バインドマウントとして:

docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.txt juniper/pyez-ansible

Ansibleパッケージ

環境変数: $ROLES バインドマウント: /extras/requirements.yml ファイルフォーマット:Ansible requirementsファイル

注: これはコレクションおよびロールの両方で機能します。

例:

docker run -it --rm -v $PWD:/project -e REQ="requirements.yml" juniper/pyez-ansible

バインドマウントとして:

docker run -it --rm -v $PWD/requirements.txt:/extras/requirements.yml juniper/pyez-ansible

プレイブックの例

この例では、Ansibleを使用してJunos OSを実行しているデバイス上にソフトウェアイメージをインストールまたはアップグレードする方法をアウトラインします。

---
- name: Junos OSのインストール
  hosts: dc1
  connection: local
  gather_facts: false
  vars:
    wait_time: 3600
    pkg_dir: /var/tmp/junos-install
    os_version: 14.1R1.10
    os_package: jinstall-14.1R1.10-domestic-signed.tgz
    log_dir: /var/log/ansible

  tasks:
    - name: NETCONF接続の確認
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: 5
    - name: Junos OSパッケージのインストール
      juniper.device.software:
        reboot: true
        version: "{{ os_version }}"
        package: "{{ pkg_dir }}/{{ os_package }}"
        logfile: "{{ log_dir }}/software.log"
      register: sw
      notify:
        - Wait_reboot

  handlers:
    - name: 再起動を待つ
      ansible.builtin.wait_for:
        host: "{{ inventory_hostname }}"
        port: 830
        timeout: "{{ wait_time }}"
      when: not sw.check_mode

依存関係

このモジュールをAnsibleコントロールマシンにインストールするためには、次のものが必要です:

ライセンス

Apache 2.0

サポート

このjuniper.deviceコレクションのサポートはコミュニティおよびJuniper Networksによって提供されています。 juniper.deviceコレクション内のモジュールに関して問題がある場合は、以下のことができます:

Ansibleコアに含まれるJunosモジュールのサポートはAnsibleにより提供されます。Ansibleコアモジュールに問題がある場合は、Ansibleプロジェクトに対してGitHubの問題を開く必要があります。

貢献者

Juniper Networksは、このリポジトリに積極的に貢献し、維持しています。問い合わせは[email protected]までお願いします。

元貢献者:

Stacy W Smith, Jeremy Schulman, Rick Sherman, Damien Garros, David Gethings, Nitin Kumar, Rahul Kumar

プロジェクトについて

Network build automation of Junos devices.

インストール
ansible-galaxy install juniper.junos
ライセンス
apache-2.0
ダウンロード
3.5M
所有者