CORD-2131 Create M-CORD profile with Spirent RAN+MME
Change-Id: I2cccaeecfb0ef8ee6b8465b7be7af2e532ff1fb6
diff --git a/mcord-spirent-test-playbook.yml b/mcord-spirent-test-playbook.yml
new file mode 100644
index 0000000..66af4e3
--- /dev/null
+++ b/mcord-spirent-test-playbook.yml
@@ -0,0 +1,34 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+---
+# mcord-test-playbook.yml
+# Tests CiaB cord-pod XOS configuration
+
+- name: Include vars
+ hosts: all
+ tasks:
+ - name: Include variables
+ include_vars: "{{ item }}"
+ with_items:
+ - "profile_manifests/{{ cord_profile }}.yml"
+ - profile_manifests/local_vars.yml
+
+- name: Run base M-CORD tests
+ hosts: head
+ become: no
+ roles:
+ - test-mcord-base-spirent
diff --git a/profile_manifests/mcord-spirent.yml b/profile_manifests/mcord-spirent.yml
new file mode 100644
index 0000000..4520e41
--- /dev/null
+++ b/profile_manifests/mcord-spirent.yml
@@ -0,0 +1,279 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# profile_manifests/mcord.yml
+# Configures an M-CORD pod
+
+# site configuration
+site_name: mysite
+site_humanname: MySite
+#site_suffix: "{{ site_name }}.opencord.org"
+site_suffix: "cord.lab"
+deployment_type: MyDeployment
+
+# Feature toggles
+use_maas: True
+
+# XOS config
+xos_tosca_config_templates:
+ - vtn-service.yaml
+ - fabric-service.yaml
+ - management-net.yaml
+ - shared-net.yaml
+ - wan-net.yaml
+ - vsg-net.yaml
+ - flat-net.yaml
+ - xos-gui-extensions.yml
+
+xos_new_tosca_config_templates:
+ - mcord-subscriber.yml
+ - s11-net.yaml
+ - s1u-net.yaml
+ - nbi-net.yaml
+ - sbi-net.yaml
+ - sgi-net.yaml
+ - mcord-spirent-services.yml
+ - sdn-controller-service.yaml
+ - vspgwc-service.yaml
+ - vspgwu-service.yaml
+
+xos_other_templates:
+ - fabric-network-cfg.json
+
+# GUI Config [new GUI]
+gui_project_name: "M-CORD"
+gui_background: "cord-bg.jpg" # TODO find mcord image
+
+enabled_gui_extensions: []
+
+# paths defined in manifest/default.xml
+xos_services:
+ - name: vtn
+ path: orchestration/xos_services/vtn-service
+ keypair: vsg_rsa
+ - name: openstack
+ path: orchestration/xos_services/openstack
+ - name: onos
+ path: orchestration/xos_services/onos-service
+ keypair: onos_rsa
+ - name: fabric
+ path: orchestration/xos_services/fabric
+ - name: venb
+ path: orchestration/xos_services/venb
+ keypair: mcord_rsa
+ - name: sdncontroller
+ path: orchestration/xos_services/sdn-controller
+ keypair: mcord_rsa
+ - name: vspgwc
+ path: orchestration/xos_services/vspgwc
+ keypair: mcord_rsa
+ - name: vspgwu
+ path: orchestration/xos_services/vspgwu
+ keypair: mcord_rsa
+ - name: exampleservice
+ path: orchestration/xos_services/exampleservice
+ keypair: exampleservice_rsa
+
+profile_library: "mcord"
+
+# VTN network configuration
+management_network_cidr: 172.27.0.0/24
+management_network_ip: 172.27.0.1/24
+data_plane_ip: 10.168.0.253/24
+
+# Juju config
+charm_versions:
+ ceilometer: "cs:trusty/ceilometer-17"
+ ceilometer-agent: "cs:trusty/ceilometer-agent-13"
+ glance: "cs:trusty/glance-28"
+ keystone: "cs:trusty/keystone-267"
+ mongodb: "cs:trusty/mongodb-33"
+ percona-cluster: "cs:trusty/percona-cluster-31"
+ nagios: "cs:trusty/nagios-10"
+ neutron-api: "cs:~cordteam/trusty/neutron-api-6"
+ nova-cloud-controller: "cs:trusty/nova-cloud-controller-64"
+ nova-compute: "cs:~cordteam/trusty/nova-compute-3"
+ nrpe: "cs:trusty/nrpe-4"
+ ntp: "cs:trusty/ntp-14"
+ openstack-dashboard: "cs:trusty/openstack-dashboard-19"
+ rabbitmq-server: "cs:trusty/rabbitmq-server-42"
+
+head_lxd_list:
+ - name: "juju-1"
+ service: "juju"
+ aliases:
+ - "juju"
+ ipv4_last_octet: 10
+
+ - name: "ceilometer-1"
+ service: "ceilometer"
+ aliases:
+ - "ceilometer"
+ ipv4_last_octet: 20
+ forwarded_ports:
+ - { ext: 8777, int: 8777 }
+
+ - name: "glance-1"
+ service: "glance"
+ aliases:
+ - "glance"
+ ipv4_last_octet: 30
+ forwarded_ports:
+ - { ext: 9292, int: 9292 }
+
+ - name: "keystone-1"
+ service: "keystone"
+ aliases:
+ - "keystone"
+ ipv4_last_octet: 40
+ forwarded_ports:
+ - { ext: 35357, int: 35357 }
+ - { ext: 4990, int: 4990 }
+ - { ext: 5000, int: 5000 }
+
+ - name: "percona-cluster-1"
+ service: "percona-cluster"
+ aliases:
+ - "percona-cluster"
+ ipv4_last_octet: 50
+
+ - name: "nagios-1"
+ service: "nagios"
+ aliases:
+ - "nagios"
+ ipv4_last_octet: 60
+ forwarded_ports:
+ - { ext: 3128, int: 80 }
+
+ - name: "neutron-api-1"
+ service: "neutron-api"
+ aliases:
+ - "neutron-api"
+ ipv4_last_octet: 70
+ forwarded_ports:
+ - { ext: 9696, int: 9696 }
+
+ - name: "nova-cloud-controller-1"
+ service: "nova-cloud-controller"
+ aliases:
+ - "nova-cloud-controller"
+ ipv4_last_octet: 80
+ forwarded_ports:
+ - { ext: 8774, int: 8774 }
+
+ - name: "openstack-dashboard-1"
+ service: "openstack-dashboard"
+ aliases:
+ - "openstack-dashboard"
+ ipv4_last_octet: 90
+ forwarded_ports:
+ - { ext: 8080, int: 80 }
+
+ - name: "rabbitmq-server-1"
+ service: "rabbitmq-server"
+ aliases:
+ - "rabbitmq-server"
+ ipv4_last_octet: 100
+
+ - name: "mongodb-1"
+ service: "mongodb"
+ aliases:
+ - "mongodb"
+ ipv4_last_octet: 110
+
+lxd_service_list:
+ - ceilometer
+ - glance
+ - keystone
+ - mongodb
+ - nagios
+ - neutron-api
+ - nova-cloud-controller
+ - openstack-dashboard
+ - percona-cluster
+ - rabbitmq-server
+
+standalone_service_list:
+ - ntp
+ - nrpe
+ - ceilometer-agent
+
+
+service_relations:
+ - name: keystone
+ relations: [ "percona-cluster", "nrpe", ]
+
+ - name: nova-cloud-controller
+ relations: [ "percona-cluster", "rabbitmq-server", "glance", "keystone", "nrpe", ]
+
+ - name: glance
+ relations: [ "percona-cluster", "keystone", "nrpe", ]
+
+ - name: neutron-api
+ relations: [ "keystone", "percona-cluster", "rabbitmq-server", "nova-cloud-controller", "nrpe", ]
+
+ - name: openstack-dashboard
+ relations: [ "keystone", "nrpe", ]
+
+ - name: nagios
+ relations: [ "nrpe", ]
+
+ - name: "percona-cluster:juju-info"
+ relations: [ "nrpe:general-info", ]
+
+ - name: rabbitmq-server
+ relations: [ "nrpe", ]
+
+ - name: ceilometer
+ relations: [ "mongodb", "rabbitmq-server", "nagios", "nrpe", ]
+
+ - name: "ceilometer:identity-service"
+ relations: [ "keystone:identity-service", ]
+
+ - name: "ceilometer:ceilometer-service"
+ relations: [ "ceilometer-agent:ceilometer-service", ]
+
+
+compute_relations:
+ - name: nova-compute
+ relations: [ "ceilometer-agent", "glance", "nova-cloud-controller", "nagios", "nrpe", ]
+
+ - name: "nova-compute:shared-db"
+ relations: [ "percona-cluster:shared-db", ]
+
+ - name: "nova-compute:amqp"
+ relations: [ "rabbitmq-server:amqp", ]
+
+ - name: ntp
+ relations: [ "nova-compute", ]
+
+
+xos_images:
+ - name: "trusty-server-multi-nic"
+ url: "http://www.vicci.org/opencloud/trusty-server-cloudimg-amd64-disk1.img.20170201"
+ checksum: "sha256:ebf007ba3ec1043b7cd011fc6668e2a1d1d4c69c41071e8513ab355df7a057cb"
+
+ - name: "vsg-1.1"
+ url: "http://www.vicci.org/cord/vsg-1.1.img"
+ checksum: "sha256:16b0beb6778aed0f5feecb05f8d5750e6c262f98e6011e99ddadf7d46a177b6f"
+
+ - name: "ceilometer-trusty-server-multi-nic"
+ url: "http://www.vicci.org/cord/ceilometer-trusty-server-multi-nic.compressed.qcow2"
+ checksum: "sha256:b77ef8d692b640568dea13df99fe1dfcb1f4bb4ac05408db9ff77399b34f754f"
+
+ - name: "ceilometer-service-trusty-server-multi-nic"
+ url: "http://www.vicci.org/cord/ceilometer-service-trusty-server-multi-nic.compressed.qcow2.20170131"
+ checksum: "sha256:f0341e283f0f2cb8f70cd1a6347e0081c9c8492ef34eb6397c657ef824800d4f"
diff --git a/roles/cord-profile/templates/mcord-spirent-services.yml.j2 b/roles/cord-profile/templates/mcord-spirent-services.yml.j2
new file mode 100644
index 0000000..0b257b1
--- /dev/null
+++ b/roles/cord-profile/templates/mcord-spirent-services.yml.j2
@@ -0,0 +1,211 @@
+
+{#
+Copyright 2017-present Open Networking Foundation
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+#}
+
+
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: created by platform-install, need to add M-CORD services later
+
+imports:
+ - custom_types/xos.yaml
+ - custom_types/slice.yaml
+ - custom_types/site.yaml
+ - custom_types/image.yaml
+ - custom_types/flavor.yaml
+ - custom_types/network.yaml
+ - custom_types/onosservice.yaml
+ - custom_types/networkslice.yaml
+ - custom_types/venbservice.yaml
+ - custom_types/venbserviceinstance.yaml
+
+topology_template:
+ node_templates:
+
+# site, image, fully created in deployment.yaml
+ {{ site_name }}:
+ type: tosca.nodes.Site
+ properties:
+ must-exist: true
+ name: {{ site_name }}
+
+ m1.small:
+ type: tosca.nodes.Flavor
+ properties:
+ name: m1.small
+ must-exist: true
+ m1.large:
+ type: tosca.nodes.Flavor
+ properties:
+ name: m1.large
+ must-exist: true
+ m1.medium:
+ type: tosca.nodes.Flavor
+ properties:
+ name: m1.medium
+ must-exist: true
+ m1.xlarge:
+ type: tosca.nodes.Flavor
+ properties:
+ name: m1.xlarge
+ must-exist: true
+
+ trusty-server-multi-nic:
+ type: tosca.nodes.Image
+ properties:
+ name: trusty-server-multi-nic
+
+# management networks, fully created in management-net.yaml
+ management:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: management
+
+{% if use_management_hosts %}
+ management_hosts:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: management_hosts
+{% endif %}
+
+# s1u_network is for connectivity between VMs, fully created in s1u-net.yaml
+ s1u_network:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: s1u_network
+# s11_network is for connectivity between VMs, fully created in s11-net.yaml
+ s11_network:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: s11_network
+# nbi_network is for connectivity between VMs, fully created in nbi-net.yaml
+ nbi_network:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: nbi_network
+# sbi_network is for connectivity between VMs, fully created in sbi-net.yaml
+ sbi_network:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: sbi_network
+# sgi_network is for connectivity between VMs, fully created in sgi-net.yaml
+ sgi_network:
+ type: tosca.nodes.Network
+ properties:
+ must-exist: true
+ name: sgi_network
+
+# ONOS_CORD, fully created in vtn.yaml
+ service#ONOS_CORD:
+ type: tosca.nodes.ONOSService
+ properties:
+ must-exist: true
+ name: ONOS_CORD
+
+# ONOS_Fabric, fully created in fabric.yaml
+ service#ONOS_Fabric:
+ type: tosca.nodes.ONOSService
+ properties:
+ must-exist: true
+ name: ONOS_Fabric
+
+# CORD Services
+ service#venb:
+ type: tosca.nodes.VENBService
+ properties:
+ name: venb
+ kind: vEPC
+ public_key: {{ lookup('file', config_cord_profile_dir + '/key_import/mcord_rsa.pub') }}
+ private_key_fn: /opt/xos/services/venb/keys/mcord_rsa
+ artifacts:
+ pubkey: /opt/cord_profile/key_import/mcord_rsa.pub
+
+# CORD Slices
+ {{ site_name }}_venb:
+ description: vENB Service Slice
+ type: tosca.nodes.Slice
+ properties:
+ name: {{ site_name }}_venb
+ default_isolation: vm
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.BelongsToOne
+ - service:
+ node: service#venb
+ relationship: tosca.relationships.BelongsToOne
+ - default_image:
+ node: trusty-server-multi-nic
+ relationship: tosca.relationships.BelongsToOne
+ - default_flavor:
+ node: m1.small
+ relationship: tosca.relationships.BelongsToOne
+
+ venb_instance1:
+ type: tosca.nodes.VENBServiceInstance
+ properties:
+ name: venb_instance1
+ requirements:
+ - owner:
+ node: service#venb
+ relationship: tosca.relationships.BelongsToOne
+
+ venb_slice_management_network:
+ type: tosca.nodes.NetworkSlice
+ requirements:
+ - network:
+ node: management
+ relationship: tosca.relationships.BelongsToOne
+ - slice:
+ node: {{ site_name }}_venb
+ relationship: tosca.relationships.BelongsToOne
+
+ venb_slice_s11_network:
+ type: tosca.nodes.NetworkSlice
+ requirements:
+ - network:
+ node: s11_network
+ relationship: tosca.relationships.BelongsToOne
+ - slice:
+ node: {{ site_name }}_venb
+ relationship: tosca.relationships.BelongsToOne
+
+ venb_slice_s1u_network:
+ type: tosca.nodes.NetworkSlice
+ requirements:
+ - network:
+ node: s1u_network
+ relationship: tosca.relationships.BelongsToOne
+ - slice:
+ node: {{ site_name }}_venb
+ relationship: tosca.relationships.BelongsToOne
+
+ venb_slice_sgi_network:
+ type: tosca.nodes.NetworkSlice
+ requirements:
+ - network:
+ node: sgi_network
+ relationship: tosca.relationships.BelongsToOne
+ - slice:
+ node: {{ site_name }}_venb
+ relationship: tosca.relationships.BelongsToOne
diff --git a/roles/test-mcord-base-spirent/defaults/main.yml b/roles/test-mcord-base-spirent/defaults/main.yml
new file mode 100644
index 0000000..2e0ccc9
--- /dev/null
+++ b/roles/test-mcord-base-spirent/defaults/main.yml
@@ -0,0 +1,52 @@
+---
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# test-mcord-base/defaults/main.yml
+
+head_cord_profile_dir: "/opt/cord_profile"
+
+xos_ui_port: 9000
+
+xos_admin_user: "xosadmin@opencord.org"
+maas_xos_admin_pass: "{{ lookup('file', '/opt/credentials/xosadmin@opencord.org') }}"
+
+test_networks:
+ - management
+ - sgi_network
+ - s11_network
+ - sbi_network
+ - nbi_network
+
+test_services:
+ - venb
+ - vspgwc
+ - sdncontroller
+ - vspgwu
+
+test_ports:
+ - { vm: venb, network: management }
+ - { vm: venb, network: s11_network }
+ - { vm: venb, network: sgi_network }
+ - { vm: venb, network: s1u_network }
+ - { vm: vspgwc, network: management }
+ - { vm: vspgwc, network: s11_network }
+ - { vm: vspgwc, network: nbi_network }
+ - { vm: sdncontroller, network: management }
+ - { vm: sdncontroller, network: nbi_network }
+ - { vm: sdncontroller, network: sbi_network }
+ - { vm: vspgwu, network: management }
+ - { vm: vspgwu, network: s1u_network }
+ - { vm: vspgwu, network: sgi_network }
+ - { vm: vspgwu, network: sbi_network }
diff --git a/roles/test-mcord-base-spirent/tasks/main.yml b/roles/test-mcord-base-spirent/tasks/main.yml
new file mode 100644
index 0000000..2cfd0e3
--- /dev/null
+++ b/roles/test-mcord-base-spirent/tasks/main.yml
@@ -0,0 +1,45 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+---
+# test-mcord-base/tasks/main.yml
+# Run tests to check that the base elements of M-CORD are present
+
+- name: Wait for networks to be synchronized
+ shell: bash -c "source /opt/cord_profile/admin-openrc.sh; neutron net-list|grep '{{ item }}' > /dev/null"
+ register: result
+ until: result | success
+ retries: 10
+ delay: 60
+ with_items: "{{ test_networks }}"
+ tags:
+ - skip_ansible_lint # running a sub job
+
+- name: Wait for VMs to come up
+ shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep '{{ item }}.*ACTIVE' > /dev/null"
+ register: result
+ until: result | success
+ retries: 10
+ delay: 60
+ with_items: "{{ test_services }}"
+ tags:
+ - skip_ansible_lint # running a sub job
+
+- name: Verify that VMs are properly networked
+ shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep '{{ item.vm }}.*ACTIVE.*{{ item.network }}' > /dev/null"
+ with_items: "{{ test_ports }}"
+ tags:
+ - skip_ansible_lint # running a sub job
\ No newline at end of file
diff --git a/roles/test-mcord-base/defaults/main.yml b/roles/test-mcord-base/defaults/main.yml
index 5f58813..1cf905f 100644
--- a/roles/test-mcord-base/defaults/main.yml
+++ b/roles/test-mcord-base/defaults/main.yml
@@ -22,3 +22,34 @@
xos_admin_user: "xosadmin@opencord.org"
maas_xos_admin_pass: "{{ lookup('file', '/opt/credentials/xosadmin@opencord.org') }}"
+test_networks:
+ - management
+ - sgi_network
+ - s11_network
+ - s1mme_network
+ - sbi_network
+ - nbi_network
+
+test_services:
+ - internetemulator
+ - vmme
+ - vspgwc
+ - sdncontroller
+ - vspgwu
+
+test_ports:
+ - { vm: vmme, network: management }
+ - { vm: vmme, network: s11_network }
+ - { vm: vmme, network: s1mme_network }
+ - { vm: vspgwc, network: management }
+ - { vm: vspgwc, network: s11_network }
+ - { vm: vspgwc, network: nbi_network }
+ - { vm: sdncontroller, network: management }
+ - { vm: sdncontroller, network: nbi_network }
+ - { vm: sdncontroller, network: sbi_network }
+ - { vm: vspgwu, network: management }
+ - { vm: vspgwu, network: s1u_network }
+ - { vm: vspgwu, network: sgi_network }
+ - { vm: vspgwu, network: sbi_network }
+ - { vm: internetemulator, network: management }
+ - { vm: internetemulator, network: sgi_network }
diff --git a/roles/test-mcord-base/tasks/main.yml b/roles/test-mcord-base/tasks/main.yml
index 8bdeb89..193c4d7 100644
--- a/roles/test-mcord-base/tasks/main.yml
+++ b/roles/test-mcord-base/tasks/main.yml
@@ -24,11 +24,7 @@
until: result | success
retries: 10
delay: 60
- with_items:
- - management
- - sgi_network
- - s11_network
- - s1mme_network
+ with_items: "{{ test_networks }}"
tags:
- skip_ansible_lint # running a sub job
@@ -38,8 +34,12 @@
until: result | success
retries: 10
delay: 60
- with_items:
- - internetemulator
- - vmme
+ with_items: "{{ test_services }}"
+ tags:
+ - skip_ansible_lint # running a sub job
+
+- name: Verify that VMs are properly networked
+ shell: bash -c "source /opt/cord_profile/admin-openrc.sh; nova list --all-tenants|grep '{{ item.vm }}.*ACTIVE.*{{ item.network }}' > /dev/null"
+ with_items: "{{ test_ports }}"
tags:
- skip_ansible_lint # running a sub job