使用 Puppet 启动和停止服务
Starting and Stopping Services with Puppet
我想停止服务,执行 Powershell 脚本,然后使用 Puppet 再次启动服务。下面的代码不起作用,因为 My Service
被定义了两次。
service { 'My Service':
ensure => 'stopped',
require => Package['Install Go Agent']
}
exec { 'Do Stuff':
command => '...',
provider => powershell,
require => Service['Go Agent']
}
service { 'My Service':
ensure => 'started',
require => Exec['Install Go Agent']
}
本质上,我的 Powershell 脚本正在设置 windows 服务用户名和密码,遗憾的是,您无法使用 Puppet。
人偶不是程序化的
首先,你是在程序上考虑这个问题。 Puppet 不是一种程序语言。它定义了你的最终状态。您想改为定义 exec 应该 运行 幂等的时间并让服务订阅它。
如何
这类似于 package/file/service,您可以在文件更改时刷新(重新启动)服务。 https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html and http://www.puppetcookbook.com/posts/restart-a-service-when-a-file-changes.html.
值得一读
package { 'My Package':
ensure => latest,
}
exec { 'Do Stuff':
command => '...',
#onlyif/unless => '...', #make it idempotent
#refreshonly => true #make it idempotent
provider => powershell,
require => Package['My Package']
}
service { 'My Service':
ensure => 'started',
require => Exec['Do Stuff']
}
您绝对需要确保 PowerShell 不会每次都 运行,only if it is refreshed, or through either a check with onlyif or unless。
Windows 细节
所以现在 Windows 细节。在 Windows 上,与 Linux 不同,您不能简单地替换 and/or 更新锁定的文件。因此 exec 需要检测服务是否存在,将其关闭,然后进行更新。在您的情况下,如果服务尚不存在,您可能还需要它来创建服务。您也可以在不关闭服务的情况下更新凭据。
Puppet 定义所需状态
exec 不需要做的一件事就是将服务置于启动状态。这始终由服务资源处理。该服务将检测到它不是 运行ning 并在需要时自行启动。如果 exec['Do Stuf']
运行 由于关系的定义方式,它也会自行重启。
人偶未来
现在介绍您应该关注 Puppet 的内容!
- PUP-5477 - Windows service provider should be able to create and destroy services
- PUP-1289 - Ability to manage a Windows service's user account and password
您可以订阅、投票和发表评论。当我们知道用户和客户遇到的问题时,它可以帮助我们确定工作的优先级。
我想停止服务,执行 Powershell 脚本,然后使用 Puppet 再次启动服务。下面的代码不起作用,因为 My Service
被定义了两次。
service { 'My Service':
ensure => 'stopped',
require => Package['Install Go Agent']
}
exec { 'Do Stuff':
command => '...',
provider => powershell,
require => Service['Go Agent']
}
service { 'My Service':
ensure => 'started',
require => Exec['Install Go Agent']
}
本质上,我的 Powershell 脚本正在设置 windows 服务用户名和密码,遗憾的是,您无法使用 Puppet。
人偶不是程序化的
首先,你是在程序上考虑这个问题。 Puppet 不是一种程序语言。它定义了你的最终状态。您想改为定义 exec 应该 运行 幂等的时间并让服务订阅它。
如何
这类似于 package/file/service,您可以在文件更改时刷新(重新启动)服务。 https://docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html and http://www.puppetcookbook.com/posts/restart-a-service-when-a-file-changes.html.
值得一读package { 'My Package':
ensure => latest,
}
exec { 'Do Stuff':
command => '...',
#onlyif/unless => '...', #make it idempotent
#refreshonly => true #make it idempotent
provider => powershell,
require => Package['My Package']
}
service { 'My Service':
ensure => 'started',
require => Exec['Do Stuff']
}
您绝对需要确保 PowerShell 不会每次都 运行,only if it is refreshed, or through either a check with onlyif or unless。
Windows 细节
所以现在 Windows 细节。在 Windows 上,与 Linux 不同,您不能简单地替换 and/or 更新锁定的文件。因此 exec 需要检测服务是否存在,将其关闭,然后进行更新。在您的情况下,如果服务尚不存在,您可能还需要它来创建服务。您也可以在不关闭服务的情况下更新凭据。
Puppet 定义所需状态
exec 不需要做的一件事就是将服务置于启动状态。这始终由服务资源处理。该服务将检测到它不是 运行ning 并在需要时自行启动。如果 exec['Do Stuf']
运行 由于关系的定义方式,它也会自行重启。
人偶未来
现在介绍您应该关注 Puppet 的内容!
- PUP-5477 - Windows service provider should be able to create and destroy services
- PUP-1289 - Ability to manage a Windows service's user account and password
您可以订阅、投票和发表评论。当我们知道用户和客户遇到的问题时,它可以帮助我们确定工作的优先级。