# 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:16.04

# Install apt packages, including docker
RUN apt-get update && apt-get install -y \
    apt-transport-https \
    build-essential \
    curl \
    libpq-dev \
    libyaml-dev \
    openssh-client \
    python-pip \
    software-properties-common \
    sshpass \
 && apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 \
    --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4 \
 && echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | \
    tee -a /etc/apt/sources.list.d/elastic-6.x.list \
 && apt-get update \
 && apt-get install -y filebeat \
 && update-rc.d filebeat defaults 95 10 \
 && rm -rf /var/lib/apt/lists/* \
 && mkdir /var/xos \
 && pip freeze > /var/xos/pip_freeze_apt_`date -u +%Y%m%dT%H%M%S`

# Configure filebeat to collect json data
COPY filebeat.yml /etc/filebeat/filebeat.yml

# Install python packages with pip
# Upgrade methodology - pip_requested.txt is the manually generated list of pip
# packages desired, without any added dependencies. It is used to generate
# pip_requirements.txt by running: pip install -r pip_requested.txt then use
# `pipdeptree` to make sure dependencies aren't broken, then
# `pip freeze > pip_requirements.txt` and manually clean up.
COPY pip_requirements.txt /tmp/pip_requirements.txt
RUN pip install --no-deps -U -I pip==9.0.3 setuptools==39.0.1 requests==2.18.4 \
 && 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

# Label image
ARG org_label_schema_schema_version=1.0
ARG org_label_schema_name=xos-base
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

