ansible_userプレイブックの「最初の実行」で異なる場合(たとえば、rootユーザーが1人だけで、SSHキーを使用して新しいユーザーを設定する場合)、次のようにします。
ansible_passパスワードログインを使用している場合と同じようにパスワードを保存します(Vaultを使用することを忘れないでください)。これは、プレイブックの「最初の実行」に使用しているユーザーのパスワードです。
- 設定し
ansible_user、あなたがサーバー上で正しく設定されたユーザーを持っていたときに最初に実行した後に使用したいユーザーのユーザー名に。
- の変数を
ansible_user_first_run、プレイブックの「最初の実行」に使用するユーザーに設定します(例:)root。
- 使用して、正しいSSHキーでサーバーに接続しようとする地元のコマンドを使用
ignore_errorsし、changed_when: False
- それが失敗した場合、
ansible_user値に更新しますansible_user_first_run
コードは次のとおりです。
---
- name: Check if connection is possible
command: ssh -o User={{ ansible_user }} -o ConnectTimeout=10 -o PreferredAuthentications=publickey -o PubkeyAuthentication=yes {{ inventory_hostname }} echo "Worked"
register: result
connection: local
ignore_errors: yes
changed_when: False
- name: If no connection, change user_name
connection: local
set_fact:
ansible_user: "{{ ansible_user_first_run }}"
when: result|failed
注:transport = sshいくつかの構成では、paramikoがサーバーへのログインに予期せず失敗する可能性があるため、設定する価値があります(たとえば、サーバーがパスワードを受け入れないように設定されている場合、最初にキーを入力してからパスワードを入力しようとすると...変です!)また、sshトランスポートは高速なので、とにかく価値があります。
さらに注意:この方法を使用している場合、gather_facts: falseパスワードのテスト段階に到達する前にセットアップ/ファクト収集タスクが自動的に実行されないように、プレイブック定義ファイルで指定する必要があります。あなたがansible事実のいずれかが必要な場合は、明示的に呼び出す必要がありますsetupような場所で、通常は利用可能なデータのいずれかにアクセスする前に、あなたの役割でansible_devicesこれを行うなど、一つの良い方法は呼び出すことですsetupしてwhenいる場合のチェックが参照すること句使用しているという事実は空であるか、ロールで呼び出す前ではありません。