Julia Kreger 43e1af7ef0 Introduce longer deployment wait with multi-node testing
The nature of multi-host interactions and testing can
be extremely racey. Since IPA can offer SSH, the wait
step can be short circuited resulting in us not waiting
long enough.

As such, introducing a longer wait _and_ re-check of SSH
connectivity.

While this does not completely fix the underlying race, it
is intended to help the test be more reliable in CI.

Partial-Bug: #1559764
Change-Id: Ief9ff9b2d158fa5322b5bb9be74105ba3d13b7fe
2016-03-21 16:44:05 +00:00

49 lines
2.2 KiB
YAML

# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
- name: "Wait for the base testvm machine to become available."
wait_for: state=started port=22 host={{ ipv4_address }} timeout={{ wait_timeout }}
when: ipv4_address is defined
- name: "Pause for 4 seconds to allow testvm to become fully operational and to avoid any potential sshd startup race."
# NOTE(TheJulia): AFAIK sshd opens it's socket and then loads/generates
# keys, which can become visible as a race, hence the four second pause.
pause: seconds={{ node_ssh_pause }}
- name: "Add testvm(s) to Ansible Inventory"
# NOTE(TheJulia): add_host only triggers once per play. Since we need to
# add all hosts, we need to use a loop.
add_host: name="{{ hostvars[item]['ipv4_address'] }}:22" groups=test
with_items: "{{ groups['baremetal'] }}"
when: ipv4_address is defined
- name: "Remove testvm hosts from SSH known_hosts file."
command: ssh-keygen -R "{{ ipv4_address }}"
when: ipv4_address is defined
- name: "Pause before asking for keyscan, to avoid races"
pause: minutes=3
when: multinode_testing | bool == true
- name: >
Re-check SSH connectivity prior to proceeding with multi-node testing
wait_for:
state: started
port: 22
host: "{{ ipv4_address }}"
when: ipv4_address is defined and multinode_testing | bool == true
- name: >
Additional SSH startup pause when performing multi-node testing
pause:
seconds: "{{ node_ssh_pause }}"
when: multinode_testing | bool == true
- name: "Add testvm hosts from SSH known_hosts file."
shell: ssh-keyscan "{{ ipv4_address }}" >> "{{ ansible_env.HOME }}/.ssh/known_hosts"
when: ipv4_address is defined