CORD-2272 Enable multiple CiaB compute nodes

Change-Id: Id82ac1c95ea841cd58000410c54a86ccc7aea248
diff --git a/Makefile b/Makefile
index c836ee1..ac4e8c7 100644
--- a/Makefile
+++ b/Makefile
@@ -390,6 +390,9 @@
 	$(SSH_HEAD) "cd /opt/cord/build; $(ANSIBLE_PB_LOCAL) ansible/maas-provision.yml --extra-vars='maas_user=maas vagrant_name=cord_compute$*'" $(LOGCMD)
 	touch $@
 
+compute1-up: | $(M)/compute1-up
+compute2-up: | $(M)/compute2-up
+compute3-up: | $(M)/compute3-up
 
 # Fabric targets
 fabric-refresh: | $(M)/setup-automation
diff --git a/ansible/roles/ciab-ovs/defaults/main.yml b/ansible/roles/ciab-ovs/defaults/main.yml
index 38c9652..26a04dc 100644
--- a/ansible/roles/ciab-ovs/defaults/main.yml
+++ b/ansible/roles/ciab-ovs/defaults/main.yml
@@ -14,18 +14,18 @@
 
 ovs_bridges:
   - leaf1
-#  - leaf2
+  - leaf2
   - spine1
 #  - spine2
 
 ovs_patch_ports:
   - { bridge: leaf1, port: leaf1-spine1, peer: spine1-leaf1 }
-#  - { bridge: leaf2, port: leaf2-spine1, peer: spine1-leaf2 }
+  - { bridge: leaf2, port: leaf2-spine1, peer: spine1-leaf2 }
 #  - { bridge: leaf1, port: leaf1-spine2, peer: spine2-leaf1 }
 #  - { bridge: leaf2, port: leaf2-spine2, peer: spine2-leaf2 }
   - { bridge: spine1, port: spine1-leaf1, peer: leaf1-spine1 }
 #  - { bridge: spine2, port: spine2-leaf1, peer: leaf1-spine2 }
-#  - { bridge: spine1, port: spine1-leaf2, peer: leaf2-spine1 }
+  - { bridge: spine1, port: spine1-leaf2, peer: leaf2-spine1 }
 #  - { bridge: spine2, port: spine2-leaf2, peer: leaf2-spine2 }
 
 enable_fabric: False
diff --git a/ansible/roles/ciab-ovs/tasks/main.yml b/ansible/roles/ciab-ovs/tasks/main.yml
index d5bb41a..d10a61c 100644
--- a/ansible/roles/ciab-ovs/tasks/main.yml
+++ b/ansible/roles/ciab-ovs/tasks/main.yml
@@ -56,12 +56,19 @@
     set: "Interface {{ item.port }} type=patch"
   with_items: "{{ ovs_patch_ports }}"
 
+# This returns OK but doesn't actually set up the peer
+#- name: Create peers
+#  openvswitch_port:
+#    bridge: "{{ item.bridge }}"
+#    port: "{{ item.port }}"
+#    set: "Interface {{ item.port }} options:peer={{ item.peer }}"
+#  with_items: "{{ ovs_patch_ports }}"
+
 - name: Create peers
-  openvswitch_port:
-    bridge: "{{ item.bridge }}"
-    port: "{{ item.port }}"
-    set: "Interface {{ item.port }} options:peer={{ item.peer }}"
+  command: ovs-vsctl set interface {{ item.port }} options:peer={{ item.peer }}
   with_items: "{{ ovs_patch_ports }}"
+  tags:
+    - skip_ansible_lint # running a sub job
 
 # "set" argument to openvswitch_bridge wasn't working...
 - name: Set bridges to OpenFlow 1.3
diff --git a/docs/install_virtual.md b/docs/install_virtual.md
index 69e6994..e7d32da 100644
--- a/docs/install_virtual.md
+++ b/docs/install_virtual.md
@@ -94,6 +94,20 @@
 The `make -j4 build` step takes a *long time* (at least 1 hour) to run.  Be
 patient - if it hasn't completely failed yet, then assume all is well!
 
+### (Optional) Bring up more virtual compute nodes
+
+The build brings up a single virtual compute node by default.  If your system
+has enough resources, you can bring up two more virtual nodes as follows:
+
+```shell
+cd ~/cord/build
+make compute2-up
+make compute3-up
+```
+
+Note that, due to a limitation in CiaB, compute nodes need to be brought up
+sequentially as shown above.
+
 ### (Optional) Run End-to-End (E2E) tests
 
 If the build completed without errors, you can use the following command to run