0

好吧,让我们先说我是一个厨师菜鸟,我正在尝试将这段代码散列出来。

我在一个完整的mac商店。我正在使用 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

1

是的,使用 File.expand。它会将波浪号展开为~运行此说明书的用户的主目录。或者,您可以这样做:

"#{ENV['HOME']}/Pictures/SCREEN SAVER NEW MACS"

和前面的评论一样,这不是厨师 DSL 或 ruby​​ 代码。这段代码的来源是什么,或者只是提出问题的伪代码?

此外,chef-client 并不经常在厨师服务器部署中作为多个用户运行。它通常在 sudo 上下文中运行。那么,也许您指的是 --local-mode 或 chef-zero 应用程序?

于 2014-04-09T00:56:58.880 回答
0

您可能希望使用 file stat of/dev/console来获取当前用户。根据您运行 chef-client 的方式,Env[‘Home’]可能无法满足您的需求。试试这个:

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

可以看到cheflaunchd提供者使用这个方法来判断console用户

还有一种更简单的方法可以使用 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 回答