another merging with master branch
diff --git a/xos/configurations/common/mydeployment.yaml b/xos/configurations/common/mydeployment.yaml
index c81fd93..6d64da6 100644
--- a/xos/configurations/common/mydeployment.yaml
+++ b/xos/configurations/common/mydeployment.yaml
@@ -23,7 +23,7 @@
type: tosca.nodes.Deployment
requirements:
- m1.xlarge:
- node: m1.large
+ node: m1.xlarge
relationship: tosca.relationships.SupportsFlavor
- m1.large:
node: m1.large
diff --git a/xos/services/mcord/models.py b/xos/services/mcord/models.py
index ed13ac3..1b2bd65 100644
--- a/xos/services/mcord/models.py
+++ b/xos/services/mcord/models.py
@@ -15,7 +15,6 @@
from xos.config import Config
MCORD_KIND = "RAN" # This should be changed later I did it fo demo
-VNFM_KIND = "vEPC" # This should be changed later I did it fo demo
MCORD_USE_VTN = getattr(Config(), "networking_use_vtn", False)
VBBU_KIND = "RAN"
VSGW_KIND = "vSGW"
@@ -24,77 +23,6 @@
# The class to represent the service. Most of the service logic is given for us
# in the Service class but, we have some configuration that is specific for
# this example.
-class ProxyService(Service):
- KIND = VNFM_KIND
-
- class Meta:
- # When the proxy field is set to True the model is represented as
- # it's superclass in the database, but we can still change the python
- # behavior. In this case HelloWorldServiceComplete is a Service in the
- # database.
- proxy = True
- # The name used to find this service, all directories are named this
- app_label = "mcord"
- verbose_name = "MCORD VNFM Service"
-
-class VSGWTenant(Tenant):
- class Meta:
- proxy = True
-
- KIND = VSGW_KIND
-
- default_attributes = {"status": None, "action": None, "control": None, "extra": None}
- def __init__(self, *args, **kwargs):
- proxy_services = VNFMService.get_service_objects().all()
- if volt_services:
- self._meta.get_field("provider_service").default = proxy_services[0].id
- super(VSGWTenant, self).__init__(*args, **kwargs)
-
- @property
- def status(self):
- return self.get_attribute("status", self.default_attributes["status"])
-
- @status.setter
- def status(self, value):
- self.set_attribute("status", value)
-
- @property
- def action(self):
- return self.get_attribute("action", self.default_attributes["action"])
-
- @action.setter
- def action(self, value):
- self.set_attribute("action", value)
-
- @property
- def control(self):
- return self.get_attribute("control", self.default_attributes["control"])
-
- @control.setter
- def control(self, value):
- self.set_attribute("control", value)
-
- @property
- def extra(self):
- return self.get_attribute("extra", self.default_attributes["extra"])
-
- @extra.setter
- def extra(self, value):
- self.set_attribute("extra", value)
-
-
- def save(self, *args, **kwargs):
-
- super(VSGWTenant, self).save(*args, **kwargs)
- model_policy_mcord_service_component(self.pk)
-
- def delete(self, *args, **kwargs):
- super(VSGWTenant, self).delete(*args, **kwargs)
-
-
-# This is the class to represent the tenant. Most of the logic is given to use
-# in TenantWithContainer, however there is some configuration and logic that
-# we need to define for this example.
class MCORDService(Service):
KIND = MCORD_KIND
diff --git a/xos/services/mcord/models.py.old3 b/xos/services/mcord/models.py.old3
deleted file mode 100644
index 1b2bd65..0000000
--- a/xos/services/mcord/models.py.old3
+++ /dev/null
@@ -1,283 +0,0 @@
-from django.db import models
-from core.models import Service, PlCoreBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber, NetworkParameter, NetworkParameterType, AddressPool, Port
-from core.models.plcorebase import StrippedCharField
-import os
-from django.db import models, transaction
-from django.forms.models import model_to_dict
-from django.db.models import Q
-from operator import itemgetter, attrgetter, methodcaller
-from core.models import Tag
-from core.models.service import LeastLoadedNodeScheduler
-import traceback
-from xos.exceptions import *
-from core.models import SlicePrivilege, SitePrivilege
-from sets import Set
-from xos.config import Config
-
-MCORD_KIND = "RAN" # This should be changed later I did it fo demo
-MCORD_USE_VTN = getattr(Config(), "networking_use_vtn", False)
-VBBU_KIND = "RAN"
-VSGW_KIND = "vSGW"
-VPGW_KIND = "vPGW"
-net_types = ("s1u", "s1mme", "rru")
-# The class to represent the service. Most of the service logic is given for us
-# in the Service class but, we have some configuration that is specific for
-# this example.
-class MCORDService(Service):
- KIND = MCORD_KIND
-
- class Meta:
- # When the proxy field is set to True the model is represented as
- # it's superclass in the database, but we can still change the python
- # behavior. In this case HelloWorldServiceComplete is a Service in the
- # database.
- proxy = True
- # The name used to find this service, all directories are named this
- app_label = "mcord"
- verbose_name = "MCORD Service"
-
-# This is the class to represent the tenant. Most of the logic is given to use
-# in TenantWithContainer, however there is some configuration and logic that
-# we need to define for this example.
-class VBBUComponent(TenantWithContainer):
-
- class Meta:
- # Same as a above, HelloWorldTenantComplete is represented as a
- # TenantWithContainer, but we change the python behavior.
- proxy = True
- verbose_name = "VBBU MCORD Service Component"
-
- # The kind of the service is used on forms to differentiate this service
- # from the other services.
- KIND = VBBU_KIND
-
- # Ansible requires that the sync_attributes field contain nat_ip and nat_mac
- # these will be used to determine where to SSH to for ansible.
- # Getters must be defined for every attribute specified here.
- sync_attributes = ("s1u_ip", "s1u_mac",
- "s1mme_ip", "s1mme_mac",
- "rru_ip", "rru_mac")
- # default_attributes is used cleanly indicate what the default values for
- # the fields are.
- default_attributes = {"display_message": "New vBBU Component", "s1u_tag": "901", "s1mme_tag": "900", "rru_tag": "999"}
- def __init__(self, *args, **kwargs):
- mcord_services = MCORDService.get_service_objects().all()
- # When the tenant is created the default service in the form is set
- # to be the first created HelloWorldServiceComplete
- if mcord_services:
- self._meta.get_field(
- "provider_service").default = mcord_services[0].id
- super(VBBUComponent, self).__init__(*args, **kwargs)
-
- def can_update(self, user):
- #Allow creation of this model instances for non-admin users also
- return True
-
- def save(self, *args, **kwargs):
- if not self.creator:
- if not getattr(self, "caller", None):
- # caller must be set when creating a monitoring channel since it creates a slice
- raise XOSProgrammingError("ServiceComponents's self.caller was not set")
- self.creator = self.caller
- if not self.creator:
- raise XOSProgrammingError("ServiceComponents's self.creator was not set")
-
- super(VBBUComponent, self).save(*args, **kwargs)
- # This call needs to happen so that an instance is created for this
- # tenant is created in the slice. One instance is created per tenant.
- model_policy_mcord_servicecomponent(self.pk)
-
- def save_instance(self, instance):
- with transaction.atomic():
- super(VBBUComponent, self).save_instance(instance)
- if instance.isolation in ["vm"]:
- for ntype in net_types:
- lan_network = self.get_lan_network(instance, ntype)
- port = self.find_or_make_port(instance,lan_network)
- if (ntype == "s1u"):
- port.set_parameter("s_tag", self.s1u_tag)
- port.set_parameter("neutron_port_name", "stag-%s" % self.s1u_tag)
- port.save()
- elif (ntype == "s1mme"):
- port.set_parameter("s_tag", self.s1mme_tag)
- port.set_parameter("neutron_port_name", "stag-%s" % self.s1mme_tag)
- port.save()
- elif (ntype == "rru"):
- port.set_parameter("s_tag", self.rru_tag)
- port.set_parameter("neutron_port_name", "stag-%s" % self.rru_tag)
- port.save()
-
- def delete(self, *args, **kwargs):
- # Delete the instance that was created for this tenant
- self.cleanup_container()
- super(VBBUComponent, self).delete(*args, **kwargs)
-
- def find_or_make_port(self, instance, network, **kwargs):
- port = Port.objects.filter(instance=instance, network=network)
- if port:
- port = port[0]
- print "port already exist", port[0]
- else:
- port = Port(instance=instance, network=network, **kwargs)
- print "NETWORK", network, "MAKE_PORT", port
- port.save()
- return port
-
- def get_lan_network(self, instance, ntype):
- slice = self.provider_service.slices.all()[0]
- lan_networks = [x for x in slice.networks.all() if ntype in x.name]
- if not lan_networks:
- raise XOSProgrammingError("No lan_network")
- return lan_networks[0]
-
- def manage_container(self):
- from core.models import Instance, Flavor
-
- if self.deleted:
- return
-
- # For container or container_vm isolation, use what TenantWithCotnainer
- # provides us
- slice = self.get_slice()
- if slice.default_isolation in ["container_vm", "container"]:
- super(VBBUComponent,self).manage_container()
- return
-
- if not self.s1u_tag:
- raise XOSConfigurationError("S1U_TAG is missed")
-
- if not self.s1mme_tag:
- raise XOSConfigurationError("S1U_TAG is missed")
-
- if not self.rru_tag:
- raise XOSConfigurationError("S1U_TAG is missed")
-
- if self.instance:
- # We're good.
- return
-
- instance = self.make_instance()
- self.instance = instance
- super(TenantWithContainer, self).save()
-
- def get_slice(self):
- if not self.provider_service.slices.count():
- raise XOSConfigurationError("The service has no slices")
- slice = self.provider_service.slices.all()[0]
- return slice
-
- def make_instance(self):
- slice = self.provider_service.slices.all()[0]
- flavors = Flavor.objects.filter(name=slice.default_flavor)
-# flavors = Flavor.objects.filter(name="m1.xlarge")
- if not flavors:
- raise XOSConfigurationError("No default flavor")
- default_flavor = slice.default_flavor
- slice = self.provider_service.slices.all()[0]
- if slice.default_isolation == "container_vm":
- (node, parent) = ContainerVmScheduler(slice).pick()
- else:
- (node, parent) = LeastLoadedNodeScheduler(slice).pick()
- instance = Instance(slice = slice,
- node = node,
- image = self.image,
- creator = self.creator,
- deployment = node.site_deployment.deployment,
- flavor = flavors[0],
- isolation = slice.default_isolation,
- parent = parent)
- self.save_instance(instance)
- return instance
-
- def ip_to_mac(self, ip):
- (a, b, c, d) = ip.split('.')
- return "02:42:%02x:%02x:%02x:%02x" % (int(a), int(b), int(c), int(d))
-
- # Getter for the message that will appear on the webpage
- # By default it is "Hello World!"
- @property
- def display_message(self):
- return self.get_attribute(
- "display_message",
- self.default_attributes['display_message'])
-
- @display_message.setter
- def display_message(self, value):
- self.set_attribute("display_message", value)
-
- @property
- def s1u_tag(self):
- return self.get_attribute(
- "s1u_tag",
- self.default_attributes['s1u_tag'])
-
- @s1u_tag.setter
- def s1u_tag(self, value):
- self.set_attribute("s1u_tag", value)
-
- @property
- def s1mme_tag(self):
- return self.get_attribute(
- "s1mme_tag",
- self.default_attributes['s1mme_tag'])
-
- @s1mme_tag.setter
- def s1mme_tag(self, value):
- self.set_attribute("s1mme_tag", value)
-
- @property
- def rru_tag(self):
- return self.get_attribute(
- "rru_tag",
- self.default_attributes['rru_tag'])
-
- @rru_tag.setter
- def rru_tag(self, value):
- self.set_attribute("rru_tag", value)
-
-
- @property
- def addresses(self):
- if (not self.id) or (not self.instance):
- return {}
-
- addresses = {}
- for ns in self.instance.ports.all():
- if "s1u" in ns.network.name.lower():
- addresses["s1u"] = (ns.ip, ns.mac)
- elif "s1mme" in ns.network.name.lower():
- addresses["s1mme"] = (ns.ip, ns.mac)
- elif "rru" in ns.network.name.lower():
- addresses["rru"] = (ns.ip, ns.mac)
- return addresses
-
-
- @property
- def s1u_ip(self):
- return self.addresses.get("s1u", (None, None))[0]
- @property
- def s1u_mac(self):
- return self.addresses.get("s1u", (None, None))[1]
- @property
- def s1mme_ip(self):
- return self.addresses.get("s1mme", (None, None))[0]
- @property
- def s1mme_mac(self):
- return self.addresses.get("s1mme", (None, None))[1]
- @property
- def rru_ip(self):
- return self.addresses.get("rru", (None, None))[0]
- @property
- def rru_mac(self):
- return self.addresses.get("rru", (None, None))[1]
-
-def model_policy_mcord_servicecomponent(pk):
- # This section of code is atomic to prevent race conditions
- with transaction.atomic():
- # We find all of the tenants that are waiting to update
- component = VBBUComponent.objects.select_for_update().filter(pk=pk)
- if not component:
- return
- # Since this code is atomic it is safe to always use the first tenant
- component = component[0]
- component.manage_container()
diff --git a/xos/synchronizers/vnfm/model-deps b/xos/synchronizers/vnfm/model-deps
deleted file mode 100644
index 0967ef4..0000000
--- a/xos/synchronizers/vnfm/model-deps
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/xos/synchronizers/vnfm/run.sh b/xos/synchronizers/vnfm/run.sh
deleted file mode 100755
index 81cd4d4..0000000
--- a/xos/synchronizers/vnfm/run.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export XOS_DIR=/opt/xos
-python vnfm-synchronizer.py -C $XOS_DIR/synchronizers/vnfm/vnfm_synchronizer_config
diff --git a/xos/synchronizers/vnfm/start.sh b/xos/synchronizers/vnfm/start.sh
deleted file mode 100755
index 5a61e1a..0000000
--- a/xos/synchronizers/vnfm/start.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-export XOS_DIR=/opt/xos
-nohup python vnfm-synchronizer.py -C $XOS_DIR/synchronizers/vnfm/vnfm_synchronizer_config > /dev/null 2>&1 &
diff --git a/xos/synchronizers/vnfm/steps/sync_tasks.py b/xos/synchronizers/vnfm/steps/sync_tasks.py
deleted file mode 100644
index fb8988e..0000000
--- a/xos/synchronizers/vnfm/steps/sync_tasks.py
+++ /dev/null
@@ -1,134 +0,0 @@
-import os
-import requests
-import socket
-import sys
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.syncstep import SyncStep
-from core.models import Service, Port, Controller, Tag
-from core.models.service import COARSE_KIND
-from services.cord.models import VSGWTenant
-from services.cord.models import Tenant
-from xos.logger import Logger, logging
-from requests.auth import HTTPBasicAuth
-
-# hpclibrary will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__),"..")
-sys.path.insert(0,parentdir)
-
-logger = Logger(level=logging.INFO)
-
-# XXX should save and load this
-glo_saved_vtn_maps = []
-
-class SyncTasks(SyncStep):
- requested_interval = 0 # 3600
- provides=[Task]
- observes=Task
-
- def __init__(self, **args):
- SyncStep.__init__(self, **args)
-
- def call(self, **args):
- global glo_saved_vtn_maps
-
- logger.info("sync'ing vsg tenant to port addresses")
-
- # build up a dictionary of port-->[wan_addrs] mappings
- tasks_todo = {}
- for vsg in VSGTenant.get_tenant_objects().all():
- if not vsg.instance:
- logger.info("skipping vsg %s because it has no instance" % vsg)
-
- wan_ip = vsg.wan_container_ip
- if not wan_ip:
- logger.info("skipping vsg %s because it has no wan_container_ip" % vsg)
-
- wan_mac = vsg.wan_container_mac
- if not wan_mac:
- logger.info("skipping vsg %s because it has no wan_container_mac" % vsg)
-
- lan_network = vsg.get_lan_network(vsg.instance)
- if not lan_network:
- logger.info("skipping vsg %s because it has no lan_network" % vsg)
-
- lan_port = Port.objects.filter(instance = vsg.instance, network=lan_network)
- if not lan_port:
- logger.info("skipping vsg %s because it has no lan_port" % vsg)
- lan_port = lan_port[0]
-
- if not lan_port.port_id:
- logger.info("skipping vsg %s because its lan_port has no port_id" % vsg)
-
- if not (lan_port.pk in port_addrs):
- port_addrs[lan_port.pk] = []
- entry = {"mac_address": wan_mac, "ip_address": wan_ip}
- addr_pairs = port_addrs[lan_port.pk]
- if not entry in addr_pairs:
- addr_pairs.append(entry)
-
- # now do the VM_WAN_IP from the instance
- if vsg.instance:
- wan_vm_ip = vsg.wan_vm_ip
- wan_vm_mac = vsg.wan_vm_mac
- entry = {"mac_address": wan_vm_mac, "ip_address": wan_vm_ip}
- if not entry in addr_pairs:
- addr_pairs.append(entry)
-
- # Get all ports in all controllers
- ports_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.quantum.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
-
- for port_pk in port_addrs.keys():
- port = Port.objects.get(pk=port_pk)
- addr_pairs = port_addrs[port_pk]
- neutron_port = ports_by_id.get(port.port_id,None)
- if not neutron_port:
- logger.info("failed to get neutron port for port %s" % port)
- continue
-
- ips = [x["ip_address"] for x in addr_pairs]
-
- changed = False
-
- # delete addresses in neutron that don't exist in XOS
- aaps = neutron_port.get("allowed_address_pairs", [])
- for aap in aaps[:]:
- if not aap["ip_address"] in ips:
- logger.info("removing address %s from port %s" % (aap["ip_address"], port))
- aaps.remove(aap)
- changed = True
-
- aaps_ips = [x["ip_address"] for x in aaps]
-
- # add addresses in XOS that don't exist in neutron
- for addr in addr_pairs:
- if not addr["ip_address"] in aaps_ips:
- logger.info("adding address %s to port %s" % (addr, port))
- aaps.append( addr )
- aaps_ips.append(addr["ip_address"])
- changed = True
-
- if changed:
- logger.info("updating port %s" % port)
- driver.shell.quantum.update_port(port.port_id, {"port": {"allowed_address_pairs": aaps}})
-
-
-
-
-
-
-
diff --git a/xos/synchronizers/vnfm/steps/sync_tenant.py b/xos/synchronizers/vnfm/steps/sync_tenant.py
deleted file mode 100644
index 4dfa177..0000000
--- a/xos/synchronizers/vnfm/steps/sync_tenant.py
+++ /dev/null
@@ -1,95 +0,0 @@
-import os
-import requests
-import socket
-import sys
-import base64
-from django.db.models import F, Q
-from xos.config import Config
-from synchronizers.base.syncstep import SyncStep
-from core.models import Service
-from core.models.service import COARSE_KIND
-from services.cord.models import Tenant
-from xos.logger import Logger, logging
-from requests.auth import HTTPBasicAuth
-
-# hpclibrary will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__),"..")
-sys.path.insert(0,parentdir)
-
-logger = Logger(level=logging.INFO)
-
-# XXX should save and load this
-glo_saved_vtn_maps = []
-
-class SyncVSGWTenant(SyncStep):
- provides=[Tenant]
- observes=Tenant
- requested_interval=0
-
- def __init__(self, **args):
- SyncStep.__init__(self, **args)
-
- def get_vnfm_service(self):
-# vtn_tenant = Tenant.objects.filter(name="VTN_ONOS_app") # XXX fixme - hardcoded
-# if not vtn_tenant:
-# raise "No VTN Onos App found"
-# vtn_tenant = vtn_tenant[0]
-#
-# vtn_service = vtn_tenant.provider_service
- vnfm_service = Service.objects.filter(name="service_vnfm") # XXX fixme - harcoded
- if not vtn_service:
- raise "No VNFM Service"
-
- return vnfm_service[0]
-
- def get_vnfm_params(self):
- vnfm_service = self.get_vnfm_vsgw_service()
-
- if not vnfm_service.slices.exists():
- raise "VNFM Service has no slices"
-
- vnfm_slice = vnfm_service.slices.all()[0]
-
- if not vnfm_slice.instances.exists():
- raise "VNFM Slice has no instances"
-
- vnfm_instance = vnfm_slice.instances.all()[0]
-
- return vnfm_instance.node.name
-
- def call(self, **args):
- global glo_saved_vtn_maps
-
- logger.info("sync'ing vtn services")
-
- vtn_maps = []
- for service in Service.objects.all():
- for id in service.get_vtn_src_ids():
- dependencies = service.get_vtn_dependencies_ids()
- if dependencies:
- for dependency in dependencies:
- vtn_maps.append( (id, dependency) )
-
- for vtn_map in vtn_maps:
- if not (vtn_map in glo_saved_vtn_maps):
- # call vtn rest api to add map
- url = "http://" + self.get_vtn_addr() + ":8181/vnfm/rest-api-url/service-dependency/%s/%s" % (vtn_map[0], vtn_map[1])
-
- print "POST %s" % url
- r = requests.post(url, auth=HTTPBasicAuth('karaf', 'karaf') ) # XXX fixme - hardcoded auth
- if (r.status_code != 200):
- raise Exception("Received error from vtn service (%d)" % r.status_code)
-
- for vtn_map in glo_saved_vtn_maps:
- if not vtn_map in vtn_maps:
- # call vtn rest api to delete map
- url = "http://" + self.get_vtn_addr() + ":8181/vnfm/rest-api-url/service-dependency/%s/%s" % (vtn_map[0],vtn_map[1])
-
- print "DELETE %s" % url
- r = requests.delete(url, auth=HTTPBasicAuth('karaf', 'karaf') ) # XXX fixme - hardcoded auth
- if (r.status_code != 200):
- raise Exception("Received error from vtn service (%d)" % r.status_code)
-
- glo_saved_vtn_maps = vtn_maps
- # TODO: save this
-
diff --git a/xos/synchronizers/vnfm/stop.sh b/xos/synchronizers/vnfm/stop.sh
deleted file mode 100755
index 64ccd03..0000000
--- a/xos/synchronizers/vnfm/stop.sh
+++ /dev/null
@@ -1 +0,0 @@
-pkill -9 -f vnfm-synchronizer.py
diff --git a/xos/synchronizers/vnfm/supervisor/vtn-observer.conf b/xos/synchronizers/vnfm/supervisor/vtn-observer.conf
deleted file mode 100644
index 714afa7..0000000
--- a/xos/synchronizers/vnfm/supervisor/vtn-observer.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[program:vtn-observer]
-command=python /opt/xos/observers/vbng/vtn-observer.py -C /opt/xos/observers/vbng/vtn_observer_config
diff --git a/xos/synchronizers/vnfm/vnfm-synchronizer.py b/xos/synchronizers/vnfm/vnfm-synchronizer.py
deleted file mode 100755
index 84bec4f..0000000
--- a/xos/synchronizers/vnfm/vnfm-synchronizer.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-synchronizer")
-mod.main()
diff --git a/xos/synchronizers/vnfm/vnfm_synchronizer_config b/xos/synchronizers/vnfm/vnfm_synchronizer_config
deleted file mode 100644
index 55594e2..0000000
--- a/xos/synchronizers/vnfm/vnfm_synchronizer_config
+++ /dev/null
@@ -1,44 +0,0 @@
-
-[plc]
-name=plc
-deployment=VICCI
-
-[db]
-name=xos
-user=postgres
-password=password
-host=localhost
-port=5432
-
-[api]
-host=128.112.171.237
-port=8000
-ssl_key=None
-ssl_cert=None
-ca_ssl_cert=None
-ratelimit_enabled=0
-omf_enabled=0
-mail_support_address=support@localhost
-nova_enabled=True
-
-[observer]
-name=vnfm
-dependency_graph=/opt/xos/synchronizers/vnfm/model-deps
-steps_dir=/opt/xos/synchronizers/vnfm/steps
-sys_dir=/opt/xos/synchronizers/vnfm/sys
-deleters_dir=/opt/xos/synchronizers/vnfm/deleters
-log_file=console
-#/var/log/hpc.log
-driver=openstack
-pretend=False
-backoff_disabled=True
-
-[nova]
-ca_ssl_cert=/etc/ssl/certs/ca-certificates.crt
-
-[feefie]
-client_id='vicci_dev_central'
-user_id='pl'
-
-[networking]
-use_vtn=True