diff --git a/roles/network_plugin/calico/rr/tasks/main.yml b/roles/network_plugin/calico/rr/tasks/main.yml
index 02cfce152956258272a6ddb0f743d006417f8c5f..521da1e4ab60d3b58b718e26c3d2f45ce2635142 100644
--- a/roles/network_plugin/calico/rr/tasks/main.yml
+++ b/roles/network_plugin/calico/rr/tasks/main.yml
@@ -47,19 +47,41 @@
   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 | version_compare("v3.0.0", ">=")
+
+- name: Calico-rr | Configure route reflector (legacy)
   command: |-
     {{ bin_dir }}/etcdctl \
     --peers={{ etcd_access_addresses }} \
-    --cert-file {{ etcd_cert_dir }}/admin-{{ groups['etcd'][0] }}.pem \
-    --key-file {{ etcd_cert_dir }}/admin-{{ groups['etcd'][0] }}-key.pem \
     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 | version_compare("v3.0.0", "<")
 
 - meta: flush_handlers