---
# SPDX-license-identifier: Apache-2.0
##############################################################################
# Copyright (c) 2018
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
- import_playbook: configure-ovn.yml

- hosts: ovn-central:ovn-controller
  vars:
    central_node_ip: "{{ hostvars[groups['ovn-central'][0]]['ansible_ssh_host'] }}"
  environment:
    PATH: "{{ ansible_env.PATH }}:/usr/local/go/bin/"
  pre_tasks:
    - name: Load krd variables
      include_vars:
        file: krd-vars.yml
  roles:
    - role: andrewrothstein.go
      go_ver: "{{ go_version }}"
  tasks:
    - name: Load krd variables
      include_vars:
        file: krd-vars.yml
    - name: clone ovn-kubernetes repo
      git:
        repo: "{{ ovn_kubernetes_url }}"
        dest: "{{ ovn_kubernetes_dest }}"
        version: "{{ ovn_kubernetes_version }}"
        force: yes
      when: ovn_kubernetes_source_type == "source"
    - name: getting binaries
      block:
      - name: download ovn-kubernetes tarball
        get_url:
          url: "{{ ovn_kubernetes_url }}"
          dest: /tmp/ovn-kubernetes.tar.gz
      - name: extract ovn-kubernetes source code
        unarchive:
          src: /tmp/ovn-kubernetes.tar.gz
          dest: /tmp/
          remote_src: yes
      - name: rename extracted folder
        command: "mv /tmp/ovn-kubernetes-{{ ovn_kubernetes_version }}/ {{ ovn_kubernetes_dest }}/"
      when: ovn_kubernetes_source_type == "tarball"
    - name: make ovnkube files
      make:
        chdir: "{{ ovn_kubernetes_dest }}/go-controller"
    - name: install ovnkube files
      make:
        chdir: "{{ ovn_kubernetes_dest }}/go-controller"
        target: install
      become: yes
    - name: create OVN Kubernetes config file
      become: yes
      blockinfile:
        path: /etc/openvswitch/ovn_k8s.conf
        create: yes
        block: |
          [logging]
          loglevel=5
          logfile=/var/log/openvswitch/ovnkube.log

          [cni]
          conf-dir=/etc/cni/net.d
          plugin=ovn-k8s-cni-overlay
    - name: create ovnkube logging directory
      file:
        path: /var/log/openvswitch
        state: directory

- hosts: ovn-central
  become: yes
  vars:
    central_node_ip: "{{ hostvars[groups['ovn-central'][0]]['ansible_ssh_host'] }}"
  tasks:
    - name: create ovnkube central systemd service
      blockinfile:
        path: /etc/systemd/system/ovn-k8s-central.service
        create: yes
        block: |
          [Unit]
          Description=OVN Central Daemon

          [Service]
          ExecStart=/usr/bin/ovnkube \
                -net-controller \
                -init-master="{{ ansible_hostname }}" \
                -init-node="{{ ansible_hostname }}" \
                -nodeport \
                -k8s-kubeconfig=/etc/kubernetes/admin.conf \
                -k8s-token="test" \
                -nb-address="tcp://{{ central_node_ip }}:6641" \
                -sb-address="tcp://{{ central_node_ip }}:6642"

          [Install]
          WantedBy=multi-user.target
    - name: start ovnkube central systemd service
      service:
        name: ovn-k8s-central
        state: started
        enabled: yes

- hosts: ovn-controller
  become: yes
  vars:
    central_node_ip: "{{ hostvars[groups['ovn-central'][0]]['ansible_ssh_host'] }}"
  tasks:
    - name: create ovnkube controller systemd service
      blockinfile:
        path: /etc/systemd/system/ovn-k8s-host.service
        create: yes
        block: |
          [Unit]
          Description=OVN Controller Daemon

          [Service]
          ExecStart=/usr/bin/ovnkube \
                -init-gateways \
                -init-node="{{ ansible_hostname }}" \
                -nodeport \
                -k8s-kubeconfig=/etc/kubernetes/admin.conf \
                -k8s-token="test" \
                -nb-address="tcp://{{ central_node_ip }}:6641" \
                -sb-address="tcp://{{ central_node_ip }}:6642"

          [Install]
          WantedBy=multi-user.target
    - name: start ovnkube controller systemd service
      service:
        name: ovn-k8s-host
        state: started
        enabled: yes