diff --git a/Makefile b/Makefile
index fa7a6270d9..074e4b8f6a 100644
--- a/Makefile
+++ b/Makefile
@@ -79,6 +79,12 @@ BRANCH_NAME :=
# Docker Build Context
docker_build = docker build $(DOCKER_BUILD_PARAMS) --build-arg LAGOON_VERSION=$(LAGOON_VERSION) --build-arg IMAGE_REPO=$(CI_BUILD_TAG) -t $(CI_BUILD_TAG)/$(1) -f $(2) $(3)
+# Build a Python docker image. Expects as arguments:
+# 1. Python version
+# 2. Location of Dockerfile
+# 3. Path of Docker Build context
+docker_build_python = docker build $(DOCKER_BUILD_PARAMS) --build-arg LAGOON_VERSION=$(LAGOON_VERSION) --build-arg IMAGE_REPO=$(CI_BUILD_TAG) --build-arg PYTHON_VERSION=$(1) -t $(CI_BUILD_TAG)/python:$(2) -f $(3) $(4)
+
# Build a PHP docker image. Expects as arguments:
# 1. PHP version
# 2. PHP version and type of image (ie 7.0-fpm, 7.0-cli etc)
@@ -108,6 +114,7 @@ images := oc \
mariadb-galera \
mariadb-galera-drupal \
postgres \
+ postgres-ckan \
postgres-drupal \
oc-build-deploy-dind \
commons \
@@ -156,6 +163,7 @@ build/mariadb-drupal: build/mariadb images/mariadb-drupal/Dockerfile
build/mariadb-galera: build/commons images/mariadb-galera/Dockerfile
build/mariadb-galera-drupal: build/mariadb-galera images/mariadb-galera-drupal/Dockerfile
build/postgres: build/commons images/postgres/Dockerfile
+build/postgres-ckan: build/postgres images/postgres-ckan/Dockerfile
build/postgres-drupal: build/postgres images/postgres-drupal/Dockerfile
build/commons: images/commons/Dockerfile
build/nginx: build/commons images/nginx/Dockerfile
@@ -178,6 +186,39 @@ build/curator: build/commons images/curator/Dockerfile
build/oc-build-deploy-dind: build/oc images/oc-build-deploy-dind
build/athenapdf-service: images/athenapdf-service/Dockerfile
+
+#######
+####### Python Images
+#######
+####### Python Images are alpine linux based Python images.
+
+pythonimages := python__2.7 \
+ python__3.7 \
+ python__2.7-ckan \
+ python__2.7-ckandatapusher
+
+build-pythonimages = $(foreach image,$(pythonimages),build/$(image))
+
+# Define the make recepie for all base images
+$(build-pythonimages): build/commons
+ $(eval clean = $(subst build/python__,,$@))
+ $(eval version = $(word 1,$(subst -, ,$(clean))))
+ $(eval type = $(word 2,$(subst -, ,$(clean))))
+# this fills variables only if $type is existing, if not they are just empty
+ $(eval type_dash = $(if $(type),-$(type)))
+# Call the docker build
+ $(call docker_build_python,$(version),$(version)$(type_dash),images/python$(type_dash)/Dockerfile,images/python$(type_dash))
+# Touch an empty file which make itself is using to understand when the image has been last build
+ touch $@
+
+base-images-with-versions += $(pythonimages)
+s3-images += python
+
+build/python__2.7 build/python__3.7: images/commons
+build/python__2.7-ckan: build/python__2.7
+build/python__2.7-ckandatapusher: build/python__2.7
+
+
#######
####### PHP Images
#######
@@ -244,7 +285,9 @@ solrimages := solr__5.5 \
solr__7.5 \
solr__5.5-drupal \
solr__6.6-drupal \
- solr__7.5-drupal
+ solr__7.5-drupal \
+ solr__5.5-ckan \
+ solr__6.6-ckan
build-solrimages = $(foreach image,$(solrimages),build/$(image))
@@ -268,6 +311,8 @@ build/solr__5.5 build/solr__6.6 build/solr__7.5: images/commons
build/solr__5.5-drupal: build/solr__5.5
build/solr__6.6-drupal: build/solr__6.6
build/solr__7.5-drupal: build/solr__7.5
+build/solr__5.5-ckan: build/solr__5.5
+build/solr__6.6-ckan: build/solr__6.6
#######
####### Node Images
@@ -476,7 +521,7 @@ $(run-rest-tests): minishift build/node__6-builder build/node__8-builder build/o
IMAGE_REPO=$(CI_BUILD_TAG) docker-compose -p $(CI_BUILD_TAG) up -d $(deployment-test-services-rest)
IMAGE_REPO=$(CI_BUILD_TAG) docker exec -i $$(docker-compose -p $(CI_BUILD_TAG) ps -q tests) ansible-playbook /ansible/tests/$(testname).yaml $(testparameter)
-tests/drupal tests/drupal-postgres tests/drupal-galera: minishift build/varnish-drupal build/solr__5.5-drupal build/nginx-drupal build/redis build/php__5.6-cli-drupal build/php__7.0-cli-drupal build/php__7.1-cli-drupal build/php__7.2-cli-drupal build/php__7.3-cli-drupal build/api-db build/postgres-drupal build/mariadb-drupal build/oc-build-deploy-dind $(foreach image,$(deployment-test-services-rest),build/$(image)) build/drush-alias push-minishift
+tests/drupal tests/drupal-postgres tests/drupal-galera: minishift build/varnish-drupal build/solr__5.5-drupal build/nginx-drupal build/redis build/php__5.6-cli-drupal build/php__7.0-cli-drupal build/php__7.1-cli-drupal build/php__7.2-cli-drupal build/php__7.3-cli-drupal build/api-db build/postgres-drupal build/mariadb-drupal build/postgres-ckan build/oc-build-deploy-dind $(foreach image,$(deployment-test-services-rest),build/$(image)) build/drush-alias push-minishift
$(eval testname = $(subst tests/,,$@))
IMAGE_REPO=$(CI_BUILD_TAG) docker-compose -p $(CI_BUILD_TAG) up -d $(deployment-test-services-rest) drush-alias
IMAGE_REPO=$(CI_BUILD_TAG) docker exec -i $$(docker-compose -p $(CI_BUILD_TAG) ps -q tests) ansible-playbook /ansible/tests/$(testname).yaml $(testparameter)
diff --git a/images/postgres-ckan/90-datastore-user.sh b/images/postgres-ckan/90-datastore-user.sh
new file mode 100755
index 0000000000..d12ea97269
--- /dev/null
+++ b/images/postgres-ckan/90-datastore-user.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+set -e
+
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
+ CREATE USER ckan_datastore with encrypted password 'ckan';
+ GRANT ALL PRIVILEGES ON DATABASE ckan TO ckan_datastore;
+EOSQL
diff --git a/images/postgres-ckan/Dockerfile b/images/postgres-ckan/Dockerfile
new file mode 100644
index 0000000000..a20a80827b
--- /dev/null
+++ b/images/postgres-ckan/Dockerfile
@@ -0,0 +1,12 @@
+ARG IMAGE_REPO
+FROM ${IMAGE_REPO:-lagoon}/postgres
+
+# change log_min_error_statement and log_min_messages from `error` to `log` as drupal is prone to cause some errors which are all logged (yes `log` is a less verbose mode than `error`)
+RUN sed -i "s/#log_min_error_statement = error/log_min_error_statement = log/" /usr/local/share/postgresql/postgresql.conf.sample \
+ && sed -i "s/#log_min_messages = warning/log_min_messages = log/" /usr/local/share/postgresql/postgresql.conf.sample
+
+ENV POSTGRES_PASSWORD=ckan \
+ POSTGRES_USER=ckan \
+ POSTGRES_DB=ckan
+
+COPY 90-datastore-user.sh /docker-entrypoint-initdb.d/
diff --git a/images/python-ckan/Dockerfile b/images/python-ckan/Dockerfile
new file mode 100644
index 0000000000..6549686e86
--- /dev/null
+++ b/images/python-ckan/Dockerfile
@@ -0,0 +1,22 @@
+ARG PYTHON_VERSION
+ARG IMAGE_REPO
+FROM ${IMAGE_REPO:-lagoon}/python:${PYTHON_VERSION}
+
+RUN apk update \
+ && apk upgrade \
+ && apk add --no-cache git \
+ libpq \
+ postgresql-dev \
+ gcc \
+ musl-dev \
+ libmagic \
+ libxslt-dev \
+ libxml2-dev \
+ libffi-dev
+
+RUN mkdir -p /app/ckan/default \
+ && fix-permissions /app/ckan/default
+
+RUN virtualenv --no-site-packages /app/ckan/default \
+ && . /app/ckan/default/bin/activate \
+ && pip install setuptools==20.4
diff --git a/images/python-ckandatapusher/Dockerfile b/images/python-ckandatapusher/Dockerfile
new file mode 100644
index 0000000000..88f560f59d
--- /dev/null
+++ b/images/python-ckandatapusher/Dockerfile
@@ -0,0 +1,34 @@
+ARG PYTHON_VERSION
+ARG IMAGE_REPO
+FROM ${IMAGE_REPO:-lagoon}/python:${PYTHON_VERSION}
+
+RUN apk update \
+ && apk upgrade \
+ && apk add --no-cache git \
+ libpq \
+ postgresql-dev \
+ gcc \
+ musl-dev \
+ libmagic \
+ libxslt-dev \
+ libxml2-dev \
+ libffi-dev \
+ pcre-dev
+
+RUN virtualenv /app/ckan/datapusher
+
+RUN mkdir -p /app/ckan/datapusher/src \
+ && mkdir -p /etc/ckan \
+ && fix-permissions /app/ckan \
+ && ln -s /app/ckan /usr/lib/ckan \
+ && . /app/ckan/datapusher/bin/activate \
+ && pip install uwsgi \
+ && cd /app/ckan/datapusher/src \
+ && git clone -b 0.0.14 https://github.com/ckan/datapusher.git \
+ && cd datapusher \
+ && /app/ckan/datapusher/bin/pip install -r requirements.txt \
+ && /app/ckan/datapusher/bin/python setup.py develop \
+ && cp deployment/datapusher.wsgi /etc/ckan/ \
+ && cp deployment/datapusher_settings.py /etc/ckan/
+
+CMD ["sh", "-c", ". /app/ckan/datapusher/bin/activate && uwsgi --http :8800 --wsgi-file /etc/ckan/datapusher.wsgi"]
diff --git a/images/python/80-shell-timeout.sh b/images/python/80-shell-timeout.sh
new file mode 100644
index 0000000000..fdc02f389e
--- /dev/null
+++ b/images/python/80-shell-timeout.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# If we are running within kubernetes, set a shell timeout of 10mins.
+# We do that so old shells are closed and we can idle the cli container
+if [ $KUBERNETES_PORT ]; then
+ TMOUT=600
+fi
\ No newline at end of file
diff --git a/images/python/Dockerfile b/images/python/Dockerfile
new file mode 100644
index 0000000000..33c8e39ce2
--- /dev/null
+++ b/images/python/Dockerfile
@@ -0,0 +1,37 @@
+ARG PYTHON_VERSION
+ARG IMAGE_REPO
+FROM ${IMAGE_REPO:-lagoon}/commons as commons
+FROM python:${PYTHON_VERSION}-alpine
+
+LABEL maintainer="amazee.io"
+ENV LAGOON=python
+
+# Copy commons files
+COPY --from=commons /lagoon /lagoon
+COPY --from=commons /bin/fix-permissions /bin/ep /bin/docker-sleep /bin/
+COPY --from=commons /sbin/tini /sbin/
+COPY --from=commons /home /home
+
+RUN chmod g+w /etc/passwd \
+ && mkdir -p /home
+
+ENV TMPDIR=/tmp \
+ TMP=/tmp \
+ HOME=/home \
+ # When Bash is invoked via `sh` it behaves like the old Bourne Shell and sources a file that is given in `ENV`
+ ENV=/home/.bashrc \
+ # When Bash is invoked as non-interactive (like `bash -c command`) it sources a file that is given in `BASH_ENV`
+ BASH_ENV=/home/.bashrc
+
+RUN apk update \
+ && apk upgrade \
+ && apk add --no-cache python-dev \
+ py2-pip \
+ py2-virtualenv
+
+# Make sure shells are not running forever
+COPY 80-shell-timeout.sh /lagoon/entrypoints/
+RUN echo "source /lagoon/entrypoints/80-shell-timeout.sh" >> /home/.bashrc
+
+ENTRYPOINT ["/sbin/tini", "--", "/lagoon/entrypoints.sh"]
+CMD ["python"]
\ No newline at end of file
diff --git a/images/solr-ckan/Dockerfile b/images/solr-ckan/Dockerfile
new file mode 100644
index 0000000000..be3563bcd4
--- /dev/null
+++ b/images/solr-ckan/Dockerfile
@@ -0,0 +1,10 @@
+ARG SOLR_MAJ_MIN_VERSION
+ARG IMAGE_REPO
+FROM ${IMAGE_REPO:-lagoon}/solr:${SOLR_MAJ_MIN_VERSION}
+ARG SOLR_MAJ_MIN_VERSION
+
+COPY solr${SOLR_MAJ_MIN_VERSION} /solr-conf
+
+RUN precreate-core ckan /solr-conf
+
+CMD ["solr-foreground"]
diff --git a/images/solr-ckan/solr5.5/conf/elevate.xml b/images/solr-ckan/solr5.5/conf/elevate.xml
new file mode 100644
index 0000000000..193a0e727a
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/elevate.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr5.5/conf/mapping-ISOLatin1Accent.txt b/images/solr-ckan/solr5.5/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 0000000000..b92d03c550
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,14 @@
+# This file contains character mappings for the default fulltext field type.
+# The source characters (on the left) will be replaced by the respective target
+# characters before any other processing takes place.
+# Lines starting with a pound character # are ignored.
+#
+# For sensible defaults, use the mapping-ISOLatin1Accent.txt file distributed
+# with the example application of your Solr version.
+#
+# Examples:
+# "À" => "A"
+# "\u00c4" => "A"
+# "\u00c4" => "\u0041"
+# "æ" => "ae"
+# "\n" => " "
diff --git a/images/solr-ckan/solr5.5/conf/protwords.txt b/images/solr-ckan/solr5.5/conf/protwords.txt
new file mode 100644
index 0000000000..cda8581497
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/protwords.txt
@@ -0,0 +1,7 @@
+#-----------------------------------------------------------------------
+# This file blocks words from being operated on by the stemmer and word delimiter.
+&
+<
+>
+'
+"
diff --git a/images/solr-ckan/solr5.5/conf/schema.xml b/images/solr-ckan/solr5.5/conf/schema.xml
new file mode 100644
index 0000000000..8e5018a2e2
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/schema.xml
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+index_id
+text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr5.5/conf/solrconfig.xml b/images/solr-ckan/solr5.5/conf/solrconfig.xml
new file mode 100644
index 0000000000..a0549e1146
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/solrconfig.xml
@@ -0,0 +1,1800 @@
+
+
+
+
+
+
+
+
+ ${solr.abortOnConfigurationError:true}
+
+
+ ${solr.luceneMatchVersion:LUCENE_50}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /var/solr/${solr.core.name}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 32
+
+
+
+
+
+
+
+
+
+ 4
+
+
+ ${solr.lock.type:none}
+
+
+
+
+
+ false
+
+
+ true
+
+
+
+
+ 1
+
+ 0
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${solr.autoCommit.MaxDocs:10000}
+ ${solr.autoCommit.MaxTime:120000}
+
+
+
+
+ ${solr.autoSoftCommit.MaxDocs:2000}
+ ${solr.autoSoftCommit.MaxTime:10000}
+
+
+
+
+
+
+
+
+ ${solr.data.dir:}
+
+
+
+
+
+
+
+
+
+
+ 1024
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+ 20
+
+
+ 200
+
+
+
+
+
+
+
+
+
+
+
+ solr rocks010
+
+
+
+
+
+ false
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ explicit
+ json
+ true
+ text
+
+
+
+
+
+
+
+ {!xport}
+ xsort
+ false
+
+
+
+ query
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ edismax
+ content
+ explicit
+ true
+ 0.01
+
+ ${solr.pinkPony.timeAllowed:-1}
+ *:*
+
+
+ false
+
+ true
+ false
+
+ 1
+
+
+ spellcheck
+ elevator
+
+
+
+
+
+
+ content
+ 1
+ 1
+ 3
+ 15
+ 20
+ false
+
+ ${solr.mlt.timeAllowed:2000}
+
+
+
+
+
+
+ content
+ explicit
+ true
+
+
+
+
+
+
+
+ text
+
+
+
+
+
+
+ _src_
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text
+ true
+ ignored_
+
+
+ true
+ links
+ ignored_
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ explicit
+ true
+
+
+
+
+
+
+ ${solr.replication.master:false}
+ commit
+ startup
+ ${solr.replication.confFiles:schema.xml,mapping-ISOLatin1Accent.txt,protwords.txt,stopwords.txt,synonyms.txt,elevate.xml}
+
+
+ ${solr.replication.slave:false}
+ ${solr.replication.masterUrl:http://localhost:8983/solr}/replication
+ ${solr.replication.pollInterval:00:00:60}
+
+
+
+
+
+
+ true
+ json
+ true
+
+
+
+
+
+
+
+
+
+ default
+ wordbreak
+ false
+ false
+ 1
+ 5
+ 5
+ true
+ true
+ 10
+ 5
+
+
+ spellcheck
+
+
+
+
+
+
+ mySuggester
+ FuzzyLookupFactory
+ DocumentDictionaryFactory
+ cat
+ price
+ string
+
+
+
+
+
+ true
+ 10
+
+
+ suggest
+
+
+
+
+
+
+
+
+
+ true
+
+
+ tvComponent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ terms
+
+
+
+
+
+
+ string
+ elevate.xml
+
+
+
+
+
+ explicit
+
+
+ elevator
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+ 70
+
+ 0.5
+
+ [-\w ,/\n\"']{20,200}
+
+
+
+
+
+
+ ]]>
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ,,
+ ,,
+ ,,
+ ,,
+ ,]]>
+ ]]>
+
+
+
+
+
+ 10
+ .,!?
+
+
+
+
+
+
+ WORD
+
+
+ en
+ US
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/plain; charset=UTF-8
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+ *:*
+
+
+
+
+
+
+
+
+
+
+
+ textSpell
+
+
+
+ default
+ spell
+ spellchecker
+ true
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr5.5/conf/solrconfig_extra.xml b/images/solr-ckan/solr5.5/conf/solrconfig_extra.xml
new file mode 100644
index 0000000000..c5bc3acfb5
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/solrconfig_extra.xml
@@ -0,0 +1,80 @@
+
+
+
+textSpell
+
+
+
+
+
+ default
+ spell
+ spellchecker
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr5.5/conf/solrcore.properties b/images/solr-ckan/solr5.5/conf/solrcore.properties
new file mode 100644
index 0000000000..3a2433f676
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/solrcore.properties
@@ -0,0 +1,20 @@
+# Defines Solr properties for this specific core.
+solr.replication.master=false
+solr.replication.slave=false
+solr.replication.pollInterval=00:00:60
+solr.replication.masterUrl=http://localhost:8983/solr
+solr.replication.confFiles=schema.xml,mapping-ISOLatin1Accent.txt,protwords.txt,stopwords.txt,synonyms.txt,elevate.xml
+solr.mlt.timeAllowed=2000
+# You should not set your luceneMatchVersion to anything lower than your Solr
+# Version.
+solr.luceneMatchVersion=5.0
+solr.pinkPony.timeAllowed=-1
+# autoCommit after 10000 docs
+solr.autoCommit.MaxDocs=10000
+# autoCommit after 2 minutes
+solr.autoCommit.MaxTime=120000
+# autoSoftCommit after 2000 docs
+solr.autoSoftCommit.MaxDocs=2000
+# autoSoftCommit after 10 seconds
+solr.autoSoftCommit.MaxTime=10000
+solr.install.dir=../../..
diff --git a/images/solr-ckan/solr5.5/conf/stopwords.txt b/images/solr-ckan/solr5.5/conf/stopwords.txt
new file mode 100644
index 0000000000..d7f243e48a
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/stopwords.txt
@@ -0,0 +1,4 @@
+# Contains words which shouldn't be indexed for fulltext fields, e.g., because
+# they're too common. For documentation of the format, see
+# http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.StopFilterFactory
+# (Lines starting with a pound character # are ignored.)
diff --git a/images/solr-ckan/solr5.5/conf/synonyms.txt b/images/solr-ckan/solr5.5/conf/synonyms.txt
new file mode 100644
index 0000000000..7d22eea6d6
--- /dev/null
+++ b/images/solr-ckan/solr5.5/conf/synonyms.txt
@@ -0,0 +1,3 @@
+# Contains synonyms to use for your index. For the format used, see
+# http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
+# (Lines starting with a pound character # are ignored.)
diff --git a/images/solr-ckan/solr6.6/conf/elevate.xml b/images/solr-ckan/solr6.6/conf/elevate.xml
new file mode 100644
index 0000000000..193a0e727a
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/elevate.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr6.6/conf/mapping-ISOLatin1Accent.txt b/images/solr-ckan/solr6.6/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 0000000000..b92d03c550
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,14 @@
+# This file contains character mappings for the default fulltext field type.
+# The source characters (on the left) will be replaced by the respective target
+# characters before any other processing takes place.
+# Lines starting with a pound character # are ignored.
+#
+# For sensible defaults, use the mapping-ISOLatin1Accent.txt file distributed
+# with the example application of your Solr version.
+#
+# Examples:
+# "À" => "A"
+# "\u00c4" => "A"
+# "\u00c4" => "\u0041"
+# "æ" => "ae"
+# "\n" => " "
diff --git a/images/solr-ckan/solr6.6/conf/protwords.txt b/images/solr-ckan/solr6.6/conf/protwords.txt
new file mode 100644
index 0000000000..cda8581497
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/protwords.txt
@@ -0,0 +1,7 @@
+#-----------------------------------------------------------------------
+# This file blocks words from being operated on by the stemmer and word delimiter.
+&
+<
+>
+'
+"
diff --git a/images/solr-ckan/solr6.6/conf/schema.xml b/images/solr-ckan/solr6.6/conf/schema.xml
new file mode 100644
index 0000000000..8e5018a2e2
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/schema.xml
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+index_id
+text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr6.6/conf/solrconfig.xml b/images/solr-ckan/solr6.6/conf/solrconfig.xml
new file mode 100644
index 0000000000..12f7fb9966
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/solrconfig.xml
@@ -0,0 +1,1494 @@
+
+
+
+]>
+
+
+
+
+
+
+ ${solr.abortOnConfigurationError:true}
+
+
+ ${solr.luceneMatchVersion:LUCENE_60}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /var/solr/${solr.core.name}
+
+
+
+
+
+
+
+
+ ${solr.hdfs.home:}
+
+ ${solr.hdfs.confdir:}
+
+ ${solr.hdfs.blockcache.enabled:true}
+
+ ${solr.hdfs.blockcache.global:true}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+ ${solr.lock.type:none}
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${solr.ulog.dir:}
+
+
+
+
+ ${solr.autoCommit.MaxDocs:10000}
+ ${solr.autoCommit.MaxTime:120000}
+ false
+
+
+
+
+ ${solr.autoSoftCommit.MaxDocs:2000}
+ ${solr.autoSoftCommit.MaxTime:10000}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1024
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+ 20
+
+
+ 200
+
+
+
+
+
+
+
+
+
+
+
+ static firstSearcher warming in solrconfig.xml
+
+
+
+
+
+ false
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ edismax
+ content
+ explicit
+ true
+ 0.01
+
+ ${solr.selectSearchHandler.timeAllowed:-1}
+ *:*
+
+
+ false
+
+ true
+ false
+
+ 1
+
+
+ spellcheck
+ elevator
+
+
+
+
+
+
+ explicit
+ json
+ true
+ text
+
+
+
+
+
+
+
+
+
+ content
+ 1
+ 1
+ 3
+ 15
+ 20
+ false
+
+ ${solr.mlt.timeAllowed:2000}
+
+
+
+
+
+
+ content
+ explicit
+ true
+
+
+
+
+
+ text
+
+
+
+
+
+
+ true
+ ignored_
+
+
+ true
+ links
+ ignored_
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ explicit
+ true
+
+
+
+
+
+
+ ${solr.replication.master:false}
+ commit
+ startup
+ ${solr.replication.confFiles:schema.xml,mapping-ISOLatin1Accent.txt,protwords.txt,stopwords.txt,synonyms.txt,elevate.xml}
+
+
+ ${solr.replication.slave:false}
+ ${solr.replication.masterUrl:http://localhost:8983/solr}/replication
+ ${solr.replication.pollInterval:00:00:60}
+
+
+
+
+
+
+ true
+ json
+ true
+
+
+
+
+
+
+
+ &spellcheck;
+
+
+
+
+ spell
+
+ default
+ wordbreak
+ on
+ false
+ false
+ 1
+ 5
+ 5
+ true
+ true
+ 10
+ 5
+
+
+ spellcheck
+
+
+
+
+
+ mySuggester
+ FuzzyLookupFactory
+ DocumentDictionaryFactory
+ cat
+ price
+ string
+
+
+
+
+
+ true
+ 10
+
+
+ suggest
+
+
+
+
+
+
+
+
+ text
+ true
+
+
+ tvComponent
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+ terms
+
+
+
+
+
+
+ false
+ false
+
+ false
+
+ true
+ false
+
+ 1
+
+
+ terms
+ spellcheck
+
+
+
+
+
+
+ string
+ elevate.xml
+
+
+
+
+
+ explicit
+ text
+
+
+ elevator
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+
+
+
+ 70
+
+ 0.5
+
+ [-\w ,/\n\"']{20,200}
+
+
+
+
+
+
+ ]]>
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ,,
+ ,,
+ ,,
+ ,,
+ ,]]>
+ ]]>
+
+
+
+
+
+ 10
+ .,!?
+
+
+
+
+
+
+ WORD
+
+
+ en
+ US
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ application/json; charset=UTF-8
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr6.6/conf/solrconfig_spellcheck.xml b/images/solr-ckan/solr6.6/conf/solrconfig_spellcheck.xml
new file mode 100644
index 0000000000..5c9d7ad79e
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/solrconfig_spellcheck.xml
@@ -0,0 +1,89 @@
+
+
+
+ textSpell
+
+
+
+
+
+
+ default
+ spell
+ solr.DirectSolrSpellChecker
+
+ internal
+
+ 0.5
+
+ 2
+
+ 1
+
+ 5
+
+ 4
+
+ 0.01
+
+
+
+
+
+ wordbreak
+ solr.WordBreakSolrSpellChecker
+ name
+ true
+ true
+ 10
+
+
+
+
+
+
+
+
+
+
+
diff --git a/images/solr-ckan/solr6.6/conf/solrcore.properties b/images/solr-ckan/solr6.6/conf/solrcore.properties
new file mode 100644
index 0000000000..d7d045b0fd
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/solrcore.properties
@@ -0,0 +1,20 @@
+# Defines Solr properties for this specific core.
+solr.replication.master=false
+solr.replication.slave=false
+solr.replication.pollInterval=00:00:60
+solr.replication.masterUrl=http://localhost:8983/solr
+solr.replication.confFiles=schema.xml,mapping-ISOLatin1Accent.txt,protwords.txt,stopwords.txt,synonyms.txt,elevate.xml
+solr.mlt.timeAllowed=2000
+# You should not set your luceneMatchVersion to anything lower than your Solr
+# Version.
+solr.luceneMatchVersion=6.0
+solr.selectSearchHandler.timeAllowed=-1
+# autoCommit after 10000 docs
+solr.autoCommit.MaxDocs=10000
+# autoCommit after 2 minutes
+solr.autoCommit.MaxTime=120000
+# autoSoftCommit after 2000 docs
+solr.autoSoftCommit.MaxDocs=2000
+# autoSoftCommit after 10 seconds
+solr.autoSoftCommit.MaxTime=10000
+solr.install.dir=../../..
diff --git a/images/solr-ckan/solr6.6/conf/stopwords.txt b/images/solr-ckan/solr6.6/conf/stopwords.txt
new file mode 100644
index 0000000000..d7f243e48a
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/stopwords.txt
@@ -0,0 +1,4 @@
+# Contains words which shouldn't be indexed for fulltext fields, e.g., because
+# they're too common. For documentation of the format, see
+# http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.StopFilterFactory
+# (Lines starting with a pound character # are ignored.)
diff --git a/images/solr-ckan/solr6.6/conf/synonyms.txt b/images/solr-ckan/solr6.6/conf/synonyms.txt
new file mode 100644
index 0000000000..7d22eea6d6
--- /dev/null
+++ b/images/solr-ckan/solr6.6/conf/synonyms.txt
@@ -0,0 +1,3 @@
+# Contains synonyms to use for your index. For the format used, see
+# http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory
+# (Lines starting with a pound character # are ignored.)