# Build stage 1

FROM openshift/golang-builder:1.13 AS builder

ENV GOPATH="/go/"
ENV GOFLAGS="-mod=vendor"

RUN rm -rf /go && mkdir -p /go/
COPY grafana-6.7.4.tar.gz /grafana.tar.gz

RUN \
    mkdir -p "/go/grafana" && \
    tar -C "/go/grafana/" -xzmf /grafana.tar.gz

WORKDIR "/go/grafana"
RUN go run -mod vendor build.go -dev build

# Build stage 2
FROM registry.redhat.io/ubi8/ubi:latest

ENV PATH=/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
    GF_PATHS_CONFIG="/etc/grafana/grafana.ini" \
    GF_PATHS_DATA="/var/lib/grafana" \
    GF_PATHS_HOME="/usr/share/grafana" \
    GF_PATHS_LOGS="/var/log/grafana" \
    GF_PATHS_PLUGINS="/var/lib/grafana/plugins" \
    GF_PATHS_PROVISIONING="/etc/grafana/provisioning"

COPY plugins.tar /plugins.tar

RUN rm -rf $GF_PATHS_HOME && mkdir -p $GF_PATHS_HOME
COPY --from=builder /go/grafana/bin/grafana-server /usr/bin/grafana-server
COPY --from=builder /go/grafana/bin/grafana-cli /usr/bin/grafana-cli
COPY --from=builder /go/grafana/conf $GF_PATHS_HOME/conf/
COPY --from=builder /go/grafana/docs $GF_PATHS_HOME/docs/
COPY --from=builder /go/grafana/public $GF_PATHS_HOME/public/
COPY --from=builder /go/grafana/scripts $GF_PATHS_HOME/scripts/

RUN rm -rf /etc/grafana && mkdir -p /etc/grafana
COPY --from=builder /go/grafana/conf/sample.ini $GF_PATHS_CONFIG
COPY --from=builder /go/grafana/conf/ldap.toml /etc/grafana/ldap.toml
COPY ./run.sh /run.sh

# Create grafana user/group
RUN groupadd -r -g 472 grafana
RUN useradd -r -u 472 -g grafana -d /etc/grafana -s /sbin/nologin -c "Grafana Dashboard" grafana

# Install grafana dashboards from Ceph
RUN dnf install -y ceph-grafana-dashboards

# Copy ceph-dashboard yaml
COPY ceph-dashboard.yml "$GF_PATHS_PROVISIONING/dashboards/"

# Unpack plugins and update permissions
RUN mkdir -p "$GF_PATHS_HOME/.aws" && \
    mkdir -p "$GF_PATHS_PROVISIONING/datasources" \
             "$GF_PATHS_PROVISIONING/dashboards" \
             "$GF_PATHS_LOGS" \
             "$GF_PATHS_DATA" && \
    tar -C "$GF_PATHS_DATA" -xvf /plugins.tar && \
    chown -R grafana:grafana "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PROVISIONING" && \
    chmod 777 "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PROVISIONING" /run.sh

EXPOSE 3000

USER grafana
WORKDIR /
ENTRYPOINT [ "/run.sh" ]

# Build specific labels
LABEL maintainer="Boris Ranto <branto@redhat.com>"
LABEL com.redhat.component="grafana-container"
LABEL version=5
LABEL name="grafana"
LABEL description="Red Hat Ceph Storage 5 Grafana container"
LABEL summary="Provides the Grafana container on RHEL 8 for Red Hat Ceph Storage 5."
LABEL io.k8s.display-name="Grafana on RHEL 8"
LABEL io.openshift.tags="rhceph ceph dashboard grafana"
