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

FROM       ubuntu:14.04.3

# XXX Workaround for docker bug:
# https://github.com/docker/docker/issues/6345
# Kernel 3.15 breaks docker, uss the line below as a workaround
# until there is a fix
RUN ln -s -f /bin/true /usr/bin/chfn
# XXX End workaround

# 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 \
    libgeoip1 \
    libxslt1-dev \
    libxslt1.1 \
    libyaml-dev \
    m4 \
    openssh-client \
    pkg-config \
    python-ceilometerclient \
    python-crypto \
    python-dev \
    python-glanceclient \
    python-httplib2 \
    python-jinja2 \
    python-keystoneclient \
    python-neutronclient \
    python-novaclient \
    python-paramiko \
    python-pip \
    python-psycopg2 \
    python-pycurl \
    python-setuptools \
    python-yaml \
    rsync \
    supervisor \
    tar \
    wget \
 && rm -rf /var/lib/apt/lists/*

# Install python pacakges with pip
RUN pip install \
    django==1.7 \
    django-bitfield \
    django-crispy-forms \
    django-encrypted-fields \
    django-extensions \
    django-filter==0.11.0 \
    django-geoposition \
    django-ipware \
    django_rest_swagger \
    django-suit==0.3a1 \
    django-timezones \
    djangorestframework==3.3.3 \
    dnslib \
    jinja2 \
    lxml \
    markdown \
    netaddr \
    pyOpenSSL \
    psycopg2 \
    python-ceilometerclient \
    python-dateutil \
    python-keyczar \
    python-logstash \
    pygraphviz \
    pytz \
    pyyaml \
    requests

# Upgrade jinja2
RUN pip install -U \
    jinja2

# Installs with Easy install (should be incorporated into pip?)
RUN easy_install --upgrade httplib2

RUN easy_install \
    python_gflags \
    google_api_python_client \
    httplib2.ca_certs_locater

# jQuery download w/checksum
ENV JQUERY_VERSION jquery-1.9.1.min.js
ENV JQUERY_DL_URL http://code.jquery.com/jquery-1.9.1.min.js
ENV JQUERY_SHA256 c12f6098e641aaca96c60215800f18f5671039aecf812217fab3c0d152f6adb4

RUN wget $JQUERY_DL_URL && \
  echo "$JQUERY_SHA256  $JQUERY_VERSION" | sha256sum -c - && \
  mv $JQUERY_VERSION /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/

# 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

# Install custom Ansible
RUN \
    git clone -b release1.8.2 git://github.com/ansible/ansible.git /opt/ansible && \
    git clone -b release1.8.2 git://github.com/ansible/ansible-modules-extras.git /opt/ansible/lib/ansible/modules/extras && \
    git clone -b release1.8.2 git://github.com/ansible/ansible-modules-extras.git /opt/ansible/v2/ansible/modules/extras && \
    git clone git://github.com/sb98052/ansible-modules-core.git /opt/ansible/lib/ansible/modules/core && \
    git clone git://github.com/sb98052/ansible-modules-core.git /opt/ansible/v2/ansible/modules/core && \
    # git clone uses cached copy, doesn't pick up latest
    git -C /opt/ansible pull && \
    git -C /opt/ansible/lib/ansible/modules/core pull && \
    git -C /opt/ansible/v2/ansible/modules/core pull && \
    mkdir -p /usr/local/share /bin /etc/ansible

COPY ansible-hosts /etc/ansible/hosts

# For Synchronizer
# ENV PHANTOMJS_DL_URL http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2
# ENV PHANTOMJS_SHA256 a7658f5f2d9464f86891afdb979eb60b754d5f404801db624368ac11e16724d4

# RUN curl -fLsS $PHANTOMJS_DL_URL -o phantomjs.tar.bz2 && \
#  echo "$PHANTOMJS_SHA256  phantomjs.tar.bz2" | sha256sum -c - && \
#  tar -C /usr/local/share -xjf phantomjs.tar.bz2 && \
#  ln -s /usr/local/share/phantomjs-* /usr/local/share/phantomjs && \
#  ln -s /usr/local/share/phantomjs/bin/phantomjs /bin/phantomjs && \
#  rm phantomjs.tar.bz2

#RUN git clone git://git.planet-lab.org/fofum.git /tmp/fofum && \
#    cd /tmp/fofum; python setup.py install && \
#    rm -rf /tmp/fofum

