install_prometheus.yaml 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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. # serviceaccount reader
  38. - name: create openshift_prometheus_reader_serviceaccount_name serviceaccount
  39. oc_serviceaccount:
  40. state: present
  41. name: "{{ openshift_prometheus_reader_serviceaccount_name }}"
  42. namespace: "{{ openshift_prometheus_namespace }}"
  43. changed_when: no
  44. # TODO remove this when annotations are supported by oc_serviceaccount
  45. - name: annotate serviceaccount
  46. command: >
  47. {{ openshift_client_binary }} annotate --overwrite -n {{ openshift_prometheus_namespace }}
  48. serviceaccount {{ openshift_prometheus_service_name }} {{ item }}
  49. with_items:
  50. "{{ openshift_prometheus_serviceaccount_annotations }}"
  51. # create clusterrolebinding for prometheus serviceaccount
  52. - name: Set cluster-reader permissions for prometheus
  53. oc_adm_policy_user:
  54. state: present
  55. namespace: "{{ openshift_prometheus_namespace }}"
  56. resource_kind: cluster-role
  57. resource_name: cluster-reader
  58. user: "system:serviceaccount:{{ openshift_prometheus_namespace }}:{{ openshift_prometheus_service_name }}"
  59. # create view role for prometheus-reader serviceaccount
  60. - name: Set view permissions for prometheus reader
  61. oc_adm_policy_user:
  62. state: present
  63. namespace: "{{ openshift_prometheus_namespace }}"
  64. resource_kind: cluster-role
  65. resource_name: view
  66. user: "system:serviceaccount:{{ openshift_prometheus_namespace }}:{{ openshift_prometheus_reader_serviceaccount_name }}"
  67. - name: create services for prometheus
  68. oc_service:
  69. name: "{{ openshift_prometheus_service_name }}"
  70. namespace: "{{ openshift_prometheus_namespace }}"
  71. labels:
  72. name: prometheus
  73. annotations:
  74. oprometheus.io/scrape: 'true'
  75. oprometheus.io/scheme: https
  76. service.alpha.openshift.io/serving-cert-secret-name: prometheus-tls
  77. ports:
  78. - name: prometheus
  79. port: "{{ openshift_prometheus_service_port }}"
  80. targetPort: "{{ openshift_prometheus_service_targetport }}"
  81. protocol: TCP
  82. selector:
  83. app: prometheus
  84. - name: create services for alert buffer
  85. oc_service:
  86. name: "{{ openshift_prometheus_alerts_service_name }}"
  87. namespace: "{{ openshift_prometheus_namespace }}"
  88. labels:
  89. name: prometheus
  90. annotations:
  91. service.alpha.openshift.io/serving-cert-secret-name: alerts-tls
  92. ports:
  93. - name: prometheus
  94. port: "{{ openshift_prometheus_service_port }}"
  95. targetPort: "{{ openshift_prometheus_alerts_service_targetport }}"
  96. protocol: TCP
  97. selector:
  98. app: prometheus
  99. - name: create services for alertmanager
  100. oc_service:
  101. name: "{{ openshift_prometheus_alertmanager_service_name }}"
  102. namespace: "{{ openshift_prometheus_namespace }}"
  103. labels:
  104. name: prometheus
  105. annotations:
  106. service.alpha.openshift.io/serving-cert-secret-name: alertmanager-tls
  107. ports:
  108. - name: prometheus
  109. port: "{{ openshift_prometheus_service_port }}"
  110. targetPort: "{{ openshift_prometheus_alertmanager_service_targetport }}"
  111. protocol: TCP
  112. selector:
  113. app: prometheus
  114. # create prometheus and alerts routes
  115. # TODO: oc_route module should support insecureEdgeTerminationPolicy: Redirect
  116. - name: create prometheus and alerts routes
  117. oc_route:
  118. state: present
  119. name: "{{ item.name }}"
  120. host: "{{ item.host }}"
  121. namespace: "{{ openshift_prometheus_namespace }}"
  122. service_name: "{{ item.name }}"
  123. tls_termination: reencrypt
  124. with_items:
  125. - name: prometheus
  126. host: "{{ openshift_prometheus_hostname }}"
  127. - name: alerts
  128. host: "{{ openshift_prometheus_alerts_hostname }}"
  129. - name: alertmanager
  130. host: "{{ openshift_prometheus_alertmanager_hostname }}"
  131. # Storage
  132. - name: create prometheus pvc
  133. oc_pvc:
  134. namespace: "{{ openshift_prometheus_namespace }}"
  135. name: "{{ openshift_prometheus_pvc_name }}"
  136. access_modes: "{{ openshift_prometheus_pvc_access_modes }}"
  137. volume_capacity: "{{ openshift_prometheus_pvc_size }}"
  138. selector: "{{ openshift_prometheus_pvc_pv_selector }}"
  139. storage_class_name: "{{ openshift_prometheus_sc_name }}"
  140. when: openshift_prometheus_storage_type == 'pvc'
  141. - name: create alertmanager pvc
  142. oc_pvc:
  143. namespace: "{{ openshift_prometheus_namespace }}"
  144. name: "{{ openshift_prometheus_alertmanager_pvc_name }}"
  145. access_modes: "{{ openshift_prometheus_alertmanager_pvc_access_modes }}"
  146. volume_capacity: "{{ openshift_prometheus_alertmanager_pvc_size }}"
  147. selector: "{{ openshift_prometheus_alertmanager_pvc_pv_selector }}"
  148. storage_class_name: "{{ openshift_prometheus_alertmanager_sc_name }}"
  149. when: openshift_prometheus_alertmanager_storage_type == 'pvc'
  150. - name: create alertbuffer pvc
  151. oc_pvc:
  152. namespace: "{{ openshift_prometheus_namespace }}"
  153. name: "{{ openshift_prometheus_alertbuffer_pvc_name }}"
  154. access_modes: "{{ openshift_prometheus_alertbuffer_pvc_access_modes }}"
  155. volume_capacity: "{{ openshift_prometheus_alertbuffer_pvc_size }}"
  156. selector: "{{ openshift_prometheus_alertbuffer_pvc_pv_selector }}"
  157. storage_class_name: "{{ openshift_prometheus_alertbuffer_sc_name }}"
  158. when: openshift_prometheus_alertbuffer_storage_type == 'pvc'
  159. # prometheus configmap
  160. # Copy the additional rules file if it is defined
  161. - name: Copy additional rules file to host
  162. copy:
  163. src: "{{ openshift_prometheus_additional_rules_file }}"
  164. dest: "{{ tempdir }}/prometheus.additional.rules"
  165. when:
  166. - openshift_prometheus_additional_rules_file is defined
  167. - openshift_prometheus_additional_rules_file is not none
  168. - openshift_prometheus_additional_rules_file | trim | length > 0
  169. - stat:
  170. path: "{{ tempdir }}/prometheus.additional.rules"
  171. register: additional_rules_stat
  172. - template:
  173. src: prometheus.yml.j2
  174. dest: "{{ tempdir }}/prometheus.yml"
  175. changed_when: no
  176. - template:
  177. src: prometheus.rules.j2
  178. dest: "{{ tempdir }}/prometheus.rules"
  179. changed_when: no
  180. # In prometheus configmap create "additional.rules" section if file exists
  181. - name: Set prometheus configmap
  182. oc_configmap:
  183. state: present
  184. name: "prometheus"
  185. namespace: "{{ openshift_prometheus_namespace }}"
  186. from_file:
  187. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  188. prometheus.additional.rules: "{{ tempdir }}/prometheus.additional.rules"
  189. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  190. when: additional_rules_stat.stat.exists == True
  191. - name: Set prometheus configmap
  192. oc_configmap:
  193. state: present
  194. name: "prometheus"
  195. namespace: "{{ openshift_prometheus_namespace }}"
  196. from_file:
  197. prometheus.rules: "{{ tempdir }}/prometheus.rules"
  198. prometheus.yml: "{{ tempdir }}/prometheus.yml"
  199. when: additional_rules_stat.stat.exists == False
  200. # alertmanager configmap
  201. - template:
  202. src: alertmanager.yml.j2
  203. dest: "{{ tempdir }}/alertmanager.yml"
  204. changed_when: no
  205. - name: Set alertmanager configmap
  206. oc_configmap:
  207. state: present
  208. name: "alertmanager"
  209. namespace: "{{ openshift_prometheus_namespace }}"
  210. from_file:
  211. alertmanager.yml: "{{ tempdir }}/alertmanager.yml"
  212. # create prometheus stateful set
  213. - name: Set prometheus template
  214. template:
  215. src: prometheus.j2
  216. dest: "{{ tempdir }}/templates/prometheus.yaml"
  217. vars:
  218. namespace: "{{ openshift_prometheus_namespace }}"
  219. # prom_replicas: "{{ openshift_prometheus_replicas }}"
  220. - name: Set prometheus stateful set
  221. oc_obj:
  222. state: present
  223. name: "prometheus"
  224. namespace: "{{ openshift_prometheus_namespace }}"
  225. kind: statefulset
  226. files:
  227. - "{{ tempdir }}/templates/prometheus.yaml"
  228. delete_after: true