Read airflow connection parameters properly
Read configuration json file properly even if it doesn't define all parameters
Add emit command to workflow_ctl
Add some example commands for emit message & register essence
Make docker-compose configuration files to allow communication between containers
Rework kickstarter as api_client does not work properly

Change-Id: I59d00bfe17027a7ab367e6acde6a9eaaed3b6937
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..c35b212
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,148 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG PYTHON_BASE_IMAGE="python:3.6-slim"
+
+FROM ${PYTHON_BASE_IMAGE}
+
+# Label image
+ARG org_label_schema_schema_version=1.0
+ARG org_label_schema_name=cord-workflow-airflow
+ARG org_label_schema_version=unknown
+ARG org_label_schema_vcs_url=unknown
+ARG org_label_schema_vcs_ref=unknown
+ARG org_label_schema_build_date=unknown
+ARG org_opencord_vcs_commit_date=unknown
+
+LABEL org.label-schema.schema-version=$org_label_schema_schema_version \
+      org.label-schema.name=$org_label_schema_name \
+      org.label-schema.version=$org_label_schema_version \
+      org.label-schema.vcs-url=$org_label_schema_vcs_url \
+      org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
+      org.label-schema.build-date=$org_label_schema_build_date \
+      org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date
+
+
+SHELL ["/bin/bash", "-o", "pipefail", "-e", "-u", "-x", "-c"]
+
+# Make sure noninteractie debian install is used and language variables set
+ENV DEBIAN_FRONTEND=noninteractive LANGUAGE=C.UTF-8 LANG=C.UTF-8 LC_ALL=C.UTF-8 \
+    LC_CTYPE=C.UTF-8 LC_MESSAGES=C.UTF-8 TERM=linux
+
+# Airflow
+ARG AIRFLOW_VERSION=1.10.2
+ARG AIRFLOW_USER=airflow
+ENV AIRFLOW_USER=${AIRFLOW_USER}
+
+ARG HOME=/home/airflow
+ENV HOME=${HOME}
+
+ARG AIRFLOW_HOME=${HOME}/airflow
+ENV AIRFLOW_HOME=${AIRFLOW_HOME}
+
+
+RUN apt-get update -y --no-install-recommends \
+    && apt-get install -y --no-install-recommends \
+        curl \
+        apt-utils \
+        build-essential \
+        curl \
+        freetds-bin \
+        freetds-dev \
+        libffi-dev \
+        libkrb5-dev \
+        libpq-dev \
+        libsasl2-2 \
+        libsasl2-dev \
+        libsasl2-modules \
+        libssl-dev \
+        locales  \
+        netcat \
+        rsync \
+        sasl2-bin \
+        sudo \
+        default-libmysqlclient-dev \
+        krb5-user \
+        net-tools \
+        tmux \
+        unzip \
+        vim \
+    && apt-get autoremove -yqq --purge \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/*
+
+ENV SLUGIFY_USES_TEXT_UNIDECODE=yes
+RUN pip install -U pip setuptools wheel \
+    && pip install pytz \
+    && pip install pyOpenSSL \
+    && pip install ndg-httpsclient \
+    && pip install pyasn1 \
+    && pip install apache-airflow[postgres]==${AIRFLOW_VERSION}
+
+RUN useradd -m ${AIRFLOW_USER} \
+    && echo "${AIRFLOW_USER} ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/airflow \
+    && chmod 0440 /etc/sudoers.d/airflow \
+    && chown -R ${AIRFLOW_USER}:${AIRFLOW_USER} ${HOME}
+
+RUN mkdir -pv ${AIRFLOW_HOME} \
+    && chown -R ${AIRFLOW_USER}:${AIRFLOW_USER} ${AIRFLOW_HOME}
+
+COPY ./docker/script/entrypoint.sh ${AIRFLOW_HOME}/entrypoint.sh
+COPY ./docker/config/airflow.cfg ${AIRFLOW_HOME}/airflow.cfg
+
+# CORD Workflow
+RUN pip install multistructlog~=2.1.0 \
+    && pip install cord-workflow-controller-client~=0.3.0 \
+    && pip install pyfiglet~=0.7 \
+    && pip install xossynchronizer~=3.2.6 \
+    && pip install xosapi~=3.2.6
+
+# drop plugin code to plugin dir of airflow
+COPY ./src/cord_workflow_airflow_extensions/cord_workflow_plugin.py ${AIRFLOW_HOME}/plugins/cord_workflow_plugin.py
+
+# drop sample workflow code to dags dir of airflow
+COPY ./workflow_examples/simple-cord-workflow/simple_cord_workflow.py ${AIRFLOW_HOME}/dags/simple_cord_workflow.py
+COPY ./workflow_examples/simple-cord-workflow/simple_cord_workflow_essence.json ${HOME}/simple_cord_workflow_essence.json
+COPY ./workflow_examples/simple-airflow-workflow/simple_airflow_workflow.py ${AIRFLOW_HOME}/dags/simple_airflow_workflow.py
+COPY ./workflow_examples/simple-airflow-workflow/simple_airflow_workflow_essence.json ${HOME}/simple_airflow_workflow_essence.json
+
+# copy scripts
+COPY ./workflow_examples/connection_setup.sh ${HOME}/connection_setup.sh
+COPY ./workflow_examples/register_essence.sh ${HOME}/register_essence.sh
+COPY ./workflow_examples/emit_events_model.sh ${HOME}/emit_events_model.sh
+COPY ./workflow_examples/emit_events_onu.sh ${HOME}/emit_events_onu.sh
+
+# copy kickstarter code & workflow ctl code
+COPY ./src/tools/kickstarter.py ${HOME}/kickstarter.py
+COPY ./src/tools/workflow_ctl.py ${HOME}/workflow_ctl.py
+
+# copy configuration json
+COPY ./src/tools/config.json /etc/cord_workflow_airflow_extensions/config.json
+
+RUN chown -R ${AIRFLOW_USER}:${AIRFLOW_USER} ${HOME} \
+    && chmod 755 ${HOME}/connection_setup.sh \
+    && chmod 755 ${HOME}/register_essence.sh \
+    && chmod 755 ${HOME}/emit_events_model.sh \
+    && chmod 755 ${HOME}/emit_events_onu.sh \
+    && chmod 755 ${HOME}/kickstarter.py \
+    && chmod 755 ${HOME}/workflow_ctl.py
+
+# 8080 for webserver (admin_ui)
+# 8793 for worker log
+EXPOSE 8080 8793
+
+USER ${AIRFLOW_USER}
+WORKDIR ${HOME}
+
+ENTRYPOINT ["/home/airflow/airflow/entrypoint.sh"]