install_prometheus.yaml 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. ---
  2. # set facts
  3. - include_tasks: facts.yaml
  4. - name: Ensure that Prometheus has nodes to run on
  5. fail:
  6. msg: |-
  7. No schedulable nodes found matching node selector for Prometheus - '{{ openshift_prometheus_node_selector }}'
  8. when:
  9. - openshift_schedulable_node_labels | lib_utils_oo_has_no_matching_selector(openshift_prometheus_node_selector)
  10. # namespace
  11. - name: Add prometheus project
  12. oc_project:
  13. state: present
  14. name: "{{ openshift_prometheus_namespace }}"
  15. node_selector: "{{ openshift_prometheus_node_selector | lib_utils_oo_selector_to_string_list() }}"
  16. description: Prometheus
  17. # secrets
  18. - name: Set alert, alertmanager and prometheus secrets
  19. oc_secret:
  20. state: present
  21. name: "{{ item }}-proxy"
  22. namespace: "{{ openshift_prometheus_namespace }}"
  23. contents:
  24. - path: session_secret
  25. data: "{{ 43 | lib_utils_oo_random_word }}="
  26. with_items:
  27. - prometheus
  28. - alerts
  29. - alertmanager
  30. # serviceaccount
  31. - name: create prometheus serviceaccount
  32. oc_serviceaccount:
  33. state: present
  34. name: "{{ openshift_prometheus_service_name }}"
  35. namespace: "{{ openshift_prometheus_namespace }}"
  36. changed_when: no
  37. # TODO remove this when annotations are supported by oc_serviceaccount
  38. - name: annotate serviceaccount
  39. command: >
  40. {{ openshift_client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  41. serviceaccount {{ openshift_prometheus_service_name }} {{ item }}
  42. with_items:
  43. "{{ openshift_prometheus_serviceaccount_annotations }}"
  44. # create clusterrolebinding for prometheus serviceaccount
  45. - name: Set cluster-reader permissions for prometheus
  46. oc_adm_policy_user:
  47. state: present
  48. namespace: "{{ openshift_prometheus_namespace }}"
  49. resource_kind: cluster-role
  50. resource_name: cluster-reader
  51. user: "system:serviceaccount:{{ openshift_prometheus_namespace }}:{{ openshift_prometheus_service_name }}"
  52. - name: create services for prometheus
  53. oc_service:
  54. name: "{{ openshift_prometheus_service_name }}"
  55. namespace: "{{ openshift_prometheus_namespace }}"
  56. labels:
  57. name: prometheus
  58. annotations:
  59. oprometheus.io/scrape: 'true'
  60. oprometheus.io/scheme: https
  61. service.alpha.openshift.io/serving-cert-secret-name: prometheus-tls
  62. ports:
  63. - name: prometheus
  64. port: "{{ openshift_prometheus_service_port }}"
  65. targetPort: "{{ openshift_prometheus_service_targetport }}"
  66. protocol: TCP
  67. selector:
  68. app: prometheus
  69. - name: create services for alert buffer
  70. oc_service:
  71. name: "{{ openshift_prometheus_alerts_service_name }}"
  72. namespace: "{{ openshift_prometheus_namespace }}"
  73. labels:
  74. name: prometheus
  75. annotations:
  76. service.alpha.openshift.io/serving-cert-secret-name: alerts-tls
  77. ports:
  78. - name: prometheus
  79. port: "{{ openshift_prometheus_service_port }}"
  80. targetPort: "{{ openshift_prometheus_alerts_service_targetport }}"
  81. protocol: TCP
  82. selector:
  83. app: prometheus
  84. - name: create services for alertmanager
  85. oc_service:
  86. name: "{{ openshift_prometheus_alertmanager_service_name }}"
  87. namespace: "{{ openshift_prometheus_namespace }}"
  88. labels:
  89. name: prometheus
  90. annotations:
  91. service.alpha.openshift.io/serving-cert-secret-name: alertmanager-tls
  92. ports:
  93. - name: prometheus
  94. port: "{{ openshift_prometheus_service_port }}"
  95. targetPort: "{{ openshift_prometheus_alertmanager_service_targetport }}"
  96. protocol: TCP
  97. selector:
  98. app: prometheus
  99. # create prometheus and alerts routes
  100. # TODO: oc_route module should support insecureEdgeTerminationPolicy: Redirect
  101. - name: create prometheus and alerts routes
  102. oc_route:
  103. state: present
  104. name: "{{ item.name }}"
  105. host: "{{ item.host }}"
  106. namespace: "{{ openshift_prometheus_namespace }}"
  107. service_name: "{{ item.name }}"
  108. tls_termination: reencrypt
  109. with_items:
  110. - name: prometheus
  111. host: "{{ openshift_prometheus_hostname }}"
  112. - name: alerts
  113. host: "{{ openshift_prometheus_alerts_hostname }}"
  114. - name: alertmanager
  115. host: "{{ openshift_prometheus_alertmanager_hostname }}"
  116. # Storage
  117. - name: create prometheus pvc
  118. oc_pvc:
  119. namespace: "{{ openshift_prometheus_namespace }}"
  120. name: "{{ openshift_prometheus_pvc_name }}"
  121. access_modes: "{{ openshift_prometheus_pvc_access_modes }}"
  122. volume_capacity: "{{ openshift_prometheus_pvc_size }}"
  123. selector: "{{ openshift_prometheus_pvc_pv_selector }}"
  124. storage_class_name: "{{ openshift_prometheus_sc_name }}"
  125. when: openshift_prometheus_storage_type == 'pvc'
  126. - name: create alertmanager pvc
  127. oc_pvc:
  128. namespace: "{{ openshift_prometheus_namespace }}"
  129. name: "{{ openshift_prometheus_alertmanager_pvc_name }}"
  130. access_modes: "{{ openshift_prometheus_alertmanager_pvc_access_modes }}"
  131. volume_capacity: "{{ openshift_prometheus_alertmanager_pvc_size }}"
  132. selector: "{{ openshift_prometheus_alertmanager_pvc_pv_selector }}"
  133. storage_class_name: "{{ openshift_prometheus_alertmanager_sc_name }}"
  134. when: openshift_prometheus_alertmanager_storage_type == 'pvc'
  135. - name: create alertbuffer pvc
  136. oc_pvc:
  137. namespace: "{{ openshift_prometheus_namespace }}"
  138. name: "{{ openshift_prometheus_alertbuffer_pvc_name }}"
  139. access_modes: "{{ openshift_prometheus_alertbuffer_pvc_access_modes }}"
  140. volume_capacity: "{{ openshift_prometheus_alertbuffer_pvc_size }}"
  141. selector: "{{ openshift_prometheus_alertbuffer_pvc_pv_selector }}"
  142. storage_class_name: "{{ openshift_prometheus_alertbuffer_sc_name }}"
  143. when: openshift_prometheus_alertbuffer_storage_type == 'pvc'
  144. # prometheus configmap
  145. # Copy the additional rules file if it is defined
  146. - name: Copy additional rules file to host
  147. copy:
  148. src: "{{ openshift_prometheus_additional_rules_file }}"
  149. dest: "{{ tempdir }}/prometheus.additional.rules"
  150. when:
  151. - openshift_prometheus_additional_rules_file is defined
  152. - openshift_prometheus_additional_rules_file is not none
  153. - openshift_prometheus_additional_rules_file | trim | length > 0
  154. - stat:
  155. path: "{{ tempdir }}/prometheus.additional.rules"
  156. register: additional_rules_stat
  157. - template:
  158. src: prometheus.yml.j2
  159. dest: "{{ tempdir }}/prometheus.yml"
  160. changed_when: no
  161. - template:
  162. src: prometheus.rules.j2
  163. dest: "{{ tempdir }}/prometheus.rules"
  164. changed_when: no
  165. # In prometheus configmap create "additional.rules" section if file exists
  166. - name: Set prometheus configmap
  167. oc_configmap:
  168. state: present
  169. name: "prometheus"
  170. namespace: "{{ openshift_prometheus_namespace }}"
  171. from_file:
  172. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  173. prometheus.additional.rules: "{{ tempdir }}/prometheus.additional.rules"
  174. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  175. when: additional_rules_stat.stat.exists == True
  176. - name: Set prometheus configmap
  177. oc_configmap:
  178. state: present
  179. name: "prometheus"
  180. namespace: "{{ openshift_prometheus_namespace }}"
  181. from_file:
  182. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  183. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  184. when: additional_rules_stat.stat.exists == False
  185. # alertmanager configmap
  186. - template:
  187. src: alertmanager.yml.j2
  188. dest: "{{ tempdir }}/alertmanager.yml"
  189. changed_when: no
  190. - name: Set alertmanager configmap
  191. oc_configmap:
  192. state: present
  193. name: "alertmanager"
  194. namespace: "{{ openshift_prometheus_namespace }}"
  195. from_file:
  196. alertmanager.yml: "{{ tempdir }}/alertmanager.yml"
  197. # create prometheus stateful set
  198. - name: Set prometheus template
  199. template:
  200. src: prometheus.j2
  201. dest: "{{ tempdir }}/templates/prometheus.yaml"
  202. vars:
  203. namespace: "{{ openshift_prometheus_namespace }}"
  204. # prom_replicas: "{{ openshift_prometheus_replicas }}"
  205. - name: Set prometheus stateful set
  206. oc_obj:
  207. state: present
  208. name: "prometheus"
  209. namespace: "{{ openshift_prometheus_namespace }}"
  210. kind: statefulset
  211. files:
  212. - "{{ tempdir }}/templates/prometheus.yaml"
  213. delete_after: true