Synchronizer template for the generator.
diff --git a/xos/tools/apigen/synchronizer.template.txt b/xos/tools/apigen/synchronizer.template.txt
new file mode 100644
index 0000000..c784e21
--- /dev/null
+++ b/xos/tools/apigen/synchronizer.template.txt
@@ -0,0 +1,71 @@
+{% for app,files in generator.apps.items %}
+{% for file,models in files.items %}
+{% for m in models %}
+# This file implements the synchronization of the {{ m.class_name }} model
+# TODO (see below):
+
+import os
+import base64
+import socket
+from django.db.models import F, Q
+from xos.config import Config
+from synchronizers.base.syncstep import SyncStep
+from {{app}}.models.{{ file }} import {{ m.class_name.title }}
+from synchronizers.base.ansible import *
+from synchronizers.base.syncstep import *
+from xos.logger import observer_logger as logger
+
+class Sync{{m.camel.title}}(SyncStep):
+ # The model synchronized
+ provides=[{{m.class_name.title}}]
+ # How often do you want this to run. 0 means immediately following changes to the model
+ requested_interval=0
+ # The model in which changes trigger this module
+ observes={{m.class_name}}
+ # The Ansible recipe that does the bulk of the synchronization (hopefully)
+ playbook='sync_{{m.class_name}}.yaml'
+
+ # 1. Populate a data structure to pass into your ansible recipe, based on the data model.
+ def map_sync_inputs(self, {{ m.class_name }}):
+ fields = {
+ {% for f in m.fields %}'{{f.name}}': {{f.name}},
+ {% endfor %}
+ }
+ return fields
+
+ # 2. Store the result of the operation in the model
+ def map_sync_outputs(self, {{ m.class_name }}, res):
+ // Store the output of res in the {{m.class_name}} object
+ return
+
+ # 3. Populate the data structure that identifies objects to delete
+ def map_delete_inputs(self, {{ m.class_name }}, res):
+ fields = {
+ {% for f in m.fields %}'{{f.name}}': {{f.name}},
+ {% endfor %}
+ 'delete':True
+ }
+ return fields
+
+
++++ Sync{{ m.class_name }}.py
+---
+- hosts: 127.0.0.1
+ connection: local
+ tasks:
+ - task_1:
+ {% for f in m.fields %}
+ {{f.name}}: {% templatetag openbrace %}{% templatetag openbrace %}{{f.name}}{% templatetag closebrace %}{% templatetag closebrace %}
+ {% endfor %}
+ {% verbatim %}
+ {% if delete %}
+ state: absent
+ {% else %}
+ state: present
+ {% endif %}
+ {% endif %}
+ {% endverbatim %}
++++ Sync{{ m.class_name }}.yaml
+{% endfor %}
+{% endfor %}
+{% endfor %}