diff --git a/xos/synchronizer/steps/serviceinstance_playbook.yaml b/xos/synchronizer/steps/serviceinstance_playbook.yaml
new file mode 100644
index 0000000..9d35736
--- /dev/null
+++ b/xos/synchronizer/steps/serviceinstance_playbook.yaml
@@ -0,0 +1,29 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+---
+# serviceinstance_playbook
+
+- hosts: "{{ instance_name }}"
+  connection: ssh
+  user: ubuntu
+  sudo: yes
+  gather_facts: no
+
+  tasks:
+    - name: Ensure we can login to instance
+      ping:
+
diff --git a/xos/synchronizer/steps/sync_serviceinstance.py b/xos/synchronizer/steps/sync_serviceinstance.py
new file mode 100644
index 0000000..6bf38c9
--- /dev/null
+++ b/xos/synchronizer/steps/sync_serviceinstance.py
@@ -0,0 +1,61 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import os
+import sys
+from synchronizers.new_base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.new_base.modelaccessor import *
+from xos.logger import Logger, logging
+
+parentdir = os.path.join(os.path.dirname(__file__), "..")
+sys.path.insert(0, parentdir)
+
+logger = Logger(level=logging.INFO)
+
+class SyncTemplateServiceInstance(SyncInstanceUsingAnsible):
+
+    provides = [TemplateServiceInstance]
+
+    observes = TemplateServiceInstance
+
+    requested_interval = 0
+
+    template_name = "serviceinstance_playbook.yaml"
+
+    service_key_name = "/opt/xos/synchronizers/templateservice/service_private_key"
+
+    def __init__(self, *args, **kwargs):
+        super(SyncTemplateServiceInstance, self).__init__(*args, **kwargs)
+
+    def get_service(self, o):
+        if not o.owner:
+            return None
+
+        service = TemplateService.objects.filter(id=o.owner.id)
+
+        if not service:
+            return None
+
+        return service[0]
+
+    # Gets the attributes that are used by the Ansible template but are not
+    # part of the set of default attributes.
+    def get_extra_attributes(self, o):
+        fields = {}
+        #fields['tenant_message'] = o.tenant_message
+        service = self.get_service(o)
+        #fields['service_message'] = service.service_message
+        return fields
