- Mastering Puppet 5
- Ryan Russell Yates Jason Southgate
- 163字
- 2021-07-16 17:46:17
Using the confine method
The confine method can be used with a fact, as shown in the following code:
Puppet::Type.type(:mynewtype).provide(:myprovider) do
...
confine :osfamily => :redhat
...
end
The confine method could also use exisits to base its conditions on whether a certain file is present on the system under management. The following example demonstrates how the provider is restricted to only those systems where Puppet's .config file exists:
Puppet::Type.type(:mynewtype).provide(:myprovider) do
...
confine :exisits => Puppet[:config]
...
end
Another possibility is to base the conditions of the confine method on certain Puppet features (they are all listed in the source code directory at https://github.com/puppetlabs/puppet/tree/master/lib/puppet/feature), as shown in the following code:
Puppet::Type.type(:mynewtype).provide(:myprovider) do
...
confine :feature => :selinux
...
end
Finally, confine can accept a Boolean expression to restrict your provider, as shown in the following code:
Puppet::Type.type(:mynewtype).provide(:myprovider) do
...
confine :exisits => Puppet[:config]
...
confine :true => begin
if File.exists?(Puppet[:config])
File.readlines(Puppet[:config]).find {|line| line =~ /^\s*\[agent\]/ }
end
end
...
end