てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] VS Code の Ansible 拡張でファイル名やモードラインで関連付けされるようになった

はじめに

VS Code で Ansible の Playbook を作成するときに便利な、Ansible という拡張があります。モジュール名やキーワードを自動補完してくたり、ansible-lint と連携してくれたり、とても便利な拡張です。

marketplace.visualstudio.com

この拡張を有効にするには、言語モードを Ansible として開く必要があります。デフォルトでは YAML として開くので、手動で Ansible に指定し直すか、settings.jsonfiles.associations で関連付けを明示的に指定する必要があります。

この点は、最初のつまずきポイントかもしれません。そのためか、本拡張機能バグレポートのテンプレートにも、言語選択が Ansible になっているか確認する項目が設けられています。

本拡張の v0.13.0 で、特定の条件にマッチするファイルの言語選択が Ansible になる関連付けが、デフォルトで組み込まれました。

関連付けのルール

どんなファイル名が Ansible に関連付けられるのかは、package.json のこのあたりを見るとわかります。

        "extensions": [
          ".ansible.yml",
          ".ansible.yaml"
        ],
        "filenamePatterns": [
          "**/playbooks/*.yml",
          "**/playbooks/*.yaml",
          "**/*playbook*.yml",
          "**/*playbook*.yaml"
        ],
        "filenames": [
          "site.yml",
          "site.yaml"
        ],

ほか、PR #600を見ると、ファイルの先頭に

# code: language=ansible

を仕込んでおくと、関連付けされることが分かります。

関連付けを試す

ユーザー の settings.json も、ワークスペースsettings.jsonfiles.associations は空の状態で試します。

いくつかのパターンのファイルを用意しました。ファイル名に Ansible のアイコンになっているのが自動で Ansible に関連付けられたファイルです。

関連付けのお試し

個人的にポイントかなと思ったのは以下の点です。

  • ディレクトリは playbook ではなく、playbooks である必要がある
  • ロール内のファイルは関連付け対象外

おわりに

拡張側の設定として関連付けがされるものを試しました。

あとは、お好みに応じて settings.json で、

{
  // ...(略)...
  "files.associations": {
    "sakana.yml": "ansible",
    "ugui.yml": "ansible"
  }
  // ...(略)...
}

のように追加設定すれば良いかなと思います。