2017-09-29 171 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 

或類似的東西。