generate_certs.yaml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. ---
  2. # we will ensure our secrets and configmaps are set up here first
  3. - name: Checking for ca.key
  4. stat: path="{{generated_certs_dir}}/ca.key"
  5. register: ca_key_file
  6. check_mode: no
  7. - name: Checking for ca.crt
  8. stat: path="{{generated_certs_dir}}/ca.crt"
  9. register: ca_cert_file
  10. check_mode: no
  11. - name: Checking for ca.serial.txt
  12. stat: path="{{generated_certs_dir}}/ca.serial.txt"
  13. register: ca_serial_file
  14. check_mode: no
  15. - name: Generate certificates
  16. command: >
  17. {{ openshift.common.admin_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig ca create-signer-cert
  18. --key={{generated_certs_dir}}/ca.key --cert={{generated_certs_dir}}/ca.crt
  19. --serial={{generated_certs_dir}}/ca.serial.txt --name=logging-signer-test
  20. check_mode: no
  21. when:
  22. - not ca_key_file.stat.exists
  23. - not ca_cert_file.stat.exists
  24. - not ca_serial_file.stat.exists
  25. - name: Checking for signing.conf
  26. stat: path="{{generated_certs_dir}}/signing.conf"
  27. register: signing_conf_file
  28. check_mode: no
  29. - template: src=signing.conf.j2 dest={{generated_certs_dir}}/signing.conf
  30. vars:
  31. - top_dir: '{{generated_certs_dir}}'
  32. when: not signing_conf_file.stat.exists
  33. - include: procure_server_certs.yaml
  34. loop_control:
  35. loop_var: cert_info
  36. with_items:
  37. - procure_component: kibana
  38. - procure_component: kibana-ops
  39. - procure_component: kibana-internal
  40. hostnames: "kibana, kibana-ops, {{openshift_logging_kibana_hostname}}, {{openshift_logging_kibana_ops_hostname}}"
  41. - name: Copy proxy TLS configuration file
  42. copy: src=server-tls.json dest={{generated_certs_dir}}/server-tls.json
  43. when: server_tls_json is undefined
  44. check_mode: no
  45. - name: Copy proxy TLS configuration file
  46. copy: content="{{server_tls_json}}" dest={{generated_certs_dir}}/server-tls.json
  47. when: server_tls_json is defined
  48. check_mode: no
  49. - name: Checking for ca.db
  50. stat: path="{{generated_certs_dir}}/ca.db"
  51. register: ca_db_file
  52. check_mode: no
  53. - copy: content="" dest={{generated_certs_dir}}/ca.db
  54. check_mode: no
  55. when:
  56. - not ca_db_file.stat.exists
  57. - name: Checking for ca.crt.srl
  58. stat: path="{{generated_certs_dir}}/ca.crt.srl"
  59. register: ca_cert_srl_file
  60. check_mode: no
  61. - copy: content="" dest={{generated_certs_dir}}/ca.crt.srl
  62. check_mode: no
  63. when:
  64. - not ca_cert_srl_file.stat.exists
  65. - name: Generate PEM certs
  66. include: generate_pems.yaml component={{node_name}}
  67. with_items:
  68. - system.logging.fluentd
  69. - system.logging.kibana
  70. - system.logging.curator
  71. - system.admin
  72. loop_control:
  73. loop_var: node_name
  74. - name: Copy JKS generation script
  75. copy:
  76. src: generate-jks.sh
  77. dest: "{{generated_certs_dir}}/generate-jks.sh"
  78. check_mode: no
  79. # check if pod generated files exist -- if they all do don't run the pod
  80. - name: Checking for elasticsearch.jks
  81. stat: path="{{generated_certs_dir}}/elasticsearch.jks"
  82. register: elasticsearch_jks
  83. check_mode: no
  84. - name: Checking for logging-es.jks
  85. stat: path="{{generated_certs_dir}}/logging-es.jks"
  86. register: logging_es_jks
  87. check_mode: no
  88. - name: Checking for system.admin.jks
  89. stat: path="{{generated_certs_dir}}/system.admin.jks"
  90. register: system_admin_jks
  91. check_mode: no
  92. - name: Checking for truststore.jks
  93. stat: path="{{generated_certs_dir}}/truststore.jks"
  94. register: truststore_jks
  95. check_mode: no
  96. - name: create JKS generation container
  97. command: >
  98. docker run
  99. -u 0
  100. -e "PROJECT={{openshift_logging_namespace}}"
  101. -e "CERT_DIR={{generated_certs_dir}}"
  102. -v "{{generated_certs_dir}}:{{generated_certs_dir}}"
  103. --name "jks_gen_{{'abcdefghijklmnopqrstuvwxyz0123456789'|random_word(10)}}"
  104. --entrypoint="/bin/bash"
  105. "{{openshift_logging_image_prefix}}logging-deployer:{{openshift_logging_image_version}}"
  106. "{{generated_certs_dir}}/generate-jks.sh"
  107. register: container_output
  108. check_mode: no
  109. become: yes
  110. when: not elasticsearch_jks.stat.exists or not logging_es_jks.stat.exists or not system_admin_jks.stat.exists or not truststore_jks.stat.exists
  111. # check for secret/logging-kibana-proxy
  112. - command: >
  113. {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig get secret/logging-kibana-proxy -n {{openshift_logging_namespace}} -o jsonpath='{.data.oauth-secret}'
  114. register: kibana_secret_oauth_check
  115. ignore_errors: yes
  116. changed_when: no
  117. check_mode: no
  118. - command: >
  119. {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig get secret/logging-kibana-proxy -n {{openshift_logging_namespace}} -o jsonpath='{.data.session-secret}'
  120. register: kibana_secret_session_check
  121. ignore_errors: yes
  122. changed_when: no
  123. check_mode: no
  124. # check for oauthclient secret
  125. - command: >
  126. {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig get oauthclient/kibana-proxy -n {{openshift_logging_namespace}} -o jsonpath='{.secret}'
  127. register: oauth_secret_check
  128. ignore_errors: yes
  129. changed_when: no
  130. check_mode: no
  131. # set or generate as needed
  132. - name: Generate proxy session
  133. set_fact: session_secret={{'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'|random_word(200)}}
  134. check_mode: no
  135. when:
  136. - kibana_secret_session_check.stdout is not defined or kibana_secret_session_check.stdout == ''
  137. - name: Generate proxy session
  138. set_fact: session_secret={{kibana_secret_session_check.stdout | b64decode }}
  139. check_mode: no
  140. when:
  141. - kibana_secret_session_check.stdout is defined
  142. - kibana_secret_session_check.stdout != ''
  143. - name: Generate oauth client secret
  144. set_fact: oauth_secret={{'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'|random_word(64)}}
  145. check_mode: no
  146. when: kibana_secret_oauth_check.stdout is not defined or kibana_secret_oauth_check.stdout == ''
  147. or oauth_secret_check.stdout is not defined or oauth_secret_check.stdout == ''
  148. or kibana_secret_oauth_check.stdout | b64decode != oauth_secret_check.stdout
  149. - name: Generate oauth client secret
  150. set_fact: oauth_secret={{kibana_secret_oauth_check.stdout | b64decode}}
  151. check_mode: no
  152. when:
  153. - kibana_secret_oauth_check is defined
  154. - kibana_secret_oauth_check.stdout != ''
  155. - oauth_secret_check.stdout is defined
  156. - oauth_secret_check.stdout != ''
  157. - kibana_secret_oauth_check.stdout | b64decode == oauth_secret_check.stdout