33-clair-deploy.yml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. ---
  2. # Tasks required by 15-clair-deploy.adoc.
  3. - name: Prepare registry VM to run Clair services.
  4. hosts: registry.ocp4.example.com
  5. gather_subset: min
  6. remote_user: quay
  7. tasks:
  8. - name: Ensure the podman network is there.
  9. containers.podman.podman_network_info:
  10. name: quay
  11. register: quay_net
  12. ignore_errors: yes
  13. - ansible.builtin.assert:
  14. that:
  15. - not quay_net.failed
  16. - quay_net.networks is defined
  17. - quay_net.networks is iterable
  18. - quay_net.networks | length == 1
  19. fail_msg: "FATAL: Podman network 'quay' does not exist for 'quay' user. Ensure you deployed Quay before running this playbook."
  20. success_msg: "OK, network 'quay' found."
  21. - name: Ensure the quay service is defined.
  22. ansible.builtin.stat:
  23. path: "{{ ansible_facts['user_dir'] }}/.config/systemd/user/quay.service"
  24. get_attributes: no
  25. get_checksum: no
  26. get_mime: no
  27. register: quay_svc_unit
  28. - ansible.builtin.assert:
  29. that:
  30. - not quay_svc_unit.failed
  31. - quay_svc_unit.stat.exists
  32. fail_msg: "FATAL: User service 'quay.service' not found for 'quay' user. Ensure you deployed Quay before running this playbook."
  33. success_msg: "OK, service 'quay.service' found."
  34. - name: Ensure the quay-pg service is defined.
  35. ansible.builtin.stat:
  36. path: "{{ ansible_facts['user_dir'] }}/.config/systemd/user/quay-pg.service"
  37. get_attributes: no
  38. get_checksum: no
  39. get_mime: no
  40. register: quay_pg_svc_unit
  41. - ansible.builtin.assert:
  42. that:
  43. - not quay_pg_svc_unit.failed
  44. - quay_pg_svc_unit.stat.exists
  45. fail_msg: "FATAL: User service 'quay-pg.service' not found for 'quay' user. Ensure you deployed Quay before running this playbook."
  46. success_msg: "OK, service 'quay-pg.service' found."
  47. - name: Ensure Quay PostgreSQL is running.
  48. ansible.builtin.systemd_service:
  49. name: quay-pg
  50. scope: user
  51. state: started
  52. - name: Check whether the clair database exists.
  53. containers.podman.podman_container_exec:
  54. name: postgresql
  55. command: psql -d postgres -U postgres -t -A -c "SELECT datname FROM pg_database WHERE datname = 'clair'"
  56. register: pg_clair
  57. changed_when: no
  58. - name: Create the clair database if necessary.
  59. containers.podman.podman_container_exec:
  60. name: postgresql
  61. command: 'psql -d postgres -U postgres -c "CREATE DATABASE clair OWNER quay"'
  62. when:
  63. - pg_clair is defined
  64. - pg_clair.stdout_lines | length == 0
  65. - name: Create the uuid-ossp extension if necessary.
  66. containers.podman.podman_container_exec:
  67. name: postgresql
  68. command: psql -d clair -U postgres -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
  69. register: pg_ext
  70. changed_when:
  71. - not "already exists" in pg_ext.stderr
  72. - name: Patch Quay config if necessary.
  73. ansible.builtin.lineinfile:
  74. path: "{{ ansible_facts['user_dir'] }}/config/config.yaml"
  75. insertafter: "{{ item.after }}"
  76. regexp: "{{ item.fixre }}"
  77. line: "{{ item.value }}"
  78. loop:
  79. - after: "^FEATURE_MAILING: false$"
  80. fixre: "^FEATURE_SECURITY_SCANNER: .*$"
  81. value: "FEATURE_SECURITY_SCANNER: true"
  82. - after: "^SECRET_KEY: .*$"
  83. fixre: "^SECURITY_SCANNER_INDEXING_INTERVAL: .*$"
  84. value: "SECURITY_SCANNER_INDEXING_INTERVAL: 30"
  85. - after: "^SECURITY_SCANNER_INDEXING_INTERVAL: .*$"
  86. fixre: "^SECURITY_SCANNER_V4_PSK: .*$"
  87. value: "SECURITY_SCANNER_V4_PSK: NjA1aWhnNWk4MWhqNw=="
  88. - after: "^SECURITY_SCANNER_V4_PSK: .*$"
  89. fixre: "^SECURITY_SCANNER_V4_ENDPOINT: .*$"
  90. value: "SECURITY_SCANNER_V4_ENDPOINT: http://clair:8081"
  91. notify:
  92. - restart quay
  93. - name: Create Clair config directory if necessary.
  94. ansible.builtin.file:
  95. path: "{{ ansible_facts['user_dir'] }}/clair"
  96. state: directory
  97. mode: 0775
  98. - name: Publish Clair config if necessary.
  99. ansible.builtin.copy:
  100. dest: "{{ ansible_facts['user_dir'] }}/clair/config.yaml"
  101. content: |
  102. http_listen_addr: :8081
  103. introspection_addr: :8088
  104. log_level: debug
  105. indexer:
  106. connstring: host=postgresql port=5432 dbname=clair user=quay password=secret sslmode=disable
  107. scanlock_retry: 10
  108. layer_scan_concurrency: 5
  109. migrations: true
  110. matcher:
  111. connstring: host=postgresql port=5432 dbname=clair user=quay password=secret sslmode=disable
  112. max_conn_pool: 100
  113. migrations: true
  114. indexer_addr: clair-indexer
  115. notifier:
  116. connstring: host=postgresql port=5432 dbname=clair user=quay password=secret sslmode=disable
  117. delivery_interval: 1m
  118. poll_interval: 5m
  119. migrations: true
  120. auth:
  121. psk:
  122. key: "NjA1aWhnNWk4MWhqNw=="
  123. iss: ["quay"]
  124. metrics:
  125. name: "prometheus"
  126. mode: 0664
  127. notify:
  128. - restart quay
  129. - restart clair
  130. - name: Ensure same TLS trust will be used for Clair as for workstation.
  131. ansible.builtin.copy:
  132. src: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
  133. dest: "{{ ansible_facts['user_dir'] }}/tls-ca-bundle.pem"
  134. mode: 0664
  135. notify:
  136. - restart clair
  137. - name: Ensure Clair service unit is there.
  138. ansible.builtin.template:
  139. dest: "{{ ansible_facts['user_dir'] }}/.config/systemd/user/clair.service"
  140. src: "templates/clair.service.j2"
  141. - name: Reload systemd.
  142. ansible.builtin.systemd_service:
  143. daemon_reload: yes
  144. scope: user
  145. - name: Enable services and start them.
  146. ansible.builtin.systemd_service:
  147. name: clair
  148. scope: user
  149. state: started
  150. enabled: yes
  151. handlers:
  152. - name: restart quay
  153. ansible.builtin.systemd_service:
  154. name: quay
  155. scope: user
  156. state: restarted
  157. - name: restart clair
  158. ansible.builtin.systemd_service:
  159. name: clair
  160. scope: user
  161. state: restarted
  162. ...