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


---
# prep-headnode-playbook.yml
# Preps the head node of a CORD pod for thr est of the install

- name: Include vars
  hosts: head, config
  tasks:
    - name: Include variables
      include_vars: "{{ item }}"
      with_items:
        - "profile_manifests/{{ cord_profile }}.yml"
        - profile_manifests/local_vars.yml

- name: Prep head node
  hosts: head
  roles:
    - { role: head-prep, become: yes }

- name: Common prep, install certificates
  become: yes
  hosts: head
  roles:
    - common-prep
    - pki-install

- name: Install docker and configure it
  hosts: head
  roles:
    - docker-install

- name: Configure management network
  hosts: head
  become: yes
  roles:
    - { role: interface-config, when: not use_maas }

- name: Networking and DNS server on head node
  hosts: head
  become: yes
  roles:
    - { role: head-mgmtbr, when: not use_maas }
    - { role: dns-nsd, when: not use_maas }
    - { role: dns-unbound, when: not use_maas }

# needs to be in another set of plays so that nsd/unbound restart handlers run
- name: Configure DNS resolution, DHCP on head node
  hosts: head
  become: yes
  roles:
    - { role: dns-configure, when: not use_maas }
    - { role: dhcpd, when: not (use_maas or frontend_only) }

- name: Install apt-cacher-ng
  hosts: head
  become: yes
  roles:
    - { role: apt-cacher-ng, when: use_apt_cache | default(True) }

- name: Install apache proxy
  hosts: head
  become: yes
  roles:
    - apache-proxy

