---
# Required from inventory:
#   calico_rr_ip - which specific IP to use for RR, defaults to
#   "ip" from inventory or "ansible_default_ipv4.address"

- name: Calico-rr | Set IP fact
  set_fact:
    rr_ip: "{{ calico_rr_ip | default(ip) | default(ansible_default_ipv4.address) }}"

- name: Calico-rr | Create calico certs directory
  file:
    dest: "{{ calico_cert_dir }}"
    state: directory
    mode: 0750
    owner: root
    group: root

- name: Calico-rr | Link etcd certificates for calico-node
  file:
    src: "{{ etcd_cert_dir }}/{{ item.s }}"
    dest: "{{ calico_cert_dir }}/{{ item.d }}"
    state: hard
    force: yes
  with_items:
    - {s: "ca.pem", d: "ca_cert.crt"}
    - {s: "node-{{ inventory_hostname }}.pem", d: "cert.crt"}
    - {s: "node-{{ inventory_hostname }}-key.pem", d: "key.pem"}

- name: Calico-rr | Create dir for logs
  file:
    path: /var/log/calico-rr
    state: directory
    mode: 0755
    owner: root
    group: root

- name: Calico-rr | Write calico-rr.env for systemd init file
  template:
    src: calico-rr.env.j2
    dest: /etc/calico/calico-rr.env
  notify: restart calico-rr

- name: Calico-rr | Write calico-rr systemd init file
  template:
    src: calico-rr.service.j2
    dest: /etc/systemd/system/calico-rr.service
  notify: restart calico-rr

- name: Calico-rr | Configure route reflector
  command: |-
    {{ bin_dir }}/etcdctl \
    --endpoints={{ etcd_access_addresses }} \
    put /calico/bgp/v1/rr_v4/{{ rr_ip }} \
    '{
       "ip": "{{ rr_ip }}",
       "cluster_id": "{{ cluster_id }}"
     }'
  environment:
    ETCDCTL_API: 3
    ETCDCTL_CERT: "{{ etcd_cert_dir }}/admin-{{ groups['etcd'][0] }}.pem"
    ETCDCTL_KEY: "{{ etcd_cert_dir }}/admin-{{ groups['etcd'][0] }}-key.pem"
  retries: 4
  delay: "{{ retry_stagger | random + 3 }}"
  delegate_to: "{{groups['etcd'][0]}}"
  when:
    - calico_version is version("v3.0.0", ">=")

- name: Calico-rr | Configure route reflector (legacy)
  command: |-
    {{ bin_dir }}/etcdctl \
    --peers={{ etcd_access_addresses }} \
    set /calico/bgp/v1/rr_v4/{{ rr_ip }} \
    '{
       "ip": "{{ rr_ip }}",
       "cluster_id": "{{ cluster_id }}"
     }'
  environment:
    ETCDCTL_CERT_FILE: "{{ etcd_cert_dir }}/admin-{{ groups['etcd'][0] }}.pem"
    ETCDCTL_KEY_FILE: "{{ etcd_cert_dir }}/admin-{{ groups['etcd'][0] }}-key.pem"
  retries: 4
  delay: "{{ retry_stagger | random + 3 }}"
  delegate_to: "{{groups['etcd'][0]}}"
  when:
    - calico_version is version("v3.0.0", "<")

- meta: flush_handlers

- name: Calico-rr | Enable calico-rr
  service:
    name: calico-rr
    state: started
    enabled: yes
