Chef - 从先前 运行 的状态跳过资源
Chef - Skip resources from status of previous run
对于服务器重建,我想根据之前 运行 的结果跳过我的食谱的某些部分。
例如,我们有启动 Weblogic 服务器的资源。
weblogic_server "server_name" do
action :start
end
这些初创公司在构建过程中花费了大量时间。如果在上次构建中 运行 成功,我想跳过这个,以避免重建等待太多。像这样:
weblogic_server "server_name" do
action :start
not_if { it_was_run_successfully_during_the_previous_run }
end
我知道最好的方法是用脚本检查 weblogic 服务器的状态,但这取决于另一个团队,我需要一个临时解决方案。
我想到了一个 JSON 格式的日志文件来引用构建的不同步骤。
例如:
{
"provisioning" : true,
"start_weblogic_servers : true,
"configuring_ohs" : false
}
在这种情况下,我将拥有此日志文件的模板资源,然后在 运行 期间更新值。然后在每个 运行 中我会先检查这个文件并根据我找到的值跳过正确的部分。
还有更好的方法吗?
我过去所做的只是创建一个空文件,如果它存在则跳过它 (not_if do ::File.exists?('/path/to/some_empty_file') end
)。然后,当构建成功或不成功时,您可以使用一些代码来创建或删除这些文件,我意识到这可能不是最好的方法,但只要我记得它就对我有用。
如果你真的想要,那么你可以让一些脚本检查服务器状态(比如每隔 5 分钟),然后相应地调整那个空文件(通过删除或保留它)。
Nabeel Amjad 解决方案对我有用。请按照以下步骤操作:
使用 action :nothing
创建 file
资源
file '/tmp/logfile' do
action: nothing
end
将您的资源设置为在 运行
之后通知 file
资源
weblogic_server 'server_name' do
action :start
notifies :create, 'file[/tmp/logfile]', :immediately
end
添加一个守卫 not_if
,如果文件存在于服务器上,它将跳过此资源的未来执行
weblogic_server 'server_name' do
action :start
notifies :create, 'file[/tmp/logfile]', :immediately
not_if { ::File.exist?('/tmp/logfile') }
end
对于服务器重建,我想根据之前 运行 的结果跳过我的食谱的某些部分。
例如,我们有启动 Weblogic 服务器的资源。
weblogic_server "server_name" do
action :start
end
这些初创公司在构建过程中花费了大量时间。如果在上次构建中 运行 成功,我想跳过这个,以避免重建等待太多。像这样:
weblogic_server "server_name" do
action :start
not_if { it_was_run_successfully_during_the_previous_run }
end
我知道最好的方法是用脚本检查 weblogic 服务器的状态,但这取决于另一个团队,我需要一个临时解决方案。
我想到了一个 JSON 格式的日志文件来引用构建的不同步骤。
例如:
{
"provisioning" : true,
"start_weblogic_servers : true,
"configuring_ohs" : false
}
在这种情况下,我将拥有此日志文件的模板资源,然后在 运行 期间更新值。然后在每个 运行 中我会先检查这个文件并根据我找到的值跳过正确的部分。
还有更好的方法吗?
我过去所做的只是创建一个空文件,如果它存在则跳过它 (not_if do ::File.exists?('/path/to/some_empty_file') end
)。然后,当构建成功或不成功时,您可以使用一些代码来创建或删除这些文件,我意识到这可能不是最好的方法,但只要我记得它就对我有用。
如果你真的想要,那么你可以让一些脚本检查服务器状态(比如每隔 5 分钟),然后相应地调整那个空文件(通过删除或保留它)。
Nabeel Amjad 解决方案对我有用。请按照以下步骤操作:
使用 action :nothing
file
资源
file '/tmp/logfile' do
action: nothing
end
将您的资源设置为在 运行
之后通知file
资源
weblogic_server 'server_name' do
action :start
notifies :create, 'file[/tmp/logfile]', :immediately
end
添加一个守卫 not_if
,如果文件存在于服务器上,它将跳过此资源的未来执行
weblogic_server 'server_name' do
action :start
notifies :create, 'file[/tmp/logfile]', :immediately
not_if { ::File.exist?('/tmp/logfile') }
end