Merge "[CORD-3197] Document how to attach containers to external NICs"
diff --git a/Makefile b/Makefile
index 8d596b8..7e572d9 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@
# Other repos with documentation that's included in the gitbook
# edit the `git_refs` file with the commit/tag/branch that you want to use
-OTHER_REPO_DOCS ?= cord-tester fabric hippie-oss kubernetes-service olt-service onos-service openolt openstack rcord simpleexampleservice vrouter xos xos-gui xos-tosca
+OTHER_REPO_DOCS ?= cord-tester fabric hippie-oss kubernetes-service olt-service onos-service openolt openstack rcord simpleexampleservice exampleservice vrouter xos xos-gui xos-tosca
GENERATED_DOCS ?= # should be 'swagger', but currently broken
ALL_DOCS ?= $(OTHER_REPO_DOCS) $(GENERATED_DOCS)
@@ -49,7 +49,7 @@
mdl -s $(LINT_STYLE) `find -L . ! -path "./partials/*" ! -path "./_book/*" ! -path "./repos/*" ! -path "./node_modules/*" ! -path "./cord-tester/modules/*" -name "*.md"`
linkcheck: $(ALL_DOCS) _book
- linkchecker -a _book/
+ linkchecker -a --check-extern _book/
# Host holding the git server
REPO_HOST ?= https://gerrit.opencord.org
@@ -87,3 +87,13 @@
swagger: xos
pushd repos/xos/docs; make swagger_docs; popd;
+# generate a list of git checksums suitable for updating git_refs
+freeze: repos
+ @for repo in $(OTHER_REPO_DOCS) ; do \
+ GIT_SUBDIR=`grep "^$$repo " git_refs | awk '{print $$2}'` ;\
+ cd "repos/$$repo" > /dev/null ;\
+ HEAD_SHA=`git rev-parse HEAD` ;\
+ printf "%-21s %-8s %-40s\n" $$repo $$GIT_SUBDIR $$HEAD_SHA ;\
+ cd ../.. ;\
+ done
+
diff --git a/SUMMARY.md b/SUMMARY.md
index c465006..ba8f447 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -65,17 +65,17 @@
* [Synchronizer Reference](xos/dev/sync_reference.md)
* [Core Models](xos/core_models.md)
* [Security Policies](xos/security_policies.md)
+ * [Tutorial](xos/tutorials/basic_synchronizer.md)
* [Developer Workflows](developer/workflows.md)
* [Working on R-CORD Without an OLT/ONU](developer/configuration_rcord.md)
* [Building Docker Images](developer/imagebuilder.md)
- * Tutorials
- * [Synchronizer Hello World](developer/tutorials/basic-synchronizer/intro.md)
* [Platform Services](developer/platform.md)
* [Kubernetes](kubernetes-service/kubernetes-service.md)
* [OpenStack](openstack/openstack-service.md)
* [VTN and Service Composition](xos/xos_vtn.md)
* [Example Services](examples/examples.md)
* [SimpleExampleService](simpleexampleservice/simple-example-service.md)
+ * [ExampleService](exampleservice/example-service.md)
* [GUI Development](xos-gui/developer/README.md)
* [Quickstart](xos-gui/developer/quickstart.md)
* [GUI Extensions](xos-gui/developer/gui_extensions.md)
diff --git a/book.json b/book.json
index fd3f609..1317bf7 100644
--- a/book.json
+++ b/book.json
@@ -21,6 +21,10 @@
"text": "Master (Devel)"
},
{
+ "value": "/cord-6.0",
+ "text": "6.0 (Stable)"
+ },
+ {
"value": "/cord-5.0",
"text": "5.0 (Stable)"
},
@@ -29,10 +33,6 @@
"text": "4.1 (Stable)"
},
{
- "value": "/cord-4.0",
- "text": "4.0 (Stable)"
- },
- {
"value": "https://wiki.opencord.org/display/CORD/Building+and+Installing+CORD",
"text": "3.0 and previous (wiki)"
}
diff --git a/charts/kafka.md b/charts/kafka.md
index 051754d..464dfe5 100644
--- a/charts/kafka.md
+++ b/charts/kafka.md
@@ -7,7 +7,12 @@
```shell
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
-helm install --name cord-kafka incubator/kafka
+helm install --name cord-kafka \
+--set replicas=1 \
+--set persistence.enabled=false \
+--set zookeeper.servers=1 \
+--set zookeeper.persistence.enabled=false \
+incubator/kafka
```
If you are experierencing problems with a multi instance installation of kafka,
diff --git a/fabric-setup.md b/fabric-setup.md
index d0de4c2..4fb19b6 100644
--- a/fabric-setup.md
+++ b/fabric-setup.md
@@ -45,6 +45,7 @@
Three OFDPA drivers are available:
* [EdgeCore 5712-54X / 5812-54X / 6712-32X](https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa_3.0.5.5%2Baccton1.7-1_amd64.deb?raw=true) - *checksum: sha256:db228b6e79fb15f77497b59689235606b60abc157e72fc3356071bcc8dc4c01f*
+* [EdgeCore 7712-32X](https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa_3.0.5.5%2Baccton1.7-1_amd64.deb) - *checksum: sha256:4f78e8f43976dc86ab1cdc2f98afa743ce2e0cc5923e429c91f96b0edc3ddf4b*
* [QuantaMesh T3048-LY8](https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb?raw=true) - *checksum: sha256:f8201530b1452145c1a0956ea1d3c0402c3568d090553d0d7b3c91a79137da9e*
* [QuantaMesh BMS T7032-IX1/IX1B](https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa-ix1_0.3.0.5.0-EA5-qct-01.00_amd64.deb?raw=true) *checksum: sha256:278b8ffed8a8fc705a1b60d16f8e70377e78342a27a11568a1d80b1efd706a46*
diff --git a/git_refs b/git_refs
index fcadce1..7faa57f 100644
--- a/git_refs
+++ b/git_refs
@@ -21,6 +21,7 @@
openstack /docs master
rcord /docs master
simpleexampleservice /docs master
+exampleservice /docs master
vrouter /docs master
xos-gui /docs master
xos-tosca /docs master
diff --git a/mdl_relaxed.rb b/mdl_relaxed.rb
index bebc671..478ea9e 100644
--- a/mdl_relaxed.rb
+++ b/mdl_relaxed.rb
@@ -51,3 +51,7 @@
# Gitbook won't care about multiple blank lines
exclude_rule 'MD012'
+
+# Causes failures within code block when MD031 is also excluded
+exclude_rule 'MD046'
+
diff --git a/operating_cord/rest_apis.md b/operating_cord/rest_apis.md
index 7b29be0..692aaa0 100644
--- a/operating_cord/rest_apis.md
+++ b/operating_cord/rest_apis.md
@@ -1,18 +1,11 @@
# RESTful APIs
A RESTful interface is available for configuring and controlling CORD. It is
-auto-generated from the set of [models](/xos/README.md) configured
-into the POD manifest, and includes both core and service-specific models.
+auto-generated from the set of [models](/xos/intro.md) configured
+into a POD, and includes both core and service-specific models. Click
+[here](https://guide.opencord.org/master/api/xos/) to see API defined
+for the full set of services checked into [Gerrit](https://gerrit.opencord.org).
-* [Core](https://guide.opencord.org/{{ book.branch }}/api/xos/#/core)
-* [Address Manager](https://guide.opencord.org/{{ book.branch }}/api/xos/#/addressmanager)
-* [vTR](https://guide.opencord.org/{{ book.branch }}/api/xos/#/vtr)
-* [vSG](https://guide.opencord.org/{{ book.branch }}/api/xos/#/vsg)
-* [vNoD Local](https://guide.opencord.org/{{ book.branch }}/api/xos/#/vnodlocal)
-* [vRouter](https://guide.opencord.org/{{ book.branch }}/api/xos/#/vrouter)
-* [ONOS Service](https://guide.opencord.org/{{ book.branch }}/api/xos/#/onos)
-* [Fabric Service](https://guide.opencord.org/{{ book.branch }}/api/xos/#/fabric)
-* [Example Service](https://guide.opencord.org/{{ book.branch }}/api/xos/#/exampleservice)
-* [vEE](https://guide.opencord.org/{{ book.branch }}/api/xos/#/vee)
-* [vEG](https://guide.opencord.org/{{ book.branch }}/api/xos/#/veg)
-* [vnaas](https://guide.opencord.org/{{ book.branch }}/api/xos/#/vnaas)
+You can access the REST API specification on a running POD by going to
+the `/apidocs/` URL on the Chameleon REST endpoint (exposed at
+port 30006 by default): `http://pod-ip-or-dns-address:30006/apidocs/`.
diff --git a/prereqs/hardware.md b/prereqs/hardware.md
index 20eb576..820ff9a 100644
--- a/prereqs/hardware.md
+++ b/prereqs/hardware.md
@@ -72,14 +72,22 @@
copper cable, 3m length - S/N: QSFP-40G-03C
* **R-CORD Access Devices and Optics**
+ * **GPON**
+ * **OLT**: Celestica CLS Ruby S1010 (experimental, only top-down provisioning is supported - through manual customizations)
+ * Compatible **OLT optics**
+ * OptoWiz LSP4343-CKSA-R GPON SFP OLT Transceiver
+ * **ONUs**:
+ * Celestica Tellion GP-1204
+ * Movistar ONU (with CPE included) (manifactured by Telefonica: <http://www.movistar.es/particulares/movil/moviles/hgu>)
* **XGS-PON**
* **OLT**: EdgeCore ASFVOLT16 (for more info <bartek_raszczyk@edge-core.com>)
- * Compatible **OLT optics**
- * Hisense/Ligent: LTH7226-PC, LTH7226-PC+
- ** Source Photonics: XPP-XG2-N1-CDFA
- * **ONU**: AlphaNetworks PON-34000B (for more info <ed-y_chen@alphanetworks.com>)
- * Compatible **ONU optics**
- * Hisense/Ligent: LTF7225-BC, LTF7225-BH+
+ * Compatible **OLT optics**
+ * Hisense/Ligent: LTH7226-PC, LTH7226-PC+
+ * Source Photonics: XPP-XG2-N1-CDFA
+ * **ONUs**:
+ * AlphaNetworks PON-34000B (for more info <ed-y_chen@alphanetworks.com>)
+ * Compatible **ONU optics**
+ * Hisense/Ligent: LTF7225-BC, LTF7225-BH+
* **M-CORD Specific Requirements**
* **Servers**: Some components of CORD require at least a Intel XEON CPU with Haswell microarchitecture or better.
diff --git a/prereqs/openstack-helm.md b/prereqs/openstack-helm.md
index d60f9a8..7627a45 100644
--- a/prereqs/openstack-helm.md
+++ b/prereqs/openstack-helm.md
@@ -61,6 +61,15 @@
```
```bash
+cat <<EOF > /tmp/libvirt-cord.yaml
+---
+network:
+ backend: []
+EOF
+export OSH_EXTRA_HELM_ARGS_LIBVIRT="-f /tmp/libvirt-cord.yaml"
+```
+
+```bash
cat <<EOF > /tmp/nova-cord.yaml
---
labels:
diff --git a/profiles/rcord/configuration.md b/profiles/rcord/configuration.md
index 7c865c8..d2cff9a 100644
--- a/profiles/rcord/configuration.md
+++ b/profiles/rcord/configuration.md
@@ -304,3 +304,126 @@
For instructions on how to push TOSCA into a CORD POD, please
refer to this [guide](../../xos-tosca/README.md).
+
+### Know issues
+
+There is a set of issue that we have seen from time to time.
+They are currently undergoing a deeper investigation, but here is how to identify
+and correct them.
+
+#### OLTDevices are not pushed to VOLTHA
+
+If you have configured OLTDevices in XOS and you are not seeing them in VOLTHA,
+you should check the vOLT-synchronizer logs:
+
+```shell
+kubectl logs -f $(kubectl get pods | grep volt- | awk '{print $1}')
+```
+
+If the logs are not moving, restart the synchronizer:
+
+```shell
+kubectl delete pod $(kubectl get pods | grep volt- | awk '{print $1}')
+```
+
+#### ONU Activate events are not received by XOS
+
+Once OLTs have been activated, XOS should receive events and create
+`HippieOssServiceInstance` models for each event.
+
+To check if XOS has been received from XOS you can use this command:
+
+```shell
+kubectl logs -f $(kubectl get pods | grep volt- | awk '{print $1}') | grep "onu.event"
+```
+
+If the events have been received you should see something like:
+
+```shell
+Processing event msg=ConsumerRecord(topic=u'onu.events', partition=0, offset=42, timestamp=1530296353275, timestamp_type=0, key=None, value='{"timestamp":1530296353275,"status":"activated","serial_number":"ALPHe3d1cfde","uni_port_id":48,"of_dpid":"of:000000000a5a0097"}', checksum=100437027, serialized_key_size=-1, serialized_value_size=128) step=ONUEventStep
+onu.events: received event value={u'status': u'activated', u'timestamp': 1530296353275, u'uni_port_id': 48, u'of_dpid': u'of:000000000a5a0097', u'serial_number': u'ALPHe3d1cfde'}
+onu.events: activate onu value={u'status': u'activated', u'timestamp': 1530296353275, u'uni_port_id': 48, u'of_dpid': u'of:000000000a5a0097', u'serial_number': u'ALPHe3d1cfde'}
+onu.events: Calling OSS for ONUDevice with serial_number ALPHe3d1cfde
+```
+
+If you don't see that, you can force ONOS-VOLTHA to send the events again.
+
+Connect to the ONOS-VOLTHA CLI:
+
+```shell
+ssh karaf@<pod-ip> -p $(kubectl get svc -n voltha | grep -i onos-voltha-ssh | awk '{print substr($5,6,5)}')
+```
+Remove the device:
+
+```shell
+onos> device-remove <device-ofid>
+```
+
+The device will be automatically discovered again, and events are sent.
+
+##### Check if the events appears in Kafka
+
+If you are still not seeing the events in XOS, you can check if they appear into Kafka.
+
+To do that `exec` into any synchronizer container:
+
+```shell
+kubectl exec -it $(kubectl get pods | grep volt- | awk '{print $1}') bash
+apt-get update
+apt-get install kafkacat -y
+kafkacat -b cord-kafka.default.svc.cluster.local:9092 -t onu.events
+```
+
+If the events have reached `kafka` you should see this message:
+
+```shell
+{"timestamp":1530301582776,"status":"activated","serial_number":"ALPHe3d1cfde","uni_port_id":48,"of_dpid":"of:000000000a5a0097"}
+```
+
+If they have not you are probably missing the correct configuration in ONOS-VOLTHA,
+to verify that, ssh into ONOS-VOLTHA:
+
+```shell
+ssh karaf@<pod-ip> -p $(kubectl get svc -n voltha | grep -i onos-voltha-ssh | awk '{print substr($5,6,5)}')
+```
+
+and check if there is any configuration for the `org.opencord.olt` app:
+
+```shell
+onos> netcfg apps org.opencord.olt
+{
+ "kafka" : {
+ "bootstrapServers" : "cord-kafka.default.svc.cluster.local:9092"
+ }
+}
+```
+
+If you don't have that configuration, you can resubmit it by going into the XOS-GUI,
+search for `ServiceInstanceAttributes` and save the configuration again.
+
+#### Subscribers are not created as a result of an ONU Activate event
+
+If you see `HippieOssServiceInstances` but you don't see any `Subscriber` in XOS,
+you should check if the model policies for the `HippieOssServiceInstances` have been executed:
+
+```shell
+kubectl logs -f $(kubectl get pods | grep hippie- | awk '{print $1}') | grep -i "model_policy"
+```
+
+I this is the only line you are seeing:
+
+```shell
+Loaded model policies policies=[<class 'model_policy_hippieossserviceinstance.OSSServiceInstancePolicy'>]
+```
+
+Go to the XOS-GUI, search for `HippieOssServiceInstances` and save them again.
+You should see the above command print more logs and `Subscriber`s beeing created.
+
+#### ONU Ports are down
+
+If everything is correctly configured across the POD, but you can't ping
+the gateway from your client, it's possible that the ports on the ONU are not up.
+
+Assuming that your client is connected to the OLT via the interface `eth1`,
+you can check if the client sees the port as up or not. If the port is not up,
+reboot the ONU.