Write JSON to a file

Change-Id: Id42678b799273c744c1bc455515875187cf8df3e
diff --git a/xos/synchronizer/steps/sync_host.yaml b/xos/synchronizer/steps/sync_host.yaml
index 55dc70b..4bfd789 100644
--- a/xos/synchronizer/steps/sync_host.yaml
+++ b/xos/synchronizer/steps/sync_host.yaml
@@ -4,5 +4,10 @@
 
   tasks:
   - name: Add host entry for fabric
-    command: curl -sS --user onos:rocks -X POST -HContent-Type:application/json -d '{{ rest_json }}' http://{{ rest_hostname }}:{{ rest_port }}/{{ rest_endpoint }}
-
+    uri:
+      url: http://{{ rest_hostname }}:{{ rest_port }}/{{ rest_endpoint }}
+      method: POST
+      user: onos
+      password: rocks
+      body: "{{ '{{' }} lookup('file', '{{ files_dir }}/{{ rest_config.fn }}') {{ '}}' }}"
+      body_format: json
\ No newline at end of file
diff --git a/xos/synchronizer/steps/sync_vroutertenant.py b/xos/synchronizer/steps/sync_vroutertenant.py
index 2f3701a..150a596 100644
--- a/xos/synchronizer/steps/sync_vroutertenant.py
+++ b/xos/synchronizer/steps/sync_vroutertenant.py
@@ -20,6 +20,16 @@
     requested_interval=30
     playbook='sync_host.yaml'
 
+    def get_files_dir(self):
+        if not hasattr(Config(), "observer_steps_dir"):
+            # make steps_dir mandatory; there's no valid reason for it to not
+            # be defined.
+            raise Exception("observer_steps_dir is not defined in config file")
+
+        step_dir = Config().observer_steps_dir
+
+        return os.path.join(step_dir, "..", "files")
+
     def get_fabric_onos_service(self):
         fos = None
         fs = FabricService.get_service_objects().all()[0]
@@ -63,6 +73,22 @@
 
         return objs
 
+    def write_config(self, files_dir, name, public_mac, public_ip, location):
+        if not os.path.exists(files_dir):
+            os.makedirs(files_dir)
+
+        # Create JSON
+        data = {
+            "%s/-1"%public_mac : {
+                "basic" : {
+                    "ips" : [ public_ip ],
+                    "location" : location
+                }
+            }
+        }
+
+        file(os.path.join(files_dir, name),"w").write(json_dumps(data,indent=4))
+
     def map_sync_inputs(self, vroutertenant):
 
         fos = self.get_fabric_onos_service()
@@ -87,25 +113,17 @@
         node = instance.node
         location = self.get_node_tag(node, "location")
 
+        files_dir = self.get_files_dir()
+        self.write_config(files_dir, name, vroutertenant.public_mac, vroutertenant.public_ip, location)
+
         # Is it a POST or DELETE?
 
-        # Create JSON
-        data = {
-            "%s/-1"%vroutertenant.public_mac : {
-                "basic" : {
-                    "ips" : [ vroutertenant.public_ip ],
-                    "location" : location
-                }
-            }
-        }
-
-        rest_json = json.dumps(data)
-
         fields = {
             'rest_hostname': fos.rest_hostname,
             'rest_port': fos.rest_port,
-            'rest_json': rest_json,
             'rest_endpoint': "onos/v1/network/configuration/hosts",
+            'files_dir': files_dir,
+            'rest_config.fn': name,
             'ansible_tag': '%s'%name, # name of ansible playbook
         }
         return fields