Merge "CORD-369 update apache2 config to forward UIs" into cord-1.0
diff --git a/cord-head-playbook.yml b/cord-head-playbook.yml
index 7b9fac6..4774b88 100644
--- a/cord-head-playbook.yml
+++ b/cord-head-playbook.yml
@@ -53,3 +53,8 @@
   roles:
     - { role: automation-integration, when: on_maas }
 
+- name: Prologue
+  hosts: head
+  roles:
+    - head-prologue
+
diff --git a/roles/head-prologue/files/cord-http.conf b/roles/head-prologue/files/cord-http.conf
new file mode 100644
index 0000000..e3ba9d8
--- /dev/null
+++ b/roles/head-prologue/files/cord-http.conf
@@ -0,0 +1,49 @@
+<IfModule proxy_module>
+    ProxyPreserveHost on
+
+    # Map /fabric to the onos instance that is controlling the leaf
+    #     spine fabric
+    <Location /fabric/>
+        ProxyPass http://onos-fabric:8181/
+        ProxyPassReverse http://onos-fabric:8181/
+        ProxyPassReverseCookiePath  "/"  "/fabric/"
+        Header edit Location "(^http[s]?://[^/]*)(\.*)" "$1/fabric$2"
+    </Location>
+
+    <Location /fabric/onos/ui/websock/>
+        ProxyPass "ws://onos-fabric:8181/onos/ui/websock/" disablereuse=on
+    </Location>
+
+    # Map /vtn to the onos instance that is controller the cordvtn
+    #     application
+    <Location /vtn/>
+        ProxyPass http://onos-cord:8181/
+        ProxyPassReverse http://onos-cord:8181/
+        ProxyPassReverseCookiePath  "/"  "/vtn/"
+        Header edit Location "(^http[s]?://[^/]*)(\.*)" "$1/vtn$2"
+    </Location>
+
+    <Location /vtn/onos/ui/websock/>
+        ProxyPass "ws://onos-cord:8181/onos/ui/websock/" disablereuse=on
+    </Location>
+
+    # Map the various XOS roots to the XOS instance
+    ProxyPass /xos http://xos:80
+    ProxyPass /xos/ http://xos:80/
+    ProxyPass /api/ http://xos:80/api/
+    ProxyPass /admin/ http://xos:80/admin/
+    ProxyPass /static/ http://xos:80/static/
+    ProxyPass /loggedin/ http://xos:80/loggedin/
+    ProxyPass /serviceGrid/ http://xos:80/serviceGrid/
+
+</IfModule>
+
+<IfModule rewrite_module>
+    RewriteEngine On
+    # Redirect (permanently) requests for /MAAS to /MAAS/.
+    RewriteRule ^/MAAS$ %{REQUEST_URI}/ [R=301,L]
+</IfModule>
+
+# Redirects so that basic URLs entered go the right place
+Redirect /fabric /fabric/onos/ui
+Redirect /vtn /vtn/onos/ui
diff --git a/roles/head-prologue/handlers/main.yml b/roles/head-prologue/handlers/main.yml
new file mode 100644
index 0000000..f744763
--- /dev/null
+++ b/roles/head-prologue/handlers/main.yml
@@ -0,0 +1,7 @@
+---
+
+- name: reload apache2
+  become: yes
+  service:
+    name: apache2
+    state: reloaded
diff --git a/roles/head-prologue/tasks/main.yml b/roles/head-prologue/tasks/main.yml
new file mode 100644
index 0000000..a8b4f2b
--- /dev/null
+++ b/roles/head-prologue/tasks/main.yml
@@ -0,0 +1,35 @@
+---
+
+# If using a MAAS based POD deployment then copy over an apache configuration
+# that forwards to the various UIs
+- name: Ensure CORD Apache Configuration
+  become: yes
+  copy:
+    src: files/cord-http.conf
+    dest: /etc/apache2/conf-available/cord-http.conf
+    owner: root
+    group: root
+    mode: 0644
+  notify: reload apache2
+  when: on_maas
+
+- name: Ensure Modules
+  become: yes
+  command: a2enmod {{ item }}
+  register: mod_proxy
+  changed_when: mod_proxy.stdout.find('already enabled') == -1
+  notify: reload apache2
+  when: on_maas
+  with_items:
+    - proxy
+    - proxy_http
+    - proxy_wstunnel
+    - rewrite
+
+- name: Enable CORD Apache Configuration
+  become: yes
+  command: a2enconf cord-http
+  register: en_cord_http
+  changed_when: en_cord_http.stdout.find('already enabled') == -1
+  notify: reload apache2
+  when: on_maas