てくなべ (tekunabe)

ansible / network / automation

[Ansible] 認証情報の変数名は ansible_user、ansible_password に統一したほうがよさそう

■ はじめに

Ansible で管理対象ホストのユーザー名やパスワードを定義する変数名はいくつかあります。

  • ユーザ名
    • ansible_ssh_user
    • ansible_user
  • パスワード
    • ansible_ssh_pass
    • ansible_pasword

みなさんはどのよいうに使い分けていますでしょうか。

先日たまたま、現在開発中の Ansible 2.8 の Porting Guide を眺めていたら、

  • ユーザー名とパスワードは ansible_useransible_pasword という変数名に統一しましょう
  • ansible_ssh_user のようなコネクションタイプ名が含まれる変数名は将来的に非推奨になるだろう

という旨の記述を見かけました。

Connection plugins have been standardized to allow use of ansible<conn-type>user and ansible<conn-type>password variables. Variables such as ansible<conn-type>pass and ansible<conn-type>username are treated with lower priority than the standardized names and may be deprecated in the future. In general, the ansible_user and ansible_password vars should be used unless there is a reason to use the connection-specific variables.

この記事では本件の経緯などをまとめます。

(以下ツイートの続きです)


■ 経緯

下記の issue で、 _pass_password などの複数の変数名が許容されているものは、ドキュメント上は標準化していったほうが良いのではという提案がありました。

github.com

対するプルリクは以下のものです。

github.com

ドキュメントやログメッセージに含まれる変数名が以下のように変更されていることが、変更の差分で確認できます。

  • ansible_ssh_user から ansible_user
  • ansible_ssh_pass から ansible_password
  • ansible_become_pass から ansible_become_password


■ そもそもどのような変数名が使えるの?

もし既存の Playbook や 変数名の中から認証情報に関する変数名を洗い出して統一するために修正する場合、そもそもどのような変数名が使えるのかを知る必要があります。その場合は、各コネクションプラグイン最新版Doc開発中Doc)の説明ページで確認できます。

例えばネットワークモジュール向けのひとつ、 network_cli コネクションプラグイン (最新版Doc開発中Doc) であれば、パスワードとして ansible_ssh_passansible_password を利用できることが確認できます。


■ まとめ

Ansible で管理対象ホストのユーザー名やパスワードを定義する変数名は、標準化、将来性のため ansible_useransible_password に統一したほうが良さそうです。