0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

itamae sshした時に実行してるユーザを取得したかった

Last updated at Posted at 2016-08-24

そういう機会がたまにあるんだけどその度にレシピ中に binding.pry を仕込んで探してるのでメモ

シチュエーション

レシピを実行してるユーザのhomeディレクトリを作成したいような場合です

recipe.rb
directory "/home/#{current_user}" do
  mode  "755"
  owner current_user
end

whoami だと itamae local の時は問題ないのですが、itamae ssh だとレシピ適用先のリモートのユーザ ではなく、実行してるローカルのユーザがとれてしまいます。

ローカルとリモートでユーザが同じならそれでもいいのですが一致してない場合もあるので厳密にやるならssh実行中のユーザを取得する必要があります

やり方

こんな感じ(itamae v1.9.9で確認)

recipe.rb
def current_user
  case @recipe.runner.backend
  when Itamae::Backend::Local
    `whoami`.strip
  when Itamae::Backend::Ssh
    @recipe.runner.backend.instance_variable_get(:@backend).instance_variable_get(:@config)[:ssh_options][:user]
  end
end

node[:current_user] = current_user

directory "/home/#{node[:current_user]}" do
  mode  "755"
  owner node[:current_user]
end

一度 node につっこんでいるのは、directory リソースのブロック内で current_user を参照しようとするとそんな変数やメソッドはないよとエラーになるためです。(owner設定しないなら不要)

NameError: undefined local variable or method `current_user' for #<Itamae::Resource::Base::EvalContext:0x007fb53bf609a8>
  /myapp/vendor/bundle/ruby/2.3.0/gems/itamae-1.9.9/lib/itamae/resource/base.rb:40:in `method_missing'
  /myapp/cookbooks/home_dir/default.rb:18:in `block in load'

追記

書いた後にいろいろ試してみたけど ~/.ssh/config が設定されてないとうまくとれないっぽい :cry:

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?