0

さて、私はシェフの初心者であり、このコードをハッシュ化しようとしていると言って始めましょう。

私は完全なマックショップにいます。システム全体の変更を自動化するために Chef を使用しています。私は初心者なので、Mac AV システムに展開しています。

基本的に、MAC SCREEN SAVERS ディレクトリを持つファイル サーバー上にフォルダがあります。サーバー ディレクトリを MAC OS X の /User/user_name/Pictures ディレクトリにローカルにコピーします。

だから、これは私がシェフで得たものです:

    local_folder_modified = File.mtime("~/Pictures/SCREEN SAVER NEW MACS")
    server_folder_modified = File.mtime("/Volumes/SERVER/SCREEN\ SAVER\ NEW\ MACS/")


    if server_folder_modified != local_folder_modified
              # file has changed
    then
            require 'fileutils'

                    FileUtils.cd('server_folder_modified') do
                    FileUtils.rm('local_folder_modified/*')
                    FileUtils.cp_r './*', 'local_folder_modified'
            Else
                    end
    end

とにかく、「~」をこのレシピの実行ユーザーに設定する方法がわかりません。したがって、Comp_A にユーザー Jim_Beam がいて、Comp_B にユーザー Jack_Daniels がいる場合、コードを次のように設定したくありません。 ENV[HOME] = /user/jimbeam Jack_Daniels では機能しないためです。右?

file.expand または ENV が機能することを読みましたが、「ねえ、このスクリーンセーバーを必要とする現在のユーザーが必要です。環境を変数として設定して、異なるノード間で機能します。」

とにかく、助けてくれてありがとう。私が理にかなっていることを願っています!

4

2 に答える 2

0

file stat of を使用/dev/consoleして、現在のユーザーを取得することができます。シェフクライアントの実行方法によっては、あなたがEnv[‘Home’]望むものを与えないかもしれません。これを試して:

console_user = Etc.getpwuid(::File.stat("/dev/console").uid).name
home_dir = ::File.join(‘Users’, console_user)

Chef launchd プロバイダーがこのメソッドを使用して、コンソール ユーザーを決定していることがわかります。

また、remote_file リソースで達成しようとしていることをより簡単に行う方法もあります。これを試して:

console_user = Etc.getpwuid(::File.stat("/dev/console").uid).name
home_dir = ::File.join(‘Users’, console_user)
pics = ::File.join("#{home_dir}/Pictures/")
server_base_url = "https://PLACE_WHERE_STORE/Wallpapers")
[
  ‘Pic1’,
  ‘Pic2’,
].each do |pic|
  remote_file ::File.join(pics, pic) do
    source “#{server_base_url}/#{pic}”
    owner console_user
    group console_user
    mode '0755'
    action :create
  end
end

セキュリティを強化するために、チェックサムも含める必要があります

于 2017-11-23T17:36:57.913 に答える