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までお願いします!