如何解决使用开源 puppet 运行 cmd 命令
有人可以帮助我使用开源木偶吗?
我想向 Windows 客户端提供一个 jar 文件并使用命令行执行 .jar 文件。
.jar 文件实际上是作为服务运行的应用程序的更新。
我对 puppet 语言不太熟悉,但会猜测这样的东西来执行 jar 文件:
exec { 'jar_execution':
command => 'cmd.exe /c java -jar foo.jar',}
这应该是清单的一部分,看起来像这样吗?
service { 'fooservice':
name => foo_service,ensure => running,enable => true,}
file { 'foo.jar':
path => 'C:/foo/temp/foo.jar',ensure => file,source => "puppet:///modules/foo/foo.jar",}
exec { 'jar_execution':
command => 'cmd.exe /c java -jar C:/foor/temp/foo.jar',}
代理实际上是如何运行这个命令的?
解决方法
架构方面的考虑很少:
- 在模块的
archive
历史记录中使用archive
资源(来自file
模块)而不是:.jar
和.git
。 - 让其他服务(例如 Apache Archiva、Nexus 或 Artifactory 甚至 Puppet Server 本身)提供所有工件(例如二进制文件)。如果
.jar
不是由您的公司开发的,您可能希望使用权威来源并进行一些内部缓存。 - 以一种适用于整个基础架构的全局方式命名您的资源,否则您可能会发生通知自身并产生意外结果的事件。
- puppet 中的资源顺序无关紧要。您希望以对您有意义的方式对资源进行排序,并使用
before
、after
、require
、notify
来确保依赖性。
我建议在模块之外使用二进制文件,因为二进制文件不应该被版本化。您可能有另一个可以提供文件的服务,甚至您的 puppet 基础架构也可以提供这些包,就像它提供 puppet-agent
本身一样,无论您使用的是 Puppet OSS 还是 Puppet Enterprise。
archive { 'C:/foo/temp/foo.jar':
source => https://location/to/your/.jar,}
exec { 'C:/foo/temp/foo.jar': # notice in resource name recommended to use / not \
command => 'cmd.exe /c java -jar C:/foor/temp/foo.jar',refreshonly => true # this one executes exec only if the file was re-downloaded (maybe it's signature has changed),or the file was removed from disk and was re-downloaded.
onlyif => 'test -f C:\foo\temp\foo.jar' # or some command that guards you to not run this .jar every time you run puppet
subscribe => Archive['C:/foo/temp/foo.jar'],notify => Service['foo_service'] # most probably you need to restart the service after you ran the .jar,otherwise you wouldn't have added in your question.
}
service { 'foo_service':
ensure => running,enable => true,}
我注意到在您的示例中,您无需在执行后删除 .jar
。如果您需要,另一个 exec
命令可以删除在同一位置下载的文件
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。