2017-09-29 82 views
0

我执行以下几招:厨师等资源开始

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代码?

+0

您可以在grafana_datasource中添加'retries 3''和'retry_delay 10',如[这里]所述(https://docs.chef.io/resource_common.html#properties) – Tensibai

回答

0

厨师没有什么特别的。您可以使用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 

或类似的东西。