
# Copyright 2017-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.


# Dockerfile.base
# This image isn't used, but installs the prereqs for the other XOS images

FROM ubuntu:14.04.5
MAINTAINER Zack Williams <zdw@cs.arizona.edu>

# Install apt packages
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
    apt-transport-https \
    curl \
    gcc \
    geoip-database \
    git \
    graphviz \
    graphviz-dev \
    libcurl4-gnutls-dev \
    libffi-dev \
    libgeoip1 \
    libpq-dev \
    libxslt1-dev \
    libxslt1.1 \
    libyaml-dev \
    m4 \
    openssh-client \
    pkg-config \
    python-dev \
    python-pip \
    rsync \
    software-properties-common \
    supervisor \
    unzip \
    wget \
 && rm -rf /var/lib/apt/lists/* \
 && mkdir /var/xos \
 && pip freeze > /var/xos/pip_freeze_apt_`date -u +%Y%m%dT%H%M%S`

# Install python packages with pip
COPY pip_requirements.txt /tmp/pip_requirements.txt

RUN pip install --no-deps -r /tmp/pip_requirements.txt \
 && pip freeze > /var/xos/pip_freeze_pip_up_`date -u +%Y%m%dT%H%M%S`

# Copy over ansible hosts
COPY ansible-hosts /etc/ansible/hosts

# Install jQuery
ENV JQUERY_DL_URL http://code.jquery.com/jquery-1.12.4.min.js
ENV JQUERY_SHA256 668b046d12db350ccba6728890476b3efee53b2f42dbb84743e5e9f1ae0cc404

RUN curl -fLsS $JQUERY_DL_URL -o jquery.min.js && \
    echo "$JQUERY_SHA256  jquery.min.js" | sha256sum -c - && \
    mv jquery.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/

# Install jQueryUI
ENV JQUERYUI_DL_URL https://jqueryui.com/resources/download/jquery-ui-1.11.4.zip
ENV JQUERYUI_SHA256 503e4c0f109bf627aff87a424edc760608ec15e4a6e37f217a083ca682543e32

RUN curl -fLsS $JQUERYUI_DL_URL -o jquery-ui.zip && \
    echo "$JQUERYUI_SHA256  jquery-ui.zip" | sha256sum -c - && \
    unzip jquery-ui.zip && \
    mv jquery-ui-*/jquery-ui.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/ && \
    rm -rf jquery-ui.zip jquery-ui-*

ENV JQUERYUI_THEMES_DL_URL http://jqueryui.com/resources/download/jquery-ui-themes-1.11.4.zip
ENV JQUERYUI_THEMES_SHA256 df2b9cb084095ea24129a6a54587a1d9d7ae4bcd68bf5ea2957eb3d4d18fe884

RUN curl -fLsS $JQUERYUI_THEMES_DL_URL -o jquery-ui-themes.zip && \
    echo "$JQUERYUI_THEMES_SHA256  jquery-ui-themes.zip" | sha256sum -c - && \
    unzip jquery-ui-themes.zip && \
    mv jquery-ui-themes-*/themes/smoothness/jquery-ui.min.css /usr/local/lib/python2.7/dist-packages/suit/static/suit/css/ && \
    rm -rf jquery-ui-themes.zip jquery-ui-themes-*

# Install heat-translator for TOSCA support
ENV HT_REPO_URL https://github.com/openstack/heat-translator.git
ENV HT_REF a951b93c16e54046ed2d233d814860181c772e30

RUN git clone $HT_REPO_URL /tmp/heat-translator && \
    cd /tmp/heat-translator && \
    git checkout $HT_REF && \
    mkdir -p /opt/tosca && \
    mv /tmp/heat-translator/translator /opt/tosca/translator && \
    echo > /opt/tosca/translator/__init__.py && \
    rm -rf /tmp/heat-translator

