blob: c2ff92d9668992b73c7a647df81595ea0b38d6c7 [file] [log] [blame]
Mohammed Naserb7b97d62022-03-12 16:30:00 -05001# Copyright (c) 2022 VEXXHOST, Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
Mohammed Naserc8e1a452022-08-11 16:16:13 -040015- name: Create namespace
16 kubernetes.core.k8s:
17 state: present
18 definition:
19 apiVersion: v1
20 kind: Namespace
21 metadata:
22 name: cert-manager
Mohammed Naserb7b97d62022-03-12 16:30:00 -050023
Mohammed Naserc8e1a452022-08-11 16:16:13 -040024- name: Deploy Helm chart
25 kubernetes.core.k8s:
26 state: present
27 definition:
28 - apiVersion: source.toolkit.fluxcd.io/v1beta2
29 kind: HelmRepository
30 metadata:
31 name: jetstack
32 namespace: cert-manager
33 spec:
34 interval: 60s
35 url: https://charts.jetstack.io
36
37 - apiVersion: helm.toolkit.fluxcd.io/v2beta1
38 kind: HelmRelease
39 metadata:
40 name: cert-manager
41 namespace: cert-manager
42 spec:
43 interval: 60s
44 chart:
45 spec:
46 chart: cert-manager
47 version: v1.7.1
48 sourceRef:
49 kind: HelmRepository
50 name: jetstack
51 install:
52 crds: CreateReplace
53 upgrade:
54 crds: CreateReplace
55 values:
56 installCRDs: true
57 volumes:
58 - name: etc-ssl-certs
59 hostPath:
60 path: /etc/ssl/certs
61 volumeMounts:
62 - name: etc-ssl-certs
63 mountPath: /etc/ssl/certs
64 readOnly: true
65 nodeSelector:
66 openstack-control-plane: enabled
67 webhook:
68 nodeSelector:
69 openstack-control-plane: enabled
70 cainjector:
71 nodeSelector:
72 openstack-control-plane: enabled
73 startupapicheck:
74 nodeSelector:
75 openstack-control-plane: enabled
76
77- name: Create Issuer
Mohammed Naserb7b97d62022-03-12 16:30:00 -050078 kubernetes.core.k8s:
79 state: present
80 definition:
81 apiVersion: cert-manager.io/v1
82 kind: Issuer
83 metadata:
84 name: openstack
85 namespace: openstack
86 spec: "{{ cert_manager_issuer }}"
Mohammed Naserc8e1a452022-08-11 16:16:13 -040087 # NOTE(mnaser): Since we haven't moved to the operator pattern yet, we need to
88 # keep retrying a few times as the CRDs might not be installed
89 # yet.
90 retries: 60
91 delay: 5
92 register: _result
93 until: _result is not failed
okozachenko05a72ed2022-04-12 23:01:43 +100094
okozachenko674f9b72022-04-19 01:28:33 +100095- name: Bootstrap self-signed PKI
96 block:
97 - name: Create self-signed issuer
98 kubernetes.core.k8s:
99 state: present
100 definition:
101 apiVersion: cert-manager.io/v1
okozachenko05a72ed2022-04-12 23:01:43 +1000102 kind: ClusterIssuer
okozachenko674f9b72022-04-19 01:28:33 +1000103 metadata:
104 name: selfsigned-issuer
105 spec:
106 selfSigned: {}
107
108 - name: Bootstrap a custom root certificate for a private PKI
109 kubernetes.core.k8s:
110 state: present
111 definition:
112 apiVersion: cert-manager.io/v1
113 kind: Certificate
114 metadata:
115 name: selfsigned-ca
116 namespace: openstack
117 spec:
118 isCA: true
119 commonName: selfsigned-ca
120 secretName: root-secret
121 duration: 86400h # 3600d
122 renewBefore: 360h # 15d
123 privateKey:
124 algorithm: ECDSA
125 size: 256
126 issuerRef:
127 name: selfsigned-issuer
128 kind: ClusterIssuer
129 group: cert-manager.io
130
131 - name: Wait till the root secret is created
132 kubernetes.core.k8s_info:
133 api_version: v1
134 kind: Secret
135 wait: true
136 name: root-secret
137 namespace: openstack
138 wait_sleep: 10
139 wait_timeout: 300
140 register: _openstack_helm_root_secret
141
142 - name: Copy CA certificate on host
143 ansible.builtin.copy:
144 content: "{{ _openstack_helm_root_secret.resources[0].data['tls.crt'] | b64decode }}"
145 dest: "/usr/local/share/ca-certificates/self-signed-osh-ca.crt"
146 mode: "0644"
147
148 - name: Update ca certificates on host
149 ansible.builtin.command:
150 cmd: update-ca-certificates
151 changed_when: false
152 when:
153 - cert_manager_issuer.ca.secretName is defined
154 - cert_manager_issuer.ca.secretName == "root-secret"