# 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

