Use blockinfile for tripleo-ssh-known-hosts

lineinfile combined with with_items was very inefficient for this task.
Given that each node's hostkey is added to every other host, it resulted
in O(n²) performance.

Additional networks per node also worsened the problem. For example, in
a 100 node deployment, with 4 networks per node, this task would need to
be executed 40,000 times (100 * 100 * 4).

Switching to use blockinfile brings the performance back to O(n), and
also removes any dependency on the number of networks per node.

Change-Id: Id51d27f53abf3421c29a11065377e9303ad68d79
This commit is contained in:
James Slagle 2019-09-05 16:49:15 -04:00
parent 67f8ddc0d7
commit 4157d7a5df
1 changed files with 2 additions and 3 deletions

View File

@ -61,11 +61,10 @@
{% endfor %}
- name: Add host keys to temporary ssh_known_hosts
lineinfile:
blockinfile:
path: "{{ ssh_known_hosts_tmp.path }}"
line: "{{ item }}"
block: "{{ ssh_known_hosts_lines }}"
create: true
with_items: "{{ ssh_known_hosts_lines.splitlines() }}"
# Workaround https://bugs.launchpad.net/tripleo/+bug/1810932
# Ansible modules perform a replace instead of in-place modification.