FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
MAINTAINER {{ maintainer }}

{% block openstack_base_header %}{% endblock %}

{% import "macros.j2" as macros with context %}

{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
    {% set openstack_base_packages = [
        'git',
        'iproute',
        'openssl'
    ] %}

{{ macros.install_packages(openstack_base_packages) }}

{% endif %}
{% if install_type == 'binary' %}
    {% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}

# TODO(Allen) Remove python-dogpile-cache after the requirement of
# python-ironicclient is fixed.
        {% set openstack_base_packages = [
            'avahi-libs',
            'cups-libs',
            'fontconfig',
            'fontpackages-filesystem',
            'freetype',
            'initscripts',
            'libjpeg-turbo',
            'libpng',
            'libtomcrypt',
            'libtommath',
            'libX11',
            'libX11-common',
            'libXau',
            'libxcb',
            'libXext',
            'libXi',
            'libxslt',
            'libyaml',
            'MySQL-python',
            'Percona-Server-shared-56',
            'pyOpenSSL',
            'pyparsing',
            'python2-cffi',
            'python2-crypto',
            'python2-cryptography',
            'python2-debtcollector',
            'python2-eventlet',
            'python2-fasteners',
            'python2-funcsigs',
            'python2-futurist',
            'python2-greenlet',
            'python2-iso8601',
            'python2-msgpack',
            'python2-oslo-concurrency',
            'python2-oslo-config',
            'python2-oslo-context',
            'python2-oslo-db',
            'python2-oslo-i18n',
            'python2-oslo-log',
            'python2-oslo-messaging',
            'python2-oslo-middleware',
            'python2-oslo-policy',
            'python2-oslo-serialization',
            'python2-oslo-service',
            'python2-oslo-utils',
            'python2-pika',
            'python2-pika_pool',
            'python2-positional',
            'python2-pyasn1',
            'python2-PyMySQL',
            'python-alembic',
            'python-amqp',
            'python-anyjson',
            'python-barbicanclient',
            'python-beaker',
            'python-cachetools',
            'python-ceilometerclient',
            'python-cliff',
            'python-cmd2',
            'python-congressclient',
            'python-contextlib2',
            'python-dateutil',
            'python-decorator',
            'python-designateclient',
            'python-dogpile-cache',
            'python-editor',
            'python-enum34',
            'python-extras',
            'python-fixtures',
            'python-futures',
            'python-glanceclient',
            'python-heatclient',
            'python-httplib2',
            'python-idna',
            'python-inotify',
            'python-ipaddress',
            'python-ironicclient',
            'python-jsonpatch',
            'python-jsonpointer',
            'python-jsonschema',
            'python-keyring',
            'python-keystoneauth1',
            'python-keystoneclient',
            'python-keystonemiddleware',
            'python-kombu',
            'python-linecache2',
            'python-lxml',
            'python-magnumclient',
            'python-mako',
            'python-manilaclient',
            'python-memcached',
            'python-migrate',
            'python-mimeparse',
            'python-mistralclient',
            'python-monotonic',
            'python-muranoclient',
            'python-netaddr',
            'python-netifaces',
            'python-neutronclient',
            'python-novaclient',
            'python-openstackclient',
            'python-paste',
            'python-paste-deploy',
            'python-pbr',
            'python-pip',
            'python-ply',
            'python-posix_ipc',
            'python-prettytable',
            'python-pycparser',
            'python-PyMySQL',
            'python-repoze-lru',
            'python-requests',
            'python-retrying',
            'python-routes',
            'python-saharaclient',
            'python-simplejson',
            'python-sqlalchemy',
            'python-sqlparse',
            'python-stevedore',
            'python-swiftclient',
            'python-tempita',
            'python-testtools',
            'python-traceback2',
            'python-troveclient',
            'python-unicodecsv',
            'python-unittest2',
            'python-urllib3',
            'python-warlock',
            'python-webob',
            'python-wrapt',
            'python-zaqarclient',
            'PyYAML',
            'systemd-sysv',
            'sysvinit-tools',
            'tcp_wrappers-libs'
        ] %}
    {% elif base_distro in ['ubuntu'] %}

# This will prevent questions from being asked during the install
ENV DEBIAN_FRONTEND noninteractive
        {% set openstack_base_packages = [
            'python-barbicanclient',
            'python-ceilometerclient',
            'python-congressclient',
            'python-designateclient',
            'python-heatclient',
            'python-ironicclient',
            'python-magnumclient',
            'python-manilaclient',
            'python-memcache',
            'python-mistralclient',
            'python-muranoclient',
            'python-pip',
            'python-saharaclient',
            'python-swiftclient',
            'python-troveclient',
            'python-zaqarclient',
            'python-openstackclient',
            'python-pymysql',
            'python-keystoneclient',
            'python-oslo.log',
            'openssl',
            'patch'
        ] %}
    {% endif %}

{{ macros.install_packages(openstack_base_packages | customizable("packages")) }}

{% elif install_type == 'source' %}
    {% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
        {% set openstack_base_packages = [
            'gcc',
            'gcc-c++',
            'libffi-devel',
            'libxml2-devel',
            'libxslt-devel',
            'libyaml-devel',
            'MariaDB-devel',
            'openldap-devel',
            'openssl-devel',
            'postgresql',
            'postgresql-devel',
            'python-devel',
            'sqlite-devel',
            'zip'
        ] %}
    {% elif base_distro in ['ubuntu', 'debian'] %}
        {% set openstack_base_packages = [
            'ca-certificates',
            'build-essential',
            'python-dev',
            'libssl-dev',
            'libmariadbclient-dev',
            'libxslt1-dev',
            'libffi-dev',
            'libxml2-dev',
            'libyaml-dev',
            'libz-dev',
            'pkg-config',
            'git',
            'zip'
        ] %}
    {% endif %}

{{ macros.install_packages(openstack_base_packages | customizable("packages")) }}

{% block source_install_python_pip %}
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
    && python get-pip.py \
    && rm get-pip.py
{% endblock %}

{% set openstack_base_pip_packages = [
        'Babel',
        'Mako',
        'MarkupSafe',
        'Paste',
        'PasteDeploy',
        'PyYAML',
        'Routes',
        'SQLAlchemy',
        'Tempita',
        'WebOb',
        'alembic',
        'amqp',
        'anyjson',
        'appdirs',
        'cachetools',
        'cliff',
        'cmd2',
        'contextlib2',
        'debtcollector',
        'decorator',
        'enum34',
        'eventlet',
        'fasteners',
        'funcsigs',
        'functools32',
        'futures',
        'futurist',
        'greenlet',
        'iso8601',
        'jinja2',
        'jsonpatch',
        'jsonpointer',
        'jsonschema',
        'keystoneauth1',
        'keystonemiddleware',
        'kombu',
        'monotonic',
        'msgpack-python',
        'netaddr',
        'netifaces',
        'os-client-config',
        'oslo.concurrency',
        'oslo.config',
        'oslo.context',
        'oslo.db',
        'oslo.i18n',
        'oslo.log',
        'oslo.messaging',
        'oslo.middleware',
        'oslo.policy',
        'oslo.serialization',
        'oslo.service',
        'oslo.utils',
        'pbr',
        'pika',
        'pika-pool',
        'positional',
        'prettytable',
        'pycadf',
        'pycrypto',
        'pyinotify',
        'pymysql',
        'pyparsing',
        'python-barbicanclient',
        'python-ceilometerclient',
        'python-cinderclient',
        'python-congressclient',
        'python-dateutil',
        'python-designateclient',
        'python-editor',
        'python-glanceclient',
        'python-heatclient',
        'python-ironicclient',
        'python-keystoneclient',
        'python-magnumclient',
        'python-manilaclient',
        'python-memcached',
        'python-mistralclient',
        'python-muranoclient',
        'python-neutronclient',
        'python-novaclient',
        'python-openstackclient',
        'python-saharaclient',
        'python-swiftclient',
        'python-troveclient',
        'python-zaqarclient',
        'pytz',
        'repoze.lru',
        'requests',
        'requestsexceptions',
        'retrying',
        'simplejson',
        'six',
        'sqlalchemy-migrate',
        'sqlparse',
        'stevedore',
        'unicodecsv',
        'warlock',
        'wrapt'
    ]
%}

ADD openstack-base-archive /openstack-base-source
RUN ln -s openstack-base-source/* /requirements \
    && mkdir -p /var/lib/kolla \
    && pip --no-cache-dir install -U virtualenv \
    && virtualenv --system-site-packages /var/lib/kolla/venv
{{ macros.install_pip(openstack_base_pip_packages | customizable("pip_packages")) }}
ENV PATH /var/lib/kolla/venv/bin:$PATH

{% endif %}

{% block openstack_base_footer %}{% endblock %}
{% block footer %}{% endblock %}