【Ansible】Developing collections を読んだ

Ansible collections作成のドキュメントをまた英語で読まなくて良いように日本語でまとめておく。

元サイトは以下。

https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#developing-collections

英語力と技術力低さはお察しなので内容は保証できず。。。

後で気づいたことやgalaxy.ymlの内容等もどこかで調べる。


Developing collections

Collection structure

ディレクトリ構成

collection/
├── docs/
├── galaxy.yml
├── plugins/
│   ├── modules/
│   │   └── module1.py
│   ├── inventory/
│   └── .../
├── README.md
├── roles/
│   ├── role1/
│   ├── role2/
│   └── .../
├── playbooks/
│   ├── files/
│   ├── vars/
│   ├── templates/
│   └── tasks/
└── tests/
  • 必ず必要なのはgalaxy.ymlだけ
  • 他は公開したいものがあれば適宜追加
  • draft collectionを参考にして作るべし

各ファイルの詳細

  • galaxy.yml

  • docs directory

    • ansible-docコマンドで使用される内容をここにおく
    • コレクションが提供するロールとプラグインの使用方法、ロールの要件などを説明する
  • plugins directory

    • pluginに応じてサブディレクトリを用意する
    • varとinventoryプラグインはサポートされていない
    • module、module_utilsもここに置く
    • 注意事項
    • Pythonのimport文はFQCNを考慮する必要がある
      ansible_collections.{namespace}.{collection}.plugins.module_utils.{util} import {something}
  • roles directory

    • ロール名には以下の制限がある
    • 小文字アルファベットから始まること
    • 使えるのは小文字アルファベット、数字、アンダーバー
    • ロールディレクトリのなめがロールとして使用されるため上記命名規則に従う必要がある
  • playbooks directory

    • TBD
  • tests directory

    • TBD
    • コレクションをテストするものが入っていることが望ましい

Creating collections

コレクションの作成手順

  1. ansible-galaxy collection initコマンドで骨組みを作成する

    collection_dir#> ansible-galaxy collection init my_namespace.my_collection
  2. 必要なものを適宜追加

  3. ansible-galaxy collection buildコマンドでcollection artifactをビルド

    collection_dir#> ansible-galaxy collection build

    上記コマンドを実行するとtar形式で圧縮される

    my_collection/
    ├── galaxy.yml
    ├── ...
    ├── my_namespace-my_collection-1.0.0.tar.gz
    └── ...
    • 注意事項(Ansilbe 2.10以降のみ)
    • 圧縮ファイルの最大サイズは2MB
    • 以下のファイルはデフォルトで圧縮の対象外となる
      • galaxy.yml
      • *.pyc
      • *.retry
      • tests/output
      • 以前に構築されたartifact
      • .git等のバージョン管理ファイル
    • 任意のファイルを圧縮の対象が意図したい場合はgalaxy.ymlのbuild_ignoreに記入する
      build_ignore:
      - playbooks/sensitive
      - '*.tar.gz'
  4. Trying collections locally

    • 以下コマンドでコレクションのインストールをローカル実行できる。
      ansible-galaxy collection install my_namespace-my_collection-1.0.0.tar.gz -p ./collections
    • コマンド実行時には自分の環境のCOLLECTIONS_PATHSを指定する(ansible-config -list で確認できる
    • インストールできたらUsing collectionsを参考に実行する
  5. Publishing collections

    • 一度公開すると削除や編集ができないので注意が必要
    1. APIトークンを取得する
    2. 取得したトークンは以下どちらかの方法で指定する
    3. ansible-galaxyコマンドの--tokenオプション指定
      ansible-galaxy collection publish ./geerlingguy-collection-1.2.3.tar.gz --token=
    4. ansible.cfgのgalaxy_serverセクションで指定
      [galaxy]
      server_list = release_galaxy
      [galaxy_server.release_galaxy]
      url=https://galaxy.ansible.com/
      token=my_token
    5. 以下いずれかの方法で公開する
      1. ansible-galaxyコマンドで公開する
        ansible-galaxy collection publish path/to/my_namespace-my_collection-1.0.0.tar.gz
        • デフォルトの公開先は https://galaxy.ansible.com になっている
        • Automation Hubやその他の場所に公開したい場合はansible.cfgを編集する
      2. Galaxy webサイトから公開する
        • 自分のアカウントページから[Add Content]へ進み[Upload New Collection]をクリック
        • namespaceはgalaxy.ymlに定義されたものが使用される
        • アップロードしたアカウントがネームスペースのオーナーではない場合、アップロードは失敗する
        • バージョニングはSemantic Versioningに従うこと

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です