remove openstack synchronizer

Change-Id: I2994842dfc717f23ff0971f4f6cb5dc83d5dbed9
diff --git a/xos/core/models/plcorebase.py b/xos/core/models/plcorebase.py
index b84b526..e2f4b48 100644
--- a/xos/core/models/plcorebase.py
+++ b/xos/core/models/plcorebase.py
@@ -10,7 +10,6 @@
 from django.forms.models import model_to_dict
 from django.utils import timezone
 from django.core.exceptions import PermissionDenied
-import synchronizers.model_policy
 from model_autodeletion import ephemeral_models
 from cgi import escape as html_escape
 
diff --git a/xos/core/models/user.py b/xos/core/models/user.py
index d85c58c..aa00d44 100644
--- a/xos/core/models/user.py
+++ b/xos/core/models/user.py
@@ -5,7 +5,6 @@
 from collections import defaultdict
 from operator import attrgetter, itemgetter
 
-import synchronizers.model_policy
 from core.middleware import get_request
 from core.models import DashboardView, PlCoreBase, PlModelMixIn, Site
 from core.models.plcorebase import StrippedCharField
diff --git a/xos/manage.py b/xos/manage.py
index 219d0e7..48695f0 100644
--- a/xos/manage.py
+++ b/xos/manage.py
@@ -12,10 +12,10 @@
         os.system("/opt/xos/tools/xos-manage makemigrations")
         sys.argv.remove("--makemigrations")
 
-    if "--nomodelpolicy" in sys.argv:
-        import synchronizers.model_policy as model_policy
-        model_policy.EnableModelPolicy(False)
-        sys.argv.remove("--nomodelpolicy")
+#    if "--nomodelpolicy" in sys.argv:
+#        import synchronizers.model_policy as model_policy
+#        model_policy.EnableModelPolicy(False)
+#        sys.argv.remove("--nomodelpolicy")
 
     if "--noobserver" in sys.argv:
         import synchronizers.base as observer
diff --git a/xos/synchronizers/base/backend.py b/xos/synchronizers/base/backend.py
index 206c27f..3526d55 100644
--- a/xos/synchronizers/base/backend.py
+++ b/xos/synchronizers/base/backend.py
@@ -3,9 +3,7 @@
 import threading
 import time
 from synchronizers.base.event_loop import XOSObserver
-#from synchronizers.base.event_manager import EventListener
 from xos.logger import Logger, logging
-from synchronizers.model_policy import run_policy
 from xos.config import Config
 from django.utils import timezone
 from diag import update_diag
@@ -25,18 +23,13 @@
         # start model policies thread
         observer_name = getattr(Config(), "observer_name", "")
         if (not observer_name):
+            from synchronizers.model_policy import run_policy
             model_policy_thread = threading.Thread(target=run_policy)
             model_policy_thread.start()
         else:
             model_policy_thread = None
             print "Skipping model policies thread for service observer."
 
-
-        # start event listene
-        #event_manager = EventListener(wake_up=observer.wake_up)
-        #event_manager_thread = threading.Thread(target=event_manager.run)
-        #event_manager_thread.start()
-
         while True:
             try:
                 time.sleep(1000)
