てくなべ (tekunabe)

ansible / network / automation

[Ansible] Visual Studio Code で Playbook を書く時に便利な拡張たち

はじめに

Visual Studio Code(以下、VS Code)で Ansible の Playbook を書く時に、私が便利に利用させてもらっている拡張をご紹介します。

「自分は WindowsVS Code 使ってて、Ansible は SSH 先の Linux だから関係ないや。」という方も、最後の「Remote Developement」まで見ていただけると幸いです。手元が Windows でも通用します。

  • 動作確認環境: VS Code 1.38.1

その前に・・標準ではどんな感じに?

VS Code では特に拡張を入れなくてもある程度は Playbook が書きやすいようになっています。

具体的には Playbook の拡張子を .yml または .yaml にするこことで、言語として YAML が選択されます。

これにより、シンタックスハイライトが効くようになり、見やすくなります。 オートインデントや、インデントのレベルに応じた折りたたみ、展開も標準でできます。

f:id:akira6592:20190921113901p:plain
デフォルトでも見やすい

標準のこの状態から、拡張をいくつかインストールすることによって、もっと Playbook が書きやすくなります。

一覧

以下が今回ご紹介する拡張です。

名前 作成者 概要
YAML Red Hat YAML のバリデーションなど
indent-rainbow oderwat インデントのレベルを区別しやすく色付け表示
Ansible Microsoft オートコンプリートや環境との連携など
Remote Development Microsoft リモートの環境を手元の VS Code で直接編集、デバッグなど

YAML

marketplace.visualstudio.com

Ansible といえば Playbook。Playbook といえば YAML。ということで、YAML という拡張をインストールしています。

拡張の説明としては

YAML Language Support by Red Hat, with built-in Kubernetes and Kedge syntax support

とのことですが、Kubernetes に限らず普通に YAML を書く上で便利です。

例えば以下のような機能があります。

f:id:akira6592:20190921112428p:plain
シンタックスエラーを検出

この拡張の設定を色々カスタマイズすると、もっと便利になるかも知れません。

[2019/10/01 追記]

こちらの説明にあるように、schemas を読み込ませることで、様々な形式のフォーマットでオートコンプリートなどができるようになるようです。 例えば、setting.json に以下のように設定すると、JSON Schema Store のAnsible 2.7 のタスク定義のオートコンプリートが効くようになりました。

    "yaml.schemas": {
        "http://json.schemastore.org/ansible-stable-2.7": "/*.yml"
    }

モジュール名だけでなく、オプションもオートコンプリートが効きました。

f:id:akira6592:20191001213218g:plain
モジュール名もオプションもオートコンプリート

- hosts: から書き始めるとエラーになるので、Playの定義でなくタスクの定義に特化したSchemaのようです。


■ indent-rainbow

marketplace.visualstudio.com

YAML は インデントが命です。標準でもカーソル行のインデントレベルに応じたガイドが表示され、分かりやすいようになってきています。もっと分かりやすく するために、indent-rainbow という拡張をインストールしています。

インデントレベルに応じて虹色になります。

f:id:akira6592:20190921112331p:plain
虹色になってインデントレベルが分かりやすい

デフォルトでは色が見にくいと感じるかも知れませんが、設定によって色を変更できます。


■ Ansible

marketplace.visualstudio.com

そのものずばり、Ansible という拡張です。

  • モジュール名などのオートコンプリート
  • スニペット
  • YAML のバリデーション
  • Azure Cloud Shell や Docker などの 実行環境との連携

などのざまざまな機能があります。ここでは、私が特に便利だと感じている機能を紹介します。

オートコンプリート

モジュール名などがオートコンプリートされます。更に嬉しいことに、該当モジュールのドキュメントへのリンクも表示されます。

f:id:akira6592:20190921112504p:plain
オートコンプリート

YAML バリデーション

また、YAML のバリデーションも強力です。例えば、キーが重複している時にお知らせしてくれます。

f:id:akira6592:20190921112537p:plain
キーの重複を検出

試した限り、このバリデーションは YAML という拡張ではできませんでした。

なお、ansible-playbook コマンド では、Playbook 内のキーが重複して居る場合、最後の定義が優先になります。同時に WARNING が表示されますが、そのまま実行されます。意図しない動作を防止するため、Playbook を書く段階でキーの重複に気づける仕組みがあるのは助かります。

Playbook に限れば、YAML という拡張は不要かも?


■ Remote Developement

marketplace.visualstudio.com

Playbook を書く時に限らず、本当に便利です。 SSH、WSL、コンテナなど、リモートの環境やファイルを手元の VS Code で直接編集、デバッグできるようになります。

例えば「普段は WindowsVS Code を使っているが、Ansible が入っているのは LinuxVM。なので、SSH でログインして vi で Playbook を書いている。できれば Windows 上の VS Code で直接編集 したい・・・」というような方におすすめです。

Remote Revelopement では、接続先の種類に合わせて以下の3つの拡張を必要に応じてインストールします。

私は今のところ、Remote - SSH を利用しています。

なお、他にも SSH FS のようにリモートのファイルシステムをマウントできる拡張はあります。Remote Revelopement の強みは、単にファイルシステムのマウントだけでねく、リモートデバッグできる点だと思います。(Playbookを書くという点ではあまり関係ないですが)



まとめ

Visual Studio Code で Playbook を書く時に便利な拡張をご紹介しました。 私自身もまただま使いこなせていない感はありますが、楽に Playbook を書きたい方、YAMLシンタックスエラーで疲れ気味な方におすすめです。

参考

vim の場合

tekunabe.hatenablog.jp