この記事は Ansible Advent Calendar 2025 の 10日目の記事です。
はじめに
2018年に、Ansible の Juniper ネットワーク機器向けの「モジュール」は2種類あるという記事を書きました。
その後、モジュールやロール、Playbook を束ねる「コレクション」という管理単位が導入され、Juniper 向けコレクションは 2つに分かれたままでした。
最近、メンテナンス性向上などの理由から統合の流れが始まりました。junipernetworks.junos コレクションの方がアーカイブ予定となり、juniper.device コレクションに統合されます。
たとえば、junipernetworks.junos.junos_command モジュールであれば、juniper.device.junos_command という指定になります。
詳細は以下の Ansible Forum の書き込みを参照してください。
統合先は juniper.device コレクション
juniper.device コレクションは Juniper/ansible-junos-stdlib というリポジトリで管理されています。
このリポジトリはもともとは Juniper.junos 「ロール」が開発されていたリポジトリです。コレクション化する時に juniper.device「コレクション」を管理するリポジトリとなり、コレクションのバージョンは 1.0.0 に仕切り直したようです。
この juniper.device コレクションに、junipernetworks.junos コレクションが統合される形です。
すでに juniper.device コレクション 2.0.0では、junipernetworks.junos コレクションにあったモジュールが含まれています。そういう意味では統合が完了しているとも見れると思います。(長い目でみると junipernetworks.junos コレクションがなくなった段階で完了という見方もありそう)
また、Automation Hub 上でも juniper.device コレクションが公開されています。
AAP の標準の実行環境(EE) はどうなってるのか気になり、ひとつチョイスして registry.redhat.io/ansible-automation-platform-26/ee-supported-rhel9:1.0.0-1106 を見てみたら juniper.device コレクションは見当たりませんでした。
なお、juniper.device コレクション には、junipernetworks.junos コレクションにはなかった依存パッケージがある点は、少し留意が必要かなと思います。
junipernetworks.junos コレクションはアーカイブ予定
Ansible Forum での案内によると、junipernetworks.junos コレクションはアーカイブ予定だそうです。アーカイブされると、リポジトリ上で新しい Issue や PR が受け付けられなくなり、当然新しいリリースもされません。
ただし、リリース済みの junipernetworks.junos コレクションが急に使えなくなるという訳ではありません。
All previously published versions remain available on Ansible Galaxy and Automation Hub.
junipernetworks.junos コレクション側の「Deprecate junos collection and migrate to juniper.device #575」という PR には、README.md に以下の文言の追記が含まれていました。
This collection is deprecated and will be removed in version 12.0.0 (scheduled for October 30, 2027).
上記 PR ではモジュール類のコードが削除され、juniper.device コレクション側へのリダイレクトの定義が導入されます。これにより、junipernetworks.junos コレクション自身にはモジュール類のコードがないものの、junipernetworks.junos.* というモジュールの指定で、統合先の juniper.device.* へリダイレクトされる、ということになります。
# ...(略)... junos_config: redirect: juniper.device.junos_config deprecation: warning_text: Please migrate to juniper.device namespace removal_version: "12.0.0" # ...(略)...
また、これまで Ansible community package(pip install ansible でインストールされる、ansible-core とコレクション一式)に、junipernetworks.junos コレクションが含まれていましたが、Ansible 14 (2026年5月リリース?) では含まれなくなる予定です。
逆に、Ansible community package に juniper.device コレクションが入る動きは現状(2025/12/10 現在)見当たりませんでした。
モジュールの指定方法と動作の関係は?
2つのコレクションのバージョンと、FQCN の指定方法、モジュール呼び出しの可否をまとめます。
なお今回は Playbook からの呼び出しではなく、ansible-doc junipernetworks.junos.junos_command のようにモジュールのドキュメントを表示する簡易的な確認方法にしました。
| No. | juniper.device |
junipernetworks.junos |
モジュールのFQCN指定 | モジュール呼び出し | 補足 |
|---|---|---|---|---|---|
| 1 | 未インストール | 11.0.0 |
junipernetworks.junos.junos_command |
可 | 普通に指定通り呼び出される |
| 2 | 未インストール | 11.0.0 |
juniper.device.junos_command |
不可 | juniper.device 未インストールのため |
| 3 | 未インストール | 12.0.0(仮) ※1 |
junipernetworks.junos.junos_command |
不可 | juniper.device.junos_command へリダイレクトしようとするが、juniper.device 未インストールのため |
| 4 | 未インストール | 12.0.0(仮) ※1 |
juniper.device.junos_command |
不可 | juniper.device 未インストールのため |
| 5 | 2.0.0 |
未インストール | junipernetworks.junos.junos_command |
不可 | junipernetworks.junos 未インストールのため |
| 6 | 2.0.0 |
未インストール | juniper.device.junos_command |
可 | 普通に指定通り呼び出される |
| 7 | 2.0.0 |
11.0.0 |
junipernetworks.junos.junos_command |
可 | 普通に指定通り呼び出される |
| 8 | 2.0.0 |
11.0.0 |
juniper.device.junos_command |
可 | 普通に指定通り呼び出される |
| 9 | 2.0.0 |
12.0.0(仮) ※1 |
junipernetworks.junos.junos_command |
可 | juniper.device.junos_command へリダイレクト |
| 10 | 2.0.0 |
12.0.0(仮) ※1 |
juniper.device.junos_command |
可 | 普通に指定通り呼び出される |
※1: junipernetworks.junos コレクション 12.0.0 は2027年リリース予定で現状リリースされていません。そのため今回は、junipernetworks.junos コレクション側の「Deprecate junos collection and migrate to juniper.device #575」という PR のリクエスト元の 2025/12/10 時点の最新コミットをインストールして試しました。今後動作が変更される可能性があります。
以下、さらに補足です。
実際は起こりにくいコレクションの組み合わせ
No.3、4 の組み合わせは実際は起こりにくいです。今回利用した「Deprecate junos collection and migrate to juniper.device #575」という PR では、galaxy.ymlに、"juniper.device": ">=2.0.0" という依存コレクションの定義があるためです。結果的に、junipernetworks.junos インストールと同時に juniper.device がセットでインストールされます(No.9、10の状態になる)。今回は事後に juniper.device を削除して No.3、4の環境を作りました。
juniper.device だけの状態で、junipernetworks.junos.* がリダイレクトされなかった件
No.5 で junipernetworks.junos.junos_command モジュールを呼び出せなかったのは意外でした。juniper.device コレクション 2.0.0 のリリースノートに以下の記述を、juniper.device だけインストールしておけば、junipernetworks.junos.* でもリダイレクトで呼び出せると解釈していたためです。
Support for playbooks with junipernetworks.junos namespace from the earlier Ansible's collection is provided using redirection in meta/runtime.yml.
確かにリポジトリ Juniper/ansible-junos-stdlib の ansible_collections/junipernetworks/junos/meta/runtime.ymlには、juniper.device.* へのリダイレクトが定義されていますが、あくまでjunipernetworks/junos 配下であり、このファイルは juniper.device をインストールしても手元に配置されませんでした。結果的に、このリダイレクトの定義は有効にならなかったということだのかなと思います。が、ちょっと自信がありません。
リダイレクト発生時の警告
No.9 のように、junipernetworks.junos.* から juniper.device.* へリダイレクトが発生する場合は、以下のような警告が表示されます。
[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg. [DEPRECATION WARNING]: junipernetworks.junos.junos_command has been deprecated. Please migrate to juniper.device namespace. This feature will be removed from collection 'junipernetworks.junos' version 12.0.0.
繰り返しますが、今回利用した未リリース、未マージの PRをインストールして試したので、挙動やメッセージは変更される可能性があります。
混乱を避けるため明示的に juniper.device.* を指定する方が望ましいでしょう。
おわりに
統合前後は少しややこしい点はありますが、1つにまとまること自体は分かりやすいので、そのうち気にならなくなるかなと思います。
参考
詳細(再掲)