diff --git a/roles/network_plugin/calico/tasks/install.yml b/roles/network_plugin/calico/tasks/install.yml
index 561bcd876038625b750f011b6318ef24080a2b4a..f5a9afc3305b667790c1e889df78ac0c7ce74d53 100644
--- a/roles/network_plugin/calico/tasks/install.yml
+++ b/roles/network_plugin/calico/tasks/install.yml
@@ -138,7 +138,7 @@
 - name: Calico | Configure calico network pool
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       { "kind": "IPPool",
@@ -173,7 +173,7 @@
 - name: Calico | Set up BGP Configuration
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       { "kind": "BGPConfiguration",
@@ -194,7 +194,7 @@
 - name: Calico | Configure peering with router(s) at global scope
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       {"apiVersion": "projectcalico.org/v3",
@@ -219,7 +219,8 @@
 - name: Calico | Configure peering with route reflectors at global scope
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    # revert when it's already a string
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       {"apiVersion": "projectcalico.org/v3",
@@ -244,7 +245,8 @@
 - name: Calico | Configure route reflectors to peer with each other
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    # revert when it's already a string
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       {"apiVersion": "projectcalico.org/v3",
@@ -320,7 +322,7 @@
 - name: Calico | Configure node asNumber for per node peering
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       {"apiVersion": "projectcalico.org/v3",
@@ -347,7 +349,7 @@
 - name: Calico | Configure peering with router(s) at node scope
   command:
     cmd: "{{ bin_dir }}/calicoctl.sh apply -f -"
-    stdin: "{{ stdin | to_json }}"
+    stdin: "{{ stdin is string | ternary(stdin, stdin|to_json) }}"
   vars:
     stdin: >
       {"apiVersion": "projectcalico.org/v3",