[解決済み] Ansibleで任意のリモートユーザーのホームディレクトリを取得する方法とは?
2023-03-17 13:43:36
質問
シェルで
getent
と
awk
のようにします。
getent passwd $user | awk -F: '{ print $6 }'
参考までに、Puppetではこのようにカスタムファクトを利用することができます。
require 'etc'
Etc.passwd { |user|
Facter.add("home_#{user.name}") do
setcode do
user.dir
end
end
}
で、ユーザのホームディレクトリを
home_<user name>
という事実があります。
のホームディレクトリを取得するにはどうすればよいですか? 任意の リモートユーザのホームディレクトリを取得するには?
どのように解決するのですか?
Ansible (1.4 以降) では、すでにユーザーの環境変数を
ansible_env
変数の下に表示されます。
- hosts: all
tasks:
- name: debug through ansible.env
debug: var=ansible_env.HOME
残念ながら、このプレイブックと出力が示すように、接続されたユーザーの環境変数を取得するためにのみ使用できるようです。
- hosts: all
tasks:
- name: debug specified user's home dir through ansible.env
debug: var=ansible_env.HOME
become: true
become_user: "{{ user }}"
- name: debug specified user's home dir through lookup on env
debug: var=lookup('env','HOME')
become: true
become_user: "{{ user }}"
出力 :
vagrant@Test-01:~$ ansible-playbook -i "inventory/vagrant" env_vars.yml -e "user=testuser"
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.0.30]
TASK: [debug specified user's home dir through ansible.env] *******************
ok: [192.168.0.30] => {
"var": {
"/home/vagrant": "/home/vagrant"
}
}
TASK: [debug specified user's home dir through lookup on env] *****************
ok: [192.168.0.30] => {
"var": {
"/home/vagrant": "/home/vagrant"
}
}
PLAY RECAP ********************************************************************
192.168.0.30 : ok=3 changed=0 unreachable=0 failed=0
Ansibleのあらゆるものと同様に、もしあなたが欲しいものを与えてくれるモジュールを得ることができないなら、あなたはいつでも自由に シェル を使うことができます (ただし、これは壊れやすく、説明不足になるため、控えめに使うべきです)。
- hosts: all
tasks:
- name: get user home directory
shell: >
getent passwd {{ user }} | awk -F: '{ print $6 }'
changed_when: false
register: user_home
- name: debug output
debug:
var: user_home.stdout
もっと簡単な方法があるかもしれません。
become_user
を使用して指定されたユーザーに切り替えても
env
のルックアップには影響しないようですが、これで望みのものが得られるはずです。
関連
-
[解決済み] リモートシステムでAnsibleタスクを使用してファイルを移動/リネームする方法
-
[解決済み] Ansibleでディレクトリを作成する方法
-
[解決済み】ansible playbookで1つのタスクだけを実行する方法は?
-
[解決済み】ansibleのSSH認証チェックを無視する方法は?
-
[解決済み] Ansibleの定義済み変数の一覧はどこで手に入りますか?
-
[解決済み] Ansible hosts ファイルに定義されている現在のマシンのホスト名を取得する方法は?
-
[解決済み] Ansible がホームディレクトリに .retry ファイルを作成しないようにするにはどうすればよいですか?
-
[解決済み] ansibleのインベントリファイルでhost_key_checking=falseを設定するには?
-
[解決済み] Ansible: 現在のターゲットホストの IP アドレスを取得する
-
[解決済み] Ansibleです。コマンドのstdoutを新しい変数に格納する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Ansibleのロールのdefaultsとvarsの違いは何ですか?
-
[解決済み] タスクまたはタスクのセットごとにユーザーを切り替えるには?
-
[解決済み] ansibleで変数が未定義のときにタスクを実行するには?
-
[解決済み] Ansible - 変数が定義されていない場合は、デフォルトを使用する
-
[解決済み] 現在実行中の ansible-playbook へのパスを持つ変数?
-
[解決済み] Ansible playbook の hosts 変数をコマンドラインからオーバーライドする
-
[解決済み] Ansible PlaybooksとRolesの比較
-
[解決済み] ホストがグループに属していない場合のみ、タスクを実行する
-
[解決済み] Ansibleです。ファイルの内容に変数を設定する
-
[解決済み] Ansibleです。コマンドのstdoutを新しい変数に格納する?