
# 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-mwc-demo-playbook.yml
# Set up XOS for the MWC 2018 demos

- name: Run base M-CORD tests
  hosts: all
  become: no
  # These variables could be elevated to the profile. Think about
  # doing this after the E2E test framework is complete.
  vars:
    test_networks:
      - management
      - sgi_network
      - s11_network
      - spgw_network
      - s6a_network
      - db_network
      - flat_network_s1mme
      - flat_network_s1u
    test_services:
      - vmme
      - vhss
      - hssdb
      - vspgwc
      - vspgwu
      - internetemulator
    test_ports:
      - { vm: vmme, network: management }
      - { vm: vmme, network: s11_network }
      - { vm: vmme, network: s6a_network }
      - { vm: vmme, network: flat_network_s1mme }
      - { vm: vhss, network: management }
      - { vm: vhss, network: s6a_network }
      - { vm: vhss, network: db_network }
      - { vm: hssdb, network: management }
      - { vm: hssdb, network: db_network }
      - { vm: vspgwc, network: management }
      - { vm: vspgwc, network: s11_network }
      - { vm: vspgwc, network: spgw_network }
      - { vm: vspgwu, network: management }
      - { vm: vspgwu, network: flat_network_s1u }
      - { vm: vspgwu, network: sgi_network }
      - { vm: vspgwu, network: spgw_network }
      - { vm: internetemulator, network: management }
      - { vm: internetemulator, network: sgi_network }
    epc_blueprint: mcord_5
    epc_sync_objects:
      - internetemulator/internetemulatorserviceinstances
      - hssdb/hssdbserviceinstances
      - vhss/vhsstenants
      - vmme/vmmetenants
      - vspgwu/vspgwutenants
      - vspgwc/vspgwctenants
  roles:
    - create-internetemulator
    - create-epc
    - test-mcord-base
    - epc-synced
