LoginSignup
20
16

More than 5 years have passed since last update.

Atom用Ansible Playbook自動補完プラグイン作ってみた

Last updated at Posted at 2016-07-25

Playbookを書く度に毎回公式ドキュメントを開くのが苦痛になってきたので、いい感じのヘルパーが欲しくなったのだけれど、AnsibleのPython APIを叩いて動的に情報取ってくるようなものはなかったので自分で作ってみました。
完全に自分用に作っただけだったんですが、割と便利だったので公開してみます。

公開URL

https://atom.io/packages/autocomplete-ansible
https://github.com/h-hirokawa/atom-autocomplete-ansible

必要環境

  • Ansible 2.0 以上がインストール済み
  • autocomplete-plusが有効化されたAtomエディタ(デフォルト状態のはず)

インストール方法

$ apm install autocomplete-ansible

もしくは、Atom GUI上の Install Packages からどうぞ。

HomebrewでAnsibleをインストールしている時の注意点

OS XでHomebrewからインストールしている場合、そのままではPythonからAnsibleを参照できないため、以下のように 環境変数PYTHONPATH を設定してからAtomを起動してください。

$ export PYTHONPATH="/usr/local/Cellar/ansible/2.1.0.0/libexec/lib/python2.7/site-packages:/usr/local/Cellar/ansible/2.1.0.0/libexec/vendor/lib/python2.7/site-packages:$PYTHONPATH"
$ atom

2.1.0.0の部分はインストールされているAnsibleのバージョンによって変わります。
なお、/usr/local/bin/ansible 内にも実際にAnsible起動時に設定されているPYTHONPATH の値が書いてあります。

ちなみに、次回アップデートでは PYTHONPATH をプラグイン設定から追加できるようにする予定です。

機能

  • 各種ディレクティブ名、モジュール名の自動補完
    • モジュール名の補完候補表示には公式ドキュメントへのリンク付き
    • with_ と打つとループ用のLookupプラグイン名も補完される
  • モジュールの引数を補完するスニペット
    • モジュール名 + r: 必須引数だけを展開
    • モジュール名 + o: オプション含めて全ての引数を展開

以上!!
オプション設定項目とかは(今の所)何もありません。

やっていること

Ansibleのモジュール・ドキュメントとかディレクティブ情報を取ってきてJSONで出力する簡単なPythonスクリプトをAtomから実行して、文字列マッチとかの処理は autocomplete-plus のProvider APIを使ってゴニョゴニョしてます。

こだわり

  • ディレクティブの補完はYAMLのキーを入力している時のみ有効
  • モジュール名の補完が有効になるのは、上記に加えてキーが action/local_action の時
  • モジュール名がキーの時も action/local_action がキーの時もスニペットがいい感じに動く
    • action/local_action 時は、引数を args: ブロック内に展開する
  • commandモジュールなどの名前なし引数も正しく扱える

ちなみにモジュール引数は = 繋ぎ文字列ではなく、全て辞書形式で展開されるようにしてあります。

ToDo

  • PythonインタープリタのパスとPYTHONPATHの設定くらいはできるようにする
  • テスト書く
  • モジュール・ブロック内で個別にモジュール引数を自動補完できるようにする
  • そのうち変数の補完も対応したい

バグ報告やご意見・ご要望はgithubのissuesまでお願いします!

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16