move onos-cord to head-node container

Change-Id: Idb3e94d54cb03b7ed680ca43d49b0c8f2b6904ad
diff --git a/roles/onos-cord-install/defaults/main.yml b/roles/onos-cord-install/defaults/main.yml
new file mode 100644
index 0000000..b319b19
--- /dev/null
+++ b/roles/onos-cord-install/defaults/main.yml
@@ -0,0 +1,11 @@
+---
+# onos-vm-install/defaults/main.yml
+
+trust_store_pw: 222222
+
+# ONOS 1.7 not tagged yet, but latest is 1.7
+onos_docker_image: "onosproject/onos:latest"
+
+onos_cord_dest: "{{ ansible_user_dir }}/onos-cord/"
+
+node_private_key: "{{ ansible_user_dir }}/node_key"
diff --git a/roles/onos-cord-install/files/onos-cord-docker-compose.yml b/roles/onos-cord-install/files/onos-cord-docker-compose.yml
new file mode 100644
index 0000000..2e6bdf4
--- /dev/null
+++ b/roles/onos-cord-install/files/onos-cord-docker-compose.yml
@@ -0,0 +1,17 @@
+# ONOS with XOS features for docker-compose
+version: '2'
+
+services:
+
+   xos-onos:
+      build:
+       context: .
+       dockerfile: Dockerfile
+      image: xos/onos
+      ports:
+       - "6654:6653"
+       - "8102:8101"
+       - "8182:8181"
+       - "9877:9876"
+      volumes:
+      - ./node_key:/root/node_key:ro
diff --git a/roles/onos-cord-install/tasks/main.yml b/roles/onos-cord-install/tasks/main.yml
new file mode 100644
index 0000000..1393570
--- /dev/null
+++ b/roles/onos-cord-install/tasks/main.yml
@@ -0,0 +1,55 @@
+---
+# Common ONOS setup
+
+# onos_cord_dest: {{ ansible_user_dir }}/onos-cord/
+
+- name: Pull docker image for ONOS
+  become: yes
+  command: "docker pull {{ onos_docker_image }}"
+  tags:
+    - skip_ansible_lint # Should replace with http://docs.ansible.com/ansible/docker_module.html, when replacements are stable
+
+- name: Create dest directory
+  file: path="{{ onos_cord_dest }}" state=directory
+
+- name: Copy over SSH key
+  copy:
+    remote_src: True
+    src: "{{ node_private_key }}"
+    dest: "{{ onos_cord_dest }}/node_key"
+    owner: "{{ ansible_user_id }}"
+    mode: 0600
+
+- name: Create templated ONOS files
+  template:
+    src: "{{ item }}.j2"
+    dest: "{{ onos_cord_dest }}/{{ item }}"
+  with_items:
+    - Dockerfile
+    - onos-service
+
+- name: Copy over ONOS playbook and other files
+  copy:
+    src: "onos-cord-docker-compose.yml"
+    dest: "{{ onos_cord_dest }}/docker-compose.yml"
+
+# TODO: Find the proper place for this on the dev machine rather than
+#       copying it within the head node machine.
+
+- name: Copy SSL Certs to ONOS so docker-compose can find it
+  copy:
+    src: "/usr/local/share/ca-certificates/keystone_juju_ca_cert.crt"
+    dest: "{{ onos_cord_dest }}/xos-certs.crt"
+    owner: "{{ ansible_user_id }}"
+    remote_src: True
+
+- name: Build onos image
+  command: docker-compose build chdir={{ onos_cord_dest }}
+  tags:
+    - skip_ansible_lint
+
+- name: Start ONOS
+  command: chdir="{{ onos_cord_dest }}" docker-compose up -d
+  tags:
+    - skip_ansible_lint
+
diff --git a/roles/onos-cord-install/templates/Dockerfile.j2 b/roles/onos-cord-install/templates/Dockerfile.j2
new file mode 100644
index 0000000..a9973be
--- /dev/null
+++ b/roles/onos-cord-install/templates/Dockerfile.j2
@@ -0,0 +1,20 @@
+# ONOS dockerfile with XOS/CORD additions
+
+FROM {{ onos_docker_image }}
+MAINTAINER Zack Williams <zdw@cs.arizona.edu>
+
+# Add SSL certs
+COPY xos-certs.crt /usr/local/share/ca-certificates/xos-certs.crt
+RUN update-ca-certificates
+
+# Create Java KeyStore from certs
+RUN openssl x509 -in /usr/local/share/ca-certificates/xos-certs.crt \
+      -outform der -out /usr/local/share/ca-certificates/xos-certs.der && \
+    keytool -import -noprompt -storepass {{ trust_store_pw }} -alias xos-certs \
+      -file /usr/local/share/ca-certificates/xos-certs.der \
+      -keystore /usr/local/share/ca-certificates/xos-certs.jks
+
+# Updated onos-service to use the jks
+COPY onos-service /root/onos/bin/onos-service
+RUN chmod 755 /root/onos/bin/onos-service
+
diff --git a/roles/onos-cord-install/templates/onos-service.j2 b/roles/onos-cord-install/templates/onos-service.j2
new file mode 100644
index 0000000..7eef6f5
--- /dev/null
+++ b/roles/onos-cord-install/templates/onos-service.j2
@@ -0,0 +1,53 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Starts ONOS Apache Karaf container
+# -----------------------------------------------------------------------------
+
+# uncomment the following line for performance testing
+#export JAVA_OPTS="${JAVA_OPTS:--Xms8G -Xmx8G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps}"
+
+# uncomment the following line for Netty TLS encryption
+# Do modify the keystore location/password and truststore location/password accordingly
+#export JAVA_OPTS="${JAVA_OPTS:--DenableNettyTLS=true -Djavax.net.ssl.keyStore=/home/ubuntu/onos.jks -Djavax.net.ssl.keyStorePassword=222222 -Djavax.net.ssl.trustStore=/home/ubuntu/onos.jks -Djavax.net.ssl.trustStorePassword=222222}"
+
+export JAVA_OPTS="-Djavax.net.ssl.trustStore=/usr/local/share/ca-certificates/xos-certs.jks -Djavax.net.ssl.trustStorePassword={{ trust_store_pw }}" 
+
+set -e  # exit on error
+set -u  # exit on undefined variable
+
+# If ONOS_HOME is set, respect its value.
+# If ONOS_HOME is not set (e.g. in the init or service environment),
+# set it based on this script's path.
+ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)}
+KARAF_ARGS=
+SYS_APPS=drivers
+ONOS_APPS=${ONOS_APPS:-}  # Empty means don't activate any new apps
+
+cd $ONOS_HOME
+
+# Parse out arguments destinted for karaf invocation v. arguments that
+# will be processed in line
+while [ $# -gt 0 ]; do
+  case $1 in
+    apps-clean)
+      # Deactivate all applications
+      find ${ONOS_HOME}/apps -name "active" -exec rm \{\} \;
+      ;;
+    *)
+      KARAF_ARGS+=" $1"
+      ;;
+  esac
+  shift
+done
+
+# Activate the system required applications (SYS_APPS) as well as any
+# specified applications in the var ONOS_APPS
+for app in ${SYS_APPS//,/ } ${ONOS_APPS//,/ }; do
+  if [[ "$app" =~ \. ]]; then
+    touch ${ONOS_HOME}/apps/$app/active
+  else
+    touch ${ONOS_HOME}/apps/org.onosproject.$app/active
+  fi
+done
+
+exec ${ONOS_HOME}/apache-karaf-3.0.5/bin/karaf $KARAF_ARGS