Ansible Collectionsのモジュールドキュメントを自動生成する

これは Ansible Advent Calendar 2020 の12日目の記事になります。

Ansibleのモジュールドキュメントについて

Ansible 2.10からモジュールやプラグインなどはCollections化されて提供されるようになった事や、Galaxy NGを使う事でローカルにAutomation Hubを構築して組織内で開発したCollectionを共有することが出来ることから、これから自作モジュールを目的に合わせて作成していく場合はCollection化される案件が増えてくるのではないかと想像しています。(CollectionsはAnsible 2.9でも使用可能)

その時に出てくる課題の一つがドキュメント作成かと思います。
モジュールの仕様をドキュメント化して提供したいが、一つ一つ作成するのは手間です。正直めんどくさいです。やりたくないです。やりたくないです。(大事なことなので2回言いました)

AnsibleのドキュメントはSphinxでビルドされ提供されています。
Ansible 2.9まではモジュールがまとまって管理されていたため、次の手順でビルドできていました。

ところが、Collectionsからモジュールは個別リポジトリで管理されるようになったため上記手順のようにSphinxでビルドしてドキュメント生成が出来なくなっていますが、別の手段でモジュールドキュメントの元になるrstを自動で生成することが出来ます。
今回はCollectionsのモジュールドキュメントのrstを自動で生成するやり方について紹介したいと思います。

collection_prep

Collectionsのドキュメント(rst)は次のツールで自動生成することが可能です。

要件として Python>=3.8 が必要になります。
このツールでは、以下の事が可能です

  • モジュールのドキュメントブロック(DOCUMENTATION/EXAMPLES/RETURN)からrstを自動生成
  • 自動生成したドキュメントのリンクをREADMEに反映
  • meta/runtime.ymlの情報をREADMEに反映

それでは、どう使うかを説明していきます。

Collectionsのドキュメントを自動生成する

今回は、以下にサンプルを用意していますので、これを元に説明します。

サンプルモジュールについて

サンプルでは、何もしないモジュールを用意しています。
今回、大事なのは以下のドキュメントブロックの中身です。
以下がドキュメントの元になる定義です。
これをパースしてrstを生成します。

README設定

READMEに次のアンカーを仕込みます。

requires_ansible の間はruntime.ymlで定義したCollectionがサポートするAnsibleの情報が入ります。
collection content の間は自動で生成したモジュールドキュメントのリンク情報が入ります。
ちなみに、ドキュメントのリンクで使うURLは galaxy.yml に定義した repository の値が使われます。

ドキュメント自動生成

それでは、Collectionのモジュールドキュメント自動生成してみましょう。
ツールを動作させるにはPython3.8が必要なので、ここではDockerでコンテナを使います。

それでは collection_prep をインストールしてみます。

それでは、サンプルのモジュールドキュメントを自動で生成してみましょう。
サンプルをクローンしてコマンドを実行します。

ドキュメントが生成された確認してみましょう。
生成されたドキュメントは docs ディレクトリにあります。

中身がrstで生成されていることが確認できます。

READMEも見てみましょう。
こんな感じでアップデートされます。

Collectionのモジュールドキュメント(rst)生成とREADMEへの反映の自動化が出来ました 🙂

最後に

これでrstは作れたので、後はレンダリングできるツール 1 を使って確認、GitHub/GitLabにそのままアップして確認、Sphinxでビルドして確認ができると思います。
ビルドも自動化してしまえば、ドキュメント作成も効率化出来てめんどくさくなくなりますね 🙂
今後、Collectionを開発していく方の参考になれば幸いです!

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください