ansible_user, remote_user などの違いと使い分け [変数 != キーワード]
Ansibleの実行ユーザーとそのパスワードに使われる変数の使い分け
同じような変数(?)が複数あり、どれを使えばいいのか迷ったため。
調べていくと、変数とキーワードの違いが分かっていなかったため少し混乱した。
remote_user
リモートにsshでログインするユーザー名。キーワード。
playbookのキーワードとは、変数ではなく、設定値である。
変数は、あくまで変更を容易くする"データ"であり、playbookの実行やansibleによる状態の記述を補助するものとして扱う。
つまり、キーワードとは、お馴染みのtasks
やwhen
などと同じ分類のものである。…と言われるとわかりやすいと思う。
playbookの
と書いているのは、他にもrole
, block
, task
のキーワードがあるためである。これらの種類によって、各場所(必要なインデントの量)が変わる。
キーワードは変数ではないため、gather_facts: no
と変数を設定しても意味がない。
- hosts: test_server # これは(playbookの)キーワード。効果を発揮する。 gather_facts: no vars: # これは変数。特に意味がない。 gather_facts: no roles: - role: test
キーワードで設定されたものは、対応する変数によって上書きされ得る。
例えば、become: yes
と、キーワードを設定していても、変数の定義でansible_become: no
とすれば、権限昇格されない。
- hosts: test_server # これはキーワード become: yes vars: # この変数でbecomeの可否が上書きされる ansible_become: no roles: - role: test
ansible_user
同じくsshでログインするユーザー名。これは変数。
特殊な変数 Special Variables — Ansible Documentation
ansible_ssh_user
同上(古いので非推奨1)
ansible_password
sshのpassword。変数。
さらに、becomeのpasswordとしても使える。そのため、これを設定しておけばansible_become_password
は書かなくてもよい。
2021.07.17 修正
SSHを公開鍵認証で接続できているなら、これは書かなくてもよい。ただし、ansible_become_password
は必須。
ansible_ssh_password
同上(古いので非推奨2)
ansible_become_password
becomeのpassword。変数。
これをsshのpasswordとして使うことはできない。
ansible_become_pass
同上(古いので非推奨3)
(余談)ansible.cfgについて
become_user
やremote_user
などのキーだけでなく、ANSIBLE_REMOTE_USER
のような環境変数としての記述もできる。
キーと環境変数一覧 Ansible Configuration Settings — Ansible Documentation
しかし、ここにはpasswordについてのキー、環境変数は定義されていない。
...結局
ユーザー名とパスワードのセットで書いておきたいし、group_varsにansible_user
とansible_password
を書いておくのでFAにしようと思う。
Ref
Controlling how Ansible behaves: precedence rules — Ansible Documentation