Ansible 2.10 の変更点: 付属モジュールのAnsible Collectionへの移行

本記事は2020/04/03現在確認できた情報を元に作成しています。

# はじめに

Ansible 2.10では今までAnsibleと共に配布されていたモジュールやプラグインの配布形態が変わります。

Ansibleのモジュール化のための仕組みとして[Ansible Collection](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html)があります。
[ロードマップ](https://github.com/ansible/ansible/blob/devel/docs/docsite/rst/roadmap/ROADMAP_2_10.rst)や[Ansible Collections Overview](https://github.com/ansible-collections/overview/blob/master/README.rst)によると、Ansible 2.10ではAnsible Collectionが全面的に活用されるようになります。
Ansible 2.9までAnsible本体のリポジトリに収録されていたモジュール(プラグイン)の多く(約4,100個)が分離され、Ansible Collectionを通じて導入する形に変更されます。
`devel`ブランチからは既に該当モジュール(プラグイン)が削除されています。
今後Ansible本体のリポジトリには動作に必要な最小限のモジュールやプラグインのみが収録され、`ansible-base`のパッケージ名で配布されるようです。

# 分離されるモジュールの移行先Collection

Ansible 2.10で本体から分離されるモジュール(プラグイン)と、各モジュール(プラグイン)の移行先Collection名 (`ansible-galaxy collection install`に指定する名前) は、https://github.com/ansible/ansible/blob/devel/lib/ansible/config/ansible_builtin_runtime.yml から確認できます。
このファイルはAnsible 2.9以前との互換性を踏まえ、分離前の名前でモジュール(プラグイン)が指定された際に移行先Collectionのモジュール(プラグイン)を指しているとAnsibleに解釈させるためのものです。

以下に Collection名と分離先GitHubリポジトリのURLを記載します([参考リビジョン](https://github.com/ansible/ansible/blob/40d9650f20133cd6942990df205300fec802511f/lib/ansible/config/routing.yml))。


|Collection名|リポジトリURL|
|:--|:--|
|[`amazon.aws`](https://galaxy.ansible.com/amazon/aws)|https://github.com/ansible-collections/amazon.aws|
|[`ansible.netcommon`](https://galaxy.ansible.com/ansible/netcommon)|https://github.com/ansible-collections/ansible.netcommon|
|[`ansible.posix`](https://galaxy.ansible.com/ansible/posix)|https://github.com/ansible-collections/ansible.posix|
|[`ansible.windows`](https://galaxy.ansible.com/ansible/windows)|https://github.com/ansible-collections/ansible.windows|
|[`arista.eos`](https://galaxy.ansible.com/arista/eos)|https://github.com/ansible-collections/arista.eos|
|[`awx.awx`](https://galaxy.ansible.com/awx/awx)|https://github.com/ansible/awx|
|[`azure.azcollection`](https://galaxy.ansible.com/azure/azcollection)|https://github.com/ansible-collections/azure|
|[`check_point.mgmt`](https://galaxy.ansible.com/check_point/mgmt)|https://github.com/ansible-collections/checkpoint|
|[`chocolatey.chocolatey`](https://galaxy.ansible.com/chocolatey/chocolatey)|https://github.com/vexx32/choco-ansible|
|[`cisco.aci`](https://galaxy.ansible.com/cisco/aci)|https://github.com/CiscoDevNet/ansible-aci|
|[`cisco.asa`](https://galaxy.ansible.com/cisco/asa)|https://github.com/ansible-collections/cisco.asa|
|[`cisco.intersight`](https://galaxy.ansible.com/cisco/intersight)|https://github.com/CiscoDevNet/ansible-intersight|
|[`cisco.ios`](https://galaxy.ansible.com/cisco/ios)|https://github.com/ansible-collections/ios|
|[`cisco.iosxr`](https://galaxy.ansible.com/cisco/iosxr)|https://github.com/ansible-collections/iosxr|
|[`cisco.meraki`](https://galaxy.ansible.com/cisco/meraki)|https://github.com/CiscoDevNet/ansible-meraki|
|[`cisco.mso`](https://galaxy.ansible.com/cisco/mso)||
|[`cisco.nxos`](https://galaxy.ansible.com/cisco/nxos)|https://github.com/ansible-collections/nxos|
|[`cisco.ucs`](https://galaxy.ansible.com/cisco/ucs)|https://github.com/CiscoDevNet/ansible-ucs|
|[`community.aws`](https://galaxy.ansible.com/community/aws)|https://github.com/ansible-collections/community.aws|
|[`community.azure`](https://galaxy.ansible.com/community/azure)|https://github.com/ansible-collections/community.azure|
|[`community.crypto`](https://galaxy.ansible.com/community/crypto)|https://github.com/ansible-collections/community.crypto|
|[`community.general`](https://galaxy.ansible.com/community/general)|https://github.com/ansible-collections/community.general|
|[`community.grafana`](https://galaxy.ansible.com/community/grafana)|https://github.com/ansible-collections/grafana|
|[`community.kubernetes`](https://galaxy.ansible.com/community/kubernetes)|https://github.com/ansible-collections/kubernetes|
|[`community.mongo`](https://galaxy.ansible.com/community/mongo)|https://github.com/ansible-collections/mongodb|
|[`community.vmware_rest`](https://galaxy.ansible.com/community/vmware_rest)|https://github.com/ansible-collections/vmware_rest|
|[`community.vmware`](https://galaxy.ansible.com/community/vmware)|https://github.com/ansible-collections/vmware|
|[`community.windows`](https://galaxy.ansible.com/community/windows)|https://github.com/ansible-collections/community.windows|
|[`containers.podman`](https://galaxy.ansible.com/containers/podman)|https://github.com/containers/ansible-podman-collections|
|[`cyberark.bizdev`](https://galaxy.ansible.com/cyberark/bizdev)|https://github.com/cyberark/ansible-security-automation-collection|
|[`dellemc_networking.os10`](https://galaxy.ansible.com/dellemc_networking/os10)|https://github.com/ansible-collections/dellemc_networking.os10|
|[`dellemc_networking.os6`](https://galaxy.ansible.com/dellemc_networking/os6)|https://github.com/ansible-collections/dellemc_networking.os6|
|[`dellemc_networking.os9`](https://galaxy.ansible.com/dellemc_networking/os9)|https://github.com/ansible-collections/dellemc_networking.os9|
|[`f5networks.f5_modules`](https://galaxy.ansible.com/f5networks/f5_modules)|https://github.com/F5Networks/f5-ansible|
|[`fortinet.fortios`](https://galaxy.ansible.com/fortinet/fortios)|https://github.com/fortinet-ansible-dev/ansible-galaxy-fortios-collection|
|[`frr.frr`](https://galaxy.ansible.com/frr/frr)|https://github.com/ansible-collections/frr|
|[`google.cloud`](https://galaxy.ansible.com/google/cloud)|https://github.com/ansible-collections/ansible_collections_google|
|[`hetzner.hcloud`](https://galaxy.ansible.com/hetzner/hcloud)|https://github.com/ansible-collections/hetzner.hcloud|
|[`ibm.qradar`](https://galaxy.ansible.com/ibm/qradar)|https://github.com/ansible-collections/ibm.qradar|
|[`junipernetworks.junos`](https://galaxy.ansible.com/junipernetworks/junos)|https://github.com/ansible-collections/junos|
|[`netapp.aws`](https://galaxy.ansible.com/netapp/aws)|https://github.com/ansible-collections/netapp|
|[`netapp.elementsw`](https://galaxy.ansible.com/netapp/elementsw)|https://github.com/ansible-collections/netapp|
|[`netapp.ontap`](https://galaxy.ansible.com/netapp/ontap)|https://github.com/ansible-collections/netapp|
|[`netbox.netbox`](https://galaxy.ansible.com/netbox/netbox)|https://github.com/netbox-community/ansible_modules|
|[`openstack.cloud`](https://galaxy.ansible.com/openstack/cloud)|https://opendev.org/openstack/ansible-collections-openstack|
|[`openvswitch.openvswitch`](https://galaxy.ansible.com/openvswitch/openvswitch)|https://github.com/ansible-collections/openvswitch|
|[`ovirt.ovirt`](https://galaxy.ansible.com/ovirt/ovirt_collection)|https://github.com/ovirt/ovirt-ansible-collection|
|[`purestorage.flasharray`](https://galaxy.ansible.com/purestorage/flasharray)|https://github.com/Pure-Storage-Ansible/FlashArray-Collection|
|[`purestorage.flashblade`](https://galaxy.ansible.com/purestorage/flashblade)|https://github.com/Pure-Storage-Ansible/FlashBlade-Collection|
|[`servicenow.servicenow`](https://galaxy.ansible.com/servicenow/servicenow)|https://github.com/ServiceNowITOM/servicenow-ansible|
|[`skydive.skydive`](https://galaxy.ansible.com/skydive/skydive)|https://github.com/ansible-collections/skydive|
|[`splunk.enterprise_security`](https://galaxy.ansible.com/splunk/enterprise_security)|https://github.com/ansible-collections/splunk.enterprise_security|
|[`theforeman.foreman`](https://galaxy.ansible.com/theforeman/foreman)|https://github.com/theforeman/foreman-ansible-modules|
|[`vyos.vyos`](https://galaxy.ansible.com/vyos/vyos)|https://github.com/ansible-collections/vyos|
|[`wti.remote`](https://galaxy.ansible.com/wti/remote)|https://github.com/wtinetworkgear/wti-collection|