厨师等资源开始
问题描述:
我执行以下几招:厨师等资源开始
include_recipe 'grafana::default'
grafana_datasource 'InfluxDB' do
source(
type: 'influxdb',
url: 'http://localhost:8086',
access: 'proxy',
database: 'living',
isdefault: true
)
action :create
end
grafana ::默认安装的grafana服务,然后grafana_datasource安装上grafana一个新的数据源。问题在于,当我尝试执行grafana_datasource并且崩溃时,grafana仍未启动。
如何在服务完全启动后订阅grafana服务并执行grafana_datasource代码?
答
厨师没有什么特别的。您可以使用Tensibai提到的通用retries
,也可以使用ruby_block
资源,该资源将等待服务启动并进行响应。大多数服务层(Upstart,systemd等)都是异步的,所以Chef的service
资源(以及相关的东西)会在发送启动/重新启动命令时阻塞,但这并不意味着服务将在这之后启动并运行。这通常采取的形式:
ruby_block 'wait_until_up' do
block do
while true
if try_to_connect()
break
end
sleep 10
end
end
end
或类似的东西。
您可以在grafana_datasource中添加'retries 3''和'retry_delay 10',如[这里]所述(https://docs.chef.io/resource_common.html#properties) – Tensibai