bifrost/playbooks/roles/bifrost-prepare-for-test-dynamic/tasks/main.yml
Markos Chandras 7b005fd1ec bifrost-prepare-for-test-dynamic: Create known_hosts if it's not present
Create an empty ~/.ssh/known_hosts if it's not present since the subsequent
commands assume that there is one in place. Fixes the following problem:

fatal: [testvm1]: FAILED! => {"changed": true, "cmd":
["ssh-keygen", "-R", "192.168.122.3"], "delta": "0:00:00.004327", "end":
"2016-09-14 08:26:42.448637", "failed": true, "invocation": {"module_args":
{"_raw_params": "ssh-
keygen -R \"192.168.122.3\"", "_uses_shell": false, "chdir": null, "creates":
null, "executable": null, "removes": null, "warn": true}, "module_name":
"command"}, "rc": 255, "start": "2016-09-14 08:26:42.444310", "stderr":
"ssh-keygen: $
root/.ssh/known_hosts: No such file or directory", "stdout": "",
"stdout_lines": [], "warnings": []}

Change-Id: I0f05fb9aad7e7b9021491aac4d809ffc6fd4e864
2016-09-19 09:01:43 +01:00

55 lines
2.3 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: "Ensure ~/.ssh/known_hosts is present"
file:
path: "~/.ssh/known_hosts"
state: touch
mode: 0600
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