Puppet - 如何将文件复制到多个用户文件夹?

Puppet - 如何将文件复制到多个用户文件夹?

好吧,我正在使用以下信息:

Puppet——有没有办法从 Puppet Master(主机)复制客户端上软件的预定义自定义配置文件?

但我需要更详细的说明,因为我有多个桌面,每个桌面有 2 或 3 个用户使用,所以我想创建一个类来复制其桌面上的快捷方式。

计算机加入了域,因此任何用户都可以登录任何桌面,并且在每个桌面上都会创建他的配置文件。

我曾尝试过这个:

class applink {

  file { "/home/installer/Escritorio/Workdesktop.desktop":
       owner => installer,
       group => root,
       mode => 770,
       source => "puppet://$server/files/Workdesktop.desktop"            
 }

这仅适用于名为“安装程序”的用户,如何为多个用户执行此操作?

我可以用$USER它做这个吗?有什么想法吗?

谢谢你!

答案1

实际上有两种方法可以实现这一点:定义或虚拟资源。我对定义了解得更多,所以我将描述这种方法。在此处阅读有关虚拟资源的信息,但在理解之前请做好感到困惑的准备。

要在定义中执行此操作,请在您的模块结构包含它;在你的例子中,它将在_modulepath_/applink/manifests/desktoplinks.pp

define applink::desktoplinks {
  file { "/home/$title/Escritorio/Workdesktop.desktop":
    owner => $title,
    group => root,
    source => "puppet://$server/files/Workdesktop.desktop",
  }
  # you could have others here if you wanted
}

然后要使用它,您可以使用每个用户的名称来调用它,也许一次在一个数组中:

applink::desktoplinks { [ "user1", "user2", "user3" ]: }

诀窍在于用户名是已定义资源的“标题”,因此在定义中可以作为 来使用$title。阅读更多关于在这里定义类型

高血压

答案2

我刚刚学会了另一种方法。这更像是一种语法怪癖,但你可以这样做:

file { ["/home/installer/Escritorio/Workdesktop.desktop",
        "/home/user/Escritorio/Workdesktop.desktop"]:
  owner => installer,
  group => root,
  mode => 770,
  source => "puppet://$server/files/Workdesktop.desktop"            
}

关键是将其指定title为数组而不是字符串;Puppet 将按照您编写的内容来解析它:

file { "/home/installer/Escritorio/Workdesktop.desktop":
  owner => installer,
  group => root,
  mode => 770,
  source => "puppet://$server/files/Workdesktop.desktop"            
}
file { "/home/user/Escritorio/Workdesktop.desktop":
  owner => installer,
  group => root,
  mode => 770,
  source => "puppet://$server/files/Workdesktop.desktop"            
}

即,您可以在配置中获得两者File["/home/installer/Escritorio/Workdesktop.desktop"]并绑定。File["/home/user/Escritorio/Workdesktop.desktop"]

我认为这对许多类型的资源都有效,但我还没有测试过除此之外的任何其他资源file

相关内容