/home/zuul/src/opendev.org/openstack/openstack-ansible/tests/roles/bootstrap-host/tasks/prepare_ssh_keys.yml
---
# Copyright 2015, Rackspace US, Inc.
#
# 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: Ensure root has a .ssh directory
  file:
    path: /root/.ssh
    state: directory
    owner: root
    group: root
    mode: 0700
  tags:
    - ssh-key-dir

- name: Check for existing ssh private key file
  stat:
    path: /root/.ssh/id_rsa
  register: ssh_key_private
  tags:
    - ssh-key-check

- name: Check for existing ssh public key file
  stat:
    path: /root/.ssh/id_rsa.pub
  register: ssh_key_public
  tags:
    - ssh-key-check

- name: Remove an existing private/public ssh keys if one is missing
  file:
    path: "/root/.ssh/{{ item }}"
    state: absent
  when: not ssh_key_public.stat.exists or not ssh_key_private.stat.exists
  with_items:
    - 'id_rsa'
    - 'id_rsa.pub'
  tags:
    - ssh-key-clean

- name: Create ssh key pair for root
  user:
    name: root
    generate_ssh_key: yes
    ssh_key_bits: 2048
    ssh_key_file: /root/.ssh/id_rsa
  tags:
    - ssh-key-generate

- name: Fetch the generated public ssh key
  fetch:
    src: "/root/.ssh/id_rsa.pub"
    dest: "/tmp/id_rsa.pub"
    flat: yes
  when: inventory_hostname == groups['all'][0]
  tags:
    - ssh-key-authorized

- name: Ensure root's new public ssh key is in authorized_keys
  authorized_key:
    user: root
    key: "{{ lookup('file','/tmp/id_rsa.pub') }}"
    manage_dir: no
  tags:
    - ssh-key-authorized