|
|
|
@ -17,6 +17,7 @@ DOCUMENTATION = '''
|
|
|
|
|
module: grafana_datasource
|
|
|
|
|
author:
|
|
|
|
|
- Thierry Sallé (@seuf)
|
|
|
|
|
- Martin Wang (@martinwangjian)
|
|
|
|
|
version_added: "2.5"
|
|
|
|
|
short_description: Manage Grafana datasources
|
|
|
|
|
description:
|
|
|
|
@ -34,7 +35,7 @@ options:
|
|
|
|
|
description:
|
|
|
|
|
- The type of the datasource.
|
|
|
|
|
required: true
|
|
|
|
|
choices: [ graphite, prometheus, elasticsearch, influxdb, opentsdb, mysql, postgres, alexanderzobnin-zabbix-datasource]
|
|
|
|
|
choices: [ graphite, prometheus, elasticsearch, influxdb, opentsdb, mysql, postgres, cloudwatch, alexanderzobnin-zabbix-datasource]
|
|
|
|
|
url:
|
|
|
|
|
description:
|
|
|
|
|
- The URL of the datasource.
|
|
|
|
@ -183,6 +184,56 @@ options:
|
|
|
|
|
default: 'yes'
|
|
|
|
|
type: bool
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_auth_type:
|
|
|
|
|
description:
|
|
|
|
|
- Type for AWS authentication for CloudWatch datasource type (authType of grafana api)
|
|
|
|
|
default: 'keys'
|
|
|
|
|
choices: [ keys, credentials, arn ]
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_default_region:
|
|
|
|
|
description:
|
|
|
|
|
- AWS default region for CloudWatch datasource type
|
|
|
|
|
default: 'us-east-1'
|
|
|
|
|
choices: [
|
|
|
|
|
ap-northeast-1, ap-northeast-2, ap-southeast-1, ap-southeast-2, ap-south-1,
|
|
|
|
|
ca-central-1,
|
|
|
|
|
cn-north-1, cn-northwest-1,
|
|
|
|
|
eu-central-1, eu-west-1, eu-west-2, eu-west-3,
|
|
|
|
|
sa-east-1,
|
|
|
|
|
us-east-1, us-east-2, us-gov-west-1, us-west-1, us-west-2
|
|
|
|
|
]
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_credentials_profile:
|
|
|
|
|
description:
|
|
|
|
|
- Profile for AWS credentials for CloudWatch datasource type when C(aws_auth_type) is C(credentials)
|
|
|
|
|
default: ''
|
|
|
|
|
required: false
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_access_key:
|
|
|
|
|
description:
|
|
|
|
|
- AWS access key for CloudWatch datasource type when C(aws_auth_type) is C(keys)
|
|
|
|
|
default: ''
|
|
|
|
|
required: false
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_secret_key:
|
|
|
|
|
description:
|
|
|
|
|
- AWS secret key for CloudWatch datasource type when C(aws_auth_type) is C(keys)
|
|
|
|
|
default: ''
|
|
|
|
|
required: false
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_assume_role_arn:
|
|
|
|
|
description:
|
|
|
|
|
- AWS IAM role arn to assume for CloudWatch datasource type when C(aws_auth_type) is C(arn)
|
|
|
|
|
default: ''
|
|
|
|
|
required: false
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
aws_custom_metrics_namespaces:
|
|
|
|
|
description:
|
|
|
|
|
- Namespaces of Custom Metrics for CloudWatch datasource type
|
|
|
|
|
default: ''
|
|
|
|
|
required: false
|
|
|
|
|
version_added: 2.8
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
EXAMPLES = '''
|
|
|
|
@ -218,6 +269,35 @@ EXAMPLES = '''
|
|
|
|
|
database: "telegraf"
|
|
|
|
|
time_interval: ">10s"
|
|
|
|
|
tls_ca_cert: "/etc/ssl/certs/ca.pem"
|
|
|
|
|
|
|
|
|
|
- name: Create postgres datasource
|
|
|
|
|
grafana_datasource:
|
|
|
|
|
name: "datasource-postgres"
|
|
|
|
|
grafana_url: "https://grafana.company.com"
|
|
|
|
|
grafana_user: "admin"
|
|
|
|
|
grafana_password: "xxxxxx"
|
|
|
|
|
org_id: "1"
|
|
|
|
|
ds_type: "postgres"
|
|
|
|
|
ds_url: "postgres.company.com:5432"
|
|
|
|
|
database: "db"
|
|
|
|
|
user: "postgres"
|
|
|
|
|
password: "iampgroot"
|
|
|
|
|
sslmode: "verify-full"
|
|
|
|
|
|
|
|
|
|
- name: Create cloudwatch datasource
|
|
|
|
|
grafana_datasource:
|
|
|
|
|
name: "datasource-cloudwatch"
|
|
|
|
|
grafana_url: "https://grafana.company.com"
|
|
|
|
|
grafana_user: "admin"
|
|
|
|
|
grafana_password: "xxxxxx"
|
|
|
|
|
org_id: "1"
|
|
|
|
|
ds_type: "cloudwatch"
|
|
|
|
|
url: "http://monitoring.us-west-1.amazonaws.com"
|
|
|
|
|
aws_auth_type: "keys"
|
|
|
|
|
aws_default_region: "us-west-1"
|
|
|
|
|
aws_access_key: "speakFriendAndEnter"
|
|
|
|
|
aws_secret_key: "mel10n"
|
|
|
|
|
aws_custom_metrics_namespaces: "n1,n2"
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
RETURN = '''
|
|
|
|
@ -400,6 +480,20 @@ def grafana_create_datasource(module, data):
|
|
|
|
|
if data.get('trends'):
|
|
|
|
|
json_data['trends'] = True
|
|
|
|
|
|
|
|
|
|
if data['ds_type'] == 'cloudwatch':
|
|
|
|
|
if data.get('aws_credentials_profle'):
|
|
|
|
|
payload['database'] = data.get('aws_credentials_profile')
|
|
|
|
|
|
|
|
|
|
json_data['authType'] = data['aws_auth_type']
|
|
|
|
|
json_data['defaultRegion'] = data['aws_default_region']
|
|
|
|
|
|
|
|
|
|
if data.get('aws_custom_metrics_namespaces'):
|
|
|
|
|
json_data['customMetricsNamespaces'] = data.get('aws_custom_metrics_namespaces')
|
|
|
|
|
if data.get('aws_assume_role_arn'):
|
|
|
|
|
json_data['assumeRoleArn'] = data.get('aws_assume_role_arn')
|
|
|
|
|
if data.get('aws_access_key') and data.get('aws_secret_key'):
|
|
|
|
|
payload['secureJsonData'] = {'accessKey': data.get('aws_access_key'), 'secretKey': data.get('aws_secret_key')}
|
|
|
|
|
|
|
|
|
|
payload['jsonData'] = json_data
|
|
|
|
|
|
|
|
|
|
# define http header
|
|
|
|
@ -509,6 +603,7 @@ def main():
|
|
|
|
|
'opentsdb',
|
|
|
|
|
'mysql',
|
|
|
|
|
'postgres',
|
|
|
|
|
'cloudwatch',
|
|
|
|
|
'alexanderzobnin-zabbix-datasource']),
|
|
|
|
|
url=dict(required=True, type='str', aliases=['ds_url']),
|
|
|
|
|
access=dict(default='proxy', choices=['proxy', 'direct']),
|
|
|
|
@ -534,6 +629,18 @@ def main():
|
|
|
|
|
tsdb_resolution=dict(type='str', default='second', choices=['second', 'millisecond']),
|
|
|
|
|
sslmode=dict(default='disable', choices=['disable', 'require', 'verify-ca', 'verify-full']),
|
|
|
|
|
trends=dict(default=False, type='bool'),
|
|
|
|
|
aws_auth_type=dict(default='keys', choices=['keys', 'credentials', 'arn']),
|
|
|
|
|
aws_default_region=dict(default='us-east-1', choices=['ap-northeast-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2', 'ap-south-1',
|
|
|
|
|
'ca-central-1',
|
|
|
|
|
'cn-north-1', 'cn-northwest-1',
|
|
|
|
|
'eu-central-1', 'eu-west-1', 'eu-west-2', 'eu-west-3',
|
|
|
|
|
'sa-east-1',
|
|
|
|
|
'us-east-1', 'us-east-2', 'us-gov-west-1', 'us-west-1', 'us-west-2']),
|
|
|
|
|
aws_access_key=dict(default='', no_log=True, type='str'),
|
|
|
|
|
aws_secret_key=dict(default='', no_log=True, type='str'),
|
|
|
|
|
aws_credentials_profile=dict(default='', type='str'),
|
|
|
|
|
aws_assume_role_arn=dict(default='', type='str'),
|
|
|
|
|
aws_custom_metrics_namespaces=dict(type='str'),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
module = AnsibleModule(
|
|
|
|
@ -547,6 +654,7 @@ def main():
|
|
|
|
|
['ds_type', 'elasticsearch', ['database', 'es_version', 'time_field', 'interval']],
|
|
|
|
|
['ds_type', 'mysql', ['database']],
|
|
|
|
|
['ds_type', 'postgres', ['database', 'sslmode']],
|
|
|
|
|
['ds_type', 'cloudwatch', ['aws_auth_type', 'aws_default_region']],
|
|
|
|
|
['es_version', 56, ['max_concurrent_shard_requests']]
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|