diff --git a/xos/synchronizers/base/steps/delete_slivers.yaml b/xos/synchronizers/base/steps/delete_slivers.yaml
deleted file mode 100644
index fa6b879..0000000
--- a/xos/synchronizers/base/steps/delete_slivers.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-
-  - nova_compute:
-      state: absent
-      name: {{ name }}
diff --git a/xos/synchronizers/base/steps/purge_disabled_users.py b/xos/synchronizers/base/steps/purge_disabled_users.py
deleted file mode 100644
index 0973b8c..0000000
--- a/xos/synchronizers/base/steps/purge_disabled_users.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import os
-import base64
-import datetime
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.user import User
-from xos.logger import observer_logger as logger
-
-class SyncRoles(OpenStackSyncStep):
-    provides=[User]
-    requested_interval=0
-    observes=User
-
-    def fetch_pending(self, deleted):
-        if (deleted):
-            # users marked as deleted
-            return User.deleted_objects.all()
-        else:
-            # disabled users that haven't been updated in over a week 
-            one_week_ago = datetime.datetime.now() - datetime.timedelta(days=7)
-            return User.objects.filter(is_active=False, updated__gt=one_week_ago)             
-
-    def sync_record(self, user):
-        user.delete() 
diff --git a/xos/synchronizers/base/steps/sliver.yaml b/xos/synchronizers/base/steps/sliver.yaml
deleted file mode 100644
index e630415..0000000
--- a/xos/synchronizers/base/steps/sliver.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - nova_compute:
-       state: present
-       auth_url: http://172.31.38.128:5000/v2.0/
-       login_username: admin
-       login_password: 6a789bf69dd647e2
-       login_tenant_name: admin
-       name: gloopy
-       image_id: 3ee851df-b35a-41c5-8551-f681e7209095
-       key_name: boo
-       wait_for: 200
-       flavor_id: 3
-       nics:
-         - net-id: d1de537b-80dc-4c1b-aa5f-4a197b33b5f6
diff --git a/xos/synchronizers/base/steps/sync_container.py b/xos/synchronizers/base/steps/sync_container.py
deleted file mode 100644
index b944495..0000000
--- a/xos/synchronizers/base/steps/sync_container.py
+++ /dev/null
@@ -1,163 +0,0 @@
-import hashlib
-import os
-import socket
-import sys
-import base64
-import time
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
-from synchronizers.base.syncstep import SyncStep, DeferredException
-from synchronizers.base.ansible import run_template_ssh
-from core.models import Service, Slice, Instance
-from services.onos.models import ONOSService, ONOSApp
-from xos.logger import Logger, logging
-
-# hpclibrary will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__),"..")
-sys.path.insert(0,parentdir)
-
-logger = Logger(level=logging.INFO)
-
-class SyncContainer(SyncInstanceUsingAnsible):
-    provides=[Instance]
-    observes=Instance
-    requested_interval=0
-    template_name = "sync_container.yaml"
-
-    def __init__(self, *args, **kwargs):
-        super(SyncContainer, self).__init__(*args, **kwargs)
-
-    def fetch_pending(self, deletion=False):
-        objs = super(SyncContainer, self).fetch_pending(deletion)
-        objs = [x for x in objs if x.isolation in ["container", "container_vm"]]
-        return objs
-
-    def get_instance_port(self, container_port):
-        for p in container_port.network.links.all():
-            if (p.instance) and (p.instance.isolation=="vm") and (p.instance.node == container_port.instance.node) and (p.mac):
-                return p
-        return None
-
-    def get_parent_port_mac(self, instance, port):
-        if not instance.parent:
-            raise Exception("instance has no parent")
-        for parent_port in instance.parent.ports.all():
-            if parent_port.network == port.network:
-                if not parent_port.mac:
-                     raise DeferredException("parent port on network %s does not have mac yet" % parent_port.network.name)
-                return parent_port.mac
-        raise Exception("failed to find corresponding parent port for network %s" % port.network.name)
-
-    def get_ports(self, o):
-        i=0
-        ports = []
-        if (o.slice.network in ["host", "bridged"]):
-            pass # no ports in host or bridged mode
-        else:
-            for port in o.ports.all():
-                if (not port.ip):
-                    # 'unmanaged' ports may have an ip, but no mac
-                    # XXX: are there any ports that have a mac but no ip?
-                    raise DeferredException("Port on network %s is not yet ready" % port.network.name)
-
-                pd={}
-                pd["mac"] = port.mac or ""
-                pd["ip"] = port.ip or ""
-                pd["xos_network_id"] = port.network.id
-
-                if port.network.name == "wan_network":
-                    if port.ip:
-                        (a, b, c, d) = port.ip.split('.')
-                        pd["mac"] = "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
-
-
-                if o.isolation == "container":
-                    # container on bare metal
-                    instance_port = self.get_instance_port(port)
-                    if not instance_port:
-                        raise DeferredException("No instance on slice for port on network %s" % port.network.name)
-
-                    pd["snoop_instance_mac"] = instance_port.mac
-                    pd["snoop_instance_id"] = instance_port.instance.instance_id
-                    pd["src_device"] = ""
-                    pd["bridge"] = "br-int"
-                else:
-                    # container in VM
-                    pd["snoop_instance_mac"] = ""
-                    pd["snoop_instance_id"] = ""
-                    pd["parent_mac"] = self.get_parent_port_mac(o, port)
-                    pd["bridge"] = ""
-
-                for (k,v) in port.get_parameters().items():
-                    pd[k] = v
-
-                ports.append(pd)
-
-            # for any ports that don't have a device, assign one
-            used_ports = [x["device"] for x in ports if ("device" in x)]
-            avail_ports = ["eth%d"%i for i in range(0,64) if ("eth%d"%i not in used_ports)]
-            for port in ports:
-                if not port.get("device",None):
-                    port["device"] = avail_ports.pop(0)
-
-        return ports
-
-    def get_extra_attributes(self, o):
-        fields={}
-        fields["ansible_tag"] = "container-%s" % str(o.id)
-        if o.image.tag:
-            fields["docker_image"] = o.image.path + ":" + o.image.tag
-        else:
-            fields["docker_image"] = o.image.path
-        fields["ports"] = self.get_ports(o)
-        if o.volumes:
-            fields["volumes"] = [x.strip() for x in o.volumes.split(",")]
-        else:
-            fields["volumes"] = ""
-        fields["network_method"] = o.slice.network or "default"
-        return fields
-
-    def sync_record(self, o):
-        logger.info("sync'ing object %s" % str(o),extra=o.tologdict())
-
-        fields = self.get_ansible_fields(o)
-
-        # If 'o' defines a 'sync_attributes' list, then we'll copy those
-        # attributes into the Ansible recipe's field list automatically.
-        if hasattr(o, "sync_attributes"):
-            for attribute_name in o.sync_attributes:
-                fields[attribute_name] = getattr(o, attribute_name)
-
-        fields.update(self.get_extra_attributes(o))
-
-        self.run_playbook(o, fields)
-
-        o.instance_id = fields["container_name"]
-        o.instance_name = fields["container_name"]
-
-        o.save()
-
-    def delete_record(self, o):
-        logger.info("delete'ing object %s" % str(o),extra=o.tologdict())
-
-        fields = self.get_ansible_fields(o)
-
-        # If 'o' defines a 'sync_attributes' list, then we'll copy those
-        # attributes into the Ansible recipe's field list automatically.
-        if hasattr(o, "sync_attributes"):
-            for attribute_name in o.sync_attributes:
-                fields[attribute_name] = getattr(o, attribute_name)
-
-        fields.update(self.get_extra_attributes(o))
-
-        self.run_playbook(o, fields, "teardown_container.yaml")
-
-    def run_playbook(self, o, fields, template_name=None):
-        if not template_name:
-            template_name = self.template_name
-        tStart = time.time()
-        run_template_ssh(template_name, fields, path="container")
-        logger.info("playbook execution time %d" % int(time.time()-tStart,extra=o.tologdict())
-
-
diff --git a/xos/synchronizers/base/steps/sync_container.yaml b/xos/synchronizers/base/steps/sync_container.yaml
deleted file mode 100644
index 77e57cd..0000000
--- a/xos/synchronizers/base/steps/sync_container.yaml
+++ /dev/null
@@ -1,116 +0,0 @@
----
-- hosts: {{ instance_name }}
-  gather_facts: False
-  connection: ssh
-  user: {{ username }}
-  sudo: yes
-
-  vars:
-    container_name: {{ container_name }}
-    docker_image: {{ docker_image }}
-    network_method: {{ network_method }}
-    ports:
-    {% for port in ports %}
-       - device: {{ port.device }}
-         xos_network_id: {{ port.xos_network_id }}
-         mac: {{ port.mac|default("") }}
-         ip: {{ port.ip }}
-         snoop_instance_mac: {{ port.snoop_instance_mac }}
-         snoop_instance_id: {{ port.snoop_instance_id }}
-         parent_mac: {{ port.parent_mac|default("") }}
-         s_tag: {{ port.s_tag|default("")  }}
-         c_tag: {{ port.c_tag|default("") }}
-         next_hop: {{ port.next_hop|default("") }}
-         bridge: {{ port.bridge }}
-    {% endfor %}
-    volumes:
-    {% for volume in volumes %}
-       - {{ volume }}
-    {% endfor %}
-
-  tasks:
-
-#  - name: Fix /etc/hosts
-#    lineinfile:
-#      dest=/etc/hosts
-#      regexp="127.0.0.1 localhost"
-#      line="127.0.0.1 localhost {{ instance_hostname }}"
-
-  - name: Add repo key
-    apt_key:
-      keyserver=hkp://pgp.mit.edu:80
-      id=58118E89F3A912897C070ADBF76221572C52609D
-
-  - name: Install Docker repo
-    apt_repository:
-      repo="deb https://apt.dockerproject.org/repo ubuntu-trusty main"
-      state=present
-
-  - name: Install Docker
-    apt:
-      name={{ '{{' }} item {{ '}}' }}
-      state=latest
-      update_cache=yes
-    with_items:
-    - docker-engine
-    - python-pip
-    - python-httplib2
-
-  # Something is installing a requests library that is incompative with pip, and
-  # will cause this recipe to fail next time it tries to run pip. Only the one
-  # in /usr/local/lib is bad. There's still a good one in /usr/lib
-  - name: check if bad requests library installed
-    stat: path=/usr/local/lib/python2.7/dist-packages/requests
-    register: bad_requests
-
-  - name: remove bad request library
-    shell: mv /usr/local/lib/python2.7/dist-packages/requests /usr/local/lib/python2.7/dist-packages/requests-bad
-    when: bad_requests.stat.exists == True
-
-  - name: Install docker-py
-    pip:
-      name=docker-py
-      state=latest
-
-  - name: install Pipework
-    get_url: url=https://raw.githubusercontent.com/jpetazzo/pipework/master/pipework
-       dest=/usr/local/bin/pipework
-       mode=0755
-
-#  - name: Start Container
-#    docker:
-#      docker_api_version: "1.18"
-#      name: {{ container_name }}
-#      # was: reloaded
-#      state: running
-#      image: {{ docker_image }}
-
-  - name: check if systemd is installed
-    stat: path=/usr/bin/systemctl
-    register: systemctl
-
-  - name: container upstart
-    template: src=/opt/xos/openstack_observer/templates/container.conf.j2 dest=/etc/init/container-{{ container_name }}.conf
-
-  - name: container systemd
-    template: src=/opt/xos/openstack_observer/templates/container.service.j2 dest=/lib/systemd/system/container-{{ container_name }}.service
-
-  - name: container startup script
-    template: src=/opt/xos/openstack_observer/templates/start-container.sh.j2 dest=/usr/local/sbin/start-container-{{ container_name }}.sh mode=0755
-
-  - name: container teardown script
-    template: src=/opt/xos/openstack_observer/templates/stop-container.sh.j2 dest=/usr/local/sbin/stop-container-{{ container_name }}.sh mode=0755
-
-  - name: restart systemd
-    shell: systemctl daemon-reload
-    when: systemctl.stat.exists == True
-
-{% if ports %}
-  - name: make sure bridges are setup
-    shell: ifconfig {{ '{{' }} item.bridge {{ '}}' }}
-    with_items: "ports"
-{% endif %}
-
-  - name: Make sure container is running
-    service: name=container-{{ container_name }} state=started
-
diff --git a/xos/synchronizers/base/steps/sync_controller_images.py b/xos/synchronizers/base/steps/sync_controller_images.py
deleted file mode 100644
index c1e5136..0000000
--- a/xos/synchronizers/base/steps/sync_controller_images.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models import Controller
-from core.models import Image, ControllerImages
-from xos.logger import observer_logger as logger 
-from synchronizers.base.ansible import *
-import json
-
-class SyncControllerImages(OpenStackSyncStep):
-    provides=[ControllerImages]
-    observes = ControllerImages
-    requested_interval=0
-    playbook='sync_controller_images.yaml'
-
-    def fetch_pending(self, deleted):
-        if (deleted):
-            return []
-
-        # now we return all images that need to be enacted
-        return ControllerImages.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-
-    def map_sync_inputs(self, controller_image):
-        image_fields = {'endpoint':controller_image.controller.auth_url,
-                        'endpoint_v3': controller_image.controller.auth_url_v3,
-                        'admin_user':controller_image.controller.admin_user,
-                        'admin_password':controller_image.controller.admin_password,
-                        'domain': controller_image.controller.domain,
-                        'name':controller_image.image.name,
-                        'filepath':controller_image.image.path,
-                        'ansible_tag': '%s@%s'%(controller_image.image.name,controller_image.controller.name), # name of ansible playbook
-                        }
-
-	return image_fields
-
-    def map_sync_outputs(self, controller_image, res):
-        image_id = res[0]['id']
-        controller_image.glance_image_id = image_id
-	controller_image.backend_status = '1 - OK'
-        controller_image.save()
diff --git a/xos/synchronizers/base/steps/sync_controller_images.yaml b/xos/synchronizers/base/steps/sync_controller_images.yaml
deleted file mode 100644
index 6247a30..0000000
--- a/xos/synchronizers/base/steps/sync_controller_images.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - glance_image:
-        auth_url={{ endpoint }}
-        login_username="{{ admin_user }}"
-        login_tenant_name="admin"
-        login_password="{{ admin_password }}"
-        name="{{ name }}"
-        file="{{ filepath }}"
-        disk_format='raw'
-        is_public=true
diff --git a/xos/synchronizers/base/steps/sync_controller_networks.py b/xos/synchronizers/base/steps/sync_controller_networks.py
deleted file mode 100644
index f209f01..0000000
--- a/xos/synchronizers/base/steps/sync_controller_networks.py
+++ /dev/null
@@ -1,136 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from netaddr import IPAddress, IPNetwork
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.network import *
-from core.models.slice import *
-from core.models.instance import Instance
-from xos.logger import observer_logger as logger
-from synchronizers.base.ansible import *
-from openstack_xos.driver import OpenStackDriver
-from xos.config import Config
-import json
-
-import pdb
-
-class SyncControllerNetworks(OpenStackSyncStep):
-    requested_interval = 0
-    provides=[Network]
-    observes=ControllerNetwork	
-    playbook='sync_controller_networks.yaml'
-
-    def alloc_subnet(self, uuid):
-        # 16 bits only
-        uuid_masked = uuid & 0xffff
-        a = 10
-        b = uuid_masked >> 8
-        c = uuid_masked & 0xff
-        d = 0
-
-        cidr = '%d.%d.%d.%d/24'%(a,b,c,d)
-        return cidr
-
-    def alloc_gateway(self, uuid):
-        # 16 bits only
-        uuid_masked = uuid & 0xffff
-        a = 10
-        b = uuid_masked >> 8
-        c = uuid_masked & 0xff
-        d = 1
-
-        gateway = '%d.%d.%d.%d'%(a,b,c,d)
-        return gateway
-
-
-    def save_controller_network(self, controller_network):
-        network_name = controller_network.network.name
-        subnet_name = '%s-%d'%(network_name,controller_network.pk)
-        cidr = self.alloc_subnet(controller_network.pk)
-        self.cidr=cidr
-        slice = controller_network.network.owner
-
-        network_fields = {'endpoint':controller_network.controller.auth_url,
-                    'endpoint_v3': controller_network.controller.auth_url_v3,
-                    'admin_user':slice.creator.email,
-                    'tenant_name':slice.name,
-                    'admin_password':slice.creator.remote_password,
-                    'domain': controller_network.controller.domain,
-                    'name':network_name,
-                    'subnet_name':subnet_name,
-                    'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
-                    'cidr':cidr,
-                    'gateway':self.alloc_gateway(controller_network.pk),
-                    'use_vtn':getattr(Config(), "networking_use_vtn", False),
-                    'delete':False	
-                    }
-        return network_fields
-
-    def map_sync_outputs(self, controller_network,res):
-        network_id = res[0]['id']
-        subnet_id = res[1]['id']
-        controller_network.net_id = network_id
-        controller_network.subnet = self.cidr
-        controller_network.subnet_id = subnet_id
-	controller_network.backend_status = '1 - OK'
-        controller_network.save()
-
-
-    def map_sync_inputs(self, controller_network):
-        # XXX This check should really be made from booleans, rather than using hardcoded network names
-        if (controller_network.network.template.name not in ['Private', 'Private-Indirect', 'Private-Direct']):
-            logger.info("skipping network controller %s because it is not private" % controller_network)
-            # We only sync private networks
-            return SyncStep.SYNC_WITHOUT_RUNNING
-        
-        if not controller_network.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_network.controller)
-            return
-
-        if controller_network.network.owner and controller_network.network.owner.creator:
-	    return self.save_controller_network(controller_network)
-        else:
-            raise Exception('Could not save network controller %s'%controller_network)
-
-    def map_delete_inputs(self, controller_network):
-        # XXX This check should really be made from booleans, rather than using hardcoded network names
-	if (controller_network.network.template.name not in ['Private', 'Private-Indirect', 'Private-Direct']):
-            # We only sync private networks
-            return
-	try:
-        	slice = controller_network.network.owner # XXX: FIXME!!
-        except:
-                raise Exception('Could not get slice for Network %s'%controller_network.network.name)
-
-	network_name = controller_network.network.name
-        subnet_name = '%s-%d'%(network_name,controller_network.pk)
-	cidr = controller_network.subnet
-	network_fields = {'endpoint':controller_network.controller.auth_url,
-                    'admin_user':slice.creator.email, # XXX: FIXME
-                    'tenant_name':slice.name, # XXX: FIXME
-                    'admin_password':slice.creator.remote_password,
-                    'name':network_name,
-                    'subnet_name':subnet_name,
-                    'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
-                    'cidr':cidr,
-		    'delete':True	
-                    }
-
-        return network_fields
-
-	"""
-        driver = OpenStackDriver().client_driver(caller=controller_network.network.owner.creator,
-                                                 tenant=controller_network.network.owner.name,
-                                                 controller=controller_network.controller.name)
-        if (controller_network.router_id) and (controller_network.subnet_id):
-            driver.delete_router_interface(controller_network.router_id, controller_network.subnet_id)
-        if controller_network.subnet_id:
-            driver.delete_subnet(controller_network.subnet_id)
-        if controller_network.router_id:
-            driver.delete_router(controller_network.router_id)
-        if controller_network.net_id:
-            driver.delete_network(controller_network.net_id)
-	"""
diff --git a/xos/synchronizers/base/steps/sync_controller_networks.yaml b/xos/synchronizers/base/steps/sync_controller_networks.yaml
deleted file mode 100644
index b885516..0000000
--- a/xos/synchronizers/base/steps/sync_controller_networks.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - quantum_network:
-        auth_url={{ endpoint }}
-        login_username={{ admin_user }}
-        login_tenant_name={{ tenant_name }}
-        login_password={{ admin_password }}
-        tenant_name={{ tenant_name }}
-        name={{ name }}
-        {% if delete %}
-        state=absent
-        {% else %}
-        state=present
-        {% endif %}
-        shared=true
-  {% if not delete %}
-  - quantum_subnet:
-        auth_url={{ endpoint }}
-        login_username={{ admin_user }}
-        login_tenant_name={{ tenant_name }}
-        login_password={{ admin_password }}
-        tenant_name={{ tenant_name }}
-        name={{ subnet_name }}
-        network_name={{ name }}
-        {% if delete %}
-        state=absent
-        {% else %}
-        state=present
-        {% if use_vtn %}
-        gateway_ip={{ gateway }}
-        {% else %}
-        no_gateway=true
-        {% endif %}
-        dns_nameservers=8.8.8.8
-        cidr={{ cidr }}
-        {% endif %}
-  {% endif %}
diff --git a/xos/synchronizers/base/steps/sync_controller_site_privileges.py b/xos/synchronizers/base/steps/sync_controller_site_privileges.py
deleted file mode 100644
index 59919fe..0000000
--- a/xos/synchronizers/base/steps/sync_controller_site_privileges.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.site import Controller, SitePrivilege 
-from core.models.user import User
-from core.models.controlleruser import ControllerUser, ControllerSitePrivilege
-from xos.logger import observer_logger as logger
-from synchronizers.base.ansible import *
-import json
-
-class SyncControllerSitePrivileges(OpenStackSyncStep):
-    provides=[SitePrivilege]
-    requested_interval=0
-    observes=ControllerSitePrivilege
-    playbook='sync_controller_users.yaml'
-
-    def map_sync_inputs(self, controller_site_privilege):
-	controller_register = json.loads(controller_site_privilege.controller.backend_register)
-        if not controller_site_privilege.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_site_privilege.controller)
-            return
-
-        roles = [controller_site_privilege.site_privilege.role.role]
-	# setup user home site roles at controller 
-        if not controller_site_privilege.site_privilege.user.site:
-            raise Exception('Siteless user %s'%controller_site_privilege.site_privilege.user.email)
-        else:
-            # look up tenant id for the user's site at the controller
-            #ctrl_site_deployments = SiteDeployment.objects.filter(
-            #  site_deployment__site=controller_site_privilege.user.site,
-            #  controller=controller_site_privilege.controller)
-
-            #if ctrl_site_deployments:
-            #    # need the correct tenant id for site at the controller
-            #    tenant_id = ctrl_site_deployments[0].tenant_id  
-            #    tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base
-            user_fields = {
-               'endpoint':controller_site_privilege.controller.auth_url,
-               'endpoint_v3': controller_site_privilege.controller.auth_url_v3,
-               'domain': controller_site_privilege.controller.domain,
-		       'name': controller_site_privilege.site_privilege.user.email,
-               'email': controller_site_privilege.site_privilege.user.email,
-               'password': controller_site_privilege.site_privilege.user.remote_password,
-               'admin_user': controller_site_privilege.controller.admin_user,
-		       'admin_password': controller_site_privilege.controller.admin_password,
-	           'ansible_tag':'%s@%s'%(controller_site_privilege.site_privilege.user.email.replace('@','-at-'),controller_site_privilege.controller.name),
-		       'admin_tenant': controller_site_privilege.controller.admin_tenant,
-		       'roles':roles,
-		       'tenant':controller_site_privilege.site_privilege.site.login_base}    
-	
-	    return user_fields
-
-    def map_sync_outputs(self, controller_site_privilege, res):
-	    # results is an array in which each element corresponds to an 
-	    # "ok" string received per operation. If we get as many oks as
-	    # the number of operations we issued, that means a grand success.
-	    # Otherwise, the number of oks tell us which operation failed.
-            controller_site_privilege.role_id = res[0]['id']
-            controller_site_privilege.save()
-
-    def delete_record(self, controller_site_privilege):
-	controller_register = json.loads(controller_site_privilege.controller.backend_register)
-        if (controller_register.get('disabled',False)):
-                raise InnocuousException('Controller %s is disabled'%controller_site_privilege.controller.name)
-
-        if controller_site_privilege.role_id:
-            driver = self.driver.admin_driver(controller=controller_site_privilege.controller)
-            user = ControllerUser.objects.get(
-                controller=controller_site_privilege.controller, 
-                user=controller_site_privilege.site_privilege.user
-            )
-            site = ControllerSite.objects.get(
-                controller=controller_site_privilege.controller, 
-                user=controller_site_privilege.site_privilege.user
-            )
-            driver.delete_user_role(
-                user.kuser_id, 
-                site.tenant_id, 
-                controller_site_privilege.site_prvilege.role.role
-            )
diff --git a/xos/synchronizers/base/steps/sync_controller_sites.py b/xos/synchronizers/base/steps/sync_controller_sites.py
deleted file mode 100644
index 1b3c2ba..0000000
--- a/xos/synchronizers/base/steps/sync_controller_sites.py
+++ /dev/null
@@ -1,67 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
-from core.models.site import *
-from synchronizers.base.syncstep import *
-from synchronizers.base.ansible import *
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerSites(OpenStackSyncStep):
-    requested_interval=0
-    provides=[Site]
-    observes=ControllerSite
-    playbook = 'sync_controller_sites.yaml'
-
-    def fetch_pending(self, deleted=False):
-        lobjs = ControllerSite.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None),Q(lazy_blocked=False),Q(controller__isnull=False))
-        return lobjs
-
-    def map_sync_inputs(self, controller_site):
-	tenant_fields = {'endpoint':controller_site.controller.auth_url,
-                 'endpoint_v3': controller_site.controller.auth_url_v3,
-                 'domain': controller_site.controller.domain,
-		         'admin_user': controller_site.controller.admin_user,
-		         'admin_password': controller_site.controller.admin_password,
-		         'admin_tenant': controller_site.controller.admin_tenant,
-	             'ansible_tag': '%s@%s'%(controller_site.site.login_base,controller_site.controller.name), # name of ansible playbook
-		         'tenant': controller_site.site.login_base,
-		         'tenant_description': controller_site.site.name}
-        return tenant_fields
-
-    def map_sync_outputs(self, controller_site, res):
-	controller_site.tenant_id = res[0]['id']
-	controller_site.backend_status = '1 - OK'
-        controller_site.save()
-            
-    def delete_record(self, controller_site):
-	controller_register = json.loads(controller_site.controller.backend_register)
-        if (controller_register.get('disabled',False)):
-                raise InnocuousException('Controller %s is disabled'%controller_site.controller.name)
-
-	if controller_site.tenant_id:
-            driver = self.driver.admin_driver(controller=controller_site.controller)
-            driver.delete_tenant(controller_site.tenant_id)
-
-	"""
-        Ansible does not support tenant deletion yet
-
-	import pdb
-	pdb.set_trace()
-        template = os_template_env.get_template('delete_controller_sites.yaml')
-	tenant_fields = {'endpoint':controller_site.controller.auth_url,
-		         'admin_user': controller_site.controller.admin_user,
-		         'admin_password': controller_site.controller.admin_password,
-		         'admin_tenant': 'admin',
-	                 'ansible_tag': 'controller_sites/%s@%s'%(controller_site.controller_site.site.login_base,controller_site.controller_site.deployment.name), # name of ansible playbook
-		         'tenant': controller_site.controller_site.site.login_base,
-		         'delete': True}
-
-	rendered = template.render(tenant_fields)
-	res = run_template('sync_controller_sites.yaml', tenant_fields)
-
-	if (len(res)!=1):
-		raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
-	"""
diff --git a/xos/synchronizers/base/steps/sync_controller_sites.yaml b/xos/synchronizers/base/steps/sync_controller_sites.yaml
deleted file mode 100644
index 4129802..0000000
--- a/xos/synchronizers/base/steps/sync_controller_sites.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} tenant={{ tenant }} tenant_description="{{ tenant_description }}"
diff --git a/xos/synchronizers/base/steps/sync_controller_slice_privileges.py b/xos/synchronizers/base/steps/sync_controller_slice_privileges.py
deleted file mode 100644
index b78e4a0..0000000
--- a/xos/synchronizers/base/steps/sync_controller_slice_privileges.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.slice import Controller, SlicePrivilege 
-from core.models.user import User
-from core.models.controlleruser import ControllerUser, ControllerSlicePrivilege
-from synchronizers.base.ansible import *
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerSlicePrivileges(OpenStackSyncStep):
-    provides=[SlicePrivilege]
-    requested_interval=0
-    observes=ControllerSlicePrivilege
-    playbook = 'sync_controller_users.yaml'
-
-    def map_inputs(self, controller_slice_privilege):
-        if not controller_slice_privilege.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_slice_privilege.controller)
-            return
-
-	template = os_template_env.get_template('sync_controller_users.yaml')
-        roles = [controller_slice_privilege.slice_privilege.role.role]
-	# setup user home slice roles at controller 
-        if not controller_slice_privilege.slice_privilege.user.site:
-            raise Exception('Sliceless user %s'%controller_slice_privilege.slice_privilege.user.email)
-        else:
-            # look up tenant id for the user's slice at the controller
-            #ctrl_slice_deployments = SliceDeployment.objects.filter(
-            #  slice_deployment__slice=controller_slice_privilege.user.slice,
-            #  controller=controller_slice_privilege.controller)
-
-            #if ctrl_slice_deployments:
-            #    # need the correct tenant id for slice at the controller
-            #    tenant_id = ctrl_slice_deployments[0].tenant_id  
-            #    tenant_name = ctrl_slice_deployments[0].slice_deployment.slice.login_base
-            user_fields = {
-               'endpoint':controller_slice_privilege.controller.auth_url,
-               'endpoint_v3': controller_slice_privilege.controller.auth_url_v3,
-               'domain': controller_slice_privilege.controller.domain,
-		       'name': controller_slice_privilege.slice_privilege.user.email,
-               'email': controller_slice_privilege.slice_privilege.user.email,
-               'password': controller_slice_privilege.slice_privilege.user.remote_password,
-               'admin_user': controller_slice_privilege.controller.admin_user,
-		       'admin_password': controller_slice_privilege.controller.admin_password,
-               'ansible_tag':'%s@%s@%s'%(controller_slice_privilege.slice_privilege.user.email.replace('@','-at-'),controller_slice_privilege.slice_privilege.slice.name,controller_slice_privilege.controller.name),
-		       'admin_tenant': controller_slice_privilege.controller.admin_tenant,
-		       'roles':roles,
-		       'tenant':controller_slice_privilege.slice_privilege.slice.name}    
-            return user_fields
-	
-    def map_sync_outputs(self, controller_slice_privilege, res):
-        controller_slice_privilege.role_id = res[0]['id']
-        controller_slice_privilege.save()
-
-    def delete_record(self, controller_slice_privilege):
-	controller_register = json.loads(controller_slice_privilege.controller.backend_register)
-        if (controller_register.get('disabled',False)):
-                raise InnocuousException('Controller %s is disabled'%controller_slice_privilege.controller.name)
-
-        if controller_slice_privilege.role_id:
-            driver = self.driver.admin_driver(controller=controller_slice_privilege.controller)
-            user = ControllerUser.objects.get(
-                controller=controller_slice_privilege.controller, 
-                user=controller_slice_privilege.slice_privilege.user
-            )
-            slice = ControllerSlice.objects.get(
-                controller=controller_slice_privilege.controller, 
-                user=controller_slice_privilege.slice_privilege.user
-            )
-            driver.delete_user_role(
-                user.kuser_id, 
-                slice.tenant_id, 
-                controller_slice_privilege.slice_prvilege.role.role
-            )
diff --git a/xos/synchronizers/base/steps/sync_controller_slices.py b/xos/synchronizers/base/steps/sync_controller_slices.py
deleted file mode 100644
index 2f36441..0000000
--- a/xos/synchronizers/base/steps/sync_controller_slices.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from netaddr import IPAddress, IPNetwork
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models import *
-from synchronizers.base.ansible import *
-from openstack_xos.driver import OpenStackDriver
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerSlices(OpenStackSyncStep):
-    provides=[Slice]
-    requested_interval=0
-    observes=ControllerSlice
-    playbook='sync_controller_slices.yaml'
-
-    def map_sync_inputs(self, controller_slice):
-        logger.info("sync'ing slice controller %s" % controller_slice)
-
-        if not controller_slice.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_slice.controller)
-            return
-
-        controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
-                                                             controller=controller_slice.controller)
-        if not controller_users:
-            raise Exception("slice createor %s has not accout at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
-        else:
-            controller_user = controller_users[0]
-            roles = ['admin']
-
-        max_instances=int(controller_slice.slice.max_instances)
-        tenant_fields = {'endpoint':controller_slice.controller.auth_url,
-                         'endpoint_v3': controller_slice.controller.auth_url_v3,
-                         'domain': controller_slice.controller.domain,
-                         'admin_user': controller_slice.controller.admin_user,
-                         'admin_password': controller_slice.controller.admin_password,
-                         'admin_tenant': 'admin',
-                         'tenant': controller_slice.slice.name,
-                         'tenant_description': controller_slice.slice.description,
-                         'roles':roles,
-                         'name':controller_user.user.email,
-                         'ansible_tag':'%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
-                         'max_instances':max_instances}
-
-        return tenant_fields
-
-    def map_sync_outputs(self, controller_slice, res):
-        tenant_id = res[0]['id']
-        if (not controller_slice.tenant_id):
-            try:
-                driver = OpenStackDriver().admin_driver(controller=controller_slice.controller)
-                driver.shell.nova.quotas.update(tenant_id=tenant_id, instances=int(controller_slice.slice.max_instances))
-            except:
-                logger.log_exc('Could not update quota for %s'%controller_slice.slice.name)
-                raise Exception('Could not update quota for %s'%controller_slice.slice.name)
-
-            controller_slice.tenant_id = tenant_id
-            controller_slice.backend_status = '1 - OK'
-            controller_slice.save()
-
-
-    def map_delete_inputs(self, controller_slice):
-        controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
-                                                              controller=controller_slice.controller)
-        if not controller_users:
-            raise Exception("slice createor %s has not accout at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
-        else:
-            controller_user = controller_users[0]
-
-        tenant_fields = {'endpoint':controller_slice.controller.auth_url,
-                          'admin_user': controller_slice.controller.admin_user,
-                          'admin_password': controller_slice.controller.admin_password,
-                          'admin_tenant': 'admin',
-                          'tenant': controller_slice.slice.name,
-                          'tenant_description': controller_slice.slice.description,
-                          'name':controller_user.user.email,
-                          'ansible_tag':'%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
-                          'delete': True}
-	return tenant_fields
diff --git a/xos/synchronizers/base/steps/sync_controller_slices.yaml b/xos/synchronizers/base/steps/sync_controller_slices.yaml
deleted file mode 100644
index 61470ce..0000000
--- a/xos/synchronizers/base/steps/sync_controller_slices.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  {% if delete -%}
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} tenant={{ tenant }} tenant_description="{{ tenant_description }}" state=absent
-  {% else -%}
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} tenant={{ tenant }} tenant_description="{{ tenant_description }}"
-  {% for role in roles %}
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} user="{{ name }}" role={{ role }} tenant={{ tenant }}
-  {% endfor %}
-  {% endif %}
diff --git a/xos/synchronizers/base/steps/sync_controller_users.py b/xos/synchronizers/base/steps/sync_controller_users.py
deleted file mode 100644
index 9af48e5..0000000
--- a/xos/synchronizers/base/steps/sync_controller_users.py
+++ /dev/null
@@ -1,69 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.site import Controller, SiteDeployment, SiteDeployment
-from core.models.user import User
-from core.models.controlleruser import ControllerUser
-from synchronizers.base.ansible import *
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerUsers(OpenStackSyncStep):
-    provides=[User]
-    requested_interval=0
-    observes=ControllerUser
-    playbook='sync_controller_users.yaml'
-
-    def map_sync_inputs(self, controller_user):
-        if not controller_user.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_user.controller)
-            return
-
-        # All users will have at least the 'user' role at their home site/tenant.
-        # We must also check if the user should have the admin role
-        roles = ['user']
-        if controller_user.user.is_admin:
-            roles.append('admin')
-
-        # setup user home site roles at controller
-        if not controller_user.user.site:
-            raise Exception('Siteless user %s'%controller_user.user.email)
-        else:
-            # look up tenant id for the user's site at the controller
-            #ctrl_site_deployments = SiteDeployment.objects.filter(
-            #  site_deployment__site=controller_user.user.site,
-            #  controller=controller_user.controller)
-
-            #if ctrl_site_deployments:
-            #    # need the correct tenant id for site at the controller
-            #    tenant_id = ctrl_site_deployments[0].tenant_id
-            #    tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base
-            user_fields = {
-                'endpoint':controller_user.controller.auth_url,
-                'endpoint_v3': controller_user.controller.auth_url_v3,
-                'domain': controller_user.controller.domain,
-                'name': controller_user.user.email,
-                'email': controller_user.user.email,
-                'password': controller_user.user.remote_password,
-                'admin_user': controller_user.controller.admin_user,
-                'admin_password': controller_user.controller.admin_password,
-                'ansible_tag':'%s@%s'%(controller_user.user.email.replace('@','-at-'),controller_user.controller.name),
-                'admin_tenant': controller_user.controller.admin_tenant,
-                'roles':roles,
-                'tenant':controller_user.user.site.login_base
-                }
-	    return user_fields
-
-    def map_sync_outputs(self, controller_user, res):
-        controller_user.kuser_id = res[0]['id']
-        controller_user.backend_status = '1 - OK'
-        controller_user.save()
-
-    def delete_record(self, controller_user):
-        if controller_user.kuser_id:
-            driver = self.driver.admin_driver(controller=controller_user.controller)
-            driver.delete_user(controller_user.kuser_id)
diff --git a/xos/synchronizers/base/steps/sync_controller_users.yaml b/xos/synchronizers/base/steps/sync_controller_users.yaml
deleted file mode 100644
index 4f2db5e..0000000
--- a/xos/synchronizers/base/steps/sync_controller_users.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - keystone_user:
-       endpoint={{ endpoint }}
-       login_user={{ admin_user }} 
-       login_password={{ admin_password }} 
-       login_tenant_name={{ admin_tenant }} 
-       user="{{ name }}"
-       email={{ email }}
-       password={{ password }}
-       tenant={{ tenant }}
-  {% for role in roles %}
-  - keystone_user: endpoint={{ endpoint}}  login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} user="{{ name }}" role={{ role }} tenant={{ tenant }}
-  {% endfor %}
diff --git a/xos/synchronizers/base/steps/sync_images.py b/xos/synchronizers/base/steps/sync_images.py
deleted file mode 100644
index 8049ac1..0000000
--- a/xos/synchronizers/base/steps/sync_images.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.image import Image
-from xos.logger import observer_logger as logger
-
-class SyncImages(OpenStackSyncStep):
-    provides=[Image]
-    requested_interval=0
-    observes=Image
-
-    def fetch_pending(self, deleted):
-        # Images come from the back end
-        # You can't delete them
-        if (deleted):
-            logger.info("SyncImages: returning because deleted=True")
-            return []
-
-        # get list of images on disk
-        images_path = Config().observer_images_directory
-
-        logger.info("SyncImages: deleted=False, images_path=%s" % images_path)
-
-        available_images = {}
-        if os.path.exists(images_path):
-            for f in os.listdir(images_path):
-                filename = os.path.join(images_path, f)
-                if os.path.isfile(filename):
-                    available_images[f] = filename
-
-        logger.info("SyncImages: available_images = %s" % str(available_images))
-
-        images = Image.objects.all()
-        image_names = [image.name for image in images]
-
-        for image_name in available_images:
-            #remove file extension
-            clean_name = ".".join(image_name.split('.')[:-1])
-            if clean_name not in image_names:
-                logger.info("SyncImages: adding %s" % clean_name)
-                image = Image(name=clean_name,
-                              disk_format='raw',
-                              container_format='bare', 
-                              path = available_images[image_name])
-                image.save()
-
-        return Image.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
-
-    def sync_record(self, image):
-        image.save()
diff --git a/xos/synchronizers/base/steps/sync_instances.py b/xos/synchronizers/base/steps/sync_instances.py
deleted file mode 100644
index 2862474..0000000
--- a/xos/synchronizers/base/steps/sync_instances.py
+++ /dev/null
@@ -1,174 +0,0 @@
-import os
-import base64
-import socket
-from django.db.models import F, Q
-from xos.config import Config
-from xos.settings import RESTAPI_HOSTNAME, RESTAPI_PORT
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.instance import Instance
-from core.models.slice import Slice, SlicePrivilege, ControllerSlice
-from core.models.network import Network, NetworkSlice, ControllerNetwork
-from synchronizers.base.ansible import *
-from synchronizers.base.syncstep import *
-from xos.logger import observer_logger as logger
-
-def escape(s):
-    s = s.replace('\n',r'\n').replace('"',r'\"')
-    return s
-
-class SyncInstances(OpenStackSyncStep):
-    provides=[Instance]
-    requested_interval=0
-    observes=Instance
-    playbook='sync_instances.yaml'
-
-    def fetch_pending(self, deletion=False):
-        objs = super(SyncInstances, self).fetch_pending(deletion)
-        objs = [x for x in objs if x.isolation=="vm"]
-        return objs
-
-    def get_userdata(self, instance, pubkeys):
-        userdata = '#cloud-config\n\nopencloud:\n   slicename: "%s"\n   hostname: "%s"\n   restapi_hostname: "%s"\n   restapi_port: "%s"\n' % (instance.slice.name, instance.node.name, RESTAPI_HOSTNAME, str(RESTAPI_PORT))
-        userdata += 'ssh_authorized_keys:\n'
-        for key in pubkeys:
-            userdata += '  - %s\n' % key
-        return userdata
-
-    def map_sync_inputs(self, instance):
-        inputs = {}
-	metadata_update = {}
-        if (instance.numberCores):
-            metadata_update["cpu_cores"] = str(instance.numberCores)
-
-        for tag in instance.slice.tags.all():
-            if tag.name.startswith("sysctl-"):
-                metadata_update[tag.name] = tag.value
-
-	slice_memberships = SlicePrivilege.objects.filter(slice=instance.slice)
-        pubkeys = set([sm.user.public_key for sm in slice_memberships if sm.user.public_key])
-        if instance.creator.public_key:
-            pubkeys.add(instance.creator.public_key)
-
-        if instance.slice.creator.public_key:
-            pubkeys.add(instance.slice.creator.public_key)
-
-        if instance.slice.service and instance.slice.service.public_key:
-            pubkeys.add(instance.slice.service.public_key)
-
-        nics = []
-        networks = [ns.network for ns in NetworkSlice.objects.filter(slice=instance.slice)]
-        controller_networks = ControllerNetwork.objects.filter(network__in=networks,
-                                                                controller=instance.node.site_deployment.controller)
-
-        for controller_network in controller_networks:
-
-            # Lenient exception - causes slow backoff
-            if controller_network.network.template.visibility == 'private' and \
-               controller_network.network.template.translation == 'none':
-                   if not controller_network.net_id:
-                        raise DeferredException("Instance %s Private Network %s has no id; Try again later" % (instance, controller_network.network.name))
-                   nics.append(controller_network.net_id)
-
-        # now include network template
-        network_templates = [network.template.shared_network_name for network in networks \
-                             if network.template.shared_network_name]
-
-        #driver = self.driver.client_driver(caller=instance.creator, tenant=instance.slice.name, controller=instance.controllerNetwork)
-        driver = self.driver.admin_driver(tenant='admin', controller=instance.node.site_deployment.controller)
-        nets = driver.shell.neutron.list_networks()['networks']
-        for net in nets:
-            if net['name'] in network_templates:
-                nics.append(net['id'])
-
-        if (not nics):
-            for net in nets:
-                if net['name']=='public':
-                    nics.append(net['id'])
-
-        image_name = None
-        controller_images = instance.image.controllerimages.filter(controller=instance.node.site_deployment.controller)
-        if controller_images:
-            image_name = controller_images[0].image.name
-            logger.info("using image from ControllerImage object: " + str(image_name))
-
-        if image_name is None:
-            controller_driver = self.driver.admin_driver(controller=instance.node.site_deployment.controller)
-            images = controller_driver.shell.glanceclient.images.list()
-            for image in images:
-                if image.name == instance.image.name or not image_name:
-                    image_name = image.name
-                    logger.info("using image from glance: " + str(image_name))
-
-	try:
-            legacy = Config().observer_legacy
-        except:
-            legacy = False
-
-        if (legacy):
-            host_filter = instance.node.name.split('.',1)[0]
-        else:
-            host_filter = instance.node.name.strip()
-
-        availability_zone_filter = 'nova:%s'%host_filter
-        instance_name = '%s-%d'%(instance.slice.name,instance.id)
-        self.instance_name = instance_name
-
-        userData = self.get_userdata(instance, pubkeys)
-        if instance.userData:
-            userData += instance.userData
-
-        controller = instance.node.site_deployment.controller
-        fields = {'endpoint':controller.auth_url,
-                     'endpoint_v3': controller.auth_url_v3,
-                     'domain': controller.domain,
-                     'admin_user': instance.creator.email,
-                     'admin_password': instance.creator.remote_password,
-                     'admin_tenant': instance.slice.name,
-                     'tenant': instance.slice.name,
-                     'tenant_description': instance.slice.description,
-                     'name':instance_name,
-                     'ansible_tag':instance_name,
-                     'availability_zone': availability_zone_filter,
-                     'image_name':image_name,
-                     'flavor_name':instance.flavor.name,
-                     'nics':nics,
-                     'meta':metadata_update,
-                     'user_data':r'%s'%escape(userData)}
-        return fields
-
-
-    def map_sync_outputs(self, instance, res):
-	instance_id = res[0]['info']['OS-EXT-SRV-ATTR:instance_name']
-        instance_uuid = res[0]['id']
-
-	try:
-            hostname = res[0]['info']['OS-EXT-SRV-ATTR:hypervisor_hostname']
-            ip = socket.gethostbyname(hostname)
-            instance.ip = ip
-        except:
-            pass
-
-        instance.instance_id = instance_id
-        instance.instance_uuid = instance_uuid
-        instance.instance_name = self.instance_name
-        instance.save()
-	
-	
-    def map_delete_inputs(self, instance):
-        controller_register = json.loads(instance.node.site_deployment.controller.backend_register)
-
-        if (controller_register.get('disabled',False)):
-            raise InnocuousException('Controller %s is disabled'%instance.node.site_deployment.controller.name)
-
-        instance_name = '%s-%d'%(instance.slice.name,instance.id)
-        controller = instance.node.site_deployment.controller
-        input = {'endpoint':controller.auth_url,
-                     'admin_user': instance.creator.email,
-                     'admin_password': instance.creator.remote_password,
-                     'admin_tenant': instance.slice.name,
-                     'tenant': instance.slice.name,
-                     'tenant_description': instance.slice.description,
-                     'name':instance_name,
-                     'ansible_tag':instance_name,
-                     'delete': True}
-        return input
diff --git a/xos/synchronizers/base/steps/sync_instances.yaml b/xos/synchronizers/base/steps/sync_instances.yaml
deleted file mode 100644
index 70da32d..0000000
--- a/xos/synchronizers/base/steps/sync_instances.yaml
+++ /dev/null
@@ -1,34 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - os_server:
-      name: {{ name }}
-      auth:
-        auth_url: {{ endpoint }}
-        username: {{ admin_user }}
-        password: {{ admin_password }}
-        project_name: {{ project_name }}
-      {% if delete -%}
-      state: absent
-      {% else -%}
-      state: present
-      availability_zone: "{{ availability_zone }}"
-      image: {{ image_name }}
-      flavor: {{ flavor_name }}
-      timeout: 200
-      userdata: "{{ user_data }}"
-      config_drive: yes
-      nics:
-      {% for nic in nics %}
-          - {{ nic.kind }}-id: {{ nic.value }}
-      {% endfor %}
-
-      {% if meta %}
-      meta:
-      {% for k,v in meta.items() %}
-          {{ k }} : "{{ v }}"
-      {% endfor %}
-      {% endif %}
-      {% endif %}
-
diff --git a/xos/synchronizers/base/steps/sync_ports.py b/xos/synchronizers/base/steps/sync_ports.py
deleted file mode 100644
index 8f2b66d..0000000
--- a/xos/synchronizers/base/steps/sync_ports.py
+++ /dev/null
@@ -1,196 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models import Controller
-from core.models.network import *
-from xos.logger import observer_logger as logger
-
-class SyncPorts(OpenStackSyncStep):
-    requested_interval = 0 # 3600
-    provides=[Port]
-    observes=Port
-
-    #     The way it works is to enumerate the all of the ports that neutron
-    #     has, and then work backward from each port's network-id to determine
-    #     which Network is associated from the port.
-
-    def call(self, **args):
-        logger.info("sync'ing network instances")
-
-        ports = Port.objects.all()
-        ports_by_id = {}
-        ports_by_neutron_port = {}
-        for port in ports:
-            ports_by_id[port.id] = port
-            ports_by_neutron_port[port.port_id] = port
-
-        networks = Network.objects.all()
-        networks_by_id = {}
-        for network in networks:
-            for nd in network.controllernetworks.all():
-                networks_by_id[nd.net_id] = network
-
-        #logger.info("networks_by_id = ")
-        #for (network_id, network) in networks_by_id.items():
-        #    logger.info("   %s: %s" % (network_id, network.name))
-
-        instances = Instance.objects.all()
-        instances_by_instance_uuid = {}
-        for instance in instances:
-            instances_by_instance_uuid[instance.instance_uuid] = instance
-
-        # Get all ports in all controllers
-
-        ports_by_id = {}
-        templates_by_id = {}
-        for controller in Controller.objects.all():
-            if not controller.admin_tenant:
-                logger.info("controller %s has no admin_tenant" % controller)
-                continue
-            try:
-                driver = self.driver.admin_driver(controller = controller)
-                ports = driver.shell.neutron.list_ports()["ports"]
-            except:
-                logger.log_exc("failed to get ports from controller %s" % controller)
-                continue
-
-            for port in ports:
-                ports_by_id[port["id"]] = port
-
-            # public-nat and public-dedicated networks don't have a net-id anywhere
-            # in the data model, so build up a list of which ids map to which network
-            # templates.
-            try:
-                neutron_networks = driver.shell.neutron.list_networks()["networks"]
-            except:
-                print "failed to get networks from controller %s" % controller
-                continue
-            for network in neutron_networks:
-                for template in NetworkTemplate.objects.all():
-                    if template.shared_network_name == network["name"]:
-                        templates_by_id[network["id"]] = template
-
-        for port in ports_by_id.values():
-            #logger.info("port %s" % str(port))
-            if port["id"] in ports_by_neutron_port:
-                # we already have it
-                #logger.info("already accounted for port %s" % port["id"])
-                continue
-
-            if port["device_owner"] != "compute:nova":
-                # we only want the ports that connect to instances
-                #logger.info("port %s is not a compute port, it is a %s" % (port["id"], port["device_owner"]))
-                continue
-
-            instance = instances_by_instance_uuid.get(port['device_id'], None)
-            if not instance:
-                logger.info("no instance for port %s device_id %s" % (port["id"], port['device_id']))
-                continue
-
-            network = networks_by_id.get(port['network_id'], None)
-            if not network:
-                # maybe it's public-nat or public-dedicated. Search the templates for
-                # the id, then see if the instance's slice has some network that uses
-                # that template
-                template = templates_by_id.get(port['network_id'], None)
-                if template and instance.slice:
-                    for candidate_network in instance.slice.networks.all():
-                         if candidate_network.template == template:
-                             network=candidate_network
-            if not network:
-                logger.info("no network for port %s network %s" % (port["id"], port["network_id"]))
-
-                # we know it's associated with a instance, but we don't know
-                # which network it is part of.
-
-                continue
-
-            if network.template.shared_network_name:
-                # If it's a shared network template, then more than one network
-                # object maps to the neutron network. We have to do a whole bunch
-                # of extra work to find the right one.
-                networks = network.template.network_set.all()
-                network = None
-                for candidate_network in networks:
-                    if (candidate_network.owner == instance.slice):
-                        logger.info("found network %s" % candidate_network)
-                        network = candidate_network
-
-                if not network:
-                    logger.info("failed to find the correct network for a shared template for port %s network %s" % (port["id"], port["network_id"]))
-                    continue
-
-            if not port["fixed_ips"]:
-                logger.info("port %s has no fixed_ips" % port["id"])
-                continue
-
-            ip=port["fixed_ips"][0]["ip_address"]
-            mac=port["mac_address"]
-            logger.info("creating Port (%s, %s, %s, %s)" % (str(network), str(instance), ip, str(port["id"])))
-
-            ns = Port(network=network,
-                               instance=instance,
-                               ip=ip,
-                               mac=mac,
-                               port_id=port["id"])
-
-            try:
-                ns.save()
-            except:
-                logger.log_exc("failed to save port %s" % str(ns))
-                continue
-
-        # For ports that were created by the user, find that ones
-        # that don't have neutron ports, and create them.
-        for port in Port.objects.filter(Q(port_id__isnull=True), Q(instance__isnull=False) ):
-            logger.info("XXX working on port %s" % port)
-            controller = port.instance.node.site_deployment.controller
-            slice = port.instance.slice
-
-            if controller:
-                cn=port.network.controllernetworks.filter(controller=controller)
-                if not cn:
-                    logger.log_exc("no controllernetwork for %s" % port)
-                    continue
-                cn=cn[0]
-                if cn.lazy_blocked:
-                    cn.lazy_blocked=False
-                    cn.save()
-                    logger.info("deferring port %s because controllerNetwork was lazy-blocked" % port)
-                    continue
-                if not cn.net_id:
-                    logger.info("deferring port %s because controllerNetwork does not have a port-id yet" % port)
-                    continue
-                try:
-                    # We need to use a client driver that specifies the tenant
-                    # of the destination instance. Nova-compute will not connect
-                    # ports to instances if the port's tenant does not match
-                    # the instance's tenant.
-
-                    # A bunch of stuff to compensate for OpenStackDriver.client_driveR()
-                    # not being in working condition.
-                    from openstack_xos.client import OpenStackClient
-                    from openstack_xos.driver import OpenStackDriver
-                    caller = port.network.owner.creator
-                    auth = {'username': caller.email,
-                            'password': caller.remote_password,
-                            'tenant': slice.name}
-                    client = OpenStackClient(controller=controller, **auth) # cacert=self.config.nova_ca_ssl_cert,
-                    driver = OpenStackDriver(client=client)
-
-                    neutron_port = driver.shell.neutron.create_port({"port": {"network_id": cn.net_id}})["port"]
-                    port.port_id = neutron_port["id"]
-                    if neutron_port["fixed_ips"]:
-                        port.ip = neutron_port["fixed_ips"][0]["ip_address"]
-                    port.mac = neutron_port["mac_address"]
-                except:
-                    logger.log_exc("failed to create neutron port for %s" % port)
-                    continue
-                port.save()
-
-    def delete_record(self, network_instance):
-        # Nothing to do, this is an OpenCloud object
-        pass
-
diff --git a/xos/synchronizers/base/steps/sync_roles.py b/xos/synchronizers/base/steps/sync_roles.py
deleted file mode 100644
index e859316..0000000
--- a/xos/synchronizers/base/steps/sync_roles.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.role import Role
-from core.models.site import SiteRole, Controller, ControllerRole
-from core.models.slice import SliceRole
-from xos.logger import observer_logger as logger
-
-class SyncRoles(OpenStackSyncStep):
-    provides=[Role]
-    requested_interval=0
-    observes=[SiteRole,SliceRole,ControllerRole]
-
-    def sync_record(self, role):
-        if not role.enacted:
-            controllers = Controller.objects.all()
-       	    for controller in controllers:
-                driver = self.driver.admin_driver(controller=controller)
-                driver.create_role(role.role)
-            role.save()
-    
diff --git a/xos/synchronizers/base/steps/teardown_container.yaml b/xos/synchronizers/base/steps/teardown_container.yaml
deleted file mode 100644
index 5cabc78..0000000
--- a/xos/synchronizers/base/steps/teardown_container.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-- hosts: {{ instance_name }}
-  gather_facts: False
-  connection: ssh
-  user: {{ username }}
-  sudo: yes
-
-  vars:
-    container_name: {{ container_name }}
-    docker_image: {{ docker_image }}
-    ports:
-    {% for port in ports %}
-       - device: {{ port.device }}
-         xos_network_id: {{ port.xos_network_id }}
-         mac: {{ port.mac|default("") }}
-         ip: {{ port.ip }}
-         snoop_instance_mac: {{ port.snoop_instance_mac }}
-         snoop_instance_id: {{ port.snoop_instance_id }}
-         parent_mac: {{ port.parent_mac|default("") }}
-         s_tag: {{ port.s_tag|default("")  }}
-         c_tag: {{ port.c_tag|default("") }}
-         next_hop: {{ port.next_hop|default("") }}
-         bridge: {{ port.bridge }}
-    {% endfor %}
-    volumes:
-    {% for volume in volumes %}
-       - {{ volume }}
-    {% endfor %}
-
-  tasks:
-  - name: Make sure container is stopped
-    service: name=container-{{ container_name }} state=stopped
-
diff --git a/xos/synchronizers/onboarding/xosbuilder.py b/xos/synchronizers/onboarding/xosbuilder.py
index bbe7294..be3960e 100644
--- a/xos/synchronizers/onboarding/xosbuilder.py
+++ b/xos/synchronizers/onboarding/xosbuilder.py
@@ -280,7 +280,7 @@
         for c in ServiceController.objects.all():
             #dockerfile = dockerfile + self.get_controller_docker_lines(c, self.SYNC_ALLCONTROLLER_KINDS)
             script = script + self.get_controller_script_lines(c, self.SYNC_ALLCONTROLLER_KINDS)
