
# 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.


- name: Ensure MAAS Ansible Config Directory
  become: yes
  file:
    path=/etc/maas/ansible
    owner=maas
    group=maas
    state=directory
    mode="0755"

- name: Ensure Ansible Roles
  become: yes
  synchronize:
    src: "{{ item }}"
    dest: /etc/maas/ansible
  with_items:
    - roles
    - library

- name: Ensure Role Permissions and Modes
  become: yes
  file:
    path: /etc/maas/ansible/roles
    owner: maas
    group: maas
    mode: u=rwX,g=rX,o=rX
    state: directory
    recurse: true

- name: Ensure Ansible Provisioning Script
  become: yes
  copy:
    dest=/etc/maas/ansible/{{ item }}
    src=files/{{ item }}
    owner=maas
    group=maas
    mode="0755"
  with_items:
    - do-ansible
    - do-switch

- name: Ensure Provisioning Log Directory
  become: yes
  file:
    path=/etc/maas/ansible/logs
    state=directory
    owner=maas
    group=maas
    mode="0755"

- name: Capture MAAS API Key
  become: yes
  command: maas-region-admin apikey --username={{ maas.user }}
  register: apikey
  changed_when: false

- name: Ensure Compute and Switch Node Playbooks
  become: yes
  template:
    src={{ item }}.j2
    dest=/etc/maas/ansible/{{ item }}
    owner=maas
    group=maas
    mode="0644"
  with_items:
    - compute-node.yml
    - switch-node.yml

- name: Ensure Compute and Switch Variable Directory
  become: yes
  file:
    path=/etc/maas/ansible/vars
    owner=maas
    group=maas
    mode="0755"
    state=directory

- name: Ensure Compute and Switch Node Variables
  become: yes
  template:
    src=templates/compute-node-vars.yml.j2
    dest=/etc/maas/ansible/vars/compute-node-vars.yml
    owner=maas
    group=maas
    mode="0644"

- name: Ensure Connect Switch Ansible Playbook
  become: yes
  copy:
    dest=/etc/maas/ansible/{{ item }}
    src=files/{{ item }}
    owner=maas
    group=maas
    mode="0644"
  with_items:
    - connect-switch.yml

- name: Ensure Dynamic Inventory Script
  become: yes
  template:
    src=templates/pod-inventory
    dest=/etc/maas/ansible/pod-inventory
    owner=maas
    group=maas
    mode="0755"

- name: Copy CORD Utility Scripts
  become: yes
  copy:
    src=files/commands/{{ item }}
    dest=/usr/local/bin/{{ item }}
    owner=root
    group=root
    mode="0755"
  with_items:
    - cord
    - cord-harvest
    - cord-prov
    - cord-switch
    - cord-generate
    - cord-registry

- name: Ensure SSH Key Storage
  become: yes
  file:
    path: /etc/maas/.ssh
    mode: "0755"
    owner: maas
    group: maas
    state: directory

- name: Copy SSH Key Pair for POD
  become: yes
  copy:
    src: "{{pub_ssh_key_file_location}}/{{item}}"
    dest: /etc/maas/.ssh/{{item}}
    owner: maas
    group: maas
    mode: "0644"
  with_items:
    - cord_rsa
    - cord_rsa.pub
