generate_certs_and_apiservice.yaml 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. ---
  2. # if we already have serving certs and a CA, re-use that
  3. - name: fetch existing metrics-server secret
  4. command: >
  5. {{ openshift_client_binary }} -n {{ openshift_metrics_server_project }}
  6. --config={{ mktemp.stdout }}/admin.kubeconfig
  7. get secret metrics-server-certs -o json
  8. register: existing_metrics_server_secret
  9. changed_when: false
  10. ignore_errors: true
  11. - name: use existing serving certs
  12. when: existing_metrics_server_secret.rc == 0
  13. block:
  14. - set_fact:
  15. existing_metrics_server_secret_json: "{{ existing_metrics_server_secret.stdout | from_json }}"
  16. - set_fact:
  17. metrics_server_certs:
  18. metrics-server.crt: "{{ existing_metrics_server_secret_json.data['tls.crt'] }}"
  19. metrics-server.key: "{{ existing_metrics_server_secret_json.data['tls.key'] }}"
  20. ca.crt: "{{ existing_metrics_server_secret_json.data['ca.crt'] }}"
  21. - name: generate new serving cert secrets if needed
  22. when: existing_metrics_server_secret.rc != 0
  23. block:
  24. - name: generate ca certificate chain
  25. command: >
  26. {{ openshift_client_binary }} adm ca create-signer-cert
  27. --config={{ mktemp.stdout }}/admin.kubeconfig
  28. --key='{{ mktemp.stdout }}/ca.key'
  29. --cert='{{ mktemp.stdout }}/ca.crt'
  30. --serial='{{ mktemp.stdout }}/ca.serial.txt'
  31. --name="metrics-signer@{{lookup('pipe','date +%s')}}"
  32. - name: generate metrics-server keys
  33. command: >
  34. {{ openshift_client_binary }} adm ca create-server-cert
  35. --config={{ mktemp.stdout }}/admin.kubeconfig
  36. --key='{{ mktemp.stdout }}/metrics-server.key'
  37. --cert='{{ mktemp.stdout }}/metrics-server.crt'
  38. --hostnames='metrics-server,metrics-server.{{ openshift_metrics_server_project }}.svc,metrics-server.{{ openshift_metrics_server_project }}.svc.cluster.local'
  39. --signer-cert='{{ mktemp.stdout }}/ca.crt'
  40. --signer-key='{{ mktemp.stdout }}/ca.key'
  41. --signer-serial='{{ mktemp.stdout }}/ca.serial.txt'
  42. - name: read files for the metrics-server-certs secret
  43. shell: >
  44. printf '%s: ' '{{ item }}'
  45. && base64 --wrap 0 '{{ mktemp.stdout }}/{{ item }}'
  46. register: metrics_server_secrets
  47. with_items:
  48. - metrics-server.crt
  49. - metrics-server.key
  50. changed_when: false
  51. - set_fact:
  52. metrics_server_secrets: |
  53. {{ metrics_server_secrets.results|map(attribute='stdout')|join('
  54. ')|from_yaml }}
  55. - slurp:
  56. src: "{{ mktemp.stdout }}/ca.crt"
  57. register: apiserver_ca
  58. - set_fact:
  59. metrics_server_certs:
  60. metrics-server.crt: "{{ metrics_server_secrets['metrics-server.crt'] }}"
  61. metrics-server.key: "{{ metrics_server_secrets['metrics-server.key'] }}"
  62. ca.crt: "{{ apiserver_ca.content }}"
  63. - name: generate metrics-server secret template
  64. template:
  65. src: serving-certs-secret.j2
  66. dest: "{{ mktemp.stdout }}/templates/metrics-server-certs.yaml"
  67. vars:
  68. cert: >
  69. {{ metrics_server_certs['metrics-server.crt'] }}
  70. key: >
  71. {{ metrics_server_certs['metrics-server.key'] }}
  72. # store the CA cert so we can easily later use it to recreate the APIService
  73. ca: >
  74. {{ metrics_server_certs['ca.crt'] }}
  75. changed_when: no
  76. - name: Generate metrics-server apiservice
  77. template:
  78. src: metrics-server-apiservice.j2
  79. dest: "{{ mktemp.stdout }}/templates/metrics-server-apiservice.yaml"
  80. vars:
  81. caBundle: "{{ metrics_server_certs['ca.crt'] }}"
  82. changed_when: no