この記事は、Ansible Advent Calendar 2021 (Adventar版) 20日目の記事です。
はじめに
先日 Ansible もくもく会に参加させていただきました。(参加レポート)
ネットワーク編のコンテンツでは、たびたび cisco.ios.config
のような、少しモジュール名を省略した形でされていました。
--- - name: snmp ro/rw string configuration hosts: cisco gather_facts: no tasks: - name: ensure that the desired snmp strings are present cisco.ios.config: commands: - snmp-server community ansible-public RO - snmp-server community ansible-private RW
(Exercise 2 - First Ansible Playbook | workshops より)
例えば上記の例では、cisco.ios.ios_config
ではなく、cisco.ios.config
という指定をしています。
この省略方法ができるのは知っていたのですが、実際ここまで指定してる例ははじめて見ました。
リダイレクトの定義ファイルがある
cisco.ios.config
という省略した指定でも利用できるのは、cisco.ios.ios_config
に対してリダイレクトする定義があるためです。
リダイレクトの対応はコレクションの meta/runtime.yml
というファイルに定義されています。他のモジュールにも同様の定義があります。
--- requires_ansible: ">=2.9.10" plugin_routing: # ...(略)... modules: # ...(略)... ios_bgp_global: redirect: cisco.ios.ios bgp_global: redirect: cisco.ios.ios ios_command: redirect: cisco.ios.ios command: redirect: cisco.ios.ios ios_config: redirect: cisco.ios.ios config: redirect: cisco.ios.ios ios_facts: redirect: cisco.ios.ios facts: redirect: cisco.ios.ios # ...(略)...
モジュールが非推奨になったときにもこのリダイレクトの定義を使うようですが、ここでは deprecation
という指定はありません。
このような省略系が指定できる仕組みは、meta/runtime.yml
追加時のプルリクでは、short name module redirection
と表現されています。
コレクション内でのリダイレクト定義なので、コレクションを指定する cisco.ios
までは必要です。さすがに config
ではモジュールが一意に定まりません。
他のコレクションにもリダイレクト定義がある
この仕組は cisco.ios
コレクション固有ではなく、コレクション自体の仕組みです。
そのため、他のコレクションにもこのようなリダイレクト定義があったり(なかったり)します。
どっちを使うか
コレクションが導入される前は階層がなくフラットだったため、ios_config
のように、モジュール名自体に名前空間的なプレフィックスが必要でした。コレクションの導入によって、cisco.ios
のような名前空間ができたため、これで十分 ios
向けであることが判別できます。このため、モジュール名の ios_
の必要性が低くなり冗長であるという見方があって、cisco.ios.config
という省略形でも指定できるようにしよう、という経緯なのかなという予想です。
私としては、初見の人にやさしいであろうという理由で省略形ではなく cisco.ios.ios_config
という表記の方が良いかなと思います。