Skip to content

Commit 71e13c1

Browse files
authored
Merge pull request #94 from stackhpc/general-secret-store
Add choice CA secret store choice variable
2 parents a34e46e + 1439a2d commit 71e13c1

File tree

3 files changed

+51
-13
lines changed

3 files changed

+51
-13
lines changed

ansible/deploy-openstack-config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,14 @@
220220
create: true
221221
loop: "{{ kayobe_config_custom }}"
222222

223+
- name: Ensure CA secret store is selected
224+
ansible.builtin.lineinfile:
225+
path: "{{ src_directory }}/{{ kayobe_config_name }}/etc/kayobe/environments/{{ kayobe_config_environment }}/stackhpc.yml"
226+
line: "stackhpc_ca_secret_store: {{ ca_secret_store }}"
227+
mode: "0644"
228+
create: true
229+
when: ca_secret_store is defined and ca_secret_store != "" and ca_secret_store != None
230+
223231
- name: Determine OpenStack release
224232
ansible.builtin.shell:
225233
cmd: >

ansible/files/multinode.sh

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,24 @@ function report_success() {
7171

7272
function encrypt_file() {
7373
file=$1
74+
if [ ! -f $file ]; then
75+
echo "File $file was not found."
76+
return 0
77+
fi
7478
# Make it idempotent by skipping encrypted files.
7579
if [[ ! $(head -n 1 $file) =~ '$ANSIBLE_VAULT;' ]]; then
7680
ansible-vault encrypt --vault-password-file ~/vault.password $file
81+
else
82+
echo "Skipping... The file $file is already encrypted."
7783
fi
7884
}
7985

8086
function decrypt_file() {
8187
file=$1
88+
if [ ! -f $file ]; then
89+
echo "File $file was not found."
90+
return 0
91+
fi
8292
ansible-vault decrypt --vault-password-file ~/vault.password $file
8393
}
8494

@@ -115,10 +125,14 @@ function deploy_seed() {
115125

116126
function deploy_seed_vault() {
117127
# Deploy hashicorp vault to the seed
118-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-seed.yml
128+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-deploy-seed.yml
129+
# Encrypt either vault or openbao certificate keys
119130
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/OS-TLS-INT.pem
120131
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/seed-vault-keys.json
121132
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/*.key
133+
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/openbao/OS-TLS-INT.pem
134+
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/openbao/seed-openbao-keys.json
135+
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/openbao/*.key
122136
}
123137

124138
function get_seed_ssh() {
@@ -130,15 +144,25 @@ function get_seed_ssh() {
130144
}
131145

132146
function copy_ca_to_seed() {
133-
# Add the Vault CA to the trust store on the seed.
147+
# Add the Vault or OpenBao CA to the trust store on the seed.
134148
seed_ssh=$(get_seed_ssh)
149+
vault_cert_path=$KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/ca/vault.crt
150+
openbao_cert_path=$KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/ca/openbao.crt
151+
152+
if [ -f $openbao_cert_path ]; then
153+
scp -oStrictHostKeyChecking=no $openbao_cert_path ${seed_ssh}:~/OS-TLS-ROOT.crt
154+
elif [ -f $vault_cert_path ]; then
155+
scp -oStrictHostKeyChecking=no $vault_cert_path ${seed_ssh}:~/OS-TLS-ROOT.crt
156+
else
157+
echo "Error: No root CA certificate was found."
158+
return 1
159+
fi
135160

136-
scp -oStrictHostKeyChecking=no $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/ca/vault.crt ${seed_ssh}:
137161
if [[ $(grep '^ID=' /etc/os-release | cut -d= -f2) == "ubuntu" ]]; then
138-
ssh -oStrictHostKeyChecking=no ${seed_ssh} sudo cp vault.crt /usr/local/share/ca-certificates/OS-TLS-ROOT.crt
162+
ssh -oStrictHostKeyChecking=no ${seed_ssh} sudo cp OS-TLS-ROOT.crt /usr/local/share/ca-certificates/OS-TLS-ROOT.crt
139163
ssh -oStrictHostKeyChecking=no ${seed_ssh} sudo update-ca-certificates
140164
else
141-
ssh -oStrictHostKeyChecking=no ${seed_ssh} sudo cp vault.crt /etc/pki/ca-trust/source/anchors/OS-TLS-ROOT.crt
165+
ssh -oStrictHostKeyChecking=no ${seed_ssh} sudo cp OS-TLS-ROOT.crt /etc/pki/ca-trust/source/anchors/OS-TLS-ROOT.crt
142166
ssh -oStrictHostKeyChecking=no ${seed_ssh} sudo update-ca-trust
143167
fi
144168
}
@@ -158,19 +182,21 @@ function deploy_overcloud_vault() {
158182
fi
159183

160184
# Deploy hashicorp vault to the controllers
161-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-overcloud.yml
185+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-deploy-overcloud.yml
186+
# Encrypt either vault or openbao certificate keys
162187
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/overcloud-vault-keys.json
188+
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/openbao/overcloud-openbao-keys.json
163189
}
164190

165191
function generate_overcloud_certs() {
166192
# Generate external tls certificates
167-
if [[ -f $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml ]]; then
168-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
193+
if [[ -f $KAYOBE_CONFIG_PATH/ansible/secret-store-generate-test-external-tls.yml ]]; then
194+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-generate-test-external-tls.yml
169195
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem
170196
fi
171197

172198
# Generate internal tls certificates
173-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-internal-tls.yml
199+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-generate-internal-tls.yml
174200
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy-internal.pem
175201

176202
# If ProxySQL certificate and key are generated, encrypt them
@@ -179,7 +205,7 @@ function generate_overcloud_certs() {
179205
done
180206

181207
# Generate backend tls certificates
182-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-backend-tls.yml
208+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-generate-backend-tls.yml
183209
for cert in $(ls -1 $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/*-key.pem); do
184210
encrypt_file $cert
185211
done
@@ -201,7 +227,7 @@ function generate_barbican_secrets() {
201227
decrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
202228
sed -i "s/secret_id:.*/secret_id: $(uuidgen)/g" $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
203229
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
204-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-barbican.yml
230+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-deploy-barbican.yml
205231
decrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
206232
sed -i "s/role_id:.*/role_id: $(cat /tmp/barbican-role-id)/g" $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
207233
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
@@ -361,8 +387,8 @@ function deploy_full() {
361387

362388
function upgrade_overcloud() {
363389
# Generate external tls certificates if it was previously disabled.
364-
if [[ -f $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml ]] && [[ ! -f $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem ]]; then
365-
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
390+
if [[ -f $KAYOBE_CONFIG_PATH/ansible/secret-store-generate-test-external-tls.yml ]] && [[ ! -f $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem ]]; then
391+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/secret-store-generate-test-external-tls.yml
366392
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem
367393
fi
368394

ansible/vars/defaults.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,9 @@ manage_lvm: true
9393

9494
pvresize_to_max: true
9595

96+
# Secret store to deploy as CA. Valid options are "openbao" and "vault".
97+
# Default is "openbao".
98+
ca_secret_store: openbao
99+
96100
# Whether to upgrade the Ansible control host.
97101
upgrade: false

0 commit comments

Comments
 (0)