Skip to content

Commit dda0e5e

Browse files
committed
Merge pull request #21 from infosiftr/multi-version
Modify to support multiple major versions of logstash
2 parents 060ef49 + c49af55 commit dda0e5e

9 files changed

+174
-19
lines changed

.travis.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
language: bash
2+
3+
# for secret experimental features ;)
4+
sudo: 9000
5+
6+
env:
7+
- VERSION=1.5
8+
- VERSION=1.4
9+
10+
install:
11+
- git clone https://github.com/docker-library/official-images.git ~/official-images
12+
13+
before_script:
14+
- env | sort
15+
- cd "$VERSION"
16+
- image="logstash:$VERSION"
17+
18+
script:
19+
- docker build -t "$image" .
20+
- ~/official-images/test/run.sh "$image"
21+
22+
after_script:
23+
- docker images
24+
25+
# vim:set et ts=2 sw=2:

1.4/Dockerfile

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
FROM java:8-jre
2+
3+
# grab gosu for easy step-down from root
4+
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
5+
RUN arch="$(dpkg --print-architecture)" \
6+
&& set -x \
7+
&& curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch" \
8+
&& curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch.asc" \
9+
&& gpg --verify /usr/local/bin/gosu.asc \
10+
&& rm /usr/local/bin/gosu.asc \
11+
&& chmod +x /usr/local/bin/gosu
12+
13+
# http://www.logstash.net/docs/1.4.2/repositories
14+
# http://packages.elasticsearch.org/GPG-KEY-elasticsearch
15+
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4
16+
17+
ENV LOGSTASH_MAJOR 1.4
18+
ENV LOGSTASH_VERSION 1.4.4-1-5608c19
19+
20+
RUN echo "deb http://packages.elasticsearch.org/logstash/${LOGSTASH_MAJOR}/debian stable main" > /etc/apt/sources.list.d/logstash.list
21+
22+
RUN set -x \
23+
&& apt-get update \
24+
&& apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \
25+
&& rm -rf /var/lib/apt/lists/*
26+
27+
ENV PATH /opt/logstash/bin:$PATH
28+
29+
COPY docker-entrypoint.sh /
30+
31+
ENTRYPOINT ["/docker-entrypoint.sh"]
32+
CMD ["logstash", "agent"]

1.4/docker-entrypoint.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Add logstash as command if needed
6+
if [ "${1:0:1}" = '-' ]; then
7+
set -- logstash "$@"
8+
fi
9+
10+
# Run as user "logstash" if the command is "logstash"
11+
if [ "$1" = 'logstash' ]; then
12+
set -- gosu logstash "$@"
13+
fi
14+
15+
exec "$@"

Dockerfile renamed to 1.5/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ RUN set -x \
2626

2727
ENV PATH /opt/logstash/bin:$PATH
2828

29-
COPY ./docker-entrypoint.sh /
29+
COPY docker-entrypoint.sh /
3030

3131
ENTRYPOINT ["/docker-entrypoint.sh"]
32-
CMD ["logstash"]
32+
CMD ["logstash", "agent"]

1.5/docker-entrypoint.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Add logstash as command if needed
6+
if [ "${1:0:1}" = '-' ]; then
7+
set -- logstash "$@"
8+
fi
9+
10+
# Run as user "logstash" if the command is "logstash"
11+
if [ "$1" = 'logstash' ]; then
12+
set -- gosu logstash "$@"
13+
fi
14+
15+
exec "$@"

Dockerfile.template

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
FROM java:8-jre
2+
3+
# grab gosu for easy step-down from root
4+
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
5+
RUN arch="$(dpkg --print-architecture)" \
6+
&& set -x \
7+
&& curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch" \
8+
&& curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.3/gosu-$arch.asc" \
9+
&& gpg --verify /usr/local/bin/gosu.asc \
10+
&& rm /usr/local/bin/gosu.asc \
11+
&& chmod +x /usr/local/bin/gosu
12+
13+
# http://www.logstash.net/docs/1.4.2/repositories
14+
# http://packages.elasticsearch.org/GPG-KEY-elasticsearch
15+
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4
16+
17+
ENV LOGSTASH_MAJOR %%LOGSTASH_MAJOR%%
18+
ENV LOGSTASH_VERSION %%LOGSTASH_VERSION%%
19+
20+
RUN echo "deb http://packages.elasticsearch.org/logstash/${LOGSTASH_MAJOR}/debian stable main" > /etc/apt/sources.list.d/logstash.list
21+
22+
RUN set -x \
23+
&& apt-get update \
24+
&& apt-get install -y --no-install-recommends logstash=$LOGSTASH_VERSION \
25+
&& rm -rf /var/lib/apt/lists/*
26+
27+
ENV PATH /opt/logstash/bin:$PATH
28+
29+
COPY docker-entrypoint.sh /
30+
31+
ENTRYPOINT ["/docker-entrypoint.sh"]
32+
CMD ["logstash", "agent"]

docker-entrypoint.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
set -e
44

55
# Add logstash as command if needed
6-
if [[ "$1" == -* ]]; then
6+
if [ "${1:0:1}" = '-' ]; then
77
set -- logstash "$@"
88
fi
99

1010
# Run as user "logstash" if the command is "logstash"
11-
if [ "$1" == logstash ]; then
11+
if [ "$1" = 'logstash' ]; then
1212
set -- gosu logstash "$@"
1313
fi
1414

generate-stackbrew-library.sh

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,33 @@
11
#!/bin/bash
22
set -e
33

4+
declare -A aliases
5+
aliases=(
6+
[1.5]='1 latest'
7+
)
8+
49
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
10+
11+
versions=( */ )
12+
versions=( "${versions[@]%/}" )
513
url='git://github.com/docker-library/logstash'
6-
commit="$(git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))"
7-
debVersion="$(grep -m1 'ENV LOGSTASH_VERSION' Dockerfile | cut -d' ' -f3)"
8-
fullVersion="${debVersion%%[-]*}" # strip "debian version"
9-
fullVersion="${fullVersion##*:}" # strip epoch
10-
version="${fullVersion%[.]*}"
1114

