1. ホーム
  2. ansible

[解決済み] Ansibleで任意のリモートユーザーのホームディレクトリを取得する方法とは?

2023-03-17 13:43:36

質問

シェルで getentawk のようにします。

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 のルックアップには影響しないようですが、これで望みのものが得られるはずです。