-            if controller.service_controller_resources.filter(kind="models").exists():
+            if c.service_controller_resources.filter(kind="models").exists():
                 app_list.append("services." + c.name)
 
         self.create_xos_app_data(controller.name, script, app_list, None)
diff --git a/xos/synchronizers/openstack/__init__.py b/xos/synchronizers/openstack/__init__.py
deleted file mode 100644
index e56cd39..0000000
--- a/xos/synchronizers/openstack/__init__.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from xos.config import Config
-
-try:
-    observer_disabled = Config().observer_disabled
-except:
-    observer_disabled = False
-
-def EnableObserver(x):
-    """ used for manage.py --noobserver """
-    global observer_disabled
-    observer_disabled = not x
-
-print_once = True
-
-def notify_observer(model=None, delete=False, pk=None, model_dict={}):
-    if (observer_disabled):
-        global print_once
-        if (print_once):
-            print "The observer is disabled"
-            print_once = False
-        return
-
-    try:
-        from .event_manager import EventSender
-        if (model and delete):
-            if hasattr(model,"__name__"):
-                modelName = model.__name__
-            else:
-                modelName = model.__class__.__name__
-            EventSender().fire(delete_flag = delete, model = modelName, pk = pk, model_dict=model_dict)
-        else:
-            EventSender().fire()
-    except Exception,e:
-        print "Exception in Observer. This should not disrupt the front end. %s"%str(e)
-
-
diff --git a/xos/synchronizers/openstack/error_mapper.py b/xos/synchronizers/openstack/error_mapper.py
deleted file mode 100644
index 9eb878d..0000000
--- a/xos/synchronizers/openstack/error_mapper.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from xos.config import Config
-from xos.logger import Logger, logging, logger
-
-class ErrorMapper:
-	def __init__(self, error_map_file):
-		self.error_map = {}
-		try:
-			error_map_lines = open(error_map_file).read().splitlines()
-			for l in error_map_lines:
-				if (not l.startswith('#')):
-					splits = l.split('->')
-					k,v = map(lambda i:i.rstrip(),splits)
-					self.error_map[k]=v
-		except:
-			logging.info('Could not read error map')
-
-
-	def map(self, error):
-		return self.error_map[error]
-
-
-
-
-
-
diff --git a/xos/synchronizers/openstack/model_policies/__init__.py b/xos/synchronizers/openstack/model_policies/__init__.py
deleted file mode 100644
index 36c6e25..0000000
--- a/xos/synchronizers/openstack/model_policies/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from .model_policy_Slice import *
-from .model_policy_Instance import *
-from .model_policy_User import *
-from .model_policy_Network import *
-from .model_policy_Site import *
-from .model_policy_SitePrivilege import *
-from .model_policy_SlicePrivilege import *
-from .model_policy_ControllerSlice import *
-from .model_policy_ControllerSite import *
-from .model_policy_ControllerUser import *
-from .model_policy_Controller import *
-from .model_policy_Image import *
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Controller.py b/xos/synchronizers/openstack/model_policies/model_policy_Controller.py
deleted file mode 100644
index c62b612..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Controller.py
+++ /dev/null
@@ -1,62 +0,0 @@
-
-def handle(controller):
-    from core.models import Controller, Site, ControllerSite, Slice, ControllerSlice, User, ControllerUser, ControllerImages, ControllerNetwork, Image, Network
-    from collections import defaultdict
-
-    # relations for all sites
-    ctrls_by_site = defaultdict(list)
-    ctrl_sites = ControllerSite.objects.all()
-    for ctrl_site in ctrl_sites:
-        ctrls_by_site[ctrl_site.site].append(ctrl_site.controller)
-    sites = Site.objects.all()
-    for site in sites:
-        if site not in ctrls_by_site or \
-            controller not in ctrls_by_site[site]:
-            controller_site = ControllerSite(controller=controller, site=site)
-            controller_site.save()
-    # relations for all slices
-    ctrls_by_slice = defaultdict(list)
-    ctrl_slices = ControllerSlice.objects.all()
-    for ctrl_slice in ctrl_slices:
-        ctrls_by_slice[ctrl_slice.slice].append(ctrl_slice.controller)
-    slices = Slice.objects.all()
-    for slice in slices:
-        if slice not in ctrls_by_slice or \
-            controller not in ctrls_by_slice[slice]:
-            controller_slice = ControllerSlice(controller=controller, slice=slice)
-            controller_slice.save()
-    # relations for all users
-    ctrls_by_user = defaultdict(list)
-    ctrl_users = ControllerUser.objects.all()
-    for ctrl_user in ctrl_users:
-        ctrls_by_user[ctrl_user.user].append(ctrl_user.controller)
-    users = User.objects.all()
-    for user in users:
-        if user not in ctrls_by_user or \
-            controller not in ctrls_by_user[user]:
-            controller_user = ControllerUser(controller=controller, user=user)
-            controller_user.save()
-    # relations for all networks
-    ctrls_by_network = defaultdict(list)
-    ctrl_networks = ControllerNetwork.objects.all()
-    for ctrl_network in ctrl_networks:
-        ctrls_by_network[ctrl_network.network].append(ctrl_network.controller)
-    networks = Network.objects.all()
-    for network in networks:
-        if network not in ctrls_by_network or \
-            controller not in ctrls_by_network[network]:
-            controller_network = ControllerNetwork(controller=controller, network=network)
-            if network.subnet and network.subnet.strip():
-                controller_network.subnet = network.subnet.strip()
-            controller_network.save()
-    # relations for all images
-    ctrls_by_image = defaultdict(list)
-    ctrl_images = ControllerImages.objects.all()
-    for ctrl_image in ctrl_images:
-        ctrls_by_image[ctrl_image.image].append(ctrl_image.controller)
-    images = Image.objects.all()
-    for image in images:
-        if image not in ctrls_by_image or \
-            controller not in ctrls_by_image[image]:
-            controller_image = ControllerImages(controller=controller, image=image)
-            controller_image.save()
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_ControllerSite.py b/xos/synchronizers/openstack/model_policies/model_policy_ControllerSite.py
deleted file mode 100644
index 4b76080..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_ControllerSite.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def handle(controller_site):
-    from core.models import ControllerSite, Site
-   
-    try:
-        my_status_code = int(controller_site.backend_status[0])
-        try:
-            his_status_code = int(controller_site.site.backend_status[0])
-        except:
-            his_status_code = 0
- 
-        if (my_status_code not in [0,his_status_code]):
-            controller_site.site.backend_status = controller_site.backend_status
-            controller_site.site.save(update_fields = ['backend_status'])
-    except Exception,e:
-        print str(e)	
-        pass
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_ControllerSlice.py b/xos/synchronizers/openstack/model_policies/model_policy_ControllerSlice.py
deleted file mode 100644
index bfe7995..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_ControllerSlice.py
+++ /dev/null
@@ -1,25 +0,0 @@
-def handle(controller_slice):
-    from core.models import ControllerSlice, Slice
-   
-    try:
-        my_status_code = int(controller_slice.backend_status[0])
-        try:
-            his_status_code = int(controller_slice.slice.backend_status[0])
-        except:
-            his_status_code = 0
- 
-        fields = []
-        if (my_status_code not in [0,his_status_code]):
-            controller_slice.slice.backend_status = controller_slice.backend_status
-            fields+=['backend_status']
-
-        if (controller_slice.backend_register != controller_slice.slice.backend_register):
-            controller_slice.slice.backend_register = controller_slice.backend_register
-            fields+=['backend_register']
-
-        controller_slice.slice.save(update_fields = fields)
-
-        
-    except Exception,e:
-        print str(e)	
-        pass
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_ControllerUser.py b/xos/synchronizers/openstack/model_policies/model_policy_ControllerUser.py
deleted file mode 100644
index b69c9b8..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_ControllerUser.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def handle(controller_user):
-    from core.models import ControllerUser, User
-   
-    try:
-        my_status_code = int(controller_user.backend_status[0])
-        try:
-            his_status_code = int(controller_user.user.backend_status[0])
-        except:
-            his_status_code = 0
- 
-        if (my_status_code not in [0,his_status_code]):
-            controller_user.user.backend_status = controller_user.backend_status
-            controller_user.user.save(update_fields = ['backend_status'])
-    except Exception,e:
-        print str(e)	
-        pass
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Image.py b/xos/synchronizers/openstack/model_policies/model_policy_Image.py
deleted file mode 100644
index c77d5bb..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Image.py
+++ /dev/null
@@ -1,17 +0,0 @@
-def handle(image):
-    from core.models import Controller, ControllerImages, Image
-    from collections import defaultdict
-
-    if (image.kind == "container"):
-        # container images do not get instantiated
-        return
-
-    controller_images = ControllerImages.objects.filter(image=image)
-    existing_controllers = [cs.controller for cs in controller_images] 
-    
-    all_controllers = Controller.objects.all() 
-    for controller in all_controllers:
-        if controller not in existing_controllers:
-            sd = ControllerImages(image=image, controller=controller)
-            sd.save()
-
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Instance.py b/xos/synchronizers/openstack/model_policies/model_policy_Instance.py
deleted file mode 100644
index dd1a8d5..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Instance.py
+++ /dev/null
@@ -1,58 +0,0 @@
-def handle_container_on_metal(instance):
-        from core.models import Instance, Flavor, Port, Image
-
-        print "MODEL POLICY: instance", instance, "handle container_on_metal"
-
-        if instance.deleted:
-            return
-
-        if (instance.isolation in ["container"]) and (instance.slice.network not in ["host", "bridged"]):
-            # Our current docker-on-metal network strategy requires that there be some
-            # VM on the server that connects to the networks, so that
-            # the containers can piggyback off of that configuration.
-            if not Instance.objects.filter(slice=instance.slice, node=instance.node, isolation="vm").exists():
-                flavors = Flavor.objects.filter(name="m1.small")
-                if not flavors:
-                    raise XOSConfigurationError("No m1.small flavor")
-
-                images = Image.objects.filter(kind="vm")
-
-                companion_instance = Instance(slice = instance.slice,
-                                node = instance.node,
-                                image = images[0],
-                                creator = instance.creator,
-                                deployment = instance.node.site_deployment.deployment,
-                                flavor = flavors[0])
-                companion_instance.save()
-
-                print "MODEL POLICY: instance", instance, "created companion", companion_instance
-
-        # Add the ports for the container
-        for network in instance.slice.networks.all():
-            # hmmm... The NAT ports never become ready, because sync_ports never
-            # instantiates them. Need to think about this.
-            print "MODEL POLICY: instance", instance, "handling network", network
-            if (network.name.endswith("-nat")):
-                continue
-
-            if not Port.objects.filter(network=network, instance=instance).exists():
-                port = Port(network = network, instance=instance)
-                port.save()
-                print "MODEL POLICY: instance", instance, "created port", port
-
-def handle(instance):
-    from core.models import Controller, ControllerSlice, ControllerNetwork, NetworkSlice
-
-    networks = [ns.network for ns in NetworkSlice.objects.filter(slice=instance.slice)]
-    controller_networks = ControllerNetwork.objects.filter(network__in=networks,
-                                                                controller=instance.node.site_deployment.controller)
-
-    for cn in controller_networks:
-        if (cn.lazy_blocked):
-                print "MODEL POLICY: instance", instance, "unblocking network", cn.network
-		cn.lazy_blocked=False
-		cn.backend_register = '{}'
-		cn.save()
-
-    if (instance.isolation in ["container", "container_vm"]):
-        handle_container_on_metal(instance)
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Network.py b/xos/synchronizers/openstack/model_policies/model_policy_Network.py
deleted file mode 100644
index 06347c5..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Network.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from core.models import *
-
-def handle(network):
-	from core.models import ControllerSlice,ControllerNetwork, Network
-	from collections import defaultdict
-
-        print "MODEL POLICY: network", network
-
-        # network = Network.get(network_id)
-	# network controllers are not visible to users. We must ensure
-	# networks are deployed at all deploymets available to their slices.
-	slice_controllers = ControllerSlice.objects.all()
-	slice_deploy_lookup = defaultdict(list)
-	for slice_controller in slice_controllers:
-		slice_deploy_lookup[slice_controller.slice].append(slice_controller.controller)
-
-	network_controllers = ControllerNetwork.objects.all()
-	network_deploy_lookup = defaultdict(list)
-	for network_controller in network_controllers:
-		network_deploy_lookup[network_controller.network].append(network_controller.controller)
-
-	expected_controllers = slice_deploy_lookup[network.owner]
-	for expected_controller in expected_controllers:
-		if network not in network_deploy_lookup or \
-		  expected_controller not in network_deploy_lookup[network]:
-                        lazy_blocked=True
-
-                        # check and see if some instance already exists
-                        for networkslice in network.networkslices.all():
-                            if networkslice.slice.instances.filter(node__site_deployment__controller=expected_controller).exists():
-                               print "MODEL_POLICY: network, setting lazy_blocked to false because instance on controller already exists"
-                               lazy_blocked=False
-
-			nd = ControllerNetwork(network=network, controller=expected_controller, lazy_blocked=lazy_blocked)
-                        print "MODEL POLICY: network", network, "create ControllerNetwork", nd, "lazy_blocked", lazy_blocked
-                        if network.subnet:
-                            # XXX: Possibly unpredictable behavior if there is
-                            # more than one ControllerNetwork and the subnet
-                            # is specified.
-                            nd.subnet = network.subnet
-			nd.save()
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Site.py b/xos/synchronizers/openstack/model_policies/model_policy_Site.py
deleted file mode 100644
index 23010a2..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Site.py
+++ /dev/null
@@ -1,14 +0,0 @@
-
-def handle(site):
-    from core.models import Controller, ControllerSite, Site 
-
-    # site = Site.get(site_id)
-    # make sure site has a ControllerSite record for each controller
-    ctrl_sites = ControllerSite.objects.filter(site=site)
-    existing_controllers = [cs.controller for cs in ctrl_sites]
-
-    all_controllers = Controller.objects.all()
-    for ctrl in all_controllers:
-        if ctrl not in existing_controllers:
-            ctrl_site = ControllerSite(controller=ctrl, site=site)
-            ctrl_site.save() 
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_SitePrivilege.py b/xos/synchronizers/openstack/model_policies/model_policy_SitePrivilege.py
deleted file mode 100644
index d9c6a1e..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_SitePrivilege.py
+++ /dev/null
@@ -1,15 +0,0 @@
-def handle(site_privilege):
-    from core.models import Controller, SitePrivilege, ControllerSitePrivilege
-    
-    # site_privilege = SitePrivilege.get(site_privilege_id)
-    # apply site privilage at all controllers
-    controller_site_privileges = ControllerSitePrivilege.objects.filter(
-        site_privilege = site_privilege,
-        )
-    existing_controllers = [sp.controller for sp in controller_site_privileges]
-    all_controllers = Controller.objects.all()
-    for controller in all_controllers:
-        if controller not in existing_controllers:
-            ctrl_site_priv = ControllerSitePrivilege(controller=controller, site_privilege=site_privilege)
-            ctrl_site_priv.save()  
-
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Slice.py b/xos/synchronizers/openstack/model_policies/model_policy_Slice.py
deleted file mode 100644
index 088d583..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Slice.py
+++ /dev/null
@@ -1,102 +0,0 @@
-from xos.config import Config
-
-def handle_delete(slice):
-    from core.models import Controller, ControllerSlice, SiteDeployment, Network, NetworkSlice,NetworkTemplate, Slice
-    from collections import defaultdict
-
-    public_nets = []
-    private_net = None
-    networks = Network.objects.filter(owner=slice)
-
-    for n in networks:
-        n.delete()	
-    
-    # Note that sliceprivileges and slicecontrollers are autodeleted, through the dependency graph
-
-def handle(slice):
-    from core.models import Controller, ControllerSlice, SiteDeployment, Network, NetworkSlice,NetworkTemplate, Slice
-    from collections import defaultdict
-
-    # only create nat_net if not using VTN
-    support_nat_net = not getattr(Config(), "networking_use_vtn", False)
-
-    print "MODEL POLICY: slice", slice
-
-    # slice = Slice.get(slice_id)
-
-    controller_slices = ControllerSlice.objects.filter(slice=slice)
-    existing_controllers = [cs.controller for cs in controller_slices] 
-        
-    print "MODEL POLICY: slice existing_controllers=", existing_controllers
-
-    all_controllers = Controller.objects.all()
-    for controller in all_controllers:
-        if controller not in existing_controllers:
-            print "MODEL POLICY: slice adding controller", controller
-            sd = ControllerSlice(slice=slice, controller=controller)
-            sd.save()
-
-    if slice.network in ["host", "bridged"]:
-        # Host and Bridged docker containers need no networks and they will
-        # only get in the way.
-        print "MODEL POLICY: Skipping network creation"
-    elif slice.network in ["noauto"]:
-        # do nothing
-        pass
-    else:
-        # make sure slice has at least 1 public and 1 private networkd
-        public_nets = []
-        private_nets = []
-        networks = Network.objects.filter(owner=slice)
-        for network in networks:
-            if not network.autoconnect:
-                continue
-            if network.template.name == 'Public dedicated IPv4':
-                public_nets.append(network)
-            elif network.template.name == 'Public shared IPv4':
-                public_nets.append(network)
-            elif network.template.name == 'Private':
-                private_nets.append(network)
-        if support_nat_net and (not public_nets):
-            # ensure there is at least one public network, and default it to dedicated
-            nat_net = Network(
-                    name = slice.name+'-nat',
-                        template = NetworkTemplate.objects.get(name='Public shared IPv4'),
-                    owner = slice
-                    )
-            if slice.exposed_ports:
-                nat_net.ports = slice.exposed_ports
-            nat_net.save()
-            public_nets.append(nat_net)
-            print "MODEL POLICY: slice", slice, "made nat-net"
-
-        if not private_nets:
-            private_net = Network(
-                name = slice.name+'-private',
-                template = NetworkTemplate.objects.get(name='Private'),
-                owner = slice
-            )
-            private_net.save()
-            print "MODEL POLICY: slice", slice, "made private net"
-            private_nets = [private_net]
-        # create slice networks
-        public_net_slice = None
-        private_net_slice = None
-        net_slices = NetworkSlice.objects.filter(slice=slice, network__in=private_nets+public_nets)
-        for net_slice in net_slices:
-            if net_slice.network in public_nets:
-                public_net_slice = net_slice
-            elif net_slice.network in private_nets:
-                private_net_slice = net_slice
-        if support_nat_net and (not public_net_slice):
-            public_net_slice = NetworkSlice(slice=slice, network=public_nets[0])
-            public_net_slice.save()
-            print "MODEL POLICY: slice", slice, "made public_net_slice"
-        if not private_net_slice:
-            private_net_slice = NetworkSlice(slice=slice, network=private_nets[0])
-            private_net_slice.save()
-            print "MODEL POLICY: slice", slice, "made private_net_slice"
-
-    print "MODEL POLICY: slice", slice, "DONE"
-
-
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_SlicePrivilege.py b/xos/synchronizers/openstack/model_policies/model_policy_SlicePrivilege.py
deleted file mode 100644
index bca7f22..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_SlicePrivilege.py
+++ /dev/null
@@ -1,15 +0,0 @@
-def handle(slice_privilege):
-    from core.models import Controller, SlicePrivilege, ControllerSlicePrivilege
-   
-    # slice_privilege = SlicePrivilege.get(slice_privilege_id) 
-    # apply slice privilage at all controllers
-    controller_slice_privileges = ControllerSlicePrivilege.objects.filter(
-        slice_privilege = slice_privilege,
-        )
-    existing_controllers = [sp.controller for sp in controller_slice_privileges]
-    all_controllers = Controller.objects.all()
-    for controller in all_controllers:
-        if controller not in existing_controllers:
-            ctrl_slice_priv = ControllerSlicePrivilege(controller=controller, slice_privilege=slice_privilege)
-            ctrl_slice_priv.save()  
-
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_Sliver.py b/xos/synchronizers/openstack/model_policies/model_policy_Sliver.py
deleted file mode 100644
index a13428d..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_Sliver.py
+++ /dev/null
@@ -1,13 +0,0 @@
-
-def handle(instance):
-    from core.models import Controller, ControllerSlice, ControllerNetwork, NetworkSlice
-
-    networks = [ns.network for ns in NetworkSlice.objects.filter(slice=instance.slice)]
-    controller_networks = ControllerNetwork.objects.filter(network__in=networks,
-                                                                controller=instance.node.site_deployment.controller)
-
-    for cn in controller_networks:
-        if (cn.lazy_blocked):	
-		cn.lazy_blocked=False
-		cn.backend_register = '{}'
-		cn.save()
diff --git a/xos/synchronizers/openstack/model_policies/model_policy_User.py b/xos/synchronizers/openstack/model_policies/model_policy_User.py
deleted file mode 100644
index 8d14244..0000000
--- a/xos/synchronizers/openstack/model_policies/model_policy_User.py
+++ /dev/null
@@ -1,14 +0,0 @@
-def handle(user):
-    from core.models import Controller, ControllerSite, ControllerUser, User
-    from collections import defaultdict
-
-    # user = User.get(user_id)
-    
-    controller_users = ControllerUser.objects.filter(user=user)
-    existing_controllers = [cu.controller for cu in controller_users]
-    all_controllers = Controller.objects.all()
-    for controller in all_controllers:
-        if controller not in existing_controllers:
-            ctrl_user = ControllerUser(controller=controller, user=user)
-            ctrl_user.save()  
-
diff --git a/xos/synchronizers/openstack/openstacksyncstep.py b/xos/synchronizers/openstack/openstacksyncstep.py
deleted file mode 100644
index 46056cf..0000000
--- a/xos/synchronizers/openstack/openstacksyncstep.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import os
-import base64
-from synchronizers.base.syncstep import SyncStep
-
-class OpenStackSyncStep(SyncStep):
-    """ XOS Sync step for copying data to OpenStack 
-    """ 
-    
-    def __init__(self, **args):
-        SyncStep.__init__(self, **args)
-        return
-
-    def __call__(self, **args):
-        return self.call(**args)
diff --git a/xos/synchronizers/openstack/steps/__init__.py b/xos/synchronizers/openstack/steps/__init__.py
deleted file mode 100644
index c70b0c0..0000000
--- a/xos/synchronizers/openstack/steps/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-#from .sync_controller_sites import SyncControllerSites
-#from .sync_controller_slices import SyncControllerSlices
-#from .sync_controller_users import SyncControllerUsers
-#from .sync_controller_site_privileges import SyncControllerSitePrivileges
-#from .sync_controller_slice_privileges import SyncControllerSlicePrivileges
-#from .sync_controller_networks import SyncControllerNetworks
diff --git a/xos/synchronizers/openstack/steps/delete_slivers.yaml b/xos/synchronizers/openstack/steps/delete_slivers.yaml
deleted file mode 100644
index fa6b879..0000000
--- a/xos/synchronizers/openstack/steps/delete_slivers.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-
-  - nova_compute:
-      state: absent
-      name: {{ name }}
diff --git a/xos/synchronizers/openstack/steps/purge_disabled_users.py b/xos/synchronizers/openstack/steps/purge_disabled_users.py
deleted file mode 100644
index 6b1dac3..0000000
--- a/xos/synchronizers/openstack/steps/purge_disabled_users.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import os
-import base64
-import datetime
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.user import User
-from xos.logger import observer_logger as logger
-
-#class SyncRoles(OpenStackSyncStep):
-#    provides=[User]
-#    requested_interval=0
-#    observes=User
-#
-#    def fetch_pending(self, deleted):
-#        if (deleted):
-#            # users marked as deleted
-#            return User.deleted_objects.all()
-#        else:
-#            # disabled users that haven't been updated in over a week
-#            one_week_ago = datetime.datetime.now() - datetime.timedelta(days=7)
-#            return User.objects.filter(is_active=False, updated__gt=one_week_ago)
-#
-#    def sync_record(self, user):
-#        user.delete()
diff --git a/xos/synchronizers/openstack/steps/sliver.yaml b/xos/synchronizers/openstack/steps/sliver.yaml
deleted file mode 100644
index e630415..0000000
--- a/xos/synchronizers/openstack/steps/sliver.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - nova_compute:
-       state: present
-       auth_url: http://172.31.38.128:5000/v2.0/
-       login_username: admin
-       login_password: 6a789bf69dd647e2
-       login_tenant_name: admin
-       name: gloopy
-       image_id: 3ee851df-b35a-41c5-8551-f681e7209095
-       key_name: boo
-       wait_for: 200
-       flavor_id: 3
-       nics:
-         - net-id: d1de537b-80dc-4c1b-aa5f-4a197b33b5f6
diff --git a/xos/synchronizers/openstack/steps/sync_container.py b/xos/synchronizers/openstack/steps/sync_container.py
deleted file mode 100644
index 41e1305..0000000
--- a/xos/synchronizers/openstack/steps/sync_container.py
+++ /dev/null
@@ -1,162 +0,0 @@
-import hashlib
-import os
-import socket
-import sys
-import base64
-import time
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
-from synchronizers.base.syncstep import SyncStep, DeferredException
-from synchronizers.base.ansible import run_template_ssh
-from core.models import Service, Slice, Instance
-from xos.logger import Logger, logging
-
-# hpclibrary will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__),"..")
-sys.path.insert(0,parentdir)
-
-logger = Logger(level=logging.INFO)
-
-class SyncContainer(SyncInstanceUsingAnsible):
-    provides=[Instance]
-    observes=Instance
-    requested_interval=0
-    template_name = "sync_container.yaml"
-
-    def __init__(self, *args, **kwargs):
-        super(SyncContainer, self).__init__(*args, **kwargs)
-
-    def fetch_pending(self, deletion=False):
-        objs = super(SyncContainer, self).fetch_pending(deletion)
-        objs = [x for x in objs if x.isolation in ["container", "container_vm"]]
-        return objs
-
-    def get_instance_port(self, container_port):
-        for p in container_port.network.links.all():
-            if (p.instance) and (p.instance.isolation=="vm") and (p.instance.node == container_port.instance.node) and (p.mac):
-                return p
-        return None
-
-    def get_parent_port_mac(self, instance, port):
-        if not instance.parent:
-            raise Exception("instance has no parent")
-        for parent_port in instance.parent.ports.all():
-            if parent_port.network == port.network:
-                if not parent_port.mac:
-                     raise DeferredException("parent port on network %s does not have mac yet" % parent_port.network.name)
-                return parent_port.mac
-        raise Exception("failed to find corresponding parent port for network %s" % port.network.name)
-
-    def get_ports(self, o):
-        i=0
-        ports = []
-        if (o.slice.network in ["host", "bridged"]):
-            pass # no ports in host or bridged mode
-        else:
-            for port in o.ports.all():
-                if (not port.ip):
-                    # 'unmanaged' ports may have an ip, but no mac
-                    # XXX: are there any ports that have a mac but no ip?
-                    raise DeferredException("Port on network %s is not yet ready" % port.network.name)
-
-                pd={}
-                pd["mac"] = port.mac or ""
-                pd["ip"] = port.ip or ""
-                pd["xos_network_id"] = port.network.id
-
-                if port.network.name == "wan_network":
-                    if port.ip:
-                        (a, b, c, d) = port.ip.split('.')
-                        pd["mac"] = "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
-
-
-                if o.isolation == "container":
-                    # container on bare metal
-                    instance_port = self.get_instance_port(port)
-                    if not instance_port:
-                        raise DeferredException("No instance on slice for port on network %s" % port.network.name)
-
-                    pd["snoop_instance_mac"] = instance_port.mac
-                    pd["snoop_instance_id"] = instance_port.instance.instance_id
-                    pd["src_device"] = ""
-                    pd["bridge"] = "br-int"
-                else:
-                    # container in VM
-                    pd["snoop_instance_mac"] = ""
-                    pd["snoop_instance_id"] = ""
-                    pd["parent_mac"] = self.get_parent_port_mac(o, port)
-                    pd["bridge"] = ""
-
-                for (k,v) in port.get_parameters().items():
-                    pd[k] = v
-
-                ports.append(pd)
-
-            # for any ports that don't have a device, assign one
-            used_ports = [x["device"] for x in ports if ("device" in x)]
-            avail_ports = ["eth%d"%i for i in range(0,64) if ("eth%d"%i not in used_ports)]
-            for port in ports:
-                if not port.get("device",None):
-                    port["device"] = avail_ports.pop(0)
-
-        return ports
-
-    def get_extra_attributes(self, o):
-        fields={}
-        fields["ansible_tag"] = "container-%s" % str(o.id)
-        if o.image.tag:
-            fields["docker_image"] = o.image.path + ":" + o.image.tag
-        else:
-            fields["docker_image"] = o.image.path
-        fields["ports"] = self.get_ports(o)
-        if o.volumes:
-            fields["volumes"] = [x.strip() for x in o.volumes.split(",")]
-        else:
-            fields["volumes"] = ""
-        fields["network_method"] = o.slice.network or "default"
-        return fields
-
-    def sync_record(self, o):
-        logger.info("sync'ing object %s" % str(o),extra=o.tologdict())
-
-        fields = self.get_ansible_fields(o)
-
-        # If 'o' defines a 'sync_attributes' list, then we'll copy those
-        # attributes into the Ansible recipe's field list automatically.
-        if hasattr(o, "sync_attributes"):
-            for attribute_name in o.sync_attributes:
-                fields[attribute_name] = getattr(o, attribute_name)
-
-        fields.update(self.get_extra_attributes(o))
-
-        self.run_playbook(o, fields)
-
-        o.instance_id = fields["container_name"]
-        o.instance_name = fields["container_name"]
-
-        o.save()
-
-    def delete_record(self, o):
-        logger.info("delete'ing object %s" % str(o),extra=o.tologdict())
-
-        fields = self.get_ansible_fields(o)
-
-        # If 'o' defines a 'sync_attributes' list, then we'll copy those
-        # attributes into the Ansible recipe's field list automatically.
-        if hasattr(o, "sync_attributes"):
-            for attribute_name in o.sync_attributes:
-                fields[attribute_name] = getattr(o, attribute_name)
-
-        fields.update(self.get_extra_attributes(o))
-
-        self.run_playbook(o, fields, "teardown_container.yaml")
-
-    def run_playbook(self, o, fields, template_name=None):
-        if not template_name:
-            template_name = self.template_name
-        tStart = time.time()
-        run_template_ssh(template_name, fields, path="container")
-        logger.info("playbook execution time %d" % int(time.time()-tStart),extra=o.tologdict())
-
-
diff --git a/xos/synchronizers/openstack/steps/sync_container.yaml b/xos/synchronizers/openstack/steps/sync_container.yaml
deleted file mode 100644
index 4ae4eb2..0000000
--- a/xos/synchronizers/openstack/steps/sync_container.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
----
-- hosts: {{ instance_name }}
-  gather_facts: False
-  connection: ssh
-  user: {{ username }}
-  sudo: yes
-
-  vars:
-    container_name: {{ container_name }}
-    docker_image: {{ docker_image }}
-    network_method: {{ network_method }}
-    ports:
-    {% for port in ports %}
-       - device: {{ port.device }}
-         xos_network_id: {{ port.xos_network_id }}
-         mac: {{ port.mac|default("") }}
-         ip: {{ port.ip }}
-         snoop_instance_mac: {{ port.snoop_instance_mac }}
-         snoop_instance_id: {{ port.snoop_instance_id }}
-         parent_mac: {{ port.parent_mac|default("") }}
-         s_tag: {{ port.s_tag|default("")  }}
-         c_tag: {{ port.c_tag|default("") }}
-         next_hop: {{ port.next_hop|default("") }}
-         bridge: {{ port.bridge }}
-    {% endfor %}
-    volumes:
-    {% for volume in volumes %}
-       - {{ volume }}
-    {% endfor %}
-
-  tasks:
-
-#  - name: Fix /etc/hosts
-#    lineinfile:
-#      dest=/etc/hosts
-#      regexp="127.0.0.1 localhost"
-#      line="127.0.0.1 localhost {{ instance_hostname }}"
-
-  - name: Add repo key
-    apt_key:
-      keyserver=hkp://pgp.mit.edu:80
-      id=58118E89F3A912897C070ADBF76221572C52609D
-
-  - name: Install Docker repo
-    apt_repository:
-      repo="deb https://apt.dockerproject.org/repo ubuntu-trusty main"
-      state=present
-
-  - name: Install Docker
-    apt:
-      name={{ '{{' }} item {{ '}}' }}
-      state=latest
-      update_cache=yes
-    with_items:
-# XXX docker 1.10 is not working on cloudlab
-#    - docker-engine
-    - python-pip
-    - python-httplib2
-
-  - name: Install Docker 1.9.1
-    apt:
-      name={{ '{{' }} item {{ '}}' }}
-      update_cache=yes
-    with_items:
-    - docker-engine=1.9.1-0~trusty
-
-  # Something is installing a requests library that is incompative with pip, and
-  # will cause this recipe to fail next time it tries to run pip. Only the one
-  # in /usr/local/lib is bad. There's still a good one in /usr/lib
-  - name: check if bad requests library installed
-    stat: path=/usr/local/lib/python2.7/dist-packages/requests
-    register: bad_requests
-
-  - name: remove bad request library
-    shell: mv /usr/local/lib/python2.7/dist-packages/requests /usr/local/lib/python2.7/dist-packages/requests-bad
-    when: bad_requests.stat.exists == True
-
-  - name: Install docker-py
-    pip:
-      name=docker-py
-      state=latest
-
-  - name: install Pipework
-    get_url: url=https://raw.githubusercontent.com/jpetazzo/pipework/master/pipework
-       dest=/usr/local/bin/pipework
-       mode=0755
-
-#  - name: Start Container
-#    docker:
-#      docker_api_version: "1.18"
-#      name: {{ container_name }}
-#      # was: reloaded
-#      state: running
-#      image: {{ docker_image }}
-
-  - name: check if systemd is installed
-    stat: path=/usr/bin/systemctl
-    register: systemctl
-
-  - name: container upstart
-    template: src=/opt/xos/synchronizers/openstack/templates/container.conf.j2 dest=/etc/init/container-{{ container_name }}.conf
-
-  - name: container systemd
-    template: src=/opt/xos/synchronizers/openstack/templates/container.service.j2 dest=/lib/systemd/system/container-{{ container_name }}.service
-
-  - name: container startup script
-    template: src=/opt/xos/synchronizers/openstack/templates/start-container.sh.j2 dest=/usr/local/sbin/start-container-{{ container_name }}.sh mode=0755
-
-  - name: container teardown script
-    template: src=/opt/xos/synchronizers/openstack/templates/stop-container.sh.j2 dest=/usr/local/sbin/stop-container-{{ container_name }}.sh mode=0755
-
-  - name: restart systemd
-    shell: systemctl daemon-reload
-    when: systemctl.stat.exists == True
-
-{% if ports %}
-  - name: make sure bridges are setup
-    shell: ifconfig {{ '{{' }} item.bridge {{ '}}' }}
-    with_items: "ports"
-{% endif %}
-
-  - name: Make sure container is running
-    service: name=container-{{ container_name }} state=started
-
diff --git a/xos/synchronizers/openstack/steps/sync_controller_images.py b/xos/synchronizers/openstack/steps/sync_controller_images.py
deleted file mode 100644
index c1e5136..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_images.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models import Controller
-from core.models import Image, ControllerImages
-from xos.logger import observer_logger as logger 
-from synchronizers.base.ansible import *
-import json
-
-class SyncControllerImages(OpenStackSyncStep):
-    provides=[ControllerImages]
-    observes = ControllerImages
-    requested_interval=0
-    playbook='sync_controller_images.yaml'
-
-    def fetch_pending(self, deleted):
-        if (deleted):
-            return []
-
-        # now we return all images that need to be enacted
-        return ControllerImages.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-
-    def map_sync_inputs(self, controller_image):
-        image_fields = {'endpoint':controller_image.controller.auth_url,
-                        'endpoint_v3': controller_image.controller.auth_url_v3,
-                        'admin_user':controller_image.controller.admin_user,
-                        'admin_password':controller_image.controller.admin_password,
-                        'domain': controller_image.controller.domain,
-                        'name':controller_image.image.name,
-                        'filepath':controller_image.image.path,
-                        'ansible_tag': '%s@%s'%(controller_image.image.name,controller_image.controller.name), # name of ansible playbook
-                        }
-
-	return image_fields
-
-    def map_sync_outputs(self, controller_image, res):
-        image_id = res[0]['id']
-        controller_image.glance_image_id = image_id
-	controller_image.backend_status = '1 - OK'
-        controller_image.save()
diff --git a/xos/synchronizers/openstack/steps/sync_controller_images.yaml b/xos/synchronizers/openstack/steps/sync_controller_images.yaml
deleted file mode 100644
index 6247a30..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_images.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - glance_image:
-        auth_url={{ endpoint }}
-        login_username="{{ admin_user }}"
-        login_tenant_name="admin"
-        login_password="{{ admin_password }}"
-        name="{{ name }}"
-        file="{{ filepath }}"
-        disk_format='raw'
-        is_public=true
diff --git a/xos/synchronizers/openstack/steps/sync_controller_networks.py b/xos/synchronizers/openstack/steps/sync_controller_networks.py
deleted file mode 100644
index b61ef7b..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_networks.py
+++ /dev/null
@@ -1,163 +0,0 @@
-import os
-import base64
-import struct
-import socket
-from collections import defaultdict
-from netaddr import IPAddress, IPNetwork
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.network import *
-from core.models.slice import *
-from core.models.instance import Instance
-from xos.logger import observer_logger as logger
-from synchronizers.base.ansible import *
-from openstack_xos.driver import OpenStackDriver
-from xos.config import Config
-import json
-
-import pdb
-
-class SyncControllerNetworks(OpenStackSyncStep):
-    requested_interval = 0
-    provides=[Network]
-    observes=ControllerNetwork	
-    playbook='sync_controller_networks.yaml'
-
-    def alloc_subnet(self, uuid):
-        # 16 bits only
-        uuid_masked = uuid & 0xffff
-        a = 10
-        b = uuid_masked >> 8
-        c = uuid_masked & 0xff
-        d = 0
-
-        cidr = '%d.%d.%d.%d/24'%(a,b,c,d)
-        return cidr
-
-    def alloc_gateway(self, subnet):
-        # given a CIDR, allocate a default gateway using the .1 address within
-        # the subnet.
-        #    10.123.0.0/24 --> 10.123.0.1
-        #    207.141.192.128/28 --> 207.141.192.129
-        (network, bits) = subnet.split("/")
-        network=network.strip()
-        bits=int(bits.strip())
-        netmask = (~(pow(2,32-bits)-1) & 0xFFFFFFFF)
-        ip = struct.unpack("!L", socket.inet_aton(network))[0]
-        ip = ip & netmask | 1
-        return socket.inet_ntoa(struct.pack("!L", ip))
-
-    def save_controller_network(self, controller_network):
-        network_name = controller_network.network.name
-        subnet_name = '%s-%d'%(network_name,controller_network.pk)
-        if controller_network.subnet and controller_network.subnet.strip():
-            # If a subnet is already specified (pass in by the creator), then
-            # use that rather than auto-generating one.
-            cidr = controller_network.subnet.strip()
-            print "CIDR_MS", cidr
-        else:
-            cidr = self.alloc_subnet(controller_network.pk)
-            print "CIDR_AMS", cidr
-
-        if controller_network.network.start_ip and controller_network.network.start_ip.strip():
-            start_ip = controller_network.network.start_ip.strip()
-        else:
-            start_ip = None
-
-        if controller_network.network.end_ip and controller_network.network.end_ip.strip():
-            end_ip = controller_network.network.end_ip.strip()
-        else:
-            end_ip = None
-
-        self.cidr=cidr
-        slice = controller_network.network.owner
-
-        network_fields = {'endpoint':controller_network.controller.auth_url,
-                    'endpoint_v3': controller_network.controller.auth_url_v3,
-                    'admin_user':slice.creator.email,
-                    'admin_password':slice.creator.remote_password,
-                    'admin_project':slice.name,
-                    'domain': controller_network.controller.domain,
-                    'name':network_name,
-                    'subnet_name':subnet_name,
-                    'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
-                    'cidr':cidr,
-                    'gateway':self.alloc_gateway(cidr),
-                    'start_ip':start_ip,
-                    'end_ip':end_ip,
-                    'use_vtn':getattr(Config(), "networking_use_vtn", False),
-                    'delete':False
-                    }
-        return network_fields
-
-    def map_sync_outputs(self, controller_network,res):
-        network_id = res[0]['network']['id']
-        subnet_id = res[1]['subnet']['id']
-        controller_network.net_id = network_id
-        controller_network.subnet = self.cidr
-        controller_network.subnet_id = subnet_id
-	controller_network.backend_status = '1 - OK'
-        controller_network.save()
-
-
-    def map_sync_inputs(self, controller_network):
-        # XXX This check should really be made from booleans, rather than using hardcoded network names
-        #if (controller_network.network.template.name not in ['Private', 'Private-Indirect', 'Private-Direct', 'management_template'):
-        #    logger.info("skipping network controller %s because it is not private" % controller_network)
-        #    # We only sync private networks
-        #    return SyncStep.SYNC_WITHOUT_RUNNING
-
-        # hopefully a better approach than above
-        if (controller_network.network.template.shared_network_name or controller_network.network.template.shared_network_id):
-            return SyncStep.SYNC_WITHOUT_RUNNING
-        
-        if not controller_network.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_network.controller)
-            return
-
-        if controller_network.network.owner and controller_network.network.owner.creator:
-	    return self.save_controller_network(controller_network)
-        else:
-            raise Exception('Could not save network controller %s'%controller_network)
-
-    def map_delete_inputs(self, controller_network):
-        # XXX This check should really be made from booleans, rather than using hardcoded network names
-	if (controller_network.network.template.name not in ['Private', 'Private-Indirect', 'Private-Direct']):
-            # We only sync private networks
-            return
-	try:
-        	slice = controller_network.network.owner # XXX: FIXME!!
-        except:
-                raise Exception('Could not get slice for Network %s'%controller_network.network.name)
-
-	network_name = controller_network.network.name
-        subnet_name = '%s-%d'%(network_name,controller_network.pk)
-	cidr = controller_network.subnet
-	network_fields = {'endpoint':controller_network.controller.auth_url,
-                    'admin_user':slice.creator.email, # XXX: FIXME
-                    'tenant_name':slice.name, # XXX: FIXME
-                    'admin_password':slice.creator.remote_password,
-                    'name':network_name,
-                    'subnet_name':subnet_name,
-                    'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
-                    'cidr':cidr,
-		    'delete':True	
-                    }
-
-        return network_fields
-
-	"""
-        driver = OpenStackDriver().client_driver(caller=controller_network.network.owner.creator,
-                                                 tenant=controller_network.network.owner.name,
-                                                 controller=controller_network.controller.name)
-        if (controller_network.router_id) and (controller_network.subnet_id):
-            driver.delete_router_interface(controller_network.router_id, controller_network.subnet_id)
-        if controller_network.subnet_id:
-            driver.delete_subnet(controller_network.subnet_id)
-        if controller_network.router_id:
-            driver.delete_router(controller_network.router_id)
-        if controller_network.net_id:
-            driver.delete_network(controller_network.net_id)
-	"""
diff --git a/xos/synchronizers/openstack/steps/sync_controller_networks.yaml b/xos/synchronizers/openstack/steps/sync_controller_networks.yaml
deleted file mode 100644
index 7b6075c..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_networks.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - os_network:
-      name: {{ name }}
-      shared: true
-      {% if not delete -%}
-      state: present
-      {% else -%}
-      state: absent
-      {% endif -%}
-      auth:
-        auth_url: {{ endpoint }}
-        username: {{ admin_user }}
-        password: {{ admin_password }}
-        project_name: {{ admin_project }}
-
-{% if not delete %}
-  - os_subnet:
-      name: {{ subnet_name }}
-      network_name: {{ name }}
-      {% if not delete -%}
-      state: present
-      cidr: {{ cidr }}
-      dns_nameservers: 8.8.8.8
-      {% if use_vtn -%}
-      gateway_ip: {{ gateway }}
-      {% endif -%}
-      {% if start_ip -%}
-      allocation_pool_start: {{ start_ip }}
-      {% endif -%}
-      {% if end_ip -%}
-      allocation_pool_end: {{ end_ip }}
-      {% endif -%}
-      {% else -%}
-      state: absent
-      {% endif -%}
-      auth:
-        auth_url: {{ endpoint }}
-        username: {{ admin_user }}
-        password: {{ admin_password }}
-        project_name: {{ admin_project }}
-
-{% if not use_vtn -%}
-# until we get 'no-gateway-ip' arg to os_subnet, in Ansible 2.2
-# https://github.com/ansible/ansible-modules-core/pull/3736
-  - command:
-      neutron \
-      --os-auth-url {{ endpoint }} \
-      --os-username {{ admin_user }} \
-      --os-password {{ admin_password }} \
-      --os-tenant-name {{ admin_project }} \
-      subnet-update --no-gateway {{ subnet_name }}
-{% endif -%}
-
-{% endif %}
-
diff --git a/xos/synchronizers/openstack/steps/sync_controller_site_privileges.py b/xos/synchronizers/openstack/steps/sync_controller_site_privileges.py
deleted file mode 100644
index 59919fe..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_site_privileges.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.site import Controller, SitePrivilege 
-from core.models.user import User
-from core.models.controlleruser import ControllerUser, ControllerSitePrivilege
-from xos.logger import observer_logger as logger
-from synchronizers.base.ansible import *
-import json
-
-class SyncControllerSitePrivileges(OpenStackSyncStep):
-    provides=[SitePrivilege]
-    requested_interval=0
-    observes=ControllerSitePrivilege
-    playbook='sync_controller_users.yaml'
-
-    def map_sync_inputs(self, controller_site_privilege):
-	controller_register = json.loads(controller_site_privilege.controller.backend_register)
-        if not controller_site_privilege.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_site_privilege.controller)
-            return
-
-        roles = [controller_site_privilege.site_privilege.role.role]
-	# setup user home site roles at controller 
-        if not controller_site_privilege.site_privilege.user.site:
-            raise Exception('Siteless user %s'%controller_site_privilege.site_privilege.user.email)
-        else:
-            # look up tenant id for the user's site at the controller
-            #ctrl_site_deployments = SiteDeployment.objects.filter(
-            #  site_deployment__site=controller_site_privilege.user.site,
-            #  controller=controller_site_privilege.controller)
-
-            #if ctrl_site_deployments:
-            #    # need the correct tenant id for site at the controller
-            #    tenant_id = ctrl_site_deployments[0].tenant_id  
-            #    tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base
-            user_fields = {
-               'endpoint':controller_site_privilege.controller.auth_url,
-               'endpoint_v3': controller_site_privilege.controller.auth_url_v3,
-               'domain': controller_site_privilege.controller.domain,
-		       'name': controller_site_privilege.site_privilege.user.email,
-               'email': controller_site_privilege.site_privilege.user.email,
-               'password': controller_site_privilege.site_privilege.user.remote_password,
-               'admin_user': controller_site_privilege.controller.admin_user,
-		       'admin_password': controller_site_privilege.controller.admin_password,
-	           'ansible_tag':'%s@%s'%(controller_site_privilege.site_privilege.user.email.replace('@','-at-'),controller_site_privilege.controller.name),
-		       'admin_tenant': controller_site_privilege.controller.admin_tenant,
-		       'roles':roles,
-		       'tenant':controller_site_privilege.site_privilege.site.login_base}    
-	
-	    return user_fields
-
-    def map_sync_outputs(self, controller_site_privilege, res):
-	    # results is an array in which each element corresponds to an 
-	    # "ok" string received per operation. If we get as many oks as
-	    # the number of operations we issued, that means a grand success.
-	    # Otherwise, the number of oks tell us which operation failed.
-            controller_site_privilege.role_id = res[0]['id']
-            controller_site_privilege.save()
-
-    def delete_record(self, controller_site_privilege):
-	controller_register = json.loads(controller_site_privilege.controller.backend_register)
-        if (controller_register.get('disabled',False)):
-                raise InnocuousException('Controller %s is disabled'%controller_site_privilege.controller.name)
-
-        if controller_site_privilege.role_id:
-            driver = self.driver.admin_driver(controller=controller_site_privilege.controller)
-            user = ControllerUser.objects.get(
-                controller=controller_site_privilege.controller, 
-                user=controller_site_privilege.site_privilege.user
-            )
-            site = ControllerSite.objects.get(
-                controller=controller_site_privilege.controller, 
-                user=controller_site_privilege.site_privilege.user
-            )
-            driver.delete_user_role(
-                user.kuser_id, 
-                site.tenant_id, 
-                controller_site_privilege.site_prvilege.role.role
-            )
diff --git a/xos/synchronizers/openstack/steps/sync_controller_sites.py b/xos/synchronizers/openstack/steps/sync_controller_sites.py
deleted file mode 100644
index 1b3c2ba..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_sites.py
+++ /dev/null
@@ -1,67 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
-from core.models.site import *
-from synchronizers.base.syncstep import *
-from synchronizers.base.ansible import *
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerSites(OpenStackSyncStep):
-    requested_interval=0
-    provides=[Site]
-    observes=ControllerSite
-    playbook = 'sync_controller_sites.yaml'
-
-    def fetch_pending(self, deleted=False):
-        lobjs = ControllerSite.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None),Q(lazy_blocked=False),Q(controller__isnull=False))
-        return lobjs
-
-    def map_sync_inputs(self, controller_site):
-	tenant_fields = {'endpoint':controller_site.controller.auth_url,
-                 'endpoint_v3': controller_site.controller.auth_url_v3,
-                 'domain': controller_site.controller.domain,
-		         'admin_user': controller_site.controller.admin_user,
-		         'admin_password': controller_site.controller.admin_password,
-		         'admin_tenant': controller_site.controller.admin_tenant,
-	             'ansible_tag': '%s@%s'%(controller_site.site.login_base,controller_site.controller.name), # name of ansible playbook
-		         'tenant': controller_site.site.login_base,
-		         'tenant_description': controller_site.site.name}
-        return tenant_fields
-
-    def map_sync_outputs(self, controller_site, res):
-	controller_site.tenant_id = res[0]['id']
-	controller_site.backend_status = '1 - OK'
-        controller_site.save()
-            
-    def delete_record(self, controller_site):
-	controller_register = json.loads(controller_site.controller.backend_register)
-        if (controller_register.get('disabled',False)):
-                raise InnocuousException('Controller %s is disabled'%controller_site.controller.name)
-
-	if controller_site.tenant_id:
-            driver = self.driver.admin_driver(controller=controller_site.controller)
-            driver.delete_tenant(controller_site.tenant_id)
-
-	"""
-        Ansible does not support tenant deletion yet
-
-	import pdb
-	pdb.set_trace()
-        template = os_template_env.get_template('delete_controller_sites.yaml')
-	tenant_fields = {'endpoint':controller_site.controller.auth_url,
-		         'admin_user': controller_site.controller.admin_user,
-		         'admin_password': controller_site.controller.admin_password,
-		         'admin_tenant': 'admin',
-	                 'ansible_tag': 'controller_sites/%s@%s'%(controller_site.controller_site.site.login_base,controller_site.controller_site.deployment.name), # name of ansible playbook
-		         'tenant': controller_site.controller_site.site.login_base,
-		         'delete': True}
-
-	rendered = template.render(tenant_fields)
-	res = run_template('sync_controller_sites.yaml', tenant_fields)
-
-	if (len(res)!=1):
-		raise Exception('Could not assign roles for user %s'%tenant_fields['tenant'])
-	"""
diff --git a/xos/synchronizers/openstack/steps/sync_controller_sites.yaml b/xos/synchronizers/openstack/steps/sync_controller_sites.yaml
deleted file mode 100644
index 4129802..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_sites.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} tenant={{ tenant }} tenant_description="{{ tenant_description }}"
diff --git a/xos/synchronizers/openstack/steps/sync_controller_slice_privileges.py b/xos/synchronizers/openstack/steps/sync_controller_slice_privileges.py
deleted file mode 100644
index e5513b0..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_slice_privileges.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.slice import Controller, SlicePrivilege 
-from core.models.user import User
-from core.models.controlleruser import ControllerUser, ControllerSlicePrivilege
-from synchronizers.base.ansible import *
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerSlicePrivileges(OpenStackSyncStep):
-    provides=[SlicePrivilege]
-    requested_interval=0
-    observes=ControllerSlicePrivilege
-    playbook = 'sync_controller_users.yaml'
-
-    def map_sync_inputs(self, controller_slice_privilege):
-        if not controller_slice_privilege.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_slice_privilege.controller)
-            return
-
-	template = os_template_env.get_template('sync_controller_users.yaml')
-        roles = [controller_slice_privilege.slice_privilege.role.role]
-	# setup user home slice roles at controller 
-        if not controller_slice_privilege.slice_privilege.user.site:
-            raise Exception('Sliceless user %s'%controller_slice_privilege.slice_privilege.user.email)
-        else:
-            # look up tenant id for the user's slice at the controller
-            #ctrl_slice_deployments = SliceDeployment.objects.filter(
-            #  slice_deployment__slice=controller_slice_privilege.user.slice,
-            #  controller=controller_slice_privilege.controller)
-
-            #if ctrl_slice_deployments:
-            #    # need the correct tenant id for slice at the controller
-            #    tenant_id = ctrl_slice_deployments[0].tenant_id  
-            #    tenant_name = ctrl_slice_deployments[0].slice_deployment.slice.login_base
-            user_fields = {
-               'endpoint':controller_slice_privilege.controller.auth_url,
-               'endpoint_v3': controller_slice_privilege.controller.auth_url_v3,
-               'domain': controller_slice_privilege.controller.domain,
-		       'name': controller_slice_privilege.slice_privilege.user.email,
-               'email': controller_slice_privilege.slice_privilege.user.email,
-               'password': controller_slice_privilege.slice_privilege.user.remote_password,
-               'admin_user': controller_slice_privilege.controller.admin_user,
-		       'admin_password': controller_slice_privilege.controller.admin_password,
-               'ansible_tag':'%s@%s@%s'%(controller_slice_privilege.slice_privilege.user.email.replace('@','-at-'),controller_slice_privilege.slice_privilege.slice.name,controller_slice_privilege.controller.name),
-		       'admin_tenant': controller_slice_privilege.controller.admin_tenant,
-		       'roles':roles,
-		       'tenant':controller_slice_privilege.slice_privilege.slice.name}    
-            return user_fields
-	
-    def map_sync_outputs(self, controller_slice_privilege, res):
-        controller_slice_privilege.role_id = res[0]['id']
-        controller_slice_privilege.save()
-
-    def delete_record(self, controller_slice_privilege):
-	controller_register = json.loads(controller_slice_privilege.controller.backend_register)
-        if (controller_register.get('disabled',False)):
-                raise InnocuousException('Controller %s is disabled'%controller_slice_privilege.controller.name)
-
-        if controller_slice_privilege.role_id:
-            driver = self.driver.admin_driver(controller=controller_slice_privilege.controller)
-            user = ControllerUser.objects.get(
-                controller=controller_slice_privilege.controller, 
-                user=controller_slice_privilege.slice_privilege.user
-            )
-            slice = ControllerSlice.objects.get(
-                controller=controller_slice_privilege.controller, 
-                user=controller_slice_privilege.slice_privilege.user
-            )
-            driver.delete_user_role(
-                user.kuser_id, 
-                slice.tenant_id, 
-                controller_slice_privilege.slice_prvilege.role.role
-            )
diff --git a/xos/synchronizers/openstack/steps/sync_controller_slices.py b/xos/synchronizers/openstack/steps/sync_controller_slices.py
deleted file mode 100644
index 0666230..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_slices.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from netaddr import IPAddress, IPNetwork
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models import *
-from synchronizers.base.ansible import *
-from openstack_xos.driver import OpenStackDriver
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerSlices(OpenStackSyncStep):
-    provides=[Slice]
-    requested_interval=0
-    observes=ControllerSlice
-    playbook='sync_controller_slices.yaml'
-
-    def map_sync_inputs(self, controller_slice):
-        logger.info("sync'ing slice controller %s" % controller_slice)
-
-        if not controller_slice.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_slice.controller)
-            return
-
-        controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
-                                                             controller=controller_slice.controller)
-        if not controller_users:
-            raise Exception("slice createor %s has not accout at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
-        else:
-            controller_user = controller_users[0]
-            driver = OpenStackDriver().admin_driver(controller=controller_slice.controller)
-            roles = [driver.get_admin_role().name]
-
-        max_instances=int(controller_slice.slice.max_instances)
-        tenant_fields = {'endpoint':controller_slice.controller.auth_url,
-                         'endpoint_v3': controller_slice.controller.auth_url_v3,
-                         'domain': controller_slice.controller.domain,
-                         'admin_user': controller_slice.controller.admin_user,
-                         'admin_password': controller_slice.controller.admin_password,
-                         'admin_tenant': 'admin',
-                         'tenant': controller_slice.slice.name,
-                         'tenant_description': controller_slice.slice.description,
-                         'roles':roles,
-                         'name':controller_user.user.email,
-                         'ansible_tag':'%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
-                         'max_instances':max_instances}
-
-        return tenant_fields
-
-    def map_sync_outputs(self, controller_slice, res):
-        tenant_id = res[0]['id']
-        if (not controller_slice.tenant_id):
-            try:
-                driver = OpenStackDriver().admin_driver(controller=controller_slice.controller)
-                driver.shell.nova.quotas.update(tenant_id=tenant_id, instances=int(controller_slice.slice.max_instances))
-            except:
-                logger.log_exc('Could not update quota for %s'%controller_slice.slice.name)
-                raise Exception('Could not update quota for %s'%controller_slice.slice.name)
-
-            controller_slice.tenant_id = tenant_id
-            controller_slice.backend_status = '1 - OK'
-            controller_slice.save()
-
-
-    def map_delete_inputs(self, controller_slice):
-        controller_users = ControllerUser.objects.filter(user=controller_slice.slice.creator,
-                                                              controller=controller_slice.controller)
-        if not controller_users:
-            raise Exception("slice createor %s has not accout at controller %s" % (controller_slice.slice.creator, controller_slice.controller.name))
-        else:
-            controller_user = controller_users[0]
-
-        tenant_fields = {'endpoint':controller_slice.controller.auth_url,
-                          'admin_user': controller_slice.controller.admin_user,
-                          'admin_password': controller_slice.controller.admin_password,
-                          'admin_tenant': 'admin',
-                          'tenant': controller_slice.slice.name,
-                          'tenant_description': controller_slice.slice.description,
-                          'name':controller_user.user.email,
-                          'ansible_tag':'%s@%s'%(controller_slice.slice.name,controller_slice.controller.name),
-                          'delete': True}
-	return tenant_fields
diff --git a/xos/synchronizers/openstack/steps/sync_controller_slices.yaml b/xos/synchronizers/openstack/steps/sync_controller_slices.yaml
deleted file mode 100644
index 61470ce..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_slices.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  {% if delete -%}
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} tenant={{ tenant }} tenant_description="{{ tenant_description }}" state=absent
-  {% else -%}
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} tenant={{ tenant }} tenant_description="{{ tenant_description }}"
-  {% for role in roles %}
-  - keystone_user: endpoint={{ endpoint }} login_user={{ admin_user }} login_password={{ admin_password }} login_tenant_name={{ admin_tenant }} user="{{ name }}" role={{ role }} tenant={{ tenant }}
-  {% endfor %}
-  {% endif %}
diff --git a/xos/synchronizers/openstack/steps/sync_controller_users.py b/xos/synchronizers/openstack/steps/sync_controller_users.py
deleted file mode 100644
index c9de142..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_users.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models.site import Controller, SiteDeployment, SiteDeployment
-from core.models.user import User
-from core.models.controlleruser import ControllerUser
-from synchronizers.base.ansible import *
-from openstack_xos.driver import OpenStackDriver
-from xos.logger import observer_logger as logger
-import json
-
-class SyncControllerUsers(OpenStackSyncStep):
-    provides=[User]
-    requested_interval=0
-    observes=ControllerUser
-    playbook='sync_controller_users.yaml'
-
-    def map_sync_inputs(self, controller_user):
-        if not controller_user.controller.admin_user:
-            logger.info("controller %r has no admin_user, skipping" % controller_user.controller)
-            return
-
-        # All users will have at least the 'user' role at their home site/tenant.
-        # We must also check if the user should have the admin role
-
-        roles = ['user']
-        if controller_user.user.is_admin:
-            driver = OpenStackDriver().admin_driver(controller=controller_user.controller)
-            roles.append(driver.get_admin_role().name)
-
-        # setup user home site roles at controller
-        if not controller_user.user.site:
-            raise Exception('Siteless user %s'%controller_user.user.email)
-        else:
-            # look up tenant id for the user's site at the controller
-            #ctrl_site_deployments = SiteDeployment.objects.filter(
-            #  site_deployment__site=controller_user.user.site,
-            #  controller=controller_user.controller)
-
-            #if ctrl_site_deployments:
-            #    # need the correct tenant id for site at the controller
-            #    tenant_id = ctrl_site_deployments[0].tenant_id
-            #    tenant_name = ctrl_site_deployments[0].site_deployment.site.login_base
-            user_fields = {
-                'endpoint':controller_user.controller.auth_url,
-                'endpoint_v3': controller_user.controller.auth_url_v3,
-                'domain': controller_user.controller.domain,
-                'name': controller_user.user.email,
-                'email': controller_user.user.email,
-                'password': controller_user.user.remote_password,
-                'admin_user': controller_user.controller.admin_user,
-                'admin_password': controller_user.controller.admin_password,
-                'ansible_tag':'%s@%s'%(controller_user.user.email.replace('@','-at-'),controller_user.controller.name),
-                'admin_project': controller_user.controller.admin_tenant,
-                'roles':roles,
-                'project':controller_user.user.site.login_base
-                }
-	    return user_fields
-
-    def map_sync_outputs(self, controller_user, res):
-        controller_user.kuser_id = res[0]['user']['id']
-        controller_user.backend_status = '1 - OK'
-        controller_user.save()
-
-    def delete_record(self, controller_user):
-        if controller_user.kuser_id:
-            driver = self.driver.admin_driver(controller=controller_user.controller)
-            driver.delete_user(controller_user.kuser_id)
diff --git a/xos/synchronizers/openstack/steps/sync_controller_users.yaml b/xos/synchronizers/openstack/steps/sync_controller_users.yaml
deleted file mode 100644
index 5cb3cc9..0000000
--- a/xos/synchronizers/openstack/steps/sync_controller_users.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-
-  - name: Create user account for "{{ name }}"
-    os_user:
-      name: "{{ name }}"
-      email: "{{ email }}"
-      password: "{{ password }}"
-      auth:
-        auth_url: {{ endpoint }}
-        username: {{ admin_user }}
-        password: {{ admin_password }}
-        project_name: {{ admin_project }}
-
-  - name: Create project for "{{ project }}"
-    os_project:
-      name: "{{ project }}"
-      auth:
-        auth_url: {{ endpoint }}
-        username: {{ admin_user }}
-        password: {{ admin_password }}
-        project_name: {{ admin_project }}
-
-{% for role in roles %}
-  - name: Creating role "{{ role }}" for "{{ name }}" on "{{ project }}"
-    keystone_user:
-      user: "{{ name }}"
-      role: "{{ role }}"
-      tenant: "{{ project }}"
-      endpoint: {{ endpoint }}
-      login_user: {{ admin_user }}
-      login_password: {{ admin_password }}
-      login_tenant_name: {{ admin_project }}
-{% endfor %}
-
-# FIXME: the below should work in Ansible 2.1, once we get the Admin/admin and
-# Member/user role name issues straightened out.
-#
-#  - name: Creating role "{{ role }}" for "{{ name }}" on "{{ project }}"
-#    os_user_role:
-#      user: "{{ name }}"
-#      role: "{{ role }}"
-#      project: "{{ project }}"
-#      auth:
-#        auth_url: {{ endpoint }}
-#        username: {{ admin_user }}
-#        password: {{ admin_password }}
-#        project_name: {{ admin_project }}
diff --git a/xos/synchronizers/openstack/steps/sync_images.py b/xos/synchronizers/openstack/steps/sync_images.py
deleted file mode 100644
index 1638fd0..0000000
--- a/xos/synchronizers/openstack/steps/sync_images.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.image import Image
-from xos.logger import observer_logger as logger
-
-class SyncImages(OpenStackSyncStep):
-    provides=[Image]
-    requested_interval=0
-    observes=Image
-
-    def fetch_pending(self, deleted):
-        # Images come from the back end
-        # You can't delete them
-        if (deleted):
-            logger.info("SyncImages: returning because deleted=True")
-            return []
-
-        # get list of images on disk
-        images_path = Config().observer_images_directory
-
-        logger.info("SyncImages: deleted=False, images_path=%s" % images_path)
-
-        available_images = {}
-        if os.path.exists(images_path):
-            for f in os.listdir(images_path):
-                filename = os.path.join(images_path, f)
-                if os.path.isfile(filename) and filename.endswith(".img"):
-                    available_images[f] = filename
-
-        logger.info("SyncImages: available_images = %s" % str(available_images))
-
-        images = Image.objects.all()
-        image_names = [image.name for image in images]
-
-        for image_name in available_images:
-            #remove file extension
-            clean_name = ".".join(image_name.split('.')[:-1])
-            if clean_name not in image_names:
-                logger.info("SyncImages: adding %s" % clean_name)
-                image = Image(name=clean_name,
-                              disk_format='raw',
-                              container_format='bare', 
-                              path = available_images[image_name])
-                image.save()
-
-        return Image.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
-
-    def sync_record(self, image):
-        image.save()
diff --git a/xos/synchronizers/openstack/steps/sync_instances.py b/xos/synchronizers/openstack/steps/sync_instances.py
deleted file mode 100644
index 5cec50d..0000000
--- a/xos/synchronizers/openstack/steps/sync_instances.py
+++ /dev/null
@@ -1,220 +0,0 @@
-import os
-import base64
-import socket
-from django.db.models import F, Q
-from xos.config import Config
-from xos.settings import RESTAPI_HOSTNAME, RESTAPI_PORT
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.instance import Instance
-from core.models.slice import Slice, SlicePrivilege, ControllerSlice
-from core.models.network import Network, NetworkSlice, ControllerNetwork
-from synchronizers.base.ansible import *
-from synchronizers.base.syncstep import *
-from xos.logger import observer_logger as logger
-
-def escape(s):
-    s = s.replace('\n',r'\n').replace('"',r'\"')
-    return s
-
-class SyncInstances(OpenStackSyncStep):
-    provides=[Instance]
-    requested_interval=0
-    observes=Instance
-    playbook='sync_instances.yaml'
-
-    def fetch_pending(self, deletion=False):
-        objs = super(SyncInstances, self).fetch_pending(deletion)
-        objs = [x for x in objs if x.isolation=="vm"]
-        return objs
-
-    def get_userdata(self, instance, pubkeys):
-        userdata = '#cloud-config\n\nopencloud:\n   slicename: "%s"\n   hostname: "%s"\n   restapi_hostname: "%s"\n   restapi_port: "%s"\n' % (instance.slice.name, instance.node.name, RESTAPI_HOSTNAME, str(RESTAPI_PORT))
-        userdata += 'ssh_authorized_keys:\n'
-        for key in pubkeys:
-            userdata += '  - %s\n' % key
-        return userdata
-
-    def sort_nics(self, nics):
-        result = []
-
-        # Enforce VTN's network order requirement. The access network must be
-        # inserted into the first slot. The management network must be inserted
-        # into the second slot.
-
-        # move the private and/or access network to the first spot
-        for nic in nics[:]:
-            network=nic.get("network", None)
-            if network:
-                tem = network.template
-                if (tem.visibility == "private") and (tem.translation=="none") and ("management" not in tem.name):
-                    result.append(nic)
-                    nics.remove(nic)
-
-        # move the management network to the second spot
-        for net in nics[:]:
-            network=nic.get("network", None)
-            if network:
-                tem = network.template
-                if (tem.visibility == "private") and (tem.translation=="none") and ("management" in tem.name):
-#MCORD
-#                    if len(result)!=1:
-#                        raise Exception("Management network needs to be inserted in slot 1, but there are %d private nics" % len(result))
-                    result.append(nic)
-                    nics.remove(nic)
-
-        # add everything else. For VTN there probably shouldn't be any more.
-        result.extend(nics)
-
-        return result
-
-    def map_sync_inputs(self, instance):
-        inputs = {}
-	metadata_update = {}
-        if (instance.numberCores):
-            metadata_update["cpu_cores"] = str(instance.numberCores)
-
-        for tag in instance.slice.tags.all():
-            if tag.name.startswith("sysctl-"):
-                metadata_update[tag.name] = tag.value
-
-	slice_memberships = SlicePrivilege.objects.filter(slice=instance.slice)
-        pubkeys = set([sm.user.public_key for sm in slice_memberships if sm.user.public_key])
-        if instance.creator.public_key:
-            pubkeys.add(instance.creator.public_key)
-
-        if instance.slice.creator.public_key:
-            pubkeys.add(instance.slice.creator.public_key)
-
-        if instance.slice.service and instance.slice.service.public_key:
-            pubkeys.add(instance.slice.service.public_key)
-
-        nics=[]
-
-        # handle ports the were created by the user
-        port_ids=[]
-        for port in Port.objects.filter(instance=instance):
-            if not port.port_id:
-                raise DeferredException("Instance %s waiting on port %s" % (instance, port))
-            nics.append({"kind": "port", "value": port.port_id, "network": port.network})
-
-        # we want to exclude from 'nics' any network that already has a Port
-        existing_port_networks = [port.network for port in Port.objects.filter(instance=instance)]
-
-        networks = [ns.network for ns in NetworkSlice.objects.filter(slice=instance.slice) if ns.network not in existing_port_networks]
-        controller_networks = ControllerNetwork.objects.filter(network__in=networks,
-                                                                controller=instance.node.site_deployment.controller)
-
-        #controller_networks = self.sort_controller_networks(controller_networks)
-        for controller_network in controller_networks:
-            # Lenient exception - causes slow backoff
-            if controller_network.network.template.visibility == 'private' and \
-               controller_network.network.template.translation == 'none':
-                   if not controller_network.net_id:
-                        raise DeferredException("Instance %s Private Network %s has no id; Try again later" % (instance, controller_network.network.name))
-                   nics.append({"kind": "net", "value": controller_network.net_id, "network": controller_network.network})
-
-        # now include network template
-        network_templates = [network.template.shared_network_name for network in networks \
-                             if network.template.shared_network_name]
-
-        #driver = self.driver.client_driver(caller=instance.creator, tenant=instance.slice.name, controller=instance.controllerNetwork)
-        driver = self.driver.admin_driver(tenant='admin', controller=instance.node.site_deployment.controller)
-        nets = driver.shell.neutron.list_networks()['networks']
-        for net in nets:
-            if net['name'] in network_templates:
-                nics.append({"kind": "net", "value": net['id'], "network": None})
-
-        if (not nics):
-            for net in nets:
-                if net['name']=='public':
-                    nics.append({"kind": "net", "value": net['id'], "network": None})
-
-        nics = self.sort_nics(nics)
-
-        image_name = None
-        controller_images = instance.image.controllerimages.filter(controller=instance.node.site_deployment.controller)
-        if controller_images:
-            image_name = controller_images[0].image.name
-            logger.info("using image from ControllerImage object: " + str(image_name))
-
-        if image_name is None:
-            controller_driver = self.driver.admin_driver(controller=instance.node.site_deployment.controller)
-            images = controller_driver.shell.glanceclient.images.list()
-            for image in images:
-                if image.name == instance.image.name or not image_name:
-                    image_name = image.name
-                    logger.info("using image from glance: " + str(image_name))
-
-	try:
-            legacy = Config().observer_legacy
-        except:
-            legacy = False
-
-        if (legacy):
-            host_filter = instance.node.name.split('.',1)[0]
-        else:
-            host_filter = instance.node.name.strip()
-
-        availability_zone_filter = 'nova:%s'%host_filter
-        instance_name = '%s-%d'%(instance.slice.name,instance.id)
-        self.instance_name = instance_name
-
-        userData = self.get_userdata(instance, pubkeys)
-        if instance.userData:
-            userData += instance.userData
-
-        controller = instance.node.site_deployment.controller
-        fields = {'endpoint':controller.auth_url,
-                     'endpoint_v3': controller.auth_url_v3,
-                     'domain': controller.domain,
-                     'admin_user': instance.creator.email,
-                     'admin_password': instance.creator.remote_password,
-                     'project_name': instance.slice.name,
-                     'tenant': instance.slice.name,
-                     'tenant_description': instance.slice.description,
-                     'name':instance_name,
-                     'ansible_tag':instance_name,
-                     'availability_zone': availability_zone_filter,
-                     'image_name':image_name,
-                     'flavor_name':instance.flavor.name,
-                     'nics':nics,
-                     'meta':metadata_update,
-                     'user_data':r'%s'%escape(userData)}
-        return fields
-
-
-    def map_sync_outputs(self, instance, res):
-	instance_id = res[0]['openstack']['OS-EXT-SRV-ATTR:instance_name']
-        instance_uuid = res[0]['id']
-
-	try:
-            hostname = res[0]['openstack']['OS-EXT-SRV-ATTR:hypervisor_hostname']
-            ip = socket.gethostbyname(hostname)
-            instance.ip = ip
-        except:
-            pass
-
-        instance.instance_id = instance_id
-        instance.instance_uuid = instance_uuid
-        instance.instance_name = self.instance_name
-        instance.save()
-	
-	
-    def map_delete_inputs(self, instance):
-        controller_register = json.loads(instance.node.site_deployment.controller.backend_register)
-
-        if (controller_register.get('disabled',False)):
-            raise InnocuousException('Controller %s is disabled'%instance.node.site_deployment.controller.name)
-
-        instance_name = '%s-%d'%(instance.slice.name,instance.id)
-        controller = instance.node.site_deployment.controller
-        input = {'endpoint':controller.auth_url,
-                     'admin_user': instance.creator.email,
-                     'admin_password': instance.creator.remote_password,
-                     'admin_tenant': instance.slice.name,
-                     'tenant': instance.slice.name,
-                     'tenant_description': instance.slice.description,
-                     'name':instance_name,
-                     'ansible_tag':instance_name,
-                     'delete': True}
-        return input
diff --git a/xos/synchronizers/openstack/steps/sync_instances.yaml b/xos/synchronizers/openstack/steps/sync_instances.yaml
deleted file mode 100644
index 476890f..0000000
--- a/xos/synchronizers/openstack/steps/sync_instances.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
----
-- hosts: 127.0.0.1
-  connection: local
-  tasks:
-  - os_server:
-      name: {{ name }}
-      auth:
-        auth_url: {{ endpoint }}
-        username: {{ admin_user }}
-        password: {{ admin_password }}
-        project_name: {{ project_name }}
-      {% if delete -%}
-      state: absent
-      {% else -%}
-      state: present
-      availability_zone: "{{ availability_zone }}"
-      image: {{ image_name }}
-      flavor: {{ flavor_name }}
-      timeout: 200
-      userdata: "{{ user_data }}"
-      config_drive: yes
-      auto_ip: no
-      nics:
-      {% for nic in nics %}
-          - {{ nic.kind }}-id: {{ nic.value }}
-      {% endfor %}
-
-      {% if meta %}
-      meta:
-      {% for k,v in meta.items() %}
-          {{ k }} : "{{ v }}"
-      {% endfor %}
-      {% endif %}
-      {% endif %}
-
diff --git a/xos/synchronizers/openstack/steps/sync_object.py b/xos/synchronizers/openstack/steps/sync_object.py
deleted file mode 100644
index aaf2f25..0000000
--- a/xos/synchronizers/openstack/steps/sync_object.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import os
-import base64
-from collections import defaultdict
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from synchronizers.base.syncstep import *
-from core.models import *
-from synchronizers.base.ansible import *
-from openstack_xos.driver import OpenStackDriver
-from xos.logger import observer_logger as logger
-import json
-
-class SyncObject(OpenStackSyncStep):
-    provides=[] # Caller fills this in
-    requested_interval=0
-    observes=[] # Caller fills this in
-
-    def sync_record(self, r):
-        raise DeferredException('Waiting for Service dependency: %r'%r)
diff --git a/xos/synchronizers/openstack/steps/sync_ports.py b/xos/synchronizers/openstack/steps/sync_ports.py
deleted file mode 100644
index 5e0ff04..0000000
--- a/xos/synchronizers/openstack/steps/sync_ports.py
+++ /dev/null
@@ -1,230 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models import Controller
-from core.models.network import *
-from xos.logger import observer_logger as logger
-
-class SyncPorts(OpenStackSyncStep):
-    requested_interval = 0 # 3600
-    provides=[Port]
-    observes=Port
-
-    #     The way it works is to enumerate the all of the ports that neutron
-    #     has, and then work backward from each port's network-id to determine
-    #     which Network is associated from the port.
-
-    def call(self, failed=[], deletion=False):
-        if deletion:
-            self.delete_ports()
-        else:
-            self.sync_ports()
-
-    def get_driver(self, port):
-        # We need to use a client driver that specifies the tenant
-        # of the destination instance. Nova-compute will not connect
-        # ports to instances if the port's tenant does not match
-        # the instance's tenant.
-
-        # A bunch of stuff to compensate for OpenStackDriver.client_driver()
-        # not being in working condition.
-        from openstack_xos.client import OpenStackClient
-        from openstack_xos.driver import OpenStackDriver
-        controller = port.instance.node.site_deployment.controller
-        slice = port.instance.slice
-        caller = port.network.owner.creator
-        auth = {'username': caller.email,
-                'password': caller.remote_password,
-                'tenant': slice.name}
-        client = OpenStackClient(controller=controller, **auth)
-        driver = OpenStackDriver(client=client)
-
-        return driver
-
-    def sync_ports(self):
-        logger.info("sync'ing Ports [delete=False]")
-
-        ports = Port.objects.all()
-        ports_by_id = {}
-        ports_by_neutron_port = {}
-        for port in ports:
-            ports_by_id[port.id] = port
-            ports_by_neutron_port[port.port_id] = port
-
-        networks = Network.objects.all()
-        networks_by_id = {}
-        for network in networks:
-            for nd in network.controllernetworks.all():
-                networks_by_id[nd.net_id] = network
-
-        #logger.info("networks_by_id = ")
-        #for (network_id, network) in networks_by_id.items():
-        #    logger.info("   %s: %s" % (network_id, network.name))
-
-        instances = Instance.objects.all()
-        instances_by_instance_uuid = {}
-        for instance in instances:
-            instances_by_instance_uuid[instance.instance_uuid] = instance
-
-        # Get all ports in all controllers
-
-        ports_by_id = {}
-        templates_by_id = {}
-        for controller in Controller.objects.all():
-            if not controller.admin_tenant:
-                logger.info("controller %s has no admin_tenant" % controller)
-                continue
-            try:
-                driver = self.driver.admin_driver(controller = controller)
-                ports = driver.shell.neutron.list_ports()["ports"]
-            except:
-                logger.log_exc("failed to get ports from controller %s" % controller)
-                continue
-
-            for port in ports:
-                ports_by_id[port["id"]] = port
-
-            # public-nat and public-dedicated networks don't have a net-id anywhere
-            # in the data model, so build up a list of which ids map to which network
-            # templates.
-            try:
-                neutron_networks = driver.shell.neutron.list_networks()["networks"]
-            except:
-                print "failed to get networks from controller %s" % controller
-                continue
-            for network in neutron_networks:
-                for template in NetworkTemplate.objects.all():
-                    if template.shared_network_name == network["name"]:
-                        templates_by_id[network["id"]] = template
-
-        for port in ports_by_id.values():
-            #logger.info("port %s" % str(port))
-            if port["id"] in ports_by_neutron_port:
-                # we already have it
-                #logger.info("already accounted for port %s" % port["id"])
-                continue
-
-            if port["device_owner"] != "compute:nova":
-                # we only want the ports that connect to instances
-                #logger.info("port %s is not a compute port, it is a %s" % (port["id"], port["device_owner"]))
-                continue
-
-            instance = instances_by_instance_uuid.get(port['device_id'], None)
-            if not instance:
-                logger.info("no instance for port %s device_id %s" % (port["id"], port['device_id']))
-                continue
-
-            network = networks_by_id.get(port['network_id'], None)
-            if not network:
-                # maybe it's public-nat or public-dedicated. Search the templates for
-                # the id, then see if the instance's slice has some network that uses
-                # that template
-                template = templates_by_id.get(port['network_id'], None)
-                if template and instance.slice:
-                    for candidate_network in instance.slice.networks.all():
-                         if candidate_network.template == template:
-                             network=candidate_network
-            if not network:
-                logger.info("no network for port %s network %s" % (port["id"], port["network_id"]))
-
-                # we know it's associated with a instance, but we don't know
-                # which network it is part of.
-
-                continue
-
-            if network.template.shared_network_name:
-                # If it's a shared network template, then more than one network
-                # object maps to the neutron network. We have to do a whole bunch
-                # of extra work to find the right one.
-                networks = network.template.network_set.all()
-                network = None
-                for candidate_network in networks:
-                    if (candidate_network.owner == instance.slice):
-                        logger.info("found network %s" % candidate_network)
-                        network = candidate_network
-
-                if not network:
-                    logger.info("failed to find the correct network for a shared template for port %s network %s" % (port["id"], port["network_id"]))
-                    continue
-
-            if not port["fixed_ips"]:
-                logger.info("port %s has no fixed_ips" % port["id"])
-                continue
-
-            ip=port["fixed_ips"][0]["ip_address"]
-            mac=port["mac_address"]
-            logger.info("creating Port (%s, %s, %s, %s)" % (str(network), str(instance), ip, str(port["id"])))
-
-            ns = Port(network=network,
-                               instance=instance,
-                               ip=ip,
-                               mac=mac,
-                               port_id=port["id"])
-
-            try:
-                ns.save()
-            except:
-                logger.log_exc("failed to save port %s" % str(ns))
-                continue
-
-        # For ports that were created by the user, find that ones
-        # that don't have neutron ports, and create them.
-        for port in Port.objects.filter(Q(port_id__isnull=True), Q(instance__isnull=False) ):
-            logger.info("XXX working on port %s" % port)
-            controller = port.instance.node.site_deployment.controller
-            slice = port.instance.slice
-
-            if controller:
-                cn=port.network.controllernetworks.filter(controller=controller)
-                if not cn:
-                    logger.log_exc("no controllernetwork for %s" % port)
-                    continue
-                cn=cn[0]
-                if cn.lazy_blocked:
-                    cn.lazy_blocked=False
-                    cn.save()
-                    logger.info("deferring port %s because controllerNetwork was lazy-blocked" % port)
-                    continue
-                if not cn.net_id:
-                    logger.info("deferring port %s because controllerNetwork does not have a port-id yet" % port)
-                    continue
-                try:
-                    driver = self.get_driver(port)
-
-                    args = {"network_id": cn.net_id}
-                    neutron_port_name = port.get_parameters().get("neutron_port_name", None)
-                    if neutron_port_name:
-                        args["name"] = neutron_port_name
-
-                    neutron_port = driver.shell.neutron.create_port({"port": args})["port"]
-                    port.port_id = neutron_port["id"]
-                    if neutron_port["fixed_ips"]:
-                        port.ip = neutron_port["fixed_ips"][0]["ip_address"]
-                    port.mac = neutron_port["mac_address"]
-                    port.xos_created = True
-                    logger.info("created neutron port %s for %s" % (port.port_id, port))
-                except:
-                    logger.log_exc("failed to create neutron port for %s" % port)
-                    continue
-                port.save()
-
-    def delete_ports(self):
-        logger.info("sync'ing Ports [delete=True]")
-        for port in Port.deleted_objects.all():
-            self.delete_record(port)
-
-    def delete_record(self, port):
-        if port.xos_created and port.port_id:
-            logger.info("calling openstack to destroy port %s" % port.port_id)
-            try:
-                driver = self.get_driver(port)
-                driver.shell.neutron.delete_port(port.port_id)
-            except:
-                logger.log_exc("failed to delete port %s from neutron" % port.port_id)
-                return
-
-        logger.info("Purging port %s" % port)
-        port.delete(purge=True)
-
diff --git a/xos/synchronizers/openstack/steps/sync_roles.py b/xos/synchronizers/openstack/steps/sync_roles.py
deleted file mode 100644
index e859316..0000000
--- a/xos/synchronizers/openstack/steps/sync_roles.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.openstacksyncstep import OpenStackSyncStep
-from core.models.role import Role
-from core.models.site import SiteRole, Controller, ControllerRole
-from core.models.slice import SliceRole
-from xos.logger import observer_logger as logger
-
-class SyncRoles(OpenStackSyncStep):
-    provides=[Role]
-    requested_interval=0
-    observes=[SiteRole,SliceRole,ControllerRole]
-
-    def sync_record(self, role):
-        if not role.enacted:
-            controllers = Controller.objects.all()
-       	    for controller in controllers:
-                driver = self.driver.admin_driver(controller=controller)
-                driver.create_role(role.role)
-            role.save()
-    
diff --git a/xos/synchronizers/openstack/steps/teardown_container.yaml b/xos/synchronizers/openstack/steps/teardown_container.yaml
deleted file mode 100644
index 5cabc78..0000000
--- a/xos/synchronizers/openstack/steps/teardown_container.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-- hosts: {{ instance_name }}
-  gather_facts: False
-  connection: ssh
-  user: {{ username }}
-  sudo: yes
-
-  vars:
-    container_name: {{ container_name }}
-    docker_image: {{ docker_image }}
-    ports:
-    {% for port in ports %}
-       - device: {{ port.device }}
-         xos_network_id: {{ port.xos_network_id }}
-         mac: {{ port.mac|default("") }}
-         ip: {{ port.ip }}
-         snoop_instance_mac: {{ port.snoop_instance_mac }}
-         snoop_instance_id: {{ port.snoop_instance_id }}
-         parent_mac: {{ port.parent_mac|default("") }}
-         s_tag: {{ port.s_tag|default("")  }}
-         c_tag: {{ port.c_tag|default("") }}
-         next_hop: {{ port.next_hop|default("") }}
-         bridge: {{ port.bridge }}
-    {% endfor %}
-    volumes:
-    {% for volume in volumes %}
-       - {{ volume }}
-    {% endfor %}
-
-  tasks:
-  - name: Make sure container is stopped
-    service: name=container-{{ container_name }} state=stopped
-
diff --git a/xos/synchronizers/openstack/templates/container.conf.j2 b/xos/synchronizers/openstack/templates/container.conf.j2
deleted file mode 100644
index 7cbb880..0000000
--- a/xos/synchronizers/openstack/templates/container.conf.j2
+++ /dev/null
@@ -1,14 +0,0 @@
-# Upstart script for container
-description "container"
-author "smbaker@gmail.com"
-start on filesystem and started docker
-stop on runlevel [!2345]
-respawn
-
-script
-  /usr/local/sbin/start-container-{{ container_name }}.sh ATTACH
-end script
-
-post-stop script
-  /usr/local/sbin/stop-container-{{ container_name }}.sh
-end script
\ No newline at end of file
diff --git a/xos/synchronizers/openstack/templates/container.service.j2 b/xos/synchronizers/openstack/templates/container.service.j2
deleted file mode 100644
index 817d6d7..0000000
--- a/xos/synchronizers/openstack/templates/container.service.j2
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description={{ container_name }}
-After=docker.service
-
-[Service]
-ExecStart=/bin/bash -c "/usr/local/sbin/start-container-{{ container_name }}.sh ATTACH"
-ExecStop=/bin/bash -c "/usr/local/sbin/stop-container-{{ container_name }}.sh"
-SuccessExitStatus=0 137
-
-[Install]
-WantedBy=multi-user.target
diff --git a/xos/synchronizers/openstack/templates/start-container.sh.j2 b/xos/synchronizers/openstack/templates/start-container.sh.j2
deleted file mode 100644
index 2fbf478..0000000
--- a/xos/synchronizers/openstack/templates/start-container.sh.j2
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/bin/bash
-
-iptables -L > /dev/null
-ip6tables -L > /dev/null
-
-CONTAINER={{ container_name }}
-IMAGE={{ docker_image }}
-
-function mac_to_iface {
-    PARENT_MAC=$1
-    ifconfig|grep $PARENT_MAC| awk '{print $1}'|grep -v '\.'
-}
-
-function encapsulate_stag {
-    LAN_IFACE=$1
-    STAG=$2
-    ifconfig $LAN_IFACE >> /dev/null
-    if [ "$?" == 0 ]; then
-        STAG_IFACE=$LAN_IFACE.$STAG
-        ifconfig $LAN_IFACE up
-        ifconfig $STAG_IFACE
-        if [ "$?" == 0 ]; then
-            echo $STAG_IFACE is already created
-        else
-            ifconfig $STAG_IFACE >> /dev/null || ip link add link $LAN_IFACE name $STAG_IFACE type vlan id $STAG
-        fi
-            ifconfig $STAG_IFACE up
-    else
-        echo There is no $LAN_IFACE. Aborting.
-        exit -1
-    fi
-}
-
-
-{% if volumes %}
-{% for volume in volumes %}
-DEST_DIR=/var/container_volumes/$CONTAINER/{{ volume }}
-mkdir -p $DEST_DIR
-VOLUME_ARGS="$VOLUME_ARGS -v $DEST_DIR:{{ volume }}"
-{% endfor %}
-{% endif %}
-
-docker inspect $CONTAINER > /dev/null 2>&1
-if [ "$?" == 1 ]
-then
-    docker pull $IMAGE
-{% if network_method=="host" %}
-    docker run -d --name=$CONTAINER --privileged=true --net=host $VOLUME_ARGS $IMAGE
-{% elif network_method=="bridged" %}
-    docker run -d --name=$CONTAINER --privileged=true --net=bridge $VOLUME_ARGS $IMAGE
-{% else %}
-    docker run -d --name=$CONTAINER --privileged=true --net=none $VOLUME_ARGS $IMAGE
-{% endif %}
-else
-    docker start $CONTAINER
-fi
-
-{% if ports %}
-{% for port in ports %}
-
-{% if port.next_hop %}
-NEXTHOP_ARG="@{{ port.next_hop }}"
-{% else %}
-NEXTHOP_ARG=""
-{% endif %}
-
-{% if port.c_tag %}
-CTAG_ARG="@{{ port.c_tag }}"
-{% else %}
-CTAG_ARG=""
-{% endif %}
-
-{% if port.parent_mac %}
-# container-in-VM
-SRC_DEV=$( mac_to_iface "{{ port.parent_mac }}" )
-CMD="docker exec $CONTAINER ifconfig $SRC_DEV >> /dev/null || pipework $SRC_DEV -i {{ port.device }} $CONTAINER {{ port.ip }}/24$NEXTHOP_ARG {{ port.mac }} $CTAG_ARG"
-echo $CMD
-eval $CMD
-
-{% else %}
-# container-on-metal
-IP="{{ port.ip }}"
-{% if port.mac %}
-MAC="{{ port.mac }}"
-{% else %}
-MAC=""
-{% endif %}
-
-DEVICE="{{ port.device }}"

