
# Copyright 2017-present Open Networking Foundation
#
# 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.


---
# ssh-install-maas/tasks/main.yml

# the following replicates the functionality of the maas repo `prep` role
# users/perms may seem off, but is identical to that role

- name: Create ssh key directory for MaaS
  when: use_maas
  file:
    dest: "/etc/maas/.ssh/"
    mode: 0755
    owner: "root"
    group: "root"
    state: directory

- name: Copy ssh private key for MaaS
  when: use_maas
  copy:
    src: "{{ ssh_pki_dir }}/client_certs/{{ pod_sshkey_name }}_sshkey"
    dest: "/etc/maas/.ssh/cord_rsa"
    mode: 0644
    owner: "root"
    group: "root"
    backup: true

- name: Copy ssh public key for MaaS
  when: use_maas
  copy:
    src: "{{ ssh_pki_dir }}/client_certs/{{ pod_sshkey_name }}_sshkey.pub"
    dest: "/etc/maas/.ssh/cord_rsa.pub"
    mode: 0644
    owner: "root"
    group: "root"
    backup: true