1215
echo '# maintainer: InfoSiftr <[email protected]> (@infosiftr)'
13-
echo
14-
#echo "$debVersion: ${url}@${commit}"
15-
echo "$fullVersion: ${url}@${commit}"
16-
echo "$version: ${url}@${commit}"
17-
echo "latest: ${url}@${commit}"
1816

17+
for version in "${versions[@]}"; do
18+
commit="$(cd "$version" && git log -1 --format='format:%H' -- Dockerfile $(awk 'toupper($1) == "COPY" { for (i = 2; i < NF; i++) { print $i } }' Dockerfile))"
19+
fullVersion="$(grep -m1 'ENV LOGSTASH_VERSION' "$version/Dockerfile" | cut -d' ' -f3)"
20+
fullVersion="${fullVersion#*:}" # cut off the Debian epoch
21+
22+
versionAliases=()
23+
while [ "$fullVersion" != "$version" -a "${fullVersion%[.-]*}" != "$fullVersion" ]; do
24+
versionAliases+=( $fullVersion )
25+
fullVersion="${fullVersion%[.-]*}"
26+
done
27+
versionAliases+=( $version ${aliases[$version]} )
28+
29+
echo
30+
for va in "${versionAliases[@]}"; do
31+
echo "$va: ${url}@${commit} $version"
32+
done
33+
done

update.sh

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,31 @@ set -e
33

44
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
55

6-
version='1.5'
7-
fullVersion="$(curl -sSL "http://packages.elasticsearch.org/logstash/$version/debian/dists/stable/main/binary-amd64/Packages.gz" | gunzip | awk -F ': +' '$1 == "Package" { pkg = $2 } pkg == "logstash" && $1 == "Version" { print $2 }' | sort -V | tail -1)"
6+
versions=( "$@" )
7+
if [ ${#versions[@]} -eq 0 ]; then
8+
versions=( */ )
9+
fi
10+
versions=( "${versions[@]%/}" )
811

9-
sed -ri \
10-
-e 's/^(ENV LOGSTASH_MAJOR) .*/\1 '"$version"'/' \
11-
-e 's/^(ENV LOGSTASH_VERSION) .*/\1 '"$fullVersion"'/' Dockerfile
12+
travisEnv=
13+
for version in "${versions[@]}"; do
14+
travisEnv='\n - VERSION='"$version$travisEnv"
15+
16+
fullVersion="$(curl -fsSL "http://packages.elasticsearch.org/logstash/$version/debian/dists/stable/main/binary-amd64/Packages" | awk -F ': ' '$1 == "Package" { pkg = $2 } pkg == "logstash" && $1 == "Version" { print $2 }' | sort -rV | head -n1)"
17+
if [ -z "$fullVersion" ]; then
18+
echo >&2 "warning: cannot find full version for $version"
19+
continue
20+
fi
21+
(
22+
set -x
23+
cp docker-entrypoint.sh Dockerfile.template "$version/"
24+
mv "$version/Dockerfile.template" "$version/Dockerfile"
25+
sed -i '
26+
s/%%LOGSTASH_MAJOR%%/'"$version"'/g;
27+
s/%%LOGSTASH_VERSION%%/'"$fullVersion"'/g;
28+
' "$version/Dockerfile"
29+
)
30+
done
1231

32+
travis="$(awk -v 'RS=\n\n' '$1 == "env:" { $0 = "env:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)"
33+
echo "$travis" > .travis.yml

0 commit comments

Comments
 (0)