From acd9222e4c6814dd57233152e8139a9eef0a0ccc Mon Sep 17 00:00:00 2001 From: Tobias Urdin Date: Wed, 28 Sep 2022 21:20:39 +0200 Subject: [PATCH] Fix idempotent issue in grafana_datasource provider --- .../provider/grafana_datasource/grafana.rb | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/puppet/provider/grafana_datasource/grafana.rb b/lib/puppet/provider/grafana_datasource/grafana.rb index 647fb95d..2c358044 100644 --- a/lib/puppet/provider/grafana_datasource/grafana.rb +++ b/lib/puppet/provider/grafana_datasource/grafana.rb @@ -63,6 +63,12 @@ def datasources datasource = JSON.parse(response.body) + basic_auth_password = if datasource.key?('secureJsonData') && datasource['secureJsonData'].key?('basicAuthPassword') + datasource['secureJsonData']['basicAuthPassword'] + else + datasource.fetch('basicAuthPassword', '') + end + { id: datasource['id'], name: datasource['name'], @@ -76,7 +82,7 @@ def datasources with_credentials: datasource['withCredentials'] ? :true : :false, basic_auth: datasource['basicAuth'] ? :true : :false, basic_auth_user: datasource['basicAuthUser'], - basic_auth_password: datasource['basicAuthPassword'], + basic_auth_password: basic_auth_password, json_data: datasource['jsonData'], secure_json_data: datasource['secureJsonData'] } @@ -217,6 +223,14 @@ def save_datasource response = send_request 'POST', format('%s/user/using/%s', resource[:grafana_api_path], fetch_organization[:id]) raise format('Failed to switch to org %s (HTTP response: %s/%s)', fetch_organization[:id], response.code, response.body) unless response.code == '200' + secure_json_data = if resource[:secure_json_data] + resource[:secure_json_data].clone + else + {} + end + + secure_json_data[:basicAuthPassword] = resource[:basic_auth_password] if !secure_json_data.key?('basicAuthPassword') && resource[:basic_auth_password] + data = { name: resource[:name], type: resource[:type], @@ -228,10 +242,11 @@ def save_datasource isDefault: (resource[:is_default] == :true), basicAuth: (resource[:basic_auth] == :true), basicAuthUser: resource[:basic_auth_user], + # Deprecated field, use only secureJsonData later basicAuthPassword: resource[:basic_auth_password], withCredentials: (resource[:with_credentials] == :true), jsonData: resource[:json_data], - secureJsonData: resource[:secure_json_data] + secureJsonData: secure_json_data } if datasource.nil?