Skip to content

Commit c306994

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 abc4351 commit c306994

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 disabling pipelining.
100+
export ANSIBLE_PIPELINING=False
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
@@ -169,15 +192,15 @@ function generate_barbican_secrets() {
169192
decrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
170193
sed -i "s/secret_id:.*/secret_id: $(uuidgen)/g" $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
171194
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
172-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-barbican.yml
195+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-deploy-barbican.yml
173196
decrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
174197
sed -i "s/role_id:.*/role_id: $(cat /tmp/barbican-role-id)/g" $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
175198
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/secrets.yml
176199
rm /tmp/barbican-role-id
177200
}
178201

179202
function deploy_overcloud() {
180-
kayobe overcloud host configure
203+
run_kayobe overcloud host configure
181204

182205
deploy_ceph
183206

@@ -190,19 +213,19 @@ function deploy_overcloud() {
190213
generate_barbican_secrets
191214

192215
# Deploy all services
193-
kayobe overcloud service deploy
216+
run_kayobe overcloud service deploy
194217

195218
copy_ca_to_seed
196219
}
197220

198221
function deploy_wazuh() {
199-
kayobe infra vm host configure
222+
run_kayobe infra vm host configure
200223

201224
# Deploy Wazuh
202-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-secrets.yml
225+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-secrets.yml
203226
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/wazuh-secrets.yml
204-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-manager.yml
205-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-agent.yml
227+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-manager.yml
228+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/wazuh-agent.yml
206229
}
207230

208231
function create_resources() {
@@ -322,7 +345,7 @@ function deploy_full() {
322345

323346
deploy_seed
324347
deploy_overcloud
325-
if kayobe configuration dump --host wazuh-manager --var-name group_names | grep wazuh-manager &>/dev/null; then
348+
if run_kayobe configuration dump --host wazuh-manager --var-name group_names | grep wazuh-manager &>/dev/null; then
326349
deploy_wazuh
327350
fi
328351
create_resources
@@ -332,13 +355,13 @@ function deploy_full() {
332355
function upgrade_overcloud() {
333356
# Generate external tls certificates if it was previously disabled.
334357
if [[ -f $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml ]] && [[ ! -f $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem ]]; then
335-
kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
358+
run_kayobe playbook run $KAYOBE_CONFIG_PATH/ansible/vault-generate-test-external-tls.yml
336359
encrypt_file $KAYOBE_CONFIG_PATH/environments/$KAYOBE_ENVIRONMENT/kolla/certificates/haproxy.pem
337360
fi
338361

339-
kayobe overcloud host upgrade
340-
kayobe overcloud host configure
341-
kayobe overcloud service upgrade
362+
run_kayobe overcloud host upgrade
363+
run_kayobe overcloud host configure
364+
run_kayobe overcloud service upgrade
342365
}
343366

344367
function usage() {

0 commit comments

Comments
 (0)