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


---
# file: head-prep/tasks/main.yml

- name:  Install prerequisites for using PPA repos
  apt:
    name: "{{ item }}"
    update_cache: yes
    cache_valid_time: 3600
  with_items:
    - python-pycurl
    - software-properties-common

- name: Add Ansible PPA
  apt_repository:
    repo={{ item }}
  with_items:
    - "{{ ansible_apt_repo | default('ppa:ansible/ansible') }}"
  register: result
  until: result | success
  retries: 3
  delay: 10

- name: Install packages
  apt:
    name: "{{ item }}"
    update_cache: yes
    cache_valid_time: 3600
  with_items:
    - bridge-utils
    - dnsutils
    - git
    - juju-core
    - libssl-dev
    - libvirt-bin
    - python-dev
    - python-dnspython
    - python-glanceclient
    - python-keystoneclient
    - python-lxml
    - python-netaddr
    - python-neutronclient
    - python-novaclient
    - python-pip
    - sshpass
    - virt-top

- name: Make sure Ansible is newest version
  apt:
    name: "ansible"
    state: latest
    update_cache: yes
    cache_valid_time: 3600
  tags:
    - skip_ansible_lint # ansible-lint complains about latest, need this as distro provided 1.5.x version may be used if already installed.

- name: Install Python packages
  pip:
    name: "{{ item }}"
  with_items:
    - ndg-httpsclient
    - passlib
    - pyasn1
    - pyopenssl
    - urllib3
    - gitpython
    - graphviz

- name: Add pod ssh private key to head node user
  copy:
    src: "{{ ssh_pki_dir }}/client_certs/{{ pod_sshkey_name }}_sshkey"
    dest: "{{ ansible_user_dir }}/.ssh/id_{{ ssh_keytype }}"
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_gid }}"
    mode: 0600

- name: Add pod ssh public key to head user
  copy:
    src: "{{ ssh_pki_dir }}/client_certs/{{ pod_sshkey_name }}_sshkey.pub"
    dest: "{{ ansible_user_dir }}/.ssh/id_{{ ssh_keytype }}.pub"
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_gid }}"
    mode: 0644

- name: Add pod ssh signed public key to head node user
  copy:
    src: "{{ ssh_pki_dir }}/client_certs/{{ pod_sshkey_name }}_sshkey-cert.pub"
    dest: "{{ ansible_user_dir }}/.ssh/id_{{ ssh_keytype }}-cert.pub"
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_gid }}"
    mode: 0644

- name: Disable host key checking in ~/.ssh/config
  lineinfile:
    dest: "{{ ansible_user_dir }}/.ssh/config"
    line: "StrictHostKeyChecking no"
    create: yes
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_gid }}"
    mode: 0600

- name: Disable host key checking in ~/.ansible.cfg
  copy:
    src: ansible.cfg
    dest: "{{ ansible_user_dir }}/.ansible.cfg"
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_gid }}"
    mode: 0644

