# ============LICENSE_START=======================================================
# org.onap.dcae
# ================================================================================
# Copyright (c) 2018-2020 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# 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.
# ============LICENSE_END=========================================================

FROM centos:7.4.1708
LABEL maintainer="maintainer"

# Install gcc
RUN yum install -y gcc python-devel

# Install jq
RUN curl -Ssf -L "https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64"  > /bin/jq \
&& chmod +x /bin/jq

# Install pip and Cloudify CLI
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py \
  && python get-pip.py \
  && rm get-pip.py \
  && pip install cloudify==20.03.03

# Copy scripts
RUN mkdir scripts
COPY scripts/ /scripts

# Load blueprints and input templates
COPY blueprints/  /blueprints

# Set up runtime script
ENTRYPOINT exec "/scripts/bootstrap.sh"

# Make scripts executable & set up a non-root user
RUN chmod +x /scripts/*.sh \
  && mkdir -p /opt/bootstrap \
  && useradd -d /opt/bootstrap bootstrap \
  && chown -R bootstrap:bootstrap /opt/bootstrap \
  && chown -R bootstrap:bootstrap /scripts \
  && chown -R bootstrap:bootstrap /blueprints

USER bootstrap
