main.yaml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. ---
  2. - name: Validate Elasticsearch cluster size
  3. fail: msg="The openshift_logging_es_cluster_size may only be scaled down manually. Please see official documentation on how to do this."
  4. when: openshift_logging_facts.elasticsearch.deploymentconfigs | length > openshift_logging_es_cluster_size|int
  5. - name: Validate Elasticsearch Ops cluster size
  6. fail: msg="The openshift_logging_es_ops_cluster_size may only be scaled down manually. Please see official documentation on how to do this."
  7. when: openshift_logging_facts.elasticsearch_ops.deploymentconfigs | length > openshift_logging_es_ops_cluster_size|int
  8. - fail:
  9. msg: Invalid deployment type, one of ['data-master', 'data-client', 'master', 'client'] allowed
  10. when: not openshift_logging_elasticsearch_deployment_type in __allowed_es_types
  11. - set_fact:
  12. elasticsearch_name: "{{ 'logging-elasticsearch' ~ ( (openshift_logging_elasticsearch_ops_deployment | default(false) | bool) | ternary('-ops', '')) }}"
  13. es_component: "{{ 'es' ~ ( (openshift_logging_elasticsearch_ops_deployment | default(false) | bool) | ternary('-ops', '') ) }}"
  14. - include: determine_version.yaml
  15. # allow passing in a tempdir
  16. - name: Create temp directory for doing work in
  17. command: mktemp -d /tmp/openshift-logging-ansible-XXXXXX
  18. register: mktemp
  19. changed_when: False
  20. - set_fact:
  21. tempdir: "{{ mktemp.stdout }}"
  22. # This may not be necessary in this role
  23. - name: Create templates subdirectory
  24. file:
  25. state: directory
  26. path: "{{ tempdir }}/templates"
  27. mode: 0755
  28. changed_when: False
  29. # we want to make sure we have all the necessary components here
  30. # service account
  31. - name: Create ES service account
  32. oc_serviceaccount:
  33. state: present
  34. name: "aggregated-logging-elasticsearch"
  35. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  36. image_pull_secrets: "{{ openshift_logging_image_pull_secret }}"
  37. when: openshift_logging_image_pull_secret != ''
  38. - name: Create ES service account
  39. oc_serviceaccount:
  40. state: present
  41. name: "aggregated-logging-elasticsearch"
  42. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  43. when:
  44. - openshift_logging_image_pull_secret == ''
  45. # rolebinding reader
  46. - copy:
  47. src: rolebinding-reader.yml
  48. dest: "{{ tempdir }}/rolebinding-reader.yml"
  49. - name: Create rolebinding-reader role
  50. oc_obj:
  51. state: present
  52. name: "rolebinding-reader"
  53. kind: clusterrole
  54. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  55. files:
  56. - "{{ tempdir }}/rolebinding-reader.yml"
  57. delete_after: true
  58. # SA roles
  59. - name: Set rolebinding-reader permissions for ES
  60. oc_adm_policy_user:
  61. state: present
  62. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  63. resource_kind: cluster-role
  64. resource_name: rolebinding-reader
  65. user: "system:serviceaccount:{{ openshift_logging_elasticsearch_namespace }}:aggregated-logging-elasticsearch"
  66. # View role and binding
  67. - name: Generate logging-elasticsearch-view-role
  68. template:
  69. src: rolebinding.j2
  70. dest: "{{mktemp.stdout}}/logging-elasticsearch-view-role.yaml"
  71. vars:
  72. obj_name: logging-elasticsearch-view-role
  73. roleRef:
  74. name: view
  75. subjects:
  76. - kind: ServiceAccount
  77. name: aggregated-logging-elasticsearch
  78. changed_when: no
  79. - name: Set logging-elasticsearch-view-role role
  80. oc_obj:
  81. state: present
  82. name: "logging-elasticsearch-view-role"
  83. kind: rolebinding
  84. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  85. files:
  86. - "{{ tempdir }}/logging-elasticsearch-view-role.yaml"
  87. delete_after: true
  88. # configmap
  89. - template:
  90. src: elasticsearch-logging.yml.j2
  91. dest: "{{ tempdir }}/elasticsearch-logging.yml"
  92. when: es_logging_contents is undefined
  93. changed_when: no
  94. - template:
  95. src: elasticsearch.yml.j2
  96. dest: "{{ tempdir }}/elasticsearch.yml"
  97. vars:
  98. allow_cluster_reader: "{{ openshift_logging_elasticsearch_ops_allow_cluster_reader | lower | default('false') }}"
  99. es_number_of_shards: "{{ openshift_logging_es_number_of_shards | default(1) }}"
  100. es_number_of_replicas: "{{ openshift_logging_es_number_of_replicas | default(0) }}"
  101. when: es_config_contents is undefined
  102. changed_when: no
  103. - copy:
  104. content: "{{ es_logging_contents }}"
  105. dest: "{{ tempdir }}/elasticsearch-logging.yml"
  106. when: es_logging_contents is defined
  107. changed_when: no
  108. - copy:
  109. content: "{{ es_config_contents }}"
  110. dest: "{{ tempdir }}/elasticsearch.yml"
  111. when: es_config_contents is defined
  112. changed_when: no
  113. - name: Set ES configmap
  114. oc_configmap:
  115. state: present
  116. name: "{{ elasticsearch_name }}"
  117. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  118. from_file:
  119. elasticsearch.yml: "{{ tempdir }}/elasticsearch.yml"
  120. logging.yml: "{{ tempdir }}/elasticsearch-logging.yml"
  121. # secret
  122. - name: Set ES secret
  123. oc_secret:
  124. state: present
  125. name: "logging-elasticsearch"
  126. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  127. files:
  128. - name: key
  129. path: "{{ generated_certs_dir }}/logging-es.jks"
  130. - name: truststore
  131. path: "{{ generated_certs_dir }}/truststore.jks"
  132. - name: searchguard.key
  133. path: "{{ generated_certs_dir }}/elasticsearch.jks"
  134. - name: searchguard.truststore
  135. path: "{{ generated_certs_dir }}/truststore.jks"
  136. - name: admin-key
  137. path: "{{ generated_certs_dir }}/system.admin.key"
  138. - name: admin-cert
  139. path: "{{ generated_certs_dir }}/system.admin.crt"
  140. - name: admin-ca
  141. path: "{{ generated_certs_dir }}/ca.crt"
  142. - name: admin.jks
  143. path: "{{ generated_certs_dir }}/system.admin.jks"
  144. # services
  145. - name: Set logging-{{ es_component }}-cluster service
  146. oc_service:
  147. state: present
  148. name: "logging-{{ es_component }}-cluster"
  149. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  150. selector:
  151. component: "{{ es_component }}"
  152. provider: openshift
  153. # pending #4091
  154. #labels:
  155. #- logging-infra: 'support'
  156. ports:
  157. - port: 9300
  158. - name: Set logging-{{ es_component }} service
  159. oc_service:
  160. state: present
  161. name: "logging-{{ es_component }}"
  162. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  163. selector:
  164. component: "{{ es_component }}"
  165. provider: openshift
  166. # pending #4091
  167. #labels:
  168. #- logging-infra: 'support'
  169. ports:
  170. - port: 9200
  171. targetPort: "restapi"
  172. - name: Creating ES storage template
  173. template:
  174. src: pvc.j2
  175. dest: "{{ tempdir }}/templates/logging-es-pvc.yml"
  176. vars:
  177. obj_name: "{{ openshift_logging_elasticsearch_pvc_name }}"
  178. size: "{{ openshift_logging_elasticsearch_pvc_size }}"
  179. access_modes: "{{ openshift_logging_elasticsearch_pvc_access_modes | list }}"
  180. pv_selector: "{{ openshift_logging_elasticsearch_pvc_pv_selector }}"
  181. when:
  182. - openshift_logging_elasticsearch_storage_type == "pvc"
  183. - not openshift_logging_elasticsearch_pvc_dynamic
  184. - name: Creating ES storage template
  185. template:
  186. src: pvc.j2
  187. dest: "{{ tempdir }}/templates/logging-es-pvc.yml"
  188. vars:
  189. obj_name: "{{ openshift_logging_elasticsearch_pvc_name }}"
  190. size: "{{ openshift_logging_elasticsearch_pvc_size }}"
  191. access_modes: "{{ openshift_logging_elasticsearch_pvc_access_modes | list }}"
  192. pv_selector: "{{ openshift_logging_elasticsearch_pvc_pv_selector }}"
  193. annotations:
  194. volume.beta.kubernetes.io/storage-class: "dynamic"
  195. when:
  196. - openshift_logging_elasticsearch_storage_type == "pvc"
  197. - openshift_logging_elasticsearch_pvc_dynamic
  198. - name: Set ES storage
  199. oc_obj:
  200. state: present
  201. kind: pvc
  202. name: "{{ openshift_logging_elasticsearch_pvc_name }}"
  203. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  204. files:
  205. - "{{ tempdir }}/templates/logging-es-pvc.yml"
  206. delete_after: true
  207. when:
  208. - openshift_logging_elasticsearch_storage_type == "pvc"
  209. - set_fact:
  210. es_deploy_name: "logging-{{ es_component }}-{{ openshift_logging_elasticsearch_deployment_type }}-{{ 'abcdefghijklmnopqrstuvwxyz0123456789' | random_word(8) }}"
  211. when: openshift_logging_elasticsearch_deployment_name == ""
  212. - set_fact:
  213. es_deploy_name: "{{ openshift_logging_elasticsearch_deployment_name }}"
  214. when: openshift_logging_elasticsearch_deployment_name != ""
  215. # DC
  216. - name: Set ES dc templates
  217. template:
  218. src: es.j2
  219. dest: "{{ tempdir }}/templates/logging-es-dc.yml"
  220. vars:
  221. es_cluster_name: "{{ es_component }}"
  222. component: "{{ es_component }}"
  223. logging_component: elasticsearch
  224. deploy_name: "{{ es_deploy_name }}"
  225. image: "{{ openshift_logging_image_prefix }}logging-elasticsearch:{{ openshift_logging_image_version }}"
  226. es_cpu_limit: "{{ openshift_logging_elasticsearch_cpu_limit }}"
  227. es_memory_limit: "{{ openshift_logging_elasticsearch_memory_limit }}"
  228. es_node_selector: "{{ openshift_logging_elasticsearch_nodeselector | default({}) }}"
  229. deploy_type: "{{ openshift_logging_elasticsearch_deployment_type }}"
  230. replicas: 1
  231. - name: Set ES dc
  232. oc_obj:
  233. state: present
  234. name: "{{ es_deploy_name }}"
  235. namespace: "{{ openshift_logging_elasticsearch_namespace }}"
  236. kind: dc
  237. files:
  238. - "{{ tempdir }}/templates/logging-es-dc.yml"
  239. delete_after: true
  240. ## Placeholder for migration when necessary ##
  241. - name: Delete temp directory
  242. file:
  243. name: "{{ tempdir }}"
  244. state: absent
  245. changed_when: False