好吧,我正在使用以下信息:
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
。