Merge with master
diff --git a/xos/configurations/cord-pod/Makefile b/xos/configurations/cord-pod/Makefile
index 950f758..1ffa791 100644
--- a/xos/configurations/cord-pod/Makefile
+++ b/xos/configurations/cord-pod/Makefile
@@ -9,14 +9,13 @@
sudo docker-compose run xos python /opt/xos/tosca/run.py none /opt/xos/configurations/common/fixtures.yaml
sudo docker-compose run xos python /opt/xos/tosca/run.py none /opt/xos/configurations/common/mydeployment.yaml
sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/setup.yaml
- sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/nodes.yaml
- sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/nodes.yaml
+ sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/frontend/sample.yaml
sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/images.yaml
vtn: vtn-external.yaml
sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/vtn-external.yaml
-cord:
+cord:
sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/mgmt-net.yaml
sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/cord-vtn-vsg.yaml
diff --git a/xos/configurations/cord-pod/cord-vtn-vsg.yaml b/xos/configurations/cord-pod/cord-vtn-vsg.yaml
index a315e41..6f22736 100644
--- a/xos/configurations/cord-pod/cord-vtn-vsg.yaml
+++ b/xos/configurations/cord-pod/cord-vtn-vsg.yaml
@@ -75,6 +75,46 @@
view_url: /admin/fabric/fabricservice/$id$/
replaces: service_fabric
+ service#ONOS_Fabric:
+ type: tosca.nodes.ONOSService
+ requirements:
+ properties:
+ kind: onos
+ view_url: /admin/onos/onosservice/$id$/
+ no_container: true
+ rest_hostname: onos-fabric
+ replaces: service_ONOS_Fabric
+
+ service#ONOS_CORD:
+ type: tosca.nodes.ONOSService
+
+ vOLT_ONOS_app:
+ type: tosca.nodes.ONOSvOLTApp
+ requirements:
+ - onos_tenant:
+ node: service#ONOS_CORD
+ relationship: tosca.relationships.TenantOfService
+ - volt_service:
+ node: service#volt
+ relationship: tosca.relationships.UsedByService
+ properties:
+ install_dependencies: onos-ext-notifier-1.0-SNAPSHOT.oar, onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar
+ dependencies: org.onosproject.openflow-base, org.onosproject.olt, org.ciena.onos.ext_notifier, org.ciena.onos.volt_event_publisher
+ autogenerate: volt-network-cfg, volt-component-cfg
+
+ vRouter_ONOS_app:
+ type: tosca.nodes.ONOSvRouterApp
+ requirements:
+ - onos_tenant:
+ node: service#ONOS_Fabric
+ relationship: tosca.relationships.TenantOfService
+ - vrouter_service:
+ node: service_vrouter
+ relationship: tosca.relationships.UsedByService
+ properties:
+ dependencies: org.onosproject.vrouter
+ autogenerate: vrouter-network-cfg
+
Private:
type: tosca.nodes.NetworkTemplate
diff --git a/xos/configurations/cord-pod/docker-compose.yml b/xos/configurations/cord-pod/docker-compose.yml
index e2a5768..5087485 100644
--- a/xos/configurations/cord-pod/docker-compose.yml
+++ b/xos/configurations/cord-pod/docker-compose.yml
@@ -3,20 +3,20 @@
expose:
- "5432"
-xos_synchronizer_openstack:
- command: bash -c "sleep 120; python /opt/xos/synchronizers/openstack/xos-synchronizer.py"
- image: xosproject/xos-synchronizer-openstack
- labels:
- org.xosproject.kind: synchronizer
- org.xosproject.target: openstack
- links:
- - xos_db
- volumes:
- - ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
- - ./xos_cord_config:/opt/xos/xos_configuration/xos_cord_config:ro
- - .:/root/setup:ro
- - ../vtn/files/xos_vtn_config:/opt/xos/xos_configuration/xos_vtn_config:ro
- - ./images:/opt/xos/images:ro
+#xos_synchronizer_openstack:
+# command: bash -c "sleep 120; python /opt/xos/synchronizers/openstack/xos-synchronizer.py"
+# image: xosproject/xos-synchronizer-openstack
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: openstack
+# links:
+# - xos_db
+# volumes:
+# - ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
+# - ./xos_cord_config:/opt/xos/xos_configuration/xos_cord_config:ro
+# - .:/root/setup:ro
+# - ../vtn/files/xos_vtn_config:/opt/xos/xos_configuration/xos_vtn_config:ro
+# - ./images:/opt/xos/images:ro
xos_synchronizer_onos:
image: xosproject/xos-synchronizer-openstack
@@ -30,28 +30,28 @@
- .:/root/setup:ro
- ./id_rsa:/opt/xos/synchronizers/onos/onos_key:ro # private key
-xos_synchronizer_vcpe:
- image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120; cp /root/setup/node_key /opt/xos/synchronizers/vcpe/; chmod 0600 /opt/xos/synchronizers/vcpe/node_key; python /opt/xos/synchronizers/vcpe/vcpe-synchronizer.py -C /root/setup/files/vcpe_synchronizer_config"
- labels:
- org.xosproject.kind: synchronizer
- org.xosproject.target: vcpe
- links:
- - xos_db
- volumes:
- - .:/root/setup:ro
- - ./id_rsa:/opt/xos/synchronizers/vcpe/vcpe_private_key:ro # private key
+#xos_synchronizer_vcpe:
+# image: xosproject/xos-synchronizer-openstack
+# command: bash -c "sleep 120; cp /root/setup/node_key /opt/xos/synchronizers/vcpe/; chmod 0600 /opt/xos/synchronizers/vcpe/node_key; python /opt/xos/synchronizers/vcpe/vcpe-synchronizer.py -C /root/setup/files/vcpe_synchronizer_config"
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: vcpe
+# links:
+# - xos_db
+# volumes:
+# - .:/root/setup:ro
+# - ./id_rsa:/opt/xos/synchronizers/vcpe/vcpe_private_key:ro # private key
-xos_synchronizer_vtn:
- image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120; python /opt/xos/synchronizers/vtn/vtn-synchronizer.py -C /opt/xos/synchronizers/vtn/vtn_synchronizer_config"
- labels:
- org.xosproject.kind: synchronizer
- org.xosproject.target: vtn
- links:
- - xos_db
- volumes:
- - .:/root/setup:ro
+#xos_synchronizer_vtn:
+# image: xosproject/xos-synchronizer-openstack
+# command: bash -c "sleep 120; python /opt/xos/synchronizers/vtn/vtn-synchronizer.py -C /opt/xos/synchronizers/vtn/vtn_synchronizer_config"
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: vtn
+# links:
+# - xos_db
+# volumes:
+# - .:/root/setup:ro
#xos_synchronizer_vbng:
# image: xosproject/xos-synchronizer-openstack
@@ -62,29 +62,29 @@
# links:
# - xos_db
-xos_synchronizer_monitoring_channel:
- image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120; python /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py -C /root/setup/files/monitoring_channel_synchronizer_config"
- labels:
- org.xosproject.kind: synchronizer
- org.xosproject.target: monitoring_channel
- links:
- - xos_db
- volumes:
- - .:/root/setup:ro
- - ./id_rsa:/opt/xos/synchronizers/monitoring_channel/monitoring_channel_private_key:ro # private key
+#xos_synchronizer_monitoring_channel:
+# image: xosproject/xos-synchronizer-openstack
+# command: bash -c "sleep 120; python /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py -C /root/setup/files/monitoring_channel_synchronizer_config"
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: monitoring_channel
+# links:
+# - xos_db
+# volumes:
+# - .:/root/setup:ro
+# - ./id_rsa:/opt/xos/synchronizers/monitoring_channel/monitoring_channel_private_key:ro # private key
-xos_synchronizer_vtr:
- image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120; cp /root/setup/node_key /opt/xos/synchronizers/vtr/; chmod 0600 /opt/xos/synchronizers/vtr/node_key; python /opt/xos/synchronizers/vtr/vtr-synchronizer.py -C /root/setup/files/vtr_synchronizer_config"
- labels:
- org.xosproject.kind: synchronizer
- org.xosproject.target: vtr
- links:
- - xos_db
- volumes:
- - .:/root/setup:ro
- - ./id_rsa:/opt/xos/synchronizers/vtr/vcpe_private_key:ro # private key
+#xos_synchronizer_vtr:
+# image: xosproject/xos-synchronizer-openstack
+# command: bash -c "sleep 120; cp /root/setup/node_key /opt/xos/synchronizers/vtr/; chmod 0600 /opt/xos/synchronizers/vtr/node_key; python /opt/xos/synchronizers/vtr/vtr-synchronizer.py -C /root/setup/files/vtr_synchronizer_config"
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: vtr
+# links:
+# - xos_db
+# volumes:
+# - .:/root/setup:ro
+# - ./id_rsa:/opt/xos/synchronizers/vtr/vcpe_private_key:ro # private key
xos:
command: python /opt/xos/manage.py runserver 0.0.0.0:80 --insecure --makemigrations
diff --git a/xos/configurations/cord-pod/make-vtn-external-yaml.sh b/xos/configurations/cord-pod/make-vtn-external-yaml.sh
index 8d0885d..a7f04c1 100644
--- a/xos/configurations/cord-pod/make-vtn-external-yaml.sh
+++ b/xos/configurations/cord-pod/make-vtn-external-yaml.sh
@@ -106,4 +106,4 @@
properties:
dependencies: org.onosproject.drivers, org.onosproject.drivers.ovsdb, org.onosproject.openflow-base, org.onosproject.ovsdb-base, org.onosproject.dhcp, org.onosproject.cordvtn, org.onosproject.olt, org.onosproject.igmp, org.onosproject.cordmcast
autogenerate: vtn-network-cfg
-EOF
\ No newline at end of file
+EOF
diff --git a/xos/synchronizers/onos/steps/sync_onosapp.py b/xos/synchronizers/onos/steps/sync_onosapp.py
index 7b80641..64c9452 100644
--- a/xos/synchronizers/onos/steps/sync_onosapp.py
+++ b/xos/synchronizers/onos/steps/sync_onosapp.py
@@ -88,7 +88,7 @@
def get_cluster_configuration(self, o):
instance = self.get_instance(o)
if not instance:
- raise "No instance for ONOS App"
+ raise Exception("No instance for ONOS App")
node_ips = [socket.gethostbyname(instance.node.name)]
ipPrefix = ".".join(node_ips[0].split(".")[:3]) + ".*"
@@ -100,7 +100,7 @@
def get_dynamic_parameter_value(self, o, param):
instance = self.get_instance(o)
if not instance:
- raise "No instance for ONOS App"
+ raise Exception("No instance for ONOS App")
if param == 'rabbit_host':
return instance.controller.rabbit_host
if param == 'rabbit_user':
@@ -242,6 +242,100 @@
return json.dumps(data, indent=4, sort_keys=True)
+ def get_volt_network_config(self, o, attrs):
+ data = {
+ "devices" : {
+ "of:1000000000000001" : {
+ "accessDevice" : {
+ "uplink" : "2",
+ "vlan" : "222",
+ },
+ "basic" : {
+ "driver" : "pmc-olt"
+ }
+ }
+ }
+ }
+ return json.dumps(data, indent=4, sort_keys=True)
+
+ def get_volt_component_config(self, o, attrs):
+ data = {
+ "org.ciena.onos.ext_notifier.KafkaNotificationBridge":{
+ "rabbit.user": "<rabbit_user>",
+ "rabbit.password": "<rabbit_password>",
+ "rabbit.host": "<rabbit_host>",
+ "publish.kafka": "false",
+ "publish.rabbit": "true",
+ "volt.events.rabbit.topic": "notifications.info",
+ "volt.events.rabbit.exchange": "voltlistener",
+ "volt.events.opaque.info": "{project_id: <keystone_tenant_id>, user_id: <keystone_user_id>}",
+ "publish.volt.events": "true"
+ }
+ }
+ return json.dumps(data, indent=4, sort_keys=True)
+
+ def get_vrouter_network_config(self, o, attrs):
+ # From the onosproject wiki:
+ # https://wiki.onosproject.org/display/ONOS/vRouter
+ data = {
+ "devices" : {
+ "of:00000000000000b1" : {
+ "basic" : {
+ "driver" : "softrouter"
+ }
+ }
+ },
+ "ports" : {
+ "of:00000000000000b1/1" : {
+ "interfaces" : [
+ {
+ "name" : "b1-1",
+ "ips" : [ "10.0.1.2/24" ],
+ "mac" : "00:00:00:00:00:01"
+ }
+ ]
+ },
+ "of:00000000000000b1/2" : {
+ "interfaces" : [
+ {
+ "name" : "b1-2",
+ "ips" : [ "10.0.2.2/24" ],
+ "mac" : "00:00:00:00:00:01"
+ }
+ ]
+ },
+ "of:00000000000000b1/3" : {
+ "interfaces" : [
+ {
+ "name" : "b1-3",
+ "ips" : [ "10.0.3.2/24" ],
+ "mac" : "00:00:00:00:00:01"
+ }
+ ]
+ },
+ "of:00000000000000b1/4" : {
+ "interfaces" : [
+ {
+ "name" : "b1-4",
+ "ips" : [ "10.0.4.2/24" ],
+ "mac" : "00:00:00:00:00:02",
+ "vlan" : "100"
+ }
+ ]
+ }
+ },
+ "apps" : {
+ "org.onosproject.router" : {
+ "router" : {
+ "controlPlaneConnectPoint" : "of:00000000000000b1/5",
+ "ospfEnabled" : "true",
+ "interfaces" : [ "b1-1", "b1-2", "b1-2", "b1-4" ]
+ }
+ }
+ }
+ }
+ return json.dumps(data, indent=4, sort_keys=True)
+
def write_configs(self, o):
o.config_fns = []
o.rest_configs = []
@@ -279,17 +373,29 @@
o.early_rest_configs.append( {"endpoint": endpoint, "fn": fn} )
# Generate config files and save them to the appropriate tenant attributes
- autogen = []
+ configs = []
for key, value in attrs.iteritems():
if key == "autogenerate" and value:
- autogen.append(value)
- for label in autogen:
+ for config in value.split(','):
+ configs.append(config.strip())
+
+ for label in configs:
config = None
value = None
if label == "vtn-network-cfg":
- # Generate the VTN config file... where should this live?
+ # Generate the VTN config file... where should this live?
config = "rest_onos/v1/network/configuration/"
value = self.get_vtn_config(o, attrs)
+ elif label == "volt-network-cfg":
+ config = "rest_onos/v1/network/configuration/"
+ value = self.get_volt_network_config(o, attrs)
+ elif label == "volt-component-cfg":
+ config = "component_config"
+ value = self.get_volt_component_config(o, attrs)
+ elif label == "vrouter-network-cfg":
+ config = "rest_onos/v1/network/configuration/"
+ value = self.get_vrouter_network_config(o, attrs)
+
if config:
tas = TenantAttribute.objects.filter(tenant=o, name=config)
if tas:
diff --git a/xos/tosca/custom_types/xos.m4 b/xos/tosca/custom_types/xos.m4
index e83a22f..8970f6d 100644
--- a/xos/tosca/custom_types/xos.m4
+++ b/xos/tosca/custom_types/xos.m4
@@ -195,6 +195,9 @@
rest_onos/v1/network/configuration/:
type: string
required: false
+ autogenerate:
+ type: string
+ required: false
tosca.nodes.ONOSVTNApp:
derived_from: tosca.nodes.Root
@@ -212,6 +215,22 @@
type: string
required: false
+ tosca.nodes.ONOSvRouterApp:
+ derived_from: tosca.nodes.Root
+ description: >
+ An ONOS vRouter Application.
+ properties:
+ xos_base_tenant_props
+ dependencies:
+ type: string
+ required: false
+ rest_onos/v1/network/configuration/:
+ type: string
+ required: false
+ autogenerate:
+ type: string
+ required: false
+
tosca.nodes.VSGService:
description: >
CORD: The vSG Service.
diff --git a/xos/tosca/custom_types/xos.yaml b/xos/tosca/custom_types/xos.yaml
index b41a6c7..2d428e7 100644
--- a/xos/tosca/custom_types/xos.yaml
+++ b/xos/tosca/custom_types/xos.yaml
@@ -250,6 +250,9 @@
rest_onos/v1/network/configuration/:
type: string
required: false
+ autogenerate:
+ type: string
+ required: false
tosca.nodes.ONOSVTNApp:
derived_from: tosca.nodes.Root
@@ -274,6 +277,29 @@
type: string
required: false
+ tosca.nodes.ONOSvRouterApp:
+ derived_from: tosca.nodes.Root
+ description: >
+ An ONOS vRouter Application.
+ properties:
+ kind:
+ type: string
+ default: generic
+ description: Kind of tenant
+ service_specific_id:
+ type: string
+ required: false
+ description: Service specific ID opaque to XOS but meaningful to service
+ dependencies:
+ type: string
+ required: false
+ rest_onos/v1/network/configuration/:
+ type: string
+ required: false
+ autogenerate:
+ type: string
+ required: false
+
tosca.nodes.VSGService:
description: >
CORD: The vSG Service.
diff --git a/xos/tosca/resources/onosapp.py b/xos/tosca/resources/onosapp.py
index dccc8db..a65c717 100644
--- a/xos/tosca/resources/onosapp.py
+++ b/xos/tosca/resources/onosapp.py
@@ -12,7 +12,7 @@
from xosresource import XOSResource
class XOSONOSApp(XOSResource):
- provides = ["tosca.nodes.ONOSApp", "tosca.nodes.ONOSvBNGApp", "tosca.nodes.ONOSvOLTApp", "tosca.nodes.ONOSVTNApp"]
+ provides = ["tosca.nodes.ONOSApp", "tosca.nodes.ONOSvBNGApp", "tosca.nodes.ONOSvOLTApp", "tosca.nodes.ONOSVTNApp", "tosca.nodes.ONOSvRouterApp"]
xos_model = ONOSApp
copyin_props = ["service_specific_id", "dependencies", "install_dependencies"]