Grafana datasource module : tls_ca_cert or tls_skip_verify options (#36945)

* Allow to set tls_ca_cert or skip verify for grafana datasources

* version_added in documentation for new options tls_skip_verify

* Added default value for tls_skip_verify option in doc

* Fixed author git account

* Updated author
This commit is contained in:
Seuf 2018-04-09 15:41:09 +02:00 committed by Dag Wieers
parent 546a406a14
commit 72120c3cac

View file

@ -1,7 +1,7 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright: (c) 2017, Thierry Sallé (@tsalle) # Copyright: (c) 2017, Thierry Sallé (@seuf)
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
@ -16,7 +16,7 @@ DOCUMENTATION = '''
--- ---
module: grafana_datasource module: grafana_datasource
author: author:
- Thierry Sallé (@tsalle) - Thierry Sallé (@seuf)
version_added: "2.5" version_added: "2.5"
short_description: Manage Grafana datasources short_description: Manage Grafana datasources
description: description:
@ -92,6 +92,12 @@ options:
description: description:
- The TLS CA certificate for self signed certificates. - The TLS CA certificate for self signed certificates.
- Only used when C(tls_client_cert) and C(tls_client_key) are set. - Only used when C(tls_client_cert) and C(tls_client_key) are set.
tls_skip_verify:
description:
- Skip the TLS datasource certificate verification.
type: bool
default: False
version_added: 2.6
is_default: is_default:
description: description:
- Make this datasource the default one. - Make this datasource the default one.
@ -156,15 +162,35 @@ EXAMPLES = '''
--- ---
- name: Create elasticsearch datasource - name: Create elasticsearch datasource
grafana_datasource: grafana_datasource:
name: my_elastic name: "datasource-elastic"
grafana_url: http://grafana.company.com grafana_url: "https://grafana.company.com"
ds_type: elasticsearch grafana_user: "admin"
url: https://elasticsearch.company.com:9200 grafana_password: "xxxxxx"
database: my-index_* org_id: "1"
basic_auth_user: grafana ds_type: "elasticisearch"
basic_auth_password: xxxxxxxx url: "https://elastic.company.com:9200"
json_data: '{"esVersion":5, "timeField": "@timestamp"}' database: "[logstash_]YYYY.MM.DD"
state: present basic_auth_user: "grafana"
basic_auth_password: "******"
time_field: "@timestamp"
time_interval: "1m"
interval: "Daily"
es_version: 56
max_concurrent_shard_requests: 42
tls_ca_cert: "/etc/ssl/certs/ca.pem"
- name: Create influxdb datasource
grafana_datasource:
name: "datasource-influxdb"
grafana_url: "https://grafana.company.com"
grafana_user: "admin"
grafana_password: "xxxxxx"
org_id: "1"
ds_type: "influxdb"
url: "https://influx.company.com:8086"
database: "telegraf"
time_interval: ">10s"
tls_ca_cert: "/etc/ssl/certs/ca.pem"
''' '''
RETURN = ''' RETURN = '''
@ -298,6 +324,13 @@ def grafana_create_datasource(module, data):
else: else:
json_data['tlsAuth'] = False json_data['tlsAuth'] = False
json_data['tlsAuthWithCACert'] = False json_data['tlsAuthWithCACert'] = False
if data.get('tls_ca_cert'):
payload['secureJsonData'] = {
'tlsCACert': data['tls_ca_cert']
}
if data.get('tls_skip_verify'):
json_data['tlsSkipVerify'] = True
# datasource type related parameters # datasource type related parameters
if data['ds_type'] == 'elasticsearch': if data['ds_type'] == 'elasticsearch':
@ -446,6 +479,7 @@ def main():
tls_client_cert=dict(type='str', no_log=True), tls_client_cert=dict(type='str', no_log=True),
tls_client_key=dict(type='str', no_log=True), tls_client_key=dict(type='str', no_log=True),
tls_ca_cert=dict(type='str', no_log=True), tls_ca_cert=dict(type='str', no_log=True),
tls_skip_verify=dict(type='bool', default=False),
is_default=dict(default=False, type='bool'), is_default=dict(default=False, type='bool'),
org_id=dict(default=1, type='int'), org_id=dict(default=1, type='int'),
es_version=dict(type='int', default=5, choices=[2, 5, 56]), es_version=dict(type='int', default=5, choices=[2, 5, 56]),
@ -460,7 +494,7 @@ def main():
), ),
supports_check_mode=False, supports_check_mode=False,
required_together=[['grafana_user', 'grafana_password', 'org_id'], ['tls_client_cert', 'tls_client_key']], required_together=[['grafana_user', 'grafana_password', 'org_id'], ['tls_client_cert', 'tls_client_key']],
mutually_exclusive=[['grafana_user', 'grafana_api_key']], mutually_exclusive=[['grafana_user', 'grafana_api_key'], ['tls_ca_cert', 'tls_skip_verify']],
required_if=[ required_if=[
['ds_type', 'opentsdb', ['tsdb_version', 'tsdb_resolution']], ['ds_type', 'opentsdb', ['tsdb_version', 'tsdb_resolution']],
['ds_type', 'influxdb', ['database']], ['ds_type', 'influxdb', ['database']],