在 Puppet 自定义类型中创建导出资源
Create exported resource inside Puppet custom type
我尝试在 Puppet 中创建自定义类型,以便根据某些主机状态生成一些内容(例如在 /etc
目录中生成令牌文件)。
我还想在这个自定义类型中创建 File[/etc/token]
并将其导出到 PuppetDB 以便在集群中的所有其他主机上收集它
我试过这样的代码,但它没有按预期工作:
def generate
return [] unless self[:export]
cluster = self[:cluster]
user = self[:name]
should = self.should(:ensure) || :present
path = "/etc/#{cluster}.#{user}.token"
return [] if catalog.resource(:file, path)
token = Puppet::Resource.new(:file, path)
token[:ensure] = should
token[:content] = provider.create_token
token.virtual = true
token.exported = true
[Puppet::Type.type(:file).new(token)]
end
如果没有 token.virtual = true
和 token.exported = true
,此函数可以按预期在本地生成所需的文件,但我无法导出它
唯一的解决方法是使用包含所需内容的自定义事实,例如 $fact['user_token']
并使用默认方式导出此内容:
if $facts['user_token'] {
@@file { '/etc/clustername.username.token':
ensure => file,
content => $facts['user_token'],
}
}
有人知道如何在自定义类型代码中生成导出资源吗?
谢谢
Does anybody know how to generate exported resource inside custom type code?
您不能使用资源实例从目标节点提取的数据来导出资源。资源评估的时机和上下文都错了:
- 目录构建时导出资源。当目录被应用到目标节点时,为时已晚。
- 资源由 catalog-building 主机 导出。这通常是与目标节点不同的机器,它无法访问从目标节点获得的任何数据,除了节点事实。其他节点通常无法直接访问 exported-resource 数据,更不用说写入访问了。
另一方面,如果您不需要从目标节点提取数据(节点事实除外),那么您不需要在插件类型中完成这项工作。在这种情况下,通常的方法是为插件类型创建一个 defined-type 包装器,并将资源导出放在那里。
我尝试在 Puppet 中创建自定义类型,以便根据某些主机状态生成一些内容(例如在 /etc
目录中生成令牌文件)。
我还想在这个自定义类型中创建 File[/etc/token]
并将其导出到 PuppetDB 以便在集群中的所有其他主机上收集它
我试过这样的代码,但它没有按预期工作:
def generate
return [] unless self[:export]
cluster = self[:cluster]
user = self[:name]
should = self.should(:ensure) || :present
path = "/etc/#{cluster}.#{user}.token"
return [] if catalog.resource(:file, path)
token = Puppet::Resource.new(:file, path)
token[:ensure] = should
token[:content] = provider.create_token
token.virtual = true
token.exported = true
[Puppet::Type.type(:file).new(token)]
end
如果没有 token.virtual = true
和 token.exported = true
,此函数可以按预期在本地生成所需的文件,但我无法导出它
唯一的解决方法是使用包含所需内容的自定义事实,例如 $fact['user_token']
并使用默认方式导出此内容:
if $facts['user_token'] {
@@file { '/etc/clustername.username.token':
ensure => file,
content => $facts['user_token'],
}
}
有人知道如何在自定义类型代码中生成导出资源吗?
谢谢
Does anybody know how to generate exported resource inside custom type code?
您不能使用资源实例从目标节点提取的数据来导出资源。资源评估的时机和上下文都错了:
- 目录构建时导出资源。当目录被应用到目标节点时,为时已晚。
- 资源由 catalog-building 主机 导出。这通常是与目标节点不同的机器,它无法访问从目标节点获得的任何数据,除了节点事实。其他节点通常无法直接访问 exported-resource 数据,更不用说写入访问了。
另一方面,如果您不需要从目标节点提取数据(节点事实除外),那么您不需要在插件类型中完成这项工作。在这种情况下,通常的方法是为插件类型创建一个 defined-type 包装器,并将资源导出放在那里。