
# 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: ansible-install/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
    - python-netaddr

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