Skip to content

Commit f76d996

Browse files
committed
Try to work around Ansible rc-13 race condition
There is a race condition in Ansible that can result in this failure: msg: |- MODULE FAILURE See stdout/stderr for the exact error rc: -13 See ansible/ansible#78344 and ansible/ansible#81777. In stackhpc/stackhpc-kayobe-config#1108 we applied a workaround to increase the ControlPersist timeout to 1 hour, but this does not always work. Try another workaround of removing the ControlPersist sockets in between Kayobe runs.
1 parent 201e0d9 commit f76d996

File tree

1 file changed

+47
-24
lines changed

1 file changed

+47
-24
lines changed

ansible/files/multinode.sh

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,36 @@ function decrypt_file() {
8282
ansible-vault decrypt --vault-password-file ~/vault.password $file
8383
}
8484

85+
function workaround_ansible_rc13_bug() {
86+
# Call this function in between long-running Ansible executions to attempt to
87+
# work around an Ansible race condition.
88+
89+
# There is a race condition in Ansible that can result in this failure:
90+
# msg: |-
91+
# MODULE FAILURE
92+
# See stdout/stderr for the exact error
93+
# rc: -13
94+
# See https://github.com/ansible/ansible/issues/78344 and
95+
# https://github.com/ansible/ansible/issues/81777.
96+
# In https://github.com/stackhpc/stackhpc-kayobe-config/pull/1108 we applied
97+
# a workaround to increase the ControlPersist timeout to 1 hour, but this
98+
# does not always work.
99+
# Try another workaround of removing the ControlPersist sockets.
100+
rm -f ~/.ansible/cp/*
101+
}
102+
103+
function run_kayobe() {
104+
workaround_ansible_rc13_bug
105+
kayobe $*
106+
}
107+
85108
function deploy_seed() {
86-
kayobe seed host configure
109+
run_kayobe seed host configure
87110
}
88111

89112
function deploy_seed_vault() {
90113
# Deploy hashicorp vault to the seed
91-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-seed.yml
114+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-seed.yml
92115
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/OS-TLS-INT.pem
93116
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/seed-vault-keys.json
94117
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/*.key
@@ -97,8 +120,8 @@ function deploy_seed_vault() {
97120
function get_seed_ssh() {
98121
# NOTE: Bash clears the -e option in subshells when not in Posix mode.
99122
set -e
100-
ssh_user=$(kayobe configuration dump --host seed[0] --var-name ansible_user | tr -d '"')
101-
seed_addr=$(kayobe configuration dump --host seed[0] --var-name ansible_host | tr -d '"')
123+
ssh_user=$(run_kayobe configuration dump --host seed[0] --var-name ansible_user | tr -d '"')
124+
seed_addr=$(run_kayobe configuration dump --host seed[0] --var-name ansible_host | tr -d '"')
102125
echo "${ssh_user}@${seed_addr}"
103126
}
104127

@@ -117,37 +140,37 @@ function copy_ca_to_seed() {
117140
}
118141

119142
function deploy_ceph() {
120-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/cephadm-deploy.yml
143+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/cephadm-deploy.yml
121144
sleep 30
122-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/cephadm.yml
123-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/cephadm-gather-keys.yml
145+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/cephadm.yml
146+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/cephadm-gather-keys.yml
124147
}
125148

126149
function deploy_overcloud_vault() {
127150
# NOTE: Previously it was necessary to first deploy HAProxy with TLS disabled.
128151
if [[ -f $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/globals-tls-config.yml ]]; then
129152
# Skip os_capacity deployment since it requires admin-openrc.sh which doesn't exist yet.
130-
kayobe overcloud service deploy --skip-tags os_capacity -kt haproxy
153+
run_kayobe overcloud service deploy --skip-tags os_capacity -kt haproxy
131154
fi
132155

133156
# Deploy hashicorp vault to the controllers
134-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-overcloud.yml
157+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-overcloud.yml
135158
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/vault/overcloud-vault-keys.json
136159
}
137160

138161
function generate_overcloud_certs() {
139162
# Generate external tls certificates
140163
if [[ -f $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml ]]; then
141-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
164+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
142165
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem
143166
fi
144167

145168
# Generate internal tls certificates
146-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-internal-tls.yml
169+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-internal-tls.yml
147170
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy-internal.pem
148171

149172
# Generate backend tls certificates
150-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-backend-tls.yml
173+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-backend-tls.yml
151174
for cert in $(ls -1 $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/*-key.pem); do
152175
encrypt_file $cert
153176
done
@@ -164,15 +187,15 @@ function generate_barbican_secrets() {
164187
decrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
165188
sed -i "s/secret_id:.*/secret_id: $(uuidgen)/g" $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
166189
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
167-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-barbican.yml
190+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-barbican.yml
168191
decrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
169192
sed -i "s/role_id:.*/role_id: $(cat /tmp/barbican-role-id)/g" $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
170193
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
171194
rm /tmp/barbican-role-id
172195
}
173196

174197
function deploy_overcloud() {
175-
kayobe overcloud host configure
198+
run_kayobe overcloud host configure
176199

177200
deploy_ceph
178201

@@ -185,19 +208,19 @@ function deploy_overcloud() {
185208
generate_barbican_secrets
186209

187210
# Deploy all services
188-
kayobe overcloud service deploy
211+
run_kayobe overcloud service deploy
189212

190213
copy_ca_to_seed
191214
}
192215

193216
function deploy_wazuh() {
194-
kayobe infra vm host configure
217+
run_kayobe infra vm host configure
195218

196219
# Deploy Wazuh
197-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-secrets.yml
220+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-secrets.yml
198221
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/wazuh-secrets.yml
199-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-manager.yml
200-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-agent.yml
222+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-manager.yml
223+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-agent.yml
201224
}
202225

203226
function create_resources() {
@@ -317,7 +340,7 @@ function deploy_full() {
317340

318341
deploy_seed
319342
deploy_overcloud
320-
if kayobe configuration dump --host wazuh-manager --var-name group_names | grep wazuh-manager &>/dev/null; then
343+
if run_kayobe configuration dump --host wazuh-manager --var-name group_names | grep wazuh-manager &>/dev/null; then
321344
deploy_wazuh
322345
fi
323346
create_resources
@@ -327,13 +350,13 @@ function deploy_full() {
327350
function upgrade_overcloud() {
328351
# Generate external tls certificates if it was previously disabled.
329352
if [[ -f $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml ]] && [[ ! -f $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem ]]; then
330-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
353+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
331354
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem
332355
fi
333356

334-
kayobe overcloud host upgrade
335-
kayobe overcloud host configure
336-
kayobe overcloud service upgrade
357+
run_kayobe overcloud host upgrade
358+
run_kayobe overcloud host configure
359+
run_kayobe overcloud service upgrade
337360
}
338361

339362
function usage() {

0 commit comments

Comments
 (0)