refator m-cord from configurations to service-profile
Change-Id: I4d490bea16903015cee7e30400a097ec46fadc67
diff --git a/mcord/Makefile b/mcord/Makefile
new file mode 100644
index 0000000..40e81bf
--- /dev/null
+++ b/mcord/Makefile
@@ -0,0 +1,204 @@
+include ../common/Makedefs
+
+CONFIG_DIR:=$(shell pwd)
+DOCKER_COMPOSE_YML=./onboarding-docker-compose/docker-compose.yml
+BOOTSTRAP_YML=./docker-compose-bootstrap.yml
+DOCKER_PROJECT=mcord
+BOOTSTRAP_PROJECT=mcordbs
+XOS_BOOTSTRAP_PORT=81
+XOS_UI_PORT=80
+ADMIN_USERNAME=padmin@vicci.org
+ADMIN_PASSWORD=letmein
+RUN_TOSCA_BOOTSTRAP=python ../common/run_tosca.py $(XOS_BOOTSTRAP_PORT) $(ADMIN_USERNAME) $(ADMIN_PASSWORD)
+RUN_TOSCA=python ../common/run_tosca.py $(XOS_UI_PORT) $(ADMIN_USERNAME) $(ADMIN_PASSWORD)
+
+.PHONY: xos
+xos: prereqs dirs download_xos download_services bootstrap onboarding podconfig
+
+prereqs:
+ sudo make -f ../common/Makefile.prereqs
+
+dirs:
+ # if this directory doesn't exist, then docker-compose will create it with root permission
+ mkdir -p key_import
+ mkdir -p onboarding-docker-compose
+
+bootstrap:
+ @echo "[BOOTSTRAP]"
+ @echo "XOS Image Build Date: `docker inspect -f '{{ .Created }}' xosproject/xos`"
+ @echo "XOS Image Commit Hash: `docker inspect -f '{{ .Config.Labels.XOS_GIT_COMMIT_HASH }}' xosproject/xos`"
+ @echo "XOS Image Commit Date: `docker inspect -f '{{ .Config.Labels.XOS_GIT_COMMIT_DATE }}' xosproject/xos`"
+ sudo rm -f onboarding-docker-compose/docker-compose.yml
+ sudo CONFIG_DIR=$(CONFIG_DIR) docker-compose -p $(BOOTSTRAP_PROJECT) -f $(BOOTSTRAP_YML) up -d
+ bash ../common/wait_for_xos_port.sh 81
+ sudo docker-compose -p $(BOOTSTRAP_PROJECT) -f $(BOOTSTRAP_YML) run xos_bootstrap_ui python /opt/xos/tosca/run.py none - < ../common/fixtures.yaml
+ sudo docker-compose -p $(BOOTSTRAP_PROJECT) -f $(BOOTSTRAP_YML) run xos_bootstrap_ui python /opt/xos/tosca/run.py none - < ../common/mydeployment.yaml
+ $(RUN_TOSCA_BOOTSTRAP) xos.yaml
+
+download_xos:
+ make -f ../common/Makefile.services xos_core
+
+download_services:
+ make -f ../common/Makefile.services
+
+update_services:
+ make -f ../common/Makefile.services update
+
+update_xos:
+ make -f ../common/Makefile.services update_xos
+
+onboarding:
+ @echo "[ONBOARDING]"
+ # on-board any services here
+ bash ../common/wait_for_onboarding_ready.sh 81 xos
+ $(RUN_TOSCA_BOOTSTRAP) ../common/disable-onboarding.yaml
+ sudo cp id_rsa key_import/vBBU_rsa
+ sudo cp id_rsa.pub key_import/vBBU_rsa.pub
+ sudo cp id_rsa key_import/vPGW_rsa
+ sudo cp id_rsa.pub key_import/vPGW_rsa.pub
+ sudo cp id_rsa key_import/onos_rsa
+ sudo cp id_rsa key_import/onos_rsa.pub
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/openstack/xos/openstack-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/vbbu/xos/vbbu-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/vpgw/xos/vpgw-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/vtn/xos/vtn-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/onos-service/xos/onos-onboard.yaml
+ #$(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/fabric/xos/\fabric-onboard.yaml
+ #$(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/vtr/xos/vtr-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) synchronizers.yaml
+ $(RUN_TOSCA_BOOTSTRAP) ../common/enable-onboarding.yaml
+ bash ../common/wait_for_onboarding_ready.sh 81 services/vbbu
+ bash ../common/wait_for_onboarding_ready.sh 81 services/vpgw
+ bash ../common/wait_for_onboarding_ready.sh 81 services/vtn
+ bash ../common/wait_for_onboarding_ready.sh 81 services/onos
+ #bash ../common/wait_for_onboarding_ready.sh 81 services/fabric
+ #bash ../common/wait_for_onboarding_ready.sh 81 services/vtr
+ bash ../common/wait_for_onboarding_ready.sh 81 xos
+ bash ../common/wait_for_xos_port.sh 80
+
+podconfig: nodes.yaml images.yaml
+ @echo "[PODCONFIG]"
+ $(RUN_TOSCA) setup.yaml
+ $(RUN_TOSCA) nodes.yaml
+ $(RUN_TOSCA) images.yaml
+
+vtn: vtn-external.yaml
+ $(RUN_TOSCA) vtn-external.yaml
+
+delete_fabric_config:
+ http -a karaf:karaf DELETE http://onos-fabric:8181/onos/v1/network/configuration/
+
+fabric: fabric.yaml
+ cp ../../xos_services/fabric/config/network-cfg-quickstart.json .
+ $(RUN_TOSCA) fabric.yaml
+
+#cord: vsg_custom_images
+# $(RUN_TOSCA) mgmt-net.yaml
+# $(RUN_TOSCA) cord-services.yaml
+# $(RUN_TOSCA) cord-volt-devices.yaml
+
+#cord-subscriber:
+# $(RUN_TOSCA) cord-test-subscriber.yaml
+
+clean-nodes:
+ rm -f nodes.yaml
+
+update-nodes: nodes.yaml
+ $(RUN_TOSCA) nodes.yaml
+
+new-nodes: clean-nodes update-nodes vtn
+
+rebuild:
+ bash ../common/rebuild.sh $(XOS_BOOTSTRAP_PORT)
+ bash ../common/wait_for_onboarding_ready.sh 81 xos
+
+exampleservice: onboard-exampleservice
+ $(RUN_TOSCA) pod-exampleservice.yaml
+
+onboard-exampleservice:
+ sudo cp id_rsa key_import/exampleservice_rsa
+ sudo cp id_rsa.pub key_import/exampleservice_rsa.pub
+ $(RUN_TOSCA_BOOTSTRAP) ../common/disable-onboarding.yaml
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/exampleservice/xos/exampleservice-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) exampleservice-synchronizer.yaml
+ $(RUN_TOSCA_BOOTSTRAP) ../common/enable-onboarding.yaml
+ bash ../common/wait_for_onboarding_ready.sh 81 services/exampleservice
+ bash ../common/wait_for_onboarding_ready.sh 81 xos
+ bash ../common/wait_for_xos_port.sh 80
+
+cord-monitoringservice: ceilometer_custom_images onboard-monitoringservice
+ $(RUN_TOSCA) monitoringservice.yaml
+ $(RUN_TOSCA) monitoringtenant.yaml
+
+onboard-monitoringservice: download-monitoringservice
+ sudo cp id_rsa key_import/monitoringservice_rsa
+ sudo cp id_rsa.pub key_import/monitoringservice_rsa.pub
+ $(RUN_TOSCA_BOOTSTRAP) $(SERVICE_DIR)/monitoring/xos/monitoring-onboard.yaml
+ $(RUN_TOSCA_BOOTSTRAP) monitoring_synchronizer.yaml
+ bash ../common/wait_for_onboarding_ready.sh 81 services/monitoring
+ bash ../common/wait_for_onboarding_ready.sh 81 xos
+ bash ../common/wait_for_xos_port.sh 80
+
+download-monitoringservice:
+ make -f ../common/Makefile.services monitoring_services
+
+nodes.yaml:
+ export SETUPDIR=.; bash ../common/make-nodes-yaml.sh
+
+images.yaml:
+ export SETUPDIR=.; bash ../common/make-images-yaml.sh
+
+vtn-external.yaml:
+ export SETUPDIR=.; bash ./make-vtn-external-yaml.sh
+
+fabric.yaml:
+ export SETUPDIR=.; bash ./make-fabric-yaml.sh
+
+virtualbng_json:
+ export SETUPDIR=.; bash ./make-virtualbng-json.sh
+
+vtn_network_cfg_json:
+ export SETUPDIR=.; bash ./make-vtn-networkconfig-json.sh
+
+stop:
+ test ! -s $(DOCKER_COMPOSE_YML) || sudo docker-compose -p $(DOCKER_PROJECT) -f $(DOCKER_COMPOSE_YML) stop
+ sudo docker-compose -p $(BOOTSTRAP_PROJECT) -f $(BOOTSTRAP_YML) stop
+
+rm: stop
+ test ! -s $(DOCKER_COMPOSE_YML) || sudo docker-compose -p $(DOCKER_PROJECT) -f $(DOCKER_COMPOSE_YML) rm -f
+ sudo docker-compose -p $(BOOTSTRAP_PROJECT) -f $(BOOTSTRAP_YML) rm -f
+
+showlogs:
+ sudo docker-compose -p $(DOCKER_PROJECT) -f $(DOCKER_COMPOSE_YML) logs
+
+showlogs_bootstrap:
+ sudo docker-compose -p $(BOOTSTRAP_PROJECT) -f $(BOOTSTRAP_YML) logs
+
+cleanup: stop rm
+ ./cleanup.sh
+ bash -c "source ./admin-openrc.sh; nova list --all-tenants; neutron net-list"
+
+ceilometer_custom_images: images/ceilometer-service-trusty-server-multi-nic.img images/ceilometer-trusty-server-multi-nic.img
+ #TODO: Add logic for service VM custom image (ceilometer-service-trusty-server-multi-nic)
+ bash -c "source ./admin-openrc.sh; glance image-show ceilometer-trusty-server-multi-nic || glance image-create --name ceilometer-trusty-server-multi-nic --disk-format qcow2 --file ./images/ceilometer-trusty-server-multi-nic.compressed.qcow2 --container-format bare"
+
+#vsg_custom_images: images/vsg-1.1.img
+ bash -c "source ./admin-openrc.sh; glance image-show vsg-1.1 || glance image-create --name vsg-1.1 --disk-format qcow2 --file ./images/vsg-1.1.img --container-format bare"
+
+images/ceilometer-trusty-server-multi-nic.img: images
+ bash -c "source ./admin-openrc.sh; glance image-show ceilometer-trusty-server-multi-nic || wget http://www.vicci.org/cord/ceilometer-trusty-server-multi-nic.compressed.qcow2 -P ./images"
+
+images/ceilometer-service-trusty-server-multi-nic.img: images
+ #TODO: Add logic for service VM custom image (ceilometer-service-trusty-server-multi-nic) once image is uploaded into vicci portal
+ #bash -c "source ../setup/admin-openrc.sh; glance image-show ceilometer-service-trusty-server-multi-nic || wget http://www.vicci.org/cord/ceilometer-service-trusty-server-multi-nic.compressed.qcow2 -P ./images"
+
+#images/vsg-1.1.img: images
+# [ -s images/vsg-1.1.img ] || wget http://www.vicci.org/cord/vsg-1.1.img -P ./images
+
+images:
+ mkdir -p ./images
+
+.PHONY: local_containers
+local_containers: prereqs download_xos
+ make -f ../common/Makefile.containers update_certs xos_base xos_devel synchronizer onboarding_synchronizer
+
diff --git a/mcord/docker-compose-bootstrap.yml b/mcord/docker-compose-bootstrap.yml
new file mode 100644
index 0000000..480a5d6
--- /dev/null
+++ b/mcord/docker-compose-bootstrap.yml
@@ -0,0 +1,61 @@
+xos_db:
+ image: xosproject/xos-postgres
+ expose:
+ - "5432"
+
+xos_synchronizer_onboarding:
+ image: xosproject/xos-synchronizer-onboarding
+ command: bash -c "cd /opt/xos/synchronizers/onboarding; ./run.sh"
+ #command: sleep 86400
+ labels:
+ org.xosproject.kind: synchronizer
+ org.xosproject.target: onboarding
+ links:
+ - xos_db
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - ./key_import:/opt/xos/key_import:ro
+ - ./onboarding-docker-compose:/opt/xos/synchronizers/onboarding/docker-compose
+ - ../../xos_services:/opt/xos_services
+ log_driver: "json-file"
+ log_opt:
+ max-size: "100k"
+ max-file: "5"
+
+#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
+# - ./files/xos_vtn_config:/opt/xos/xos_configuration/xos_vtn_config:ro
+# - ./images:/opt/xos/images:ro
+# log_driver: "json-file"
+# log_opt:
+# max-size: "100k"
+# max-file: "5"
+
+xos_bootstrap_ui:
+ command: python /opt/xos/manage.py runserver 0.0.0.0:81 --insecure --makemigrations
+ environment:
+ - CONFIG_DIR
+ image: xosproject/xos
+ links:
+ - xos_db
+ ports:
+ - "81:81"
+ volumes:
+ - ../common/xos_common_config:/opt/xos/xos_configuration/xos_common_config:ro
+ - ./xos_cord_config:/opt/xos/xos_configuration/xos_cord_config:ro
+ - ./files/xos_vtn_config:/opt/xos/xos_configuration/xos_vtn_config:ro
+ - ../../xos_services:/opt/xos_services
+ log_driver: "json-file"
+ log_opt:
+ max-size: "100k"
+ max-file: "5"
diff --git a/mcord/docker-compose.yml b/mcord/docker-compose.yml
new file mode 100644
index 0000000..367b168
--- /dev/null
+++ b/mcord/docker-compose.yml
@@ -0,0 +1,78 @@
+xos_db:
+ image: xosproject/xos-postgres
+ 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:
+ - .:/root/setup:ro
+ - ../setup/id_rsa:/opt/xos/configurations/mcord/mcord_private_key:ro # private key
+ extra_hosts:
+ - "controller:10.102.81.3"
+ - "computeBBU1:10.102.81.6"
+ - "computeBBU2:10.102.81.7"
+ - "compute9:10.102.81.9"
+ - "compute10:10.102.81.10"
+
+xos_synchronizer_vbbu:
+ image: xosproject/xos-synchronizer-openstack
+ command: bash -c "sleep 120; python /opt/xos/synchronizers/vbbu/vbbu-synchronizer.py -C /opt/xos/synchronizers/vbbu/vbbu_config"
+ labels:
+ org.xosproject.kind: synchronizer
+ org.xosproject.target: vbbu
+ links:
+ - xos_db
+ volumes:
+ - ../setup/id_rsa_mcord:/opt/xos/configurations/mcord/mcord_private_key:ro # private key
+ - ../setup/id_rsa_mcord.pub:/opt/xos/configurations/mcord/mcord_public_key:ro # public key
+ - ../setup:/root/setup:ro
+ extra_hosts:
+ - "controller:10.102.81.3"
+ - "computeBBU1:10.102.81.6"
+ - "computeBBU2:10.102.81.7"
+ - "compute9:10.102.81.9"
+ - "compute10:10.102.81.10"
+
+xos_synchronizer_vpgwc:
+ image: xosproject/xos-synchronizer-openstack
+ command: bash -c "sleep 120; python /opt/xos/synchronizers/vpgwc/vpgwc-synchronizer.py -C /opt/xos/synchronizers/vpgwc/vpgwc_config"
+ labels:
+ org.xosproject.kind: synchronizer
+ org.xosproject.target: vpgwc
+ links:
+ - xos_db
+ volumes:
+ - ../setup/id_rsa_mcord:/opt/xos/configurations/mcord/mcord_private_key:ro # private key
+ - ../setup/id_rsa_mcord.pub:/opt/xos/configurations/mcord/mcord_public_key:ro # public key
+ - ../setup:/root/setup:ro
+ extra_hosts:
+ - "controller:10.102.81.3"
+ - "computeBBU1:10.102.81.6"
+ - "computeBBU2:10.102.81.7"
+ - "compute9:10.102.81.9"
+ - "compute10:10.102.81.10"
+
+# FUTURE
+#xos_swarm_synchronizer:
+# image: xosproject/xos-swarm-synchronizer
+# labels:
+# org.xosproject.kind: synchronizer
+# org.xosproject.target: swarm
+
+xos:
+ command: python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
+ image: xosproject/xos
+ links:
+ - xos_db
+ ports:
+ - "8000:8000"
+ volumes:
+ - .:/root/setup:ro
+ - ../setup/id_rsa.pub:/opt/xos/configurations/mcord/mcord_public_key:ro # private key
diff --git a/mcord/images.yaml b/mcord/images.yaml
new file mode 100644
index 0000000..2b62235
--- /dev/null
+++ b/mcord/images.yaml
@@ -0,0 +1,18 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+ - custom_types/xos.yaml
+
+description: autogenerated nodes file
+
+topology_template:
+ node_templates:
+ mysite:
+ type: tosca.nodes.Site
+
+ MyDeployment:
+ type: tosca.nodes.Deployment
+ properties:
+ flavors: m1.large, m1.medium, m1.small
+ requirements:
+
diff --git a/mcord/mcord.yaml b/mcord/mcord.yaml
new file mode 100644
index 0000000..450bd23
--- /dev/null
+++ b/mcord/mcord.yaml
@@ -0,0 +1,332 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Setup MCORD-related services.
+
+imports:
+ - custom_types/xos.yaml
+
+node_types:
+
+ tosca.nodes.MCORDService:
+ derived_from: tosca.nodes.Root
+ description: >
+ An XOS Service object. Services may be listed in the Service
+ directory and may be linked together via Tenancy Relationships.
+ capabilities:
+ scalable:
+ type: tosca.capabilities.Scalable
+ service:
+ type: tosca.capabilities.xos.Service
+ properties:
+ no-delete:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to delete this object
+ no-create:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to create this object
+ no-update:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to update this object
+ kind:
+ type: string
+ default: RAN
+ description: Type of service.
+ view_url:
+ type: string
+ required: false
+ description: URL to follow when icon is clicked in the Service Directory.
+ icon_url:
+ type: string
+ required: false
+ description: ICON to display in the Service Directory.
+ enabled:
+ type: boolean
+ default: true
+ published:
+ type: boolean
+ default: true
+ description: If True then display this Service in the Service Directory.
+ public_key:
+ type: string
+ required: false
+ description: Public key to install into Instances to allows Services to SSH into them.
+ private_key_fn:
+ type: string
+ required: false
+ description: Location of private key file
+ versionNumber:
+ type: string
+ required: false
+ description: Version number of Service.
+
+ tosca.nodes.VBBUComponent:
+ derived_from: tosca.nodes.Root
+ description: >
+ CORD: vBBU Component of MCORD Service.
+ properties:
+ kind:
+ type: string
+ default: RAN
+ description: Kind of component
+ s1u_tag:
+ type: string
+ required: false
+ default: 901
+ description: VTN stag port-name
+ s1mme_tag:
+ type: string
+ required: false
+ default: 900
+ description: VTN stag port-name
+ rru_tag:
+ type: string
+ required: false
+ default: 999
+ description: VTN stag port-name
+ display_message:
+ type: string
+ required: false
+ default: New vBBU Component
+ description: Just a message
+
+ tosca.nodes.VPGWCComponent:
+ derived_from: tosca.nodes.Root
+ description: >
+ CORD: vPGWC Component of MCORD Service.
+ properties:
+ kind:
+ type: string
+ default: VPGWC_KIND
+ description: Kind of component
+ s5s8_pgw_tag:
+ type: string
+ required: false
+ default: 300
+ description: VTN stag port-name
+ display_message:
+ type: string
+ required: false
+ default: New vPGWc Component
+ description: Just a message
+
+topology_template:
+ node_templates:
+ vBBU:
+ type: tosca.nodes.MCORDService
+ requirements:
+ properties:
+ kind: RAN
+ icon_url: /static/mCordServices/service_server.png
+ view_url: /admin/mcord/vbbucomponent
+ public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
+ private_key_fn: /opt/xos/configurations/mcord/mcord_private_key
+ artifacts:
+ pubkey: /opt/xos/configurations/mcord/mcord_public_key
+
+ vPGWC:
+ type: tosca.nodes.MCORDService
+ requirements:
+ properties:
+ kind: vEPC
+ icon_url: /static/mCordServices/service_server.png
+ view_url: /admin/mcord/vpgwccomponent
+ public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
+ private_key_fn: /opt/xos/configurations/mcord/mcord_private_key
+ artifacts:
+ pubkey: /opt/xos/configurations/mcord/mcord_public_key
+
+ m1.xlarge:
+ type: tosca.nodes.Flavor
+
+ Private:
+ type: tosca.nodes.NetworkTemplate
+
+ External:
+ type: tosca.nodes.NetworkTemplate
+
+ management_template:
+ type: tosca.nodes.NetworkTemplate
+ properties:
+ visibility: private
+ translation: none
+
+ management:
+ type: tosca.nodes.network.Network.XOS
+# properties:
+# no-create: true
+# no-delete: true
+# no-update: true
+
+ lan_3gpp_s1mme_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_3gpp_s1uc_net
+ cidr: 172.16.1.0/24
+ start_ip: 172.16.1.3
+ end_ip: 172.16.1.12
+ gateway_ip: 172.16.1.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ lan_3gpp_s1u_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_3gpp_s1u_net
+ cidr: 172.16.2.0/24
+ start_ip: 172.16.2.3
+ end_ip: 172.16.2.12
+ gateway_ip: 172.16.16.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ lan_rru_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_rru_net
+ cidr: 172.16.0.0/24
+ start_ip: 172.16.0.3
+ end_ip: 172.16.0.12
+ gateway_ip: 172.16.0.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ lan_3gpp_s5s8_pgw_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_3gpp_s5s8_pgw_net
+ cidr: 172.17.1.0/24
+ start_ip: 172.17.1.2
+ end_ip: 172.17.1.8
+ gateway_ip: 172.17.1.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vpgwc_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ mysite:
+ type: tosca.nodes.Site
+
+ mcord-bbu-multi-nic:
+ type: tosca.nodes.Image
+
+ mcord-vpgwc-onos-multi-nic:
+ type: tosca.nodes.Image
+
+ mysite_management:
+ description: This slice exists solely to own the management network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ mysite_mobile_net:
+ description: This slice exists solely to own the mobile network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ mysite_vbbu_slice1:
+ description: vBBU Service Slice 1
+ type: tosca.nodes.Slice
+ requirements:
+ - vBBU:
+ node: vBBU
+ relationship: tosca.relationships.MemberOfService
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - default_image:
+ node: mcord-bbu-multi-nic
+ relationship: tosca.relationships.DefaultImage
+ - default_flavor:
+ node: m1.xlarge
+ relationship: tosca.relationships.DefaultFlavor
+ - management:
+ node: management
+ relationship: tosca.relationships.ConnectsToNetwork
+ properties:
+ network: noauto
+# default_flavor: m1.xlarge
+ default_node: computeBBU2
+
+ mysite_vpgwc_slice1:
+ description: vPGWC Service Slice 1
+ type: tosca.nodes.Slice
+ requirements:
+ - vPGWC:
+ node: vPGWC
+ relationship: tosca.relationships.MemberOfService
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - default_image:
+ node: mcord-vpgwc-onos-multi-nic
+ relationship: tosca.relationships.DefaultImage
+ - default_flavor:
+ node: m1.xlarge
+ relationship: tosca.relationships.DefaultFlavor
+ - management:
+ node: management
+ relationship: tosca.relationships.ConnectsToNetwork
+ properties:
+ network: noauto
+ default_node: compute10
+
+ mysite_VPGWC_Component:
+ description: MCORD Service default Component
+ type: tosca.nodes.VPGWCComponent
+ requirements:
+ - provider_service:
+ node: vPGWC
+ relationship: tosca.relationships.MemberOfService
+ - vpgwc_slice:
+ node: mysite_vpgwc_slice1
+ relationship: tosca.relationships.MemberOfSlice
+ properties:
+ display_message: vPGWC looks good!
+ s5s8_pgw_tag: 300
+
diff --git a/mcord/mgmt-net.yaml b/mcord/mgmt-net.yaml
new file mode 100644
index 0000000..ac8ad7e
--- /dev/null
+++ b/mcord/mgmt-net.yaml
@@ -0,0 +1,40 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Set up management network for CORD POD
+imports:
+ - custom_types/xos.yaml
+
+topology_template:
+ node_templates:
+
+ management_template:
+ type: tosca.nodes.NetworkTemplate
+ properties:
+ visibility: private
+ translation: none
+
+ management:
+ type: tosca.nodes.network.Network
+ properties:
+ ip_version: 4
+ cidr: 10.102.83.0/24
+ requirements:
+ - network_template:
+ node: management_template
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_management
+ relationship: tosca.relationships.MemberOfSlice
+
+ mysite:
+ type: tosca.nodes.Site
+
+ mysite_management:
+ description: This slice exists solely to own the management network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
diff --git a/mcord/migrations/0001_initial.py b/mcord/migrations/0001_initial.py
new file mode 100644
index 0000000..a11fe30
--- /dev/null
+++ b/mcord/migrations/0001_initial.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('core', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='MCORDService',
+ fields=[
+ ],
+ options={
+ 'verbose_name': 'MCORD Service',
+ 'proxy': True,
+ },
+ bases=('core.service',),
+ ),
+ migrations.CreateModel(
+ name='VBBUComponent',
+ fields=[
+ ],
+ options={
+ 'verbose_name': 'VBBU MCORD Service Component',
+ 'proxy': True,
+ },
+ bases=('core.tenantwithcontainer',),
+ ),
+ migrations.CreateModel(
+ name='VPGWCComponent',
+ fields=[
+ ],
+ options={
+ 'verbose_name': 'VPGWC MCORD Service Component',
+ 'proxy': True,
+ },
+ bases=('core.tenantwithcontainer',),
+ ),
+ ]
diff --git a/mcord/migrations/__init__.py b/mcord/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mcord/migrations/__init__.py
diff --git a/mcord/nodes.yaml b/mcord/nodes.yaml
new file mode 100644
index 0000000..48e7247
--- /dev/null
+++ b/mcord/nodes.yaml
@@ -0,0 +1,44 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+imports:
+ - custom_types/xos.yaml
+
+description: autogenerated nodes file
+
+topology_template:
+ node_templates:
+ MyDeployment:
+ type: tosca.nodes.Deployment
+ mysite:
+ type: tosca.nodes.Site
+
+ computeBBU2:
+ type: tosca.nodes.Node
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - deployment:
+ node: MyDeployment
+ relationship: tosca.relationships.MemberOfDeployment
+
+ nova-compute:
+ type: tosca.nodes.Node
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - deployment:
+ node: MyDeployment
+ relationship: tosca.relationships.MemberOfDeployment
+
+ compute10:
+ type: tosca.nodes.Node
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - deployment:
+ node: MyDeployment
+ relationship: tosca.relationships.MemberOfDeployment
+
diff --git a/mcord/postgresql/Dockerfile b/mcord/postgresql/Dockerfile
new file mode 100644
index 0000000..4d4ebfd
--- /dev/null
+++ b/mcord/postgresql/Dockerfile
@@ -0,0 +1,35 @@
+FROM ubuntu
+
+RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
+
+RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" > /etc/apt/sources.list.d/pgdg.list
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --force-yes\
+ python-software-properties \
+ software-properties-common \
+ postgresql-9.3 \
+ postgresql-client-9.3 \
+ postgresql-contrib-9.3
+
+# Workaround for AUFS issue
+# https://github.com/docker/docker/issues/783#issuecomment-56013588
+RUN mkdir /etc/ssl/private-copy; mv /etc/ssl/private/* /etc/ssl/private-copy/; rm -r /etc/ssl/private; mv /etc/ssl/private-copy /etc/ssl/private; chmod -R 0700 /etc/ssl/private; chown -R postgres /etc/ssl/private
+
+USER postgres
+
+RUN /etc/init.d/postgresql start && \
+ psql --command "ALTER USER postgres WITH SUPERUSER PASSWORD 'password' " && \
+ psql --command "CREATE DATABASE xos"
+
+# Allow remote connections.
+RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
+RUN echo "host all all 0.0.0.0/0 password" >> /etc/postgresql/9.3/main/pg_hba.conf
+
+RUN echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf
+
+# Expose the PostgreSQL port
+EXPOSE 5432
+
+VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
+
+CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
diff --git a/mcord/postgresql/Makefile b/mcord/postgresql/Makefile
new file mode 100644
index 0000000..c50923e
--- /dev/null
+++ b/mcord/postgresql/Makefile
@@ -0,0 +1,25 @@
+IMAGE_NAME:=xosproject/xos-postgres
+CONTAINER_NAME:=xos-db-postgres
+NO_DOCKER_CACHE?=false
+
+.PHONY: build
+build: ; docker build --no-cache=${NO_DOCKER_CACHE} --rm -t ${IMAGE_NAME} .
+
+.PHONY: run
+run: ; docker run -d -p 5432:5432 --name ${CONTAINER_NAME} ${IMAGE_NAME}
+
+.PHONY: stop
+stop: ; docker stop ${CONTAINER_NAME}
+
+.PHONY: rm
+rm: ; docker rm ${CONTAINER_NAME}
+
+.PHONE: rmi
+rmi: ; docker rmi ${IMAGE_NAME}
+
+.PHONY: backup
+backupvol: ; docker run --volumes-from ${CONTAINER_NAME} -v /backup:/backup postgres tar cvf /backup/backup-postgres.tar /var/lib/postgresql
+
+.PHONY: restore
+restorevol: ; docker run --volumes-from ${CONTAINER_NAME} -v /backup:/backup postgres cd /var/lib/postgresql && tar xvf /backup/backup-postgres.tar
+
diff --git a/mcord/setup.yaml b/mcord/setup.yaml
new file mode 100644
index 0000000..9db865e
--- /dev/null
+++ b/mcord/setup.yaml
@@ -0,0 +1,248 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: >
+ * Adds OpenCloud Sites, Deployments, and Controllers.
+
+imports:
+ - custom_types/xos.yaml
+
+topology_template:
+ node_templates:
+
+ MyDeployment:
+ type: tosca.nodes.Deployment
+ properties:
+ flavors: m1.xlarge, m1.large, m1.medium, m1.small
+
+ m1.xlarge:
+ type: tosca.nodes.Flavor
+
+
+ MyOpenStack:
+ type: tosca.nodes.Controller
+ requirements:
+ - deployment:
+ node: MyDeployment
+ relationship: tosca.relationships.ControllerDeployment
+ properties:
+ backend_type: OpenStack
+ version: Kilo
+ auth_url: { get_script_env: [ SELF, adminrc, OS_AUTH_URL, LOCAL_FILE] }
+ admin_user: { get_script_env: [ SELF, adminrc, OS_USERNAME, LOCAL_FILE] }
+ admin_password: { get_script_env: [ SELF, adminrc, OS_PASSWORD, LOCAL_FILE] }
+ admin_tenant: { get_script_env: [ SELF, adminrc, OS_TENANT_NAME, LOCAL_FILE] }
+ domain: Default
+ artifacts:
+ adminrc: /root/setup/admin-openrc.sh
+
+ mysite:
+ type: tosca.nodes.Site
+ properties:
+ display_name: MySite
+ site_url: http://xosproject.org/
+ requirements:
+ - deployment:
+ node: MyDeployment
+ relationship: tosca.relationships.SiteDeployment
+ requirements:
+ - controller:
+ node: MyOpenStack
+ relationship: tosca.relationships.UsesController
+ Topology:
+ type: tosca.nodes.DashboardView
+ properties:
+ url: template:xosMcordTopology
+
+ # This user already exists in XOS with this password
+ # It's an example of how to create new users
+ padmin@vicci.org:
+ type: tosca.nodes.User
+ properties:
+ is_admin: true
+ is_active: true
+ firstname: XOS
+ lastname: admin
+ password: letmein
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - mcord_dashboard:
+ node: Topology
+ relationship: tosca.relationships.UsesDashboard
+
+ johndoe@stanford.us:
+ type: tosca.nodes.User
+ properties:
+ is_active: true
+ password: letmein
+ firstname: john
+ lastname: doe
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ # A subscriber
+ Stanford:
+ type: tosca.nodes.CORDSubscriber
+ properties:
+ service_specific_id: 123
+ firewall_enable: false
+ cdn_enable: false
+ url_filter_enable: false
+ url_filter_level: R
+ requirements:
+ - house_admin:
+ node: johndoe@stanford.us
+ relationship: tosca.relationships.AdminPrivilege
+
+ Barbera Lapinski:
+ type: tosca.nodes.CORDUser
+ properties:
+ mac: 01:02:03:04:05:06
+ level: PG_13
+ requirements:
+ - household:
+ node: Stanford
+ relationship: tosca.relationships.SubscriberDevice
+
+ Norbert Shumway:
+ type: tosca.nodes.CORDUser
+ properties:
+ mac: 90:E2:BA:82:F9:75
+ level: PG_13
+ requirements:
+ - household:
+ node: Stanford
+ relationship: tosca.relationships.SubscriberDevice
+
+ Fay Muldoon:
+ type: tosca.nodes.CORDUser
+ properties:
+ mac: 68:5B:35:9D:91:D5
+ level: PG_13
+ requirements:
+ - household:
+ node: Stanford
+ relationship: tosca.relationships.SubscriberDevice
+
+ Janene Earnest:
+ type: tosca.nodes.CORDUser
+ properties:
+ mac: 34:36:3B:C9:B6:A6
+ level: PG_13
+ requirements:
+ - household:
+ node: Stanford
+ relationship: tosca.relationships.SubscriberDevice
+
+ RRU:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=vBBU
+ icon_url: /static/mCordServices/service_rru.png
+ kind: RAN
+
+ eSON:
+ type: tosca.nodes.Service
+ properties:
+ icon_url: /static/mCordServices/service_server.png
+ view_url: http://www.google.com
+ kind: RAN
+
+ # EPC
+ vMME:
+ type: tosca.nodes.Service
+ properties:
+ icon_url: /static/mCordServices/service_server.png
+ view_url: /mcord/?service=vMME
+ kind: vEPC
+
+ vSGW:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=vSGW
+ icon_url: /static/mCordServices/service_server.png
+ kind: vEPC
+
+
+ # EDGE
+ Cache:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=Cache
+ icon_url: /static/mCordServices/service_cache.png
+ kind: EDGE
+
+ Firewall:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=Firewall
+ icon_url: /static/mCordServices/service_firewall.png
+ kind: EDGE
+
+ Video Optimization:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=Video%20Optimization
+ icon_url: /static/mCordServices/service_video.png
+ kind: EDGE
+
+ RRU:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=vBBU
+ icon_url: /static/mCordServices/service_rru.png
+ kind: RAN
+ eSON:
+ type: tosca.nodes.Service
+ properties:
+ icon_url: /static/mCordServices/service_server.png
+ view_url: http://www.google.com
+ kind: RAN
+
+ # EPC
+ vMME:
+ type: tosca.nodes.Service
+ properties:
+ icon_url: /static/mCordServices/service_server.png
+ view_url: /mcord/?service=vMME
+ kind: vEPC
+
+ vSGW:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=vSGW
+ icon_url: /static/mCordServices/service_server.png
+ kind: vEPC
+
+ vPGWC:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=vPGWC
+ icon_url: /static/mCordServices/service_server.png
+ kind: vEPC
+
+ # EDGE
+ Cache:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=Cache
+ icon_url: /static/mCordServices/service_cache.png
+ kind: EDGE
+
+ Firewall:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=Firewall
+ icon_url: /static/mCordServices/service_firewall.png
+ kind: EDGE
+
+ Video Optimization:
+ type: tosca.nodes.Service
+ properties:
+ view_url: /mcord/?service=Video%20Optimization
+ icon_url: /static/mCordServices/service_video.png
+ kind: EDGE
+
diff --git a/mcord/synchronizer/Dockerfile b/mcord/synchronizer/Dockerfile
new file mode 100644
index 0000000..011e8dd
--- /dev/null
+++ b/mcord/synchronizer/Dockerfile
@@ -0,0 +1,48 @@
+FROM xosproject/xos
+
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
+ openssh-client \
+ python-crypto \
+ python-jinja2 \
+ python-paramiko \
+ python-yaml \
+ python-httplib2 \
+ rsync \
+ supervisor
+
+RUN pip install -U \
+ jinja2
+
+# Install custom Ansible
+RUN \
+ git clone -b release1.8.2 git://github.com/ansible/ansible.git /opt/ansible && \
+ git clone -b release1.8.2 git://github.com/ansible/ansible-modules-extras.git /opt/ansible/lib/ansible/modules/extras && \
+ git clone -b release1.8.2 git://github.com/ansible/ansible-modules-extras.git /opt/ansible/v2/ansible/modules/extras && \
+ git clone git://github.com/sb98052/ansible-modules-core.git /opt/ansible/lib/ansible/modules/core && \
+ git clone git://github.com/sb98052/ansible-modules-core.git /opt/ansible/v2/ansible/modules/core && \
+ # git clone uses cached copy, doesn't pick up latest
+ git -C /opt/ansible pull && \
+ git -C /opt/ansible/lib/ansible/modules/core pull && \
+ git -C /opt/ansible/v2/ansible/modules/core pull
+
+
+# For Observer
+RUN mkdir -p /usr/local/share /bin /etc/ansible
+
+COPY conf/ansible-hosts /etc/ansible/hosts
+
+ADD http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 /usr/local/share/
+
+RUN git clone git://git.planet-lab.org/fofum.git /tmp/fofum && \
+ cd /tmp/fofum; python setup.py install && \
+ rm -rf /tmp/fofum && \
+ tar jxvf /usr/local/share/phantomjs-1.7.0-linux-x86_64.tar.bz2 -C /usr/local/share/ && \
+ rm -f /usr/local/share/phantomjs-1.7.0-linux-x86_64.tar.bz2 && \
+ ln -s /usr/local/share/phantomjs-1.7.0-linux-x86_64 /usr/local/share/phantomjs && \
+ ln -s /usr/local/share/phantomjs/bin/phantomjs /bin/phantomjs
+
+
+# Supervisor
+COPY conf/synchronizer.conf /etc/supervisor/conf.d/
+
+CMD update-ca-certificates && /usr/bin/supervisord -c /etc/supervisor/conf.d/synchronizer.conf
diff --git a/mcord/synchronizer/Makefile b/mcord/synchronizer/Makefile
new file mode 100644
index 0000000..352616a
--- /dev/null
+++ b/mcord/synchronizer/Makefile
@@ -0,0 +1,15 @@
+IMAGE_NAME:=xosproject/xos-synchronizer-openstack
+CONTAINER_NAME:=xos-synchronizer
+NO_DOCKER_CACHE?=false
+
+.PHONY: build
+build: ; sudo docker build --no-cache=${NO_DOCKER_CACHE} --rm -t ${IMAGE_NAME} .
+
+.PHONY: run
+run: ; sudo docker run -d --name ${CONTAINER_NAME} -v /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro ${IMAGE_NAME}
+
+.PHONY: stop
+stop: ; sudo docker stop ${CONTAINER_NAME}
+
+.PHONY: rm
+rm: ; sudo docker rm ${CONTAINER_NAME}
diff --git a/mcord/synchronizer/conf/ansible-hosts b/mcord/synchronizer/conf/ansible-hosts
new file mode 100644
index 0000000..0dd74f1
--- /dev/null
+++ b/mcord/synchronizer/conf/ansible-hosts
@@ -0,0 +1,2 @@
+[localhost]
+127.0.0.1
diff --git a/mcord/synchronizer/conf/synchronizer.conf b/mcord/synchronizer/conf/synchronizer.conf
new file mode 100644
index 0000000..2131a25
--- /dev/null
+++ b/mcord/synchronizer/conf/synchronizer.conf
@@ -0,0 +1,9 @@
+[supervisord]
+logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
+pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
+nodaemon=true
+
+[program:synchronizer]
+command=python /opt/xos/synchronizers/openstack/xos-synchronizer.py
+stderr_logfile=/var/log/supervisor/synchronizer.err.log
+stdout_logfile=/var/log/supervisor/synchronizer.out.log
diff --git a/mcord/vbbu.yaml b/mcord/vbbu.yaml
new file mode 100644
index 0000000..ee535e3
--- /dev/null
+++ b/mcord/vbbu.yaml
@@ -0,0 +1,251 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Setup MCORD-related services.
+
+imports:
+ - custom_types/xos.yaml
+
+node_types:
+
+ tosca.nodes.MCORDService:
+ derived_from: tosca.nodes.Root
+ description: >
+ An XOS Service object. Services may be listed in the Service
+ directory and may be linked together via Tenancy Relationships.
+ capabilities:
+ scalable:
+ type: tosca.capabilities.Scalable
+ service:
+ type: tosca.capabilities.xos.Service
+ properties:
+ no-delete:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to delete this object
+ no-create:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to create this object
+ no-update:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to update this object
+ kind:
+ type: string
+ default: RAN
+ description: Type of service.
+ view_url:
+ type: string
+ required: false
+ description: URL to follow when icon is clicked in the Service Directory.
+ icon_url:
+ type: string
+ required: false
+ description: ICON to display in the Service Directory.
+ enabled:
+ type: boolean
+ default: true
+ published:
+ type: boolean
+ default: true
+ description: If True then display this Service in the Service Directory.
+ public_key:
+ type: string
+ required: false
+ description: Public key to install into Instances to allows Services to SSH into them.
+ private_key_fn:
+ type: string
+ required: false
+ description: Location of private key file
+ versionNumber:
+ type: string
+ required: false
+ description: Version number of Service.
+
+ tosca.nodes.VBBUComponent:
+ derived_from: tosca.nodes.Root
+ description: >
+ CORD: vBBU Component of MCORD Service.
+ properties:
+ kind:
+ type: string
+ default: RAN
+ description: Kind of component
+ s1u_tag:
+ type: string
+ required: false
+ default: 201
+ description: VTN stag port-name
+ s1mme_tag:
+ type: string
+ required: false
+ default: 200
+ description: VTN stag port-name
+ rru_tag:
+ type: string
+ required: false
+ default: 199
+ description: VTN stag port-name
+ display_message:
+ type: string
+ required: false
+ default: New vBBU Component
+ description: Just a message
+
+
+topology_template:
+ node_templates:
+ vBBU:
+ type: tosca.nodes.MCORDService
+ requirements:
+ properties:
+ kind: RAN
+ icon_url: /static/mCordServices/service_server.png
+ view_url: /admin/mcord/vbbucomponent
+ public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
+ private_key_fn: /opt/xos/configurations/mcord/mcord_private_key
+ artifacts:
+ pubkey: /opt/xos/configurations/mcord/mcord_public_key
+
+
+ Private:
+ type: tosca.nodes.NetworkTemplate
+
+ External:
+ type: tosca.nodes.NetworkTemplate
+
+ management_template:
+ type: tosca.nodes.NetworkTemplate
+ properties:
+ visibility: private
+ translation: none
+
+ management:
+ type: tosca.nodes.network.Network.XOS
+# properties:
+# no-create: true
+# no-delete: true
+# no-update: true
+
+ lan_3gpp_s1mme_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_3gpp_s1uc_net
+ cidr: 172.16.1.0/24
+ start_ip: 172.16.1.3
+ end_ip: 172.16.1.12
+ gateway_ip: 172.16.1.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ lan_3gpp_s1u_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_3gpp_s1u_net
+ cidr: 172.16.2.0/24
+ start_ip: 172.16.2.3
+ end_ip: 172.16.2.12
+ gateway_ip: 172.16.16.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ lan_rru_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_rru_net
+ cidr: 172.16.0.0/24
+ start_ip: 172.16.0.3
+ end_ip: 172.16.0.12
+ gateway_ip: 172.16.0.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ mysite:
+ type: tosca.nodes.Site
+
+ mcord-bbu-multi-nic:
+ type: tosca.nodes.Image
+
+ mysite_management:
+ description: This slice exists solely to own the management network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ mysite_mobile_net:
+ description: This slice exists solely to own the mobile network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ mysite_vbbu_slice1:
+ description: vBBU Service Slice 1
+ type: tosca.nodes.Slice
+ requirements:
+ - vBBU:
+ node: vBBU
+ relationship: tosca.relationships.MemberOfService
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - default_image:
+ node: mcord-bbu-multi-nic
+ relationship: tosca.relationships.DefaultImage
+ - management:
+ node: management
+ relationship: tosca.relationships.ConnectsToNetwork
+ properties:
+ network: noauto
+ default_flavor: m1.xlarge
+ default_node: computeBBU2
+
+ mysite_VBBU_Component:
+ description: MCORD Service default Component
+ type: tosca.nodes.VBBUComponent
+ requirements:
+ - provider_service:
+ node: vBBU
+ relationship: tosca.relationships.MemberOfService
+ - vbbu_slice:
+ node: mysite_vbbu_slice1
+ relationship: tosca.relationships.MemberOfSlice
+ properties:
+ display_message: vBBU looks good!
+ s1u_tag: 201
+ s1mme_tag: 200
+ rru_tag: 199
diff --git a/mcord/vpgwc.yaml b/mcord/vpgwc.yaml
new file mode 100644
index 0000000..d003bb2
--- /dev/null
+++ b/mcord/vpgwc.yaml
@@ -0,0 +1,203 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Setup MCORD-related services.
+
+imports:
+ - custom_types/xos.yaml
+
+node_types:
+
+ tosca.nodes.MCORDService:
+ derived_from: tosca.nodes.Root
+ description: >
+ An XOS Service object. Services may be listed in the Service
+ directory and may be linked together via Tenancy Relationships.
+ capabilities:
+ scalable:
+ type: tosca.capabilities.Scalable
+ service:
+ type: tosca.capabilities.xos.Service
+ properties:
+ no-delete:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to delete this object
+ no-create:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to create this object
+ no-update:
+ type: boolean
+ default: false
+ description: Do not allow Tosca to update this object
+ kind:
+ type: string
+ default: VPGWC_KIND
+ description: Type of service.
+ view_url:
+ type: string
+ required: false
+ description: URL to follow when icon is clicked in the Service Directory.
+ icon_url:
+ type: string
+ required: false
+ description: ICON to display in the Service Directory.
+ enabled:
+ type: boolean
+ default: true
+ published:
+ type: boolean
+ default: true
+ description: If True then display this Service in the Service Directory.
+ public_key:
+ type: string
+ required: false
+ description: Public key to install into Instances to allows Services to SSH into them.
+ private_key_fn:
+ type: string
+ required: false
+ description: Location of private key file
+ versionNumber:
+ type: string
+ required: false
+ description: Version number of Service.
+
+ tosca.nodes.VPGWCComponent:
+ derived_from: tosca.nodes.Root
+ description: >
+ CORD: vPGWC Component of MCORD Service.
+ properties:
+ kind:
+ type: string
+ default: VPGWC_KIND
+ description: Kind of component
+ s5s8_pgw_tag:
+ type: string
+ required: false
+ default: 300
+ description: VTN stag port-name
+ display_message:
+ type: string
+ required: false
+ default: New vPGWC Component
+ description: Just a message
+
+
+topology_template:
+ node_templates:
+ vPGWC:
+ type: tosca.nodes.MCORDService
+ requirements:
+ properties:
+ kind: VPGWC_KIND
+ icon_url: /static/mCordServices/service_server.png
+ view_url: /admin/mcord/vpgwccomponent
+ public_key: { get_artifact: [ SELF, pubkey, LOCAL_FILE] }
+ private_key_fn: /opt/xos/configurations/mcord/mcord_private_key
+ artifacts:
+ pubkey: /opt/xos/configurations/mcord/mcord_public_key
+
+ m1.xlarge:
+ type: tosca.nodes.Flavor
+
+ Private:
+ type: tosca.nodes.NetworkTemplate
+
+ External:
+ type: tosca.nodes.NetworkTemplate
+
+ management_template:
+ type: tosca.nodes.NetworkTemplate
+ properties:
+ visibility: private
+ translation: none
+
+ management:
+ type: tosca.nodes.network.Network.XOS
+# properties:
+# no-create: true
+# no-delete: true
+# no-update: true
+
+ lan_3gpp_s5s8_pgw_network:
+ type: tosca.nodes.network.Network.XOS
+ properties:
+ ip_version: 4
+ labels: lan_3gpp_s5s8_pgw_net
+ cidr: 172.17.1.0/24
+ start_ip: 172.17.1.2
+ end_ip: 172.17.1.8
+ gateway_ip: 172.17.1.1
+ requirements:
+ - network_template:
+ node: External
+ relationship: tosca.relationships.UsesNetworkTemplate
+ - owner:
+ node: mysite_mobile_net
+ relationship: tosca.relationships.MemberOfSlice
+ - connection:
+ node: mysite_vpgwc_slice1
+ relationship: tosca.relationships.ConnectsToSlice
+
+ mysite:
+ type: tosca.nodes.Site
+
+ mcord-vpgwc-onos-multi-nic:
+ type: tosca.nodes.Image
+
+ mysite_management:
+ description: This slice exists solely to own the management network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ mysite_mobile_net:
+ description: This slice exists solely to own the mobile network
+ type: tosca.nodes.Slice
+ properties:
+ network: noauto
+ requirements:
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+
+ mysite_vpgwc_slice1:
+ description: vPGWC Service Slice 1
+ type: tosca.nodes.Slice
+ requirements:
+ - vPGWC:
+ node: vPGWC
+ relationship: tosca.relationships.MemberOfService
+ - site:
+ node: mysite
+ relationship: tosca.relationships.MemberOfSite
+ - default_image:
+ node: mcord-vpgwc-onos-multi-nic
+ relationship: tosca.relationships.DefaultImage
+ - default_flavor:
+ node: m1.xlarge
+ relationship: tosca.relationships.DefaultFlavor
+ - management:
+ node: management
+ relationship: tosca.relationships.ConnectsToNetwork
+ properties:
+ network: noauto
+ default_node: compute10
+
+ mysite_VPGWC_Component:
+ description: MCORD Service default Component
+ type: tosca.nodes.VPGWCComponent
+ requirements:
+ - provider_service:
+ node: vPGWC
+ relationship: tosca.relationships.MemberOfService
+ - vpgwc_slice:
+ node: mysite_vpgwc_slice1
+ relationship: tosca.relationships.MemberOfSlice
+ properties:
+ display_message: vPGWC looks good!
+ s5s8_pgw_tag: 300
diff --git a/mcord/xos.yaml b/mcord/xos.yaml
new file mode 100644
index 0000000..124c864
--- /dev/null
+++ b/mcord/xos.yaml
@@ -0,0 +1,66 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+description: Onboard M-CORD service
+
+imports:
+ - custom_types/xos.yaml
+
+topology_template:
+ node_templates:
+ xos:
+ type: tosca.nodes.XOS
+ properties:
+ ui_port: 80
+ bootstrap_ui_port: 81
+ docker_project_name: mcord
+ db_container_name: mcordbs_xos_db_1
+
+ /opt/xos/xos_configuration/xos_common_config:
+ type: tosca.nodes.XOSVolume
+ properties:
+ host_path: { path_join: [ SELF, CONFIG_DIR, ../common/xos_common_config, ENV_VAR ] }
+ read_only: true
+ requirements:
+ - xos:
+ node: xos
+ relationship: tosca.relationships.UsedByXOS
+
+ /opt/xos/xos_configuration/xos_cord_config:
+ type: tosca.nodes.XOSVolume
+ properties:
+ host_path: { path_join: [ SELF, CONFIG_DIR, xos_cord_config, ENV_VAR ] }
+ read_only: true
+ requirements:
+ - xos:
+ node: xos
+ relationship: tosca.relationships.UsedByXOS
+
+ /opt/xos/xos_configuration/xos_vtn_config:
+ type: tosca.nodes.XOSVolume
+ properties:
+ host_path: { path_join: [ SELF, CONFIG_DIR, files/xos_vtn_config, ENV_VAR ] }
+ read_only: true
+ requirements:
+ - xos:
+ node: xos
+ relationship: tosca.relationships.UsedByXOS
+
+ /root/setup:
+ type: tosca.nodes.XOSVolume
+ properties:
+ host_path: { path_join: [ SELF, CONFIG_DIR, ., ENV_VAR ] }
+ read_only: true
+ requirements:
+ - xos:
+ node: xos
+ relationship: tosca.relationships.UsedByXOS
+
+ /opt/xos/images:
+ type: tosca.nodes.XOSVolume
+ properties:
+ host_path: { path_join: [ SELF, CONFIG_DIR, images, ENV_VAR ] }
+ read_only: true
+ requirements:
+ - xos:
+ node: xos
+ relationship: tosca.relationships.UsedByXOS
diff --git a/mcord/xos/Dockerfile b/mcord/xos/Dockerfile
new file mode 100644
index 0000000..f65eb37
--- /dev/null
+++ b/mcord/xos/Dockerfile
@@ -0,0 +1,94 @@
+FROM ubuntu:14.04.3
+
+# XXX Workaround for docker bug:
+# https://github.com/docker/docker/issues/6345
+# Kernel 3.15 breaks docker, uss the line below as a workaround
+# until there is a fix
+RUN ln -s -f /bin/true /usr/bin/chfn
+# XXX End workaround
+
+# Install.
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
+ curl \
+ gcc \
+ geoip-database \
+ git \
+ graphviz \
+ graphviz-dev \
+ libgeoip1 \
+ libxslt1.1 \
+ libxslt1-dev \
+ libyaml-dev \
+ m4 \
+ pkg-config \
+ python-dev \
+ python-httplib2 \
+ python-pip \
+ python-psycopg2 \
+ python-pycurl \
+ python-setuptools \
+ tar \
+ wget \
+##### observer dependencies
+ python-keystoneclient \
+ python-novaclient \
+ python-neutronclient \
+ python-glanceclient \
+ python-ceilometerclient
+
+RUN pip install \
+ django==1.7 \
+ django-bitfield \
+ django-crispy-forms \
+ django-encrypted-fields \
+ django-extensions \
+ django-filter==0.11.0 \
+ django-geoposition \
+ django-ipware \
+ django_rest_swagger \
+ django-suit==0.3a1 \
+ django-timezones \
+ djangorestframework==2.4.4 \
+ dnslib \
+ lxml \
+ markdown \
+ netaddr \
+ pyOpenSSL \
+ psycopg2 \
+ python-ceilometerclient \
+ python-dateutil \
+ python-keyczar \
+ pygraphviz \
+ pytz \
+ pyyaml \
+ requests
+
+RUN easy_install --upgrade httplib2
+
+RUN easy_install \
+ python_gflags \
+ google_api_python_client \
+ httplib2.ca_certs_locater
+
+ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
+
+# Install XOS
+RUN git clone git://github.com/open-cloud/xos.git /tmp/xos && \
+ mv /tmp/xos/xos /opt/ && \
+ chmod +x /opt/xos/tools/xos-manage && \
+ /opt/xos/tools/xos-manage genkeys
+
+# install Tosca engine
+RUN chmod +x /opt/xos/tosca/run.py
+RUN bash /opt/xos/tosca/install_tosca.sh
+
+EXPOSE 8000
+
+# Set environment variables.
+ENV HOME /root
+
+# Define working directory.
+WORKDIR /opt/xos
+
+# Define default command.
+CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
diff --git a/mcord/xos/Dockerfile.devel b/mcord/xos/Dockerfile.devel
new file mode 100644
index 0000000..e0d0c6d
--- /dev/null
+++ b/mcord/xos/Dockerfile.devel
@@ -0,0 +1,94 @@
+FROM ubuntu:14.04.3
+
+# XXX Workaround for docker bug:
+# https://github.com/docker/docker/issues/6345
+# Kernel 3.15 breaks docker, uss the line below as a workaround
+# until there is a fix
+RUN ln -s -f /bin/true /usr/bin/chfn
+# XXX End workaround
+
+# Install.
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
+ curl \
+ gcc \
+ geoip-database \
+ git \
+ graphviz \
+ graphviz-dev \
+ libgeoip1 \
+ libxslt1.1 \
+ libxslt1-dev \
+ libyaml-dev \
+ m4 \
+ pkg-config \
+ python-dev \
+ python-httplib2 \
+ python-pip \
+ python-psycopg2 \
+ python-pycurl \
+ python-setuptools \
+ tar \
+ wget \
+##### observer dependencies
+ python-keystoneclient \
+ python-novaclient \
+ python-neutronclient \
+ python-glanceclient \
+ python-ceilometerclient
+
+RUN pip install \
+ django==1.7 \
+ django-bitfield \
+ django-crispy-forms \
+ django-encrypted-fields \
+ django-extensions \
+ django-filter==0.11.0 \
+ django-geoposition \
+ django-ipware \
+ django_rest_swagger \
+ django-suit==0.3a1 \
+ django-timezones \
+ djangorestframework==2.4.4 \
+ dnslib \
+ lxml \
+ markdown \
+ netaddr \
+ pyOpenSSL \
+ psycopg2 \
+ python-ceilometerclient \
+ python-dateutil \
+ python-keyczar \
+ pygraphviz \
+ pytz \
+ pyyaml \
+ requests
+
+RUN easy_install --upgrade httplib2
+
+RUN easy_install \
+ python_gflags \
+ google_api_python_client \
+ httplib2.ca_certs_locater
+
+ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
+
+# Install XOS
+ADD xos /opt/xos
+RUN chmod +x /opt/xos/tools/xos-manage
+RUN /opt/xos/tools/xos-manage genkeys
+
+# install Tosca engine
+RUN chmod +x /opt/xos/tosca/run.py
+RUN bash /opt/xos/tosca/install_tosca.sh
+
+EXPOSE 8000
+
+# Set environment variables.
+ENV HOME /root
+
+# Define working directory.
+WORKDIR /opt/xos
+
+# RUN python /opt/xos/manage.py makemigrations mcordservice
+# Define default command.
+CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
diff --git a/mcord/xos/Dockerfile.templ b/mcord/xos/Dockerfile.templ
new file mode 100644
index 0000000..25270a6
--- /dev/null
+++ b/mcord/xos/Dockerfile.templ
@@ -0,0 +1,88 @@
+FROM ubuntu:14.04.3
+
+# XXX Workaround for docker bug:
+# https://github.com/docker/docker/issues/6345
+# Kernel 3.15 breaks docker, uss the line below as a workaround
+# until there is a fix
+RUN ln -s -f /bin/true /usr/bin/chfn
+# XXX End workaround
+
+# Install.
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
+ curl \
+ gcc \
+ geoip-database \
+ git \
+ graphviz \
+ graphviz-dev \
+ libgeoip1 \
+ libxslt1.1 \
+ libxslt1-dev \
+ libyaml-dev \
+ m4 \
+ pkg-config \
+ python-dev \
+ python-httplib2 \
+ python-pip \
+ python-psycopg2 \
+ python-pycurl \
+ python-setuptools \
+ tar \
+ wget \
+##### observer dependencies
+ python-keystoneclient \
+ python-novaclient \
+ python-neutronclient \
+ python-glanceclient \
+ python-ceilometerclient
+
+RUN pip install -U \
+ django==1.7 \
+ django-bitfield \
+ django-crispy-forms \
+ django-encrypted-fields \
+ django_evolution \
+ django-extensions \
+ django-filter==0.11.0 \
+ django-geoposition \
+ django-ipware \
+ django_rest_swagger \
+ django-suit==0.3a1 \
+ django-timezones \
+ djangorestframework==2.4.4 \
+ dnslib \
+ google_api_python_client \
+ httplib2 \
+ httplib2.ca_certs_locater \
+ lxml \
+ markdown \
+ netaddr \
+ python-dateutil \
+ python_gflags \
+ python-keyczar \
+ pygraphviz \
+ pytz \
+ pyyaml \
+ requests
+
+ADD http://code.jquery.com/jquery-1.9.1.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/
+
+# Install XOS
+RUN git clone XOS_GIT_REPO -b XOS_GIT_BRANCH /tmp/xos && \
+ mv /tmp/xos/xos /opt/ && \
+ chmod +x /opt/xos/tools/xos-manage && \
+ /opt/xos/tools/xos-manage genkeys
+
+# install Tosca engine
+RUN bash /opt/xos/tosca/install_tosca.sh
+
+EXPOSE 8000
+
+# Set environment variables.
+ENV HOME /root
+
+# Define working directory.
+WORKDIR /root
+
+# Define default command.
+CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure --makemigrations
diff --git a/mcord/xos/Makefile b/mcord/xos/Makefile
new file mode 100644
index 0000000..0ba043d
--- /dev/null
+++ b/mcord/xos/Makefile
@@ -0,0 +1,27 @@
+CONTAINER_NAME:=xos-server
+IMAGE_NAME:=xosproject/xos
+TOSCA_CONFIG_PATH:=/opt/xos/configurations/opencloud/opencloud.yaml
+XOS_GIT_REPO?=git://github.com/open-cloud/xos.git
+XOS_GIT_BRANCH?=master
+NO_DOCKER_CACHE?=false
+
+.PHONY: build
+build: ; sudo docker build --no-cache=${NO_DOCKER_CACHE} --rm -t ${IMAGE_NAME} .
+
+.PHONY: custom
+custom: ; cat Dockerfile.templ | sed -e "s|XOS_GIT_REPO|${XOS_GIT_REPO}|g" -e "s|XOS_GIT_BRANCH|${XOS_GIT_BRANCH}|g" | docker build --no-cache=${NO_DOCKER_CACHE} --rm -t ${IMAGE_NAME} -
+
+.PHONY: devel
+devel: ; cd ../..; ls; sudo docker build -f containers/xos/Dockerfile.devel --no-cache=${NO_DOCKER_CACHE} --rm -t ${IMAGE_NAME} .
+
+.PHONY: run
+run: ; sudo docker run -d --name ${CONTAINER_NAME} -p 80:8000 -v /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro ${IMAGE_NAME}
+
+.PHONY: runtosca
+runtosca: ; sudo docker exec -it ${CONTAINER_NAME} /usr/bin/python /opt/xos/tosca/run.py padmin@vicci.org ${TOSCA_CONFIG_PATH}
+
+.PHONY: stop
+stop: ; sudo docker stop ${CONTAINER_NAME}
+
+.PHONY: rm
+rm: ; sudo docker rm ${CONTAINER_NAME}
diff --git a/mcord/xos/initdb b/mcord/xos/initdb
new file mode 100755
index 0000000..1f5b770
--- /dev/null
+++ b/mcord/xos/initdb
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+IMAGE_NAME=xosproject/xos
+CONTAINER_NAME=xos_build_helper_$$
+DB_HOST=$(wget http://ipinfo.io/ip -qO -)
+
+# configure db host
+docker run -it --name=$CONTAINER_NAME $IMAGE_NAME sed -i '0,/host/{s/host=localhost/host='$DB_HOST'/}' /opt/xos/xos_configuration/xos_common_config
+docker commit $CONTAINER_NAME $IMAGE_NAME
+docker rm $CONTAINER_NAME
+
+# init db schema
+docker run -it --name=$CONTAINER_NAME $IMAGE_NAME /opt/xos/tools/xos-manage makemigrations
+# run overrides the CMD specifed in the Dockerfile, so we re-set the CMD in the final commit"
+docker commit --change="CMD update-ca-certificates && python /opt/xos/manage.py runserver 0.0.0.0:8000 --insecure" $CONTAINER_NAME $IMAGE_NAME
+docker rm $CONTAINER_NAME
diff --git a/mcord/xos_mcord_config b/mcord/xos_mcord_config
new file mode 100644
index 0000000..8f4034d
--- /dev/null
+++ b/mcord/xos_mcord_config
@@ -0,0 +1,6 @@
+[gui]
+branding_name=M-CORD
+branding_icon=/static/cord-logo.png
+branding_favicon=/static/cord-favicon.png
+branding_bg=/static/mcord-bg.jpg
+service_view_class=core.views.mCordServiceGrid.ServiceGridView