Adding AT&T workflow documentation

Change-Id: I9b05dba9132c02422b579cd95c3578899280f00f
diff --git a/profiles/rcord/configuration.md b/profiles/rcord/configuration.md
index 4e81cb0..67f59ee 100644
--- a/profiles/rcord/configuration.md
+++ b/profiles/rcord/configuration.md
@@ -223,275 +223,3 @@
 
 For instructions on how to push TOSCA into a CORD POD, please
 refer to this [guide](../../xos-tosca/README.md).
-
-## Zero-Touch Subscriber Provisioning
-
-This feature, also referred to as "bottom-up" provisioning,
-enables auto-discovery of subscribers and validates them
-using an external OSS.
-
-The expected workflow is as follows:
-
-- When an ONU is attached to the POD, VOLTHA will discover it and send
-   an event to XOS
-- XOS receives the ONU activation event and through an OSS proxy
-   queries the upstream OSS to validate wether that ONU has a valid serial number
-- Once the OSS has approved the ONU, XOS will create `ServiceInstance`
-  chain for this particular subscriber and configure the POD to enable connectivity
-
-To enable the zero-touch provisioning feature, you will need to deploy
-and configure some extra pieces into the system before attaching
-subscribers:
-
-### Deploy Kafka
-
-To enable this feature XOS needs to receive events from `onos-voltha`,
-so a kafka bus needs to be deployed.
-To deploy Kafka, please follow these [instructions](../../charts/kafka.md)
-
-### Deploy OSS Proxy
-
-This is the piece of code that is responsible to connecting CORD to an
-external OSS Database. As a simple reference, we provide a sample
-implemetation, available here:
-[hippie-oss](https://github.com/opencord/hippie-oss)
-
-> **Note:** This implementation currently validates any subscriber that comes online.
-
-To deploy the `hippie-oss` service you can look [here](../../charts/hippie-oss.md).
-
-Once the chart has come online, you will need to add the Hippie-OSS service
-to your service graph. You can use the following TOSCA to do that:
-
-```yaml
-tosca_definitions_version: tosca_simple_yaml_1_0
-imports:
-  - custom_types/hippieossservice.yaml
-  - custom_types/servicedependency.yaml
-  - custom_types/voltservice.yaml
-description: Create an instance of the OSS Service and connect it to the vOLT Service
-topology_template:
-  node_templates:
-
-    # Reference the VOLTService
-    service#volt:
-      type: tosca.nodes.VOLTService
-      properties:
-        name: volt
-        must-exist: true
-
-    # Reference the HippieOSSService
-    service#oss:
-      type: tosca.nodes.HippieOSSService
-      properties:
-        name: hippie-oss
-        kind: oss
-        # blacklist: BRCM1234, BRCM4321 # this is an optional list of ONUs that you don't want to validate
-
-    # Create a ServiceDependency between the two
-    service_dependency#oss_volt:
-      type: tosca.nodes.ServiceDependency
-      properties:
-        connect_method: None
-      requirements:
-        - subscriber_service:
-            node: service#oss
-            relationship: tosca.relationships.BelongsToOne
-        - provider_service:
-            node: service#volt
-            relationship: tosca.relationships.BelongsToOne
-```
-
-For instructions on how to push TOSCA into a CORD POD, please
-refer to this [guide](../../xos-tosca/README.md).
-
-### Complete the Subscriber config
-
-As a result of the OLT/ONU activation you'll find out that XOS has generated
-an `RCORDSubscriber` for you.
-That model has the `status` field set to `awaiting-auth`, that means that
-you can ping the gateway but not the internet.
-
-The authentication mechanism is not yet ready in CORD 6.0,
-so you need to configure few attributes manully,
-such as:
-
-- `ip_addres`
-- `mac_address`
-- set `status` to `enabled`
-
-You can do that via the GUI or you can use a TOSCA like the following:
-```yaml
-tosca_definitions_version: tosca_simple_yaml_1_0
-imports:
-  - custom_types/rcordsubscriber.yaml
-description: Create a test subscriber
-topology_template:
-  node_templates:
-    # A subscriber
-    my_house:
-      type: tosca.nodes.RCORDSubscriber
-      properties:
-        name: My House
-        must-exist: true
-        status: enabled
-        mac_address: 00:AA:00:00:00:01 # subscriber mac address
-        ip_address: 10.8.2.1 # subscriber IP
-```
-
-For instructions on how to push TOSCA into a CORD POD, please
-refer to this [guide](../../xos-tosca/README.md).
-
-#### Pre-provision subscribers
-
-Another viable approach is to `pre-provision` subscribers,
-you can do that using this TOSCA:
-
-```yaml
-tosca_definitions_version: tosca_simple_yaml_1_0
-imports:
-  - custom_types/rcordsubscriber.yaml
-
-description: Pre-provsion a subscriber
-
-topology_template:
-  node_templates:
-
-    # Pre-provision the subscriber the subscriber
-    my_house:
-      type: tosca.nodes.RCORDSubscriber
-      properties:
-        name: My House
-        status: pre-provisioned
-        c_tag: 111
-        onu_device: BRCM22222222
-        mac_address: 90:E2:BA:82:FA:81
-        ip_address: 192.168.0.1
-```
->NOTE: if you do this you still need to set `status=enabled` after the ONU comes up
-
-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.
diff --git a/profiles/rcord/workflows/att.md b/profiles/rcord/workflows/att.md
index 79545ea..c416b8a 100644
--- a/profiles/rcord/workflows/att.md
+++ b/profiles/rcord/workflows/att.md
@@ -2,6 +2,24 @@
 
 You can find a complete description of the SEBA workflow for At&t in [this document](https://docs.google.com/document/d/1nou2c8AsRzhaDJmA_eYvFgd0Y33KiCsioveU77AOVCI/edit#heading=h.x73smxj2xaib). This pages focus exclusively on the internals details of the workflow such as actions triggered by the environment and decisions taken by NEM.
 
+## Helm charts
+
+To replicate this workflow you'll need to install:
+
+- [xos-core](../../../charts/xos-core.md)
+- [cord-kafka](../../../charts/kafka.md)
+- [voltha-kafka](../../../charts/voltha.md)
+- [voltha](../../../charts/voltha.md)
+- [onos-voltha](../../../charts/onos.md#onos-voltha)
+- [onos-fabric](../../../charts/onos.md#onos-fabric)
+- att-workflow
+
+### Install the `att-workflow` chart
+
+```shell
+helm install -n att-workflow xos-profiles/att-workflow
+```
+
 ## Workflow description
 
 1. ONT discovered bottom-up
@@ -27,4 +45,110 @@
 
 ![att-workflow](../../../images/att_workflow.png)
 
-> NOTE: when we refer to `service chain` we are talking about the set of subscriber specific service instances that will trigger the `add_subscriber` call in ONOS-VOLTHA and provision the crossconnect in ONOS-FABRIC
\ No newline at end of file
+> NOTE: when we refer to `service chain` we are talking about the set of
+subscriber specific service instances that will trigger the `add_subscriber`
+call in ONOS-VOLTHA and provision the crossconnect in ONOS-FABRIC
+
+## Operations
+
+We assume your POD is already configured as per[this instructions](../configuration.md)
+(you need to complete only the first section)
+
+### Whitelist population
+
+To configure the ONU whitelist, you can use this TOSCA:
+
+```yaml
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/attworkflowdriverwhitelistentry.yaml
+  - custom_types/attworkflowdriverservice.yaml
+description: Create an entry in the whitelist
+topology_template:
+  node_templates:
+
+    service#att:
+      type: tosca.nodes.AttWorkflowDriverService
+      properties:
+        name: att-workflow-driver
+        must-exist: true
+
+    whitelist:
+      type: tosca.nodes.AttWorkflowDriverWhiteListEntry
+      properties:
+        serial_number: BRCM22222222
+      requirements:
+        - owner:
+            node: service#att
+            relationship: tosca.relationships.BelongsToOne
+```
+
+For instructions on how to push TOSCA into a CORD POD, please
+refer to this [guide](../../../xos-tosca/README.md).
+
+### Pre-provision subscribers
+
+You can `pre-provision` subscribers using this TOSCA:
+
+```yaml
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/rcordsubscriber.yaml
+
+description: Pre-provsion a subscriber
+
+topology_template:
+  node_templates:
+
+    # Pre-provision the subscriber the subscriber
+    my_house:
+      type: tosca.nodes.RCORDSubscriber
+      properties:
+        name: My House
+        status: pre-provisioned
+        c_tag: 111
+        onu_device: BRCM22222222
+```
+
+For instructions on how to push TOSCA into a CORD POD, please
+refer to this [guide](../../../xos-tosca/README.md).
+
+### OLT Activation
+
+Once the system knows about whitelisted ONUs and subscribers,
+you can activate the OLT:
+
+```yaml
+tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/oltdevice.yaml
+  - custom_types/voltservice.yaml
+description: Create a simulated OLT Device in VOLTHA
+topology_template:
+  node_templates:
+
+    service#volt:
+      type: tosca.nodes.VOLTService
+      properties:
+        name: volt
+        must-exist: true
+
+    olt_device:
+      type: tosca.nodes.OLTDevice
+      properties:
+        name: ONF OLT
+        device_type: openolt
+        host: 10.90.0.114
+        port: 9191
+        switch_datapath_id: of:0000000000000001
+        switch_port: "1"
+        outer_tpid: "0x8100"
+        uplink: "128"
+      requirements:
+        - volt_service:
+            node: service#volt
+            relationship: tosca.relationships.BelongsToOne
+```
+
+For instructions on how to push TOSCA into a CORD POD, please
+refer to this [guide](../../../xos-tosca/README.md).
\ No newline at end of file
diff --git a/styles/website.css b/styles/website.css
index 62fe48f..0957a64 100644
--- a/styles/website.css
+++ b/styles/website.css
@@ -1,5 +1,5 @@
 .page-inner {
-    max-width: 95% !important;
+    max-width: 85% !important;
 }
 
 .page-toc {