From 6549b8f8ae1f6db922ebd51135feeb9a6ef86dc4 Mon Sep 17 00:00:00 2001
From: Erwan Miran <mirwan@users.noreply.github.com>
Date: Tue, 16 Oct 2018 08:44:49 +0200
Subject: [PATCH] Ability to define the asNumber on a per node basis when route
 reflectors are not used in order to peer directly with routers (#3492)

---
 roles/network_plugin/calico/tasks/install.yml | 46 +++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/roles/network_plugin/calico/tasks/install.yml b/roles/network_plugin/calico/tasks/install.yml
index b0b5c1c31..fc359366c 100644
--- a/roles/network_plugin/calico/tasks/install.yml
+++ b/roles/network_plugin/calico/tasks/install.yml
@@ -159,6 +159,52 @@
     - calico_version | version_compare('v3.0.0', '<')
     - nodeToMeshEnabled|default(True)
 
+- name: Calico | Configure node asNumber for per node peering
+  shell: >
+   echo '{
+   "apiVersion": "projectcalico.org/v3",
+   "kind": "Node",
+   "metadata": {
+      "name": "{{ inventory_hostname }}"
+   },
+   "spec": {
+      "bgp": {
+        "asNumber": "{{ local_as }}"
+      },
+      "orchRefs":[{"nodeName":"{{ inventory_hostname }}","orchestrator":"k8s"}]
+   }}' | {{ bin_dir }}/calicoctl create --skip-exists -f -
+  retries: 4
+  delay: "{{ retry_stagger | random + 3 }}"
+  when:
+    - calico_version | version_compare('v3.0.0', '>=')
+    - peer_with_router|default(false)
+    - inventory_hostname in groups['k8s-cluster']
+    - local_as is defined
+    - groups['calico-rr'] | default([]) | length == 0
+
+- name: Calico | Configure node asNumber for per node peering (legacy)
+  shell: >
+   echo '{
+   "apiVersion": "v1",
+   "kind": "node",
+   "metadata": {
+      "name": "{{ inventory_hostname }}"
+   },
+   "spec": {
+      "bgp": {
+        "asNumber": "{{ local_as }}"
+      },
+      "orchRefs":[{"nodeName":"{{ inventory_hostname }}","orchestrator":"k8s"}]
+   }}' | {{ bin_dir }}/calicoctl create --skip-exists -f -
+  retries: 4
+  delay: "{{ retry_stagger | random + 3 }}"
+  when:
+    - calico_version | version_compare('v3.0.0', '<')
+    - peer_with_router|default(false)
+    - inventory_hostname in groups['k8s-cluster']
+    - local_as is defined
+    - groups['calico-rr'] | default([]) | length == 0
+
 - name: Calico | Configure peering with router(s)
   shell: >
    echo '{
-- 
GitLab