router.yml 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. ---
  2. - name: Update router certificates
  3. hosts: oo_first_master
  4. vars:
  5. roles:
  6. - lib_openshift
  7. tasks:
  8. - name: Create temp directory for kubeconfig
  9. command: mktemp -d /tmp/openshift-ansible-XXXXXX
  10. register: mktemp
  11. changed_when: false
  12. - name: Copy admin client config(s)
  13. command: >
  14. cp {{ openshift.common.config_base }}/master//admin.kubeconfig {{ mktemp.stdout }}/admin.kubeconfig
  15. changed_when: false
  16. - name: Determine if router exists
  17. command: >
  18. {{ openshift.common.client_binary }} get dc/router -o json
  19. --config={{ mktemp.stdout }}/admin.kubeconfig
  20. -n default
  21. register: l_router_dc
  22. failed_when: false
  23. changed_when: false
  24. - set_fact:
  25. router_env_vars: "{{ ((l_router_dc.stdout | from_json)['spec']['template']['spec']['containers'][0]['env']
  26. | oo_collect('name'))
  27. | default([]) }}"
  28. router_secrets: "{{ ((l_router_dc.stdout | from_json)['spec']['template']['spec']['volumes']
  29. | oo_collect('secret')
  30. | oo_collect('secretName'))
  31. | default([]) }}"
  32. changed_when: false
  33. when: l_router_dc.rc == 0
  34. - name: Update router environment variables
  35. shell: >
  36. {{ openshift.common.client_binary }} env dc/router
  37. OPENSHIFT_CA_DATA="$(cat /etc/origin/master/ca.crt)"
  38. OPENSHIFT_CERT_DATA="$(cat /etc/origin/master/openshift-router.crt)"
  39. OPENSHIFT_KEY_DATA="$(cat /etc/origin/master/openshift-router.key)"
  40. --config={{ mktemp.stdout }}/admin.kubeconfig
  41. -n default
  42. when: l_router_dc.rc == 0 and 'OPENSHIFT_CA_DATA' in router_env_vars and 'OPENSHIFT_CERT_DATA' in router_env_vars and 'OPENSHIFT_KEY_DATA' in router_env_vars
  43. - block:
  44. - name: Delete existing router certificate secret
  45. oc_secret:
  46. kubeconfig: "{{ mktemp.stdout }}/admin.kubeconfig"
  47. name: router-certs
  48. namespace: default
  49. state: absent
  50. run_once: true
  51. - name: Remove router service annotations
  52. command: >
  53. {{ openshift.common.client_binary }} annotate service/router
  54. service.alpha.openshift.io/serving-cert-secret-name-
  55. service.alpha.openshift.io/serving-cert-signed-by-
  56. --config={{ mktemp.stdout }}/admin.kubeconfig
  57. -n default
  58. - name: Add serving-cert-secret annotation to router service
  59. command: >
  60. {{ openshift.common.client_binary }} annotate service/router
  61. service.alpha.openshift.io/serving-cert-secret-name=router-certs
  62. --config={{ mktemp.stdout }}/admin.kubeconfig
  63. -n default
  64. when: l_router_dc.rc == 0 and 'router-certs' in router_secrets and openshift_hosted_router_certificate is undefined
  65. - block:
  66. - assert:
  67. that:
  68. - "'certfile' in openshift_hosted_router_certificate"
  69. - "'keyfile' in openshift_hosted_router_certificate"
  70. - "'cafile' in openshift_hosted_router_certificate"
  71. msg: |-
  72. openshift_hosted_router_certificate has been set in the inventory but is
  73. missing one or more required keys. Ensure that 'certfile', 'keyfile',
  74. and 'cafile' keys have been specified for the openshift_hosted_router_certificate
  75. inventory variable.
  76. - name: Read router certificate and key
  77. become: no
  78. local_action:
  79. module: slurp
  80. src: "{{ item }}"
  81. register: openshift_router_certificate_output
  82. # Defaulting dictionary keys to none to avoid deprecation warnings
  83. # (future fatal errors) during template evaluation. Dictionary keys
  84. # won't be accessed unless openshift_hosted_router_certificate is
  85. # defined and has all keys (certfile, keyfile, cafile) which we
  86. # check above.
  87. with_items:
  88. - "{{ (openshift_hosted_router_certificate | default({'certfile':none})).certfile }}"
  89. - "{{ (openshift_hosted_router_certificate | default({'keyfile':none})).keyfile }}"
  90. - "{{ (openshift_hosted_router_certificate | default({'cafile':none})).cafile }}"
  91. - name: Write temporary router certificate file
  92. copy:
  93. content: "{% for certificate in openshift_router_certificate_output.results -%}{{ certificate.content | b64decode }}{% endfor -%}"
  94. dest: "{{ mktemp.stdout }}/openshift-hosted-router-certificate.pem"
  95. mode: 0600
  96. - name: Write temporary router key file
  97. copy:
  98. content: "{{ (openshift_router_certificate_output.results
  99. | oo_collect('content', {'source':(openshift_hosted_router_certificate | default({'keyfile':none})).keyfile}))[0] | b64decode }}"
  100. dest: "{{ mktemp.stdout }}/openshift-hosted-router-certificate.key"
  101. mode: 0600
  102. - name: Replace router-certs secret
  103. shell: >
  104. {{ openshift.common.client_binary }} secrets new router-certs
  105. tls.crt="{{ mktemp.stdout }}/openshift-hosted-router-certificate.pem"
  106. tls.key="{{ mktemp.stdout }}/openshift-hosted-router-certificate.key"
  107. --type=kubernetes.io/tls
  108. --config={{ mktemp.stdout }}/admin.kubeconfig
  109. --confirm
  110. -o json | {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig replace -f -
  111. - name: Remove temporary router certificate and key files
  112. file:
  113. path: "{{ item }}"
  114. state: absent
  115. with_items:
  116. - "{{ mktemp.stdout }}/openshift-hosted-router-certificate.pem"
  117. - "{{ mktemp.stdout }}/openshift-hosted-router-certificate.key"
  118. when: l_router_dc.rc == 0 and 'router-certs' in router_secrets and openshift_hosted_router_certificate is defined
  119. - name: Redeploy router
  120. command: >
  121. {{ openshift.common.client_binary }} deploy dc/router
  122. --latest
  123. --config={{ mktemp.stdout }}/admin.kubeconfig
  124. -n default
  125. - name: Delete temp directory
  126. file:
  127. name: "{{ mktemp.stdout }}"
  128. state: absent
  129. changed_when: False