main.yml 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. ---
  2. - name: Create grafana namespace
  3. oc_project:
  4. state: present
  5. name: "{{ grafana_namespace }}"
  6. - name: Configure Grafana Permissions
  7. include_tasks: tasks/gf-permissions.yml
  8. # TODO:// Templatize the remote files
  9. - name: Pull grafana yaml from openshift/origin
  10. get_url:
  11. url: "{{ grafana_base_url }}/grafana.yaml"
  12. dest: /tmp/grafana.yaml
  13. - name: Create grafana template
  14. oc_obj:
  15. namespace: "{{ grafana_namespace }}"
  16. kind: template
  17. name: grafana
  18. state: present
  19. files:
  20. - "/tmp/grafana.yaml"
  21. - name: Process the grafana file
  22. oc_process:
  23. namespace: "{{ grafana_namespace }}"
  24. template_name: grafana
  25. create: True
  26. - name: Wait to grafana be running
  27. command: oc rollout status deployment/grafana
  28. - name: Add view role to grafana user
  29. oc_adm_policy_user:
  30. user: "{{ grafana_user }}"
  31. resource_kind: cluster-role
  32. resource_name: view
  33. state: present
  34. role_namespace: "{{ grafana_prometheus_namespace }}"
  35. - name: Get the prometheus SA
  36. shell: oc sa get-token {{ grafana_prometheus_sa }} -n {{ grafana_prometheus_namespace }}
  37. register: sa
  38. - name: Get prometheus route
  39. oc_route:
  40. state: list
  41. name: prometheus
  42. namespace: "{{ grafana_prometheus_namespace }}"
  43. register: prom_out
  44. - name: Get prometheus route
  45. oc_route:
  46. state: list
  47. name: grafana
  48. namespace: "{{ grafana_namespace }}"
  49. register: grafana_out
  50. - set_fact: ds_json={{ datasource_payload | to_json }}
  51. - set_fact: prometheus=prom_out.results[0].spec.host
  52. - set_fact: route=grafana_out.results[0].spec.host
  53. - set_fact: token={{ sa.stdout }}
  54. - set_fact:
  55. payload_data: "{{ ds_json | regex_replace('grafana_name', grafana_datasource_name ) | regex_replace('prometheus_url', prometheus ) | regex_replace('satoken', token ) }}"
  56. - name: Add new datasrouce to grafana
  57. uri:
  58. url: "https://{{ route }}/api/datasources"
  59. user: admin
  60. password: admin
  61. method: POST
  62. body: "{{ payload_data }}"
  63. body_format: json
  64. headers:
  65. Content-Type: "Content-Type: application/json"
  66. register: add_ds
  67. - name: Pull grafana yaml from openshift/origin
  68. get_url:
  69. url: "{{ grafana_base_url }}/openshift-cluster-monitoring.json"
  70. dest: /tmp/openshift-cluster-monitoring.json
  71. - name: Regex set data soure name for openshift dashboard
  72. replace:
  73. path: /tmp/openshift-cluster-monitoring.json
  74. regexp: '${DS_PR}'
  75. replace: '{{ grafana_datasource_name }}'
  76. backup: yes
  77. - name: Regex setup granularity
  78. replace:
  79. path: /tmp/openshift-cluster-monitoring.json
  80. regexp: 'Xs'
  81. replace: '{{ grafana_graph_granularity }}'
  82. backup: yes
  83. - name: Add openshift dashboard
  84. uri:
  85. url: "https://{{ route }}/api/dashboards/db"
  86. user: admin
  87. password: admin
  88. method: POST
  89. body: "{{ lookup('file','/tmp/openshift-cluster-monitoring.json') }}"
  90. body_format: json
  91. headers:
  92. Content-Type: "Content-Type: application/json"
  93. register: add_ds
  94. - name: Regex json tear down
  95. replace:
  96. path: /tmp/openshift-cluster-monitoring.json
  97. regexp: '{{ grafana_datasource_name }}'
  98. replace: '${DS_PR}'
  99. - name: Pull node exporter dashboard from openshift/origin
  100. get_url:
  101. url: "{{ grafana_base_url }}/node-exporter-full-dashboard.json"
  102. dest: /tmp/node-exporter-full-dashboard.json
  103. when: grafana_node_exporter | default(false) | bool == true
  104. - name: Regex set data soure name for node exporter
  105. replace:
  106. path: /tmp/node-exporter-full-dashboard.json
  107. regexp: '${DS_PR}'
  108. replace: '{{ grafana_datasource_name }}'
  109. backup: yes
  110. when: grafana_node_exporter | default(false) | bool == true
  111. - name: Regex setup granularity for node exporter
  112. replace:
  113. path: /tmp/node-exporter-full-dashboard.json
  114. regexp: 'Xs'
  115. replace: '{{ grafana_graph_granularity }}'
  116. backup: yes
  117. when: grafana_node_exporter | default(false) | bool == true
  118. - name: Add node exporter dashboard
  119. uri:
  120. url: "https://{{ route }}/api/dashboards/db"
  121. user: admin
  122. password: admin
  123. method: POST
  124. body: "{{ lookup('file','/tmp/node-exporter-full-dashboard.json') }}"
  125. body_format: json
  126. headers:
  127. Content-Type: "Content-Type: application/json"
  128. register: add_ds
  129. when: grafana_node_exporter | default(false) | bool == true