如何处理人偶模块中的 linux 和 windows?
How to handle linux and windows in puppet modules?
我有一个为 linux 系统编写的大型模块。但我需要它为 windows 工作,所以我想重写它来处理这两个问题。
有很多清单,据我目前所见,其中大部分应该可以用于 Windows,因为人偶会在 windows 上看到它是 运行 和 select最好的供应商。
但是有些部分无法正常工作。例如,此 exec 不适用于 windows
exec { 'touch_file' :
command => 'touch /etc/test.txt',
path => ['/bin', '/usr/bin'],
cwd => '/tmp',
creates => '/etc/test.txt',
}
这在 linux 中有效,但在 Windows 中我会将其更改为 powershell 命令,并更改创建、cwd 和路径。我可以将每个部分更改为 ${variable} 并在 Exec 语句上方有一个 case 语句,该语句根据 ::osgroup 选择正确的变量,但我不确定这是否是处理此问题的最佳方法。有没有更好的方法来处理多 OS 模块?
有时,根据您的目标 OS 拥有不同的执行官会更好。请参阅 https://github.com/puppetlabs/puppetlabs-puppet_agent 作为一个很好的例子:
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'
}
我有一个为 linux 系统编写的大型模块。但我需要它为 windows 工作,所以我想重写它来处理这两个问题。
有很多清单,据我目前所见,其中大部分应该可以用于 Windows,因为人偶会在 windows 上看到它是 运行 和 select最好的供应商。
但是有些部分无法正常工作。例如,此 exec 不适用于 windows
exec { 'touch_file' :
command => 'touch /etc/test.txt',
path => ['/bin', '/usr/bin'],
cwd => '/tmp',
creates => '/etc/test.txt',
}
这在 linux 中有效,但在 Windows 中我会将其更改为 powershell 命令,并更改创建、cwd 和路径。我可以将每个部分更改为 ${variable} 并在 Exec 语句上方有一个 case 语句,该语句根据 ::osgroup 选择正确的变量,但我不确定这是否是处理此问题的最佳方法。有没有更好的方法来处理多 OS 模块?
有时,根据您的目标 OS 拥有不同的执行官会更好。请参阅 https://github.com/puppetlabs/puppetlabs-puppet_agent 作为一个很好的例子:
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'
}