If this is your first encounter with CORD, we suggest you start by bringing up an Virtual Pod, which installs CORD on a set of virtual machines running on a single physical server: Installing a Virtual Pod (CORD-in-a-Box).
You can also install CORD on a physical POD, as would be done in a production environment, which involves first assembling a set of servers and switches, and then pointing the build system at that target hardware: Installing a Physical POD.
If you are interested in developing a new CORD service, working on the XOS GUI, or performing other development tasks, see Developing for CORD.
If you've run into trouble or want to know more about the CORD build process, please see Troubleshooting and Build Internals.
CORD has a unified build system for development and deployment which uses the following tools:
And either:
cord-bootstrap.sh
for more details *You can manually install these on your development system - see Getting the Source Code for a more detailed instructions for checking out the CORD source tree.
If you're working on an cleanly installed Ubuntu 14.04 system, you can use the cord-bootstrap.sh
script to install these tools and check out the CORD source tree to ~/cord
.
The bootstrap script has the following options:
Usage for ./cord-bootstrap.sh: -d Install Docker for local scenario. -h Display this help message. -p <project:change/revision> Download a patch from gerrit. Can be repeated. -t <target> Run 'make -j4 <target>' in cord/build/. Can be repeated. -v Install Vagrant for mock/virtual/physical scenarios.
Using the -v
option is required to install Vagrant for running a Virtual Pod (CiaB), whereas -d
is required to install Docker for a Local Workflow.
The -p
option downloads a patch from gerrit, and the syntax for this is <project path>:<changeset>/<revision>
. It can be used multiple time. For example:
./cord-bootstrap.sh -p build/platform-install:1233/4 -p orchestration/xos:1234/2
checks out the platform-install
repo with changeset 1233, patchset 4, and xos
repo changeset 1234, revision 2.
You can find the project path in the repo
manifest file: manifest/default.xml.
You can also run make targets with the -t
option; -t build
is the same as running cd ~/cord/build ; make -j4 build
after the rest of the installations and downloads have completed.
In some cases, you may see a message like this if you install software that adds you to a group and you aren't already a member:
You are not in the group: libvirtd, please logout/login. You are not in the group: docker, please logout/login.
In such cases, please logout and login to the system to gain the proper group membership. Another way to tell if you're in the right groups:
~$ groups xos-PG0 root ~$ vagrant status Call to virConnectOpen failed: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied ~$ logout ~$ ssh node_name.cloudlab.us ~$ groups xos-PG0 root libvirtd
Note that if you aren't in the right group, any patches specified by -p
will be downloaded, but no make targets specified by -t
will be run - you will need to cd ~/cord/build
and run those targets manually.
The CORD build process is designed to be modular and configurable with only a handful of YAML files.
The top level configuration for a build is the POD config file, which is a YAML file stored in [build/podconfig](https://github.com/opencord/cord/tree/{{ book.branch }}/podconfig) that contains a list of variables that control how the build proceeds, and can override the configuration of the rest of the build.
A minimal POD Config file must define two variables:
cord_scenario
- the name of the scenario to use, which is defined in a directory under [build/scenarios](https://github.com/opencord/cord/tree/{{ book.branch }}/scenarios).
cord_profile
- the name of a profile to use, defined as a YAML file in [build/platform-install/profile_manifests](https://github.com/opencord/platform-install/tree/{{ book.branch }}/profile_manifests).
The included POD configs must be named <profile>-<scenario>.yml
, except for the physical-example.yml
file which is used for a Physical POD and requires a bit more work to configured.
POD configs are used during a build by passing them with the PODCONFIG
variable to make
- ex: make PODCONFIG=rcord-virtual.yml config
You can also specify a full path to the POD config file to use with PODCONFIG_PATH
. This will override the PODCONFIG
variable.
The set of services that XOS on-boards into CORD -- the Service Graph, and other per-profile configuration for a CORD deployment. These are located in [build/platform-install/profile_manifests](https://github.com/opencord/platform-install/tree/{{ book.branch }}/profile_manifests).
Scenarios define the physical or virtual environment that CORD will be installed into, a default mapping of ansible groups to nodes, the set of Docker images that can be built, and software and platform features are installed onto those nodes. Scenarios are subdirectories of the [build/scenarios](https://github.com/opencord/cord/tree/{{ book.branch }}/scenarios) directory, and consist of a config.yaml
file and possibly VM's specified in a Vagrantfile
.
The current set of scenarios:
local
: Minimal set of containers running locally on the development hostmock
: Creates a single Vagrant VM with containers and DNS set up, without synchronizerssingle
: Creates a single Vagrant VM with containers and DNS set up, with synchronizers and optional ElasticStack/ONOScord
: Physical or virtual multi-node CORD pod, with MaaS and OpenStackopencloud
: Physical or virtual multi-node OpenCloud pod, with OpenStackThe scenario is specified in the POD config's cord_scenario
line.