
# 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/mock-ecord.yml
# creates a mock E-CORD pod

site_name: mock-ecord
deployment_type: "Mock E-CORD Pod"

credentials_dir: "{{ playbook_dir }}/credentials"
xos_admin_user: "xosadmin@opencord.org"
xos_admin_pass: "{{ lookup('password', credentials_dir ~ '/xosadmin@opencord.org chars=ascii_letters,digits') }}"
xos_admin_first: XOS
xos_admin_last: Admin

frontend_only: False
use_openstack: False
use_vtn: False
needs_pki_install: True

build_xos_base_image: True

xos_tosca_config_templates:
  - management-net.yaml
  - mock-onos.yaml
#  - vtn-service.yaml # rimosso
#  - fabric-service.yaml # rimosso
  - ecord-services.yaml
  - vee-service.yaml
  - xos-gui-extensions.yml

# GUI Config [new GUI]
gui_project_name: "E-CORD"
gui_background: "cord-bg.jpg" # TODO find ecord image
gui_payoff: "Your Enterprise VNF orchestrator"

# GUI branding
gui_branding_name: "ECORD"
gui_branding_icon: "/static/cord-logo.png"
gui_branding_favicon: "/static/cord-favicon.png"
gui_branding_bg: "/static/cord-bg.jpg"

# paths defined in manifest/default.xml
xos_services:
  - name: openstack
    path: orchestration/xos_services/openstack
  - name: onos
    path: orchestration/xos_services/onos-service
  - name: vtn
    path: onos-apps/apps/vtn
  - name: fabric
    path: orchestration/xos_services/fabric
  - name: vrouter
    path: orchestration/xos_services/vrouter
  - name: veg
    path: orchestration/xos_services/vEG
  - name: vnodlocal
    path: orchestration/xos_services/metronet-local
  - name: vee
    path: orchestration/xos_services/vEE

xos_service_sshkeys:
  - name: onos_rsa
    source_path: "/dev/null"
  - name: onos_rsa.pub
    source_path: "/dev/null"
  - name: veg_rsa
    source_path: "/dev/null"
  - name: veg_rsa.pub
    source_path: "/dev/null"

# site domain suffix
site_suffix: opencloud.us

# SSL server certificate generation
server_certs:
  - cn: "xos-core.{{ site_suffix }}"
    subj: "/C=US/ST=California/L=Menlo Park/O=ON.Lab/OU=Test Deployment/CN=xos-core.{{ site_suffix }}"
    altnames:
      - "DNS:xos-core.{{ site_suffix }}"

xos_images: []