-BRIDGE="{{ port.bridge }}"

-{% if port.s_tag %}

-# This is intended for lan_network. Assume that BRIDGE is set to br_lan. We

-# create a device that strips off the S-TAG.

-STAG="{{ port.s_tag }}"

-encapsulate_stag $BRIDGE $STAG

-SRC_DEV=$STAG_IFACE

-{% else %}

-# This is for a standard neutron private network. We use a donor VM to setup

-# openvswitch for us, and we snoop at its devices and create a tap using the

-# same settings.

-XOS_NETWORK_ID="{{ port.xos_network_id }}"

-INSTANCE_MAC="{{ port.snoop_instance_mac }}"
-INSTANCE_ID="{{ port.snoop_instance_id }}"
-INSTANCE_TAP=`virsh domiflist $INSTANCE_ID | grep -i $INSTANCE_MAC | awk '{print $1}'`
-INSTANCE_TAP=${INSTANCE_TAP:3}
-VLAN_ID=`ovs-vsctl show | grep -i -A 1 port.*$INSTANCE_TAP | grep -i tag | awk '{print $2}'`
-# One tap for all containers per XOS/neutron network. Included the VLAN_ID in the
-# hash, to cover the case where XOS is reinstalled and the XOS network ids
-# get reused.
-TAP="con`echo ${XOS_NETWORK_ID}_$VLAN_ID|md5sum|awk '{print $1}'`"
-TAP=${TAP:0:10}
-echo im=$INSTANCE_MAC ii=$INSTANCE_ID it=$INSTANCE_TAP vlan=$VLAN_ID tap=$TAP con=$CONTAINER dev=$DEVICE mac=$MAC
-ovs-vsctl show | grep -i $TAP
-if [[ $? == 1 ]]; then
-    echo creating tap
-    ovs-vsctl add-port $BRIDGE $TAP tag=$VLAN_ID -- set interface $TAP type=internal
-else
-    echo tap exists
-fi
-SRC_DEV=$TAP
-{% endif %}
-
-CMD="docker exec $CONTAINER ifconfig $DEVICE >> /dev/null || pipework $SRC_DEV -i $DEVICE $CONTAINER $IP/24$NEXTHOP_ARG $MAC $CTAG_ARG"
-echo $CMD
-eval $CMD
-{% endif %}
-{% endfor %}
-{% endif %}
-
-# Attach to container
-# (this is only done when using upstart, since upstart expects to be attached
-#  to a running service)
-if [[ "$1" == "ATTACH" ]]; then
-    docker start -a $CONTAINER
-fi
-
diff --git a/xos/synchronizers/openstack/templates/stop-container.sh.j2 b/xos/synchronizers/openstack/templates/stop-container.sh.j2
deleted file mode 100644
index 9cabb00..0000000
--- a/xos/synchronizers/openstack/templates/stop-container.sh.j2
+++ /dev/null
@@ -1,4 +0,0 @@
-CONTAINER={{ container_name }}
-
-docker stop $CONTAINER
-docker rm $CONTAINER
diff --git a/xos/synchronizers/openstack/xos-synchronizer.py b/xos/synchronizers/openstack/xos-synchronizer.py
deleted file mode 100644
index 852ee0e..0000000
--- a/xos/synchronizers/openstack/xos-synchronizer.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-import os
-import argparse
-import sys
-
-sys.path.append('/opt/xos')
-
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
-from synchronizers.base.backend import Backend
-from synchronizers.base.event_loop import set_driver
-from xos.config import Config, DEFAULT_CONFIG_FN
-from core.models import Instance,NetworkTemplate
-from xos.logger import Logger, logging, logger
-from django.db import ProgrammingError
-import time
-
-try:
-    from django import setup as django_setup # django 1.7
-except:
-    django_setup = False
-
-config = Config()
-
-# set the driver.
-from openstack_xos.driver import OpenStackDriver
-set_driver(OpenStackDriver())
-
-# after http://www.erlenstar.demon.co.uk/unix/faq_2.html
-def daemon():
-    """Daemonize the current process."""
-    if os.fork() != 0: os._exit(0)
-    os.setsid()
-    if os.fork() != 0: os._exit(0)
-    os.umask(0)
-    devnull = os.open(os.devnull, os.O_RDWR)
-    os.dup2(devnull, 0)
-    # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull
-    logdir=os.path.dirname(config.observer_logfile)
-    # when installed in standalone we might not have httpd installed
-    if not os.path.isdir(logdir): os.mkdir(logdir)
-    crashlog = os.open('%s'%config.observer_logfile, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644)
-    os.dup2(crashlog, 1)
-    os.dup2(crashlog, 2)
-
-    if hasattr(config, "observer_pidfile"):
-        pidfile = config.get("observer_pidfile")
-    else:
-        pidfile = "/var/run/xosobserver.pid"
-    try:
-        file(pidfile,"w").write(str(os.getpid()))
-    except:
-        print "failed to create pidfile %s" % pidfile
-
-def main():
-    # Generate command line parser
-    parser = argparse.ArgumentParser(usage='%(prog)s [options]')
-    parser.add_argument('-d', '--daemon', dest='daemon', action='store_true', default=False,
-                        help='Run as daemon.')
-    # smbaker: util/config.py parses sys.argv[] directly to get config file name; include the option here to avoid
-    #   throwing unrecognized argument exceptions
-    parser.add_argument('-C', '--config', dest='config_file', action='store', default=DEFAULT_CONFIG_FN,
-                        help='Name of config file.')
-    args = parser.parse_args()
-
-    if args.daemon: daemon()
-
-    if django_setup: # 1.7
-        django_setup()
-
-    models_active = False
-    wait = False
-    while not models_active:
-        try:
-            _ = Instance.objects.first()
-            _ = NetworkTemplate.objects.first()
-            models_active = True
-        except Exception,e:
-            logger.info(str(e))
-            logger.info('Waiting for data model to come up before starting...')
-            time.sleep(10)
-            wait = True
-
-    if (wait):
-        time.sleep(60) # Safety factor, seeing that we stumbled waiting for the data model to come up.
-    backend = Backend()
-    backend.run()    
-
-if __name__ == '__main__':
-    
-    main() 
diff --git a/xos/tools/xos-manage b/xos/tools/xos-manage
index c06a12b..2045f19 100755
--- a/xos/tools/xos-manage
+++ b/xos/tools/xos-manage
@@ -82,7 +82,7 @@
     python $XOS_DIR/manage.py syncdb --noinput
     if [[ $DJANGO_17 ]]; then
         echo "Loading initial data from fixture..."
-        python $XOS_DIR/manage.py --noobserver --nomodelpolicy loaddata $XOS_DIR/core/fixtures/core_initial_data.json
+        python $XOS_DIR/manage.py --noobserver loaddata $XOS_DIR/core/fixtures/core_initial_data.json
     fi
 }
 function evolvedb {