我有一个为linux系统编写的大型模块。但是我需要它在windows上工作,所以我想重写它来处理这两种情况。
有很多清单,据我所见,到目前为止,大多数清单都应该适用于Windows,因为傀儡会看到它在windows上运行,并选择最佳的提供者。
然而,有一些部分不能工作。例如,此主管将无法在windows上工作。
exec { 'touch_file' :
command => 'touch /etc/test.txt',
path => ['/bin', '/usr/bin'],
cwd => '/tmp',
creates => '/etc/test.txt',
}这在linux中是可行的,但在Windows中,我会将其更改为powershell命令,并更改creates、cwd和path。我可以将每个部分更改为${variable},并在Exec语句之上有一个case语句,该语句基于::osgroup选择正确的变量,但我不确定这是否是处理此问题的最佳方法。有更好的方法来处理多操作系统模块吗?
发布于 2015-10-12 16:02:09
有时候,根据您所针对的操作系统,有不同的执行人员会更好。请参阅agent作为一个很好的例子:
agent/blob/f76482b2b68bd80115de87037ba71068bea4e35b/manifests/init.pp#L36-L46
if $::osfamily == 'windows' {
class { '::puppet_agent::prepare': } ->
class { '::puppet_agent::windows::install': }
}
else {
if $::operatingsystem == 'SLES' and $::operatingsystemmajrelease == '10' {
$_package_file_name = "${puppet_agent::package_name}-${puppet_agent::params::master_agent_version}-1.sles10.${::architecture}.rpm"
} elsif $::operatingsystem == 'Solaris' and $::operatingsystemmajrelease == '10' {
$_package_file_name = "${puppet_agent::package_name}-${puppet_agent::params::master_agent_version}-1.i386.pkg.gz"
}
class { '::puppet_agent::prepare':
package_file_name => $_package_file_name,
} ->
class { '::puppet_agent::install':
package_file_name => $_package_file_name,
} ->
class { '::puppet_agent::service': }
contain '::puppet_agent::prepare'
contain '::puppet_agent::install'
contain '::puppet_agent::service'
}https://stackoverflow.com/questions/33036425
复制相似问题