我在一个模块中有一个用户资源,它被几个不同的节点使用。现在我想将此用户添加到组中,但仅限于一个特定节点。对此有一个很好的解决方案吗?
模块看起来像这样:
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="SalvarItemIOS" Command="{Binding SalvarCommand}" Order="Primary" Priority="0">
<ToolbarItem.Name>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="Done"/>
</OnPlatform>
</ToolbarItem.Name>
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="Android" Value="ic_check"/>
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem>
<ToolbarItem x:Name="RemoveItemIOS" Command="{Binding RemoveCommand}" Order="Primary" Priority="1">
<ToolbarItem.Name>
<OnPlatform x:TypeArguments="x:String">
<On Platform="iOS" Value="Trash"/>
</OnPlatform>
</ToolbarItem.Name>
<ToolbarItem.Icon>
<OnPlatform x:TypeArguments="FileImageSource">
<On Platform="Android" Value="ic_delete"/>
</OnPlatform>
</ToolbarItem.Icon>
</ToolbarItem>
</ContentPage.ToolbarItems>
节点清单:
class testmodule::basics {
user { 'testuser':
ensure => present,
home => '/home/testuser',
managehome => true,
}
}
答案 0 :(得分:1)
你有几种选择,分为几个一般类别。
类别1 - 使用外部数据来传达用户应具有的辅助组。特定数据可能是一个标志,用于指示用户是否应位于辅助组中,或者它可能是相应辅助组的实际数组。然后,您可以通过直接调用lookup()
或hiera()
函数来获取它,具体取决于您使用的Puppet版本,或者为其创建类参数,以及使用自动数据绑定。
示例:
<强>模块/ testmodule /舱单/ basics.pp 强>:
class testmodule::basics($secondary_groups = []) {
user { 'testuser':
ensure => present,
home => '/home/testuser',
managehome => true,
groups => $secondary_groups
}
}
数据/节点/ special.my.com.yaml 强>:
---
testmodule::basics::secondary_groups:
- testgroup
类别2 - 设置类参数以接收区分数据,就像在类别1选项之一中一样,并通过外部节点提供数据分类器(ENC),而不是外部数据。设置和启用ENC比将数据提供给单个班级具有更广泛的意义,但是,除非您已经在使用或计划使用ENC,否则我不建议这样做。
类别3 - 在需要时执行资源参数覆盖。这可能几乎是对示例清单的一个简单更改,但最好将覆盖放在一个单独的类中,而不是直接在节点块中执行它。在来自inherits
的{{1}}的类中,您可以使用资源参数覆盖语法,如下所示:
<强>模块/ testmodule /舱单/基础/ special.pp 强>:
testmodule::basics
但是,如果要在节点块或不相关的类中执行此类覆盖,则需要通过收集器执行此操作:
class testmodule::basics::special inherits testmodule::basics {
User['testuser'] {
groups => 'testgroup'
}
}
对于两种覆盖有一些超出可能使用范围的细微差别,因此请阅读the docs以获取更多信息。