CORD-1010 add certificate to no-build containers, file log_file config option

Change-Id: Iebb72259cceaeb220c5e56373934c8732951dffa
diff --git a/xos/synchronizers/new_base/dependency_walker_new.py b/xos/synchronizers/new_base/dependency_walker_new.py
index b5ffff8..17b7a9a 100644
--- a/xos/synchronizers/new_base/dependency_walker_new.py
+++ b/xos/synchronizers/new_base/dependency_walker_new.py
@@ -20,7 +20,7 @@
 missing_links={}
 
 try:
-	dep_data = open(Config().dependency_graph).read()
+	dep_data = open(Config().observer_dependency_graph).read()
 except:
 	dep_data = open(XOS_DIR + '/model-deps').read()
 
diff --git a/xos/synchronizers/new_base/model_policy_loop.py b/xos/synchronizers/new_base/model_policy_loop.py
index eee49b1..61fb7c3 100644
--- a/xos/synchronizers/new_base/model_policy_loop.py
+++ b/xos/synchronizers/new_base/model_policy_loop.py
@@ -71,7 +71,7 @@
 
     # These are the models whose children get deleted when they are
     delete_policy_models = ['Slice','Instance','Network']
-    sender_name = instance.__class__.__name__
+    sender_name = getattr(instance, "model_name", instance.__class__.__name__)
     policy_name = 'model_policy_%s'%sender_name
     noargs = False
 
@@ -82,7 +82,7 @@
         walk_inv_deps(delete_if_inactive, instance)
 
     try:
-        policy_handler = model_policies.get(policy_name, None) # getattr(model_policies, policy_name, None)
+        policy_handler = model_policies.get(policy_name, None)
         logger.debug("MODEL POLICY: handler %s %s" % (policy_name, policy_handler))
         if policy_handler is not None:
             if (deleted):
diff --git a/xos/synchronizers/new_base/syncstep.py b/xos/synchronizers/new_base/syncstep.py
index cf5b40a..492351a 100644
--- a/xos/synchronizers/new_base/syncstep.py
+++ b/xos/synchronizers/new_base/syncstep.py
@@ -27,6 +27,8 @@
 def deepgetattr(obj, attr):
     return reduce(getattr, attr.split('.'), obj)
 
+def obj_class_name(obj):
+    return getattr(obj, "model_name", obj.__class__.__name__)
 
 class InnocuousException(Exception):
     pass
@@ -120,11 +122,11 @@
                 if (obj.backend_status != failed.backend_status):
                     obj.backend_status = failed.backend_status
                     obj.save(update_fields=['backend_status'])
-                raise FailedDependency("Failed dependency for %s:%s peer %s:%s failed  %s:%s" % (obj.__class__.__name__, str(getattr(obj,"pk","no_pk")), peer_object.__class__.__name__, str(getattr(peer_object,"pk","no_pk")), failed.__class__.__name__, str(getattr(failed,"pk","no_pk"))))
+                raise FailedDependency("Failed dependency for %s:%s peer %s:%s failed  %s:%s" % (obj_class_name(obj), str(getattr(obj,"pk","no_pk")), obj_class_name(peer_object), str(getattr(peer_object,"pk","no_pk")), obj_class_name(failed), str(getattr(failed,"pk","no_pk"))))
 
 
     def sync_record(self, o):
-        logger.debug("Sync_record called for %s %s" % (o.__class__.__name__, str(o)))
+        logger.debug("Sync_record called for %s %s" % (obj_class_name(o), str(o)))
 
 #        try:
 #            controller = o.get_controller()
diff --git a/xos/synchronizers/onboarding/xosbuilder.py b/xos/synchronizers/onboarding/xosbuilder.py
index 4b879aa..5ed4bc9 100644
--- a/xos/synchronizers/onboarding/xosbuilder.py
+++ b/xos/synchronizers/onboarding/xosbuilder.py
@@ -423,6 +423,9 @@
                                   "read_only": True},
                                  {"host_path": "/opt/cord/build/platform-install/credentials/xosadmin@opencord.org",
                                   "container_path": "/opt/xos/services/%s/credentials/xosadmin@opencord.org" % c.name,
+                                  "read_only": True},
+                                 {"host_path": "/opt/cord_profile/im_cert_chain.pem",
+                                  "container_path": "/usr/local/share/ca-certificates/local_certs.crt",
                                   "read_only": True}]
 
                     # keys inside onboarding sync are relative to /opt/xos/key_import
diff --git a/xos/xos/logger.py b/xos/xos/logger.py
index 271c808..1f57a4a 100644
--- a/xos/xos/logger.py
+++ b/xos/xos/logger.py
@@ -67,10 +67,7 @@
 
         # default is to locate loggername from the logfile if avail.
         if not logfile:
-            try:
-                logfile = Config().logfile
-            except:
-                logfile = "/var/log/xos.log"
+            logfile = getattr(Config(), "log_file", "/var/log/xos.log")
 
         # allow config-file override of console/logfile level
         level_str = getattr(Config(), "log_level", None)
diff --git a/xos/xos_client/xosapi/convenience/controller.py b/xos/xos_client/xosapi/convenience/controller.py
new file mode 100644
index 0000000..e7a864a
--- /dev/null
+++ b/xos/xos_client/xosapi/convenience/controller.py
@@ -0,0 +1,12 @@
+import json
+from xosapi.orm import ORMWrapper, register_convenience_wrapper
+
+class ORMWrapperController(ORMWrapper):
+    @property
+    def auth_url_v3(self):
+        if self.auth_url and self.auth_url[-1] == '/':
+            return '{}/v3/'.format('/'.join(self.auth_url.split('/')[:-2]))
+        else:
+            return '{}/v3/'.format('/'.join(self.auth_url.split('/')[:-1]))
+
+register_convenience_wrapper("Controller", ORMWrapperController)
diff --git a/xos/xos_client/xosapi/orm.py b/xos/xos_client/xosapi/orm.py
index 0566d7f..c21a994 100644
--- a/xos/xos_client/xosapi/orm.py
+++ b/xos/xos_client/xosapi/orm.py
@@ -461,4 +461,5 @@
 import convenience.service
 import convenience.tenant
 import convenience.onosapp
+import convenience.controller