diff --git a/geant_service_orchestrator/services/provisioning_proxy.py b/geant_service_orchestrator/services/provisioning_proxy.py
index 96874ed8bb549bc5ab2407cf420a53bcafd827bf..2a3626d3976ad735a82b72759c32f7a3d662f8b9 100644
--- a/geant_service_orchestrator/services/provisioning_proxy.py
+++ b/geant_service_orchestrator/services/provisioning_proxy.py
@@ -6,7 +6,10 @@ import requests
 
 def provision_node(
         node_subscription_params: DeviceBlock,
-        pp_params=settings.OSSParams.PROVISIONING_PROXY):
+        dry_run: bool = False):
+    oss = settings.load_oss_params()
+    pp_params = oss.PROVISIONING_PROXY
+    assert pp_params
     r = requests.get(
         f'https://{pp_params.api_base}'
         f'/api/version',
diff --git a/geant_service_orchestrator/workflows/device/create_device.py b/geant_service_orchestrator/workflows/device/create_device.py
index bf7e66272d5ca6ef027ce1b5f844ef0f808bbdf7..f8bffe75ebf21421d1f59fbfecf13171e1bf58e4 100644
--- a/geant_service_orchestrator/workflows/device/create_device.py
+++ b/geant_service_orchestrator/workflows/device/create_device.py
@@ -12,7 +12,7 @@ from orchestrator.workflows.steps import resync, set_status
 from orchestrator.workflows.steps import store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
 from geant_service_orchestrator.products.product_types import device
-from geant_service_orchestrator.services import ipam
+from geant_service_orchestrator.services import ipam, provisioning_proxy
 
 
 def initial_input_form_generator(product_name: str) -> FormGenerator:
@@ -100,29 +100,35 @@ def provision_device_dry(
     ts_address: str,
     ts_port: str
 ) -> State:
-    import ansible_runner
-
-    r = ansible_runner.run(
-        private_data_dir="/opt/geant-gap-ansible",
-        playbook="base_config.yaml",
-        inventory=subscription.device.fqdn,
-        extravars={
-            "lo_ipv4_address": str(subscription.device.lo_ipv4_address),
-            "lo_ipv6_address": str(subscription.device.lo_ipv6_address),
-            "lo_iso_address": subscription.device.lo_iso_address,
-            "snmp_location": subscription.device.snmp_location,
-            "si_ipv4_network": str(subscription.device.si_ipv4_network),
-            "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network),
-            "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network),
-            "site_country_code": subscription.device.site_country_code,
-            "verb": "deploy",
-        },
-    )
-    out = r.stdout.read()
-    out_splitted = out.splitlines()
-    # if r.rc != 0:
-    #    raise ValueError("Ansible has failed")
-    return {"dry_run_output": out_splitted, "return_code": r.rc}
+    # import ansible_runner
+    #
+    # r = ansible_runner.run(
+    #     private_data_dir="/opt/geant-gap-ansible",
+    #     playbook="base_config.yaml",
+    #     inventory=subscription.device.fqdn,
+    #     extravars={
+    #         "lo_ipv4_address": str(subscription.device.lo_ipv4_address),
+    #         "lo_ipv6_address": str(subscription.device.lo_ipv6_address),
+    #         "lo_iso_address": subscription.device.lo_iso_address,
+    #         "snmp_location": subscription.device.snmp_location,
+    #         "si_ipv4_network": str(subscription.device.si_ipv4_network),
+    #         "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network),
+    #         "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network),
+    #         "site_country_code": subscription.device.site_country_code,
+    #         "verb": "deploy",
+    #     },
+    # )
+    # out = r.stdout.read()
+    # out_splitted = out.splitlines()
+    # # if r.rc != 0:
+    # #    raise ValueError("Ansible has failed")
+    # return {"dry_run_output": out_splitted, "return_code": r.rc}
+    provisioning_proxy.provision_node(
+        node_subscription_params=subscription,
+        dry_run=True)
+    # TODO: figure out what to return when we are suspending & waiting
+    #       for the provisioning-proxy to call back
+    return {"return_code": 0}
 
 
 @inputstep("Confirm step", assignee="CHANGES")
@@ -142,28 +148,33 @@ def provision_device_real(
     ts_address: str,
     ts_port: str
 ) -> State:
-    import ansible_runner
-
-    r = ansible_runner.run(
-        private_data_dir="/opt/geant-gap-ansible",
-        playbook="base_config.yaml",
-        inventory=subscription.device.fqdn,
-        extravars={
-            "lo_ipv4_address": str(subscription.device.lo_ipv4_address),
-            "lo_ipv6_address": str(subscription.device.lo_ipv6_address),
-            "lo_iso_address": subscription.device.lo_iso_address,
-            "snmp_location": subscription.device.snmp_location,
-            "si_ipv4_network": str(subscription.device.si_ipv4_network),
-            "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network),
-            "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network),
-            "site_country_code": subscription.device.site_country_code,
-            "verb": "deploy",
-        },
-    )
-    out = r.stdout.read()
-    out_splitted = out.splitlines()
-
-    return {"real_run_output": out_splitted, "return_code": r.rc}
+    # import ansible_runner
+    #
+    # r = ansible_runner.run(
+    #     private_data_dir="/opt/geant-gap-ansible",
+    #     playbook="base_config.yaml",
+    #     inventory=subscription.device.fqdn,
+    #     extravars={
+    #         "lo_ipv4_address": str(subscription.device.lo_ipv4_address),
+    #         "lo_ipv6_address": str(subscription.device.lo_ipv6_address),
+    #         "lo_iso_address": subscription.device.lo_iso_address,
+    #         "snmp_location": subscription.device.snmp_location,
+    #         "si_ipv4_network": str(subscription.device.si_ipv4_network),
+    #         "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network),
+    #         "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network),
+    #         "site_country_code": subscription.device.site_country_code,
+    #         "verb": "deploy",
+    #     },
+    # )
+    # out = r.stdout.read()
+    # out_splitted = out.splitlines()
+    #
+    # return {"real_run_output": out_splitted, "return_code": r.rc}
+    provisioning_proxy.provision_node(
+        node_subscription_params=subscription)
+    # TODO: figure out what to return when we are suspending & waiting
+    #       for the provisioning-proxy to call back
+    return {"return_code": 0}
 
 
 @workflow(