You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
5.0 KiB
166 lines
5.0 KiB
# Copyright 1999-2021 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=7
|
|
|
|
PYTHON_COMPAT=( python3_{7..9} )
|
|
|
|
MY_PN="curator"
|
|
ES_VERSION="7.3.2"
|
|
|
|
inherit distutils-r1
|
|
|
|
DESCRIPTION="Tending time-series indices in Elasticsearch"
|
|
HOMEPAGE="https://github.com/elastic/curator"
|
|
SRC_URI="https://github.com/elastic/${MY_PN}/archive/V${PV}.tar.gz -> ${P}.tar.gz
|
|
test? ( https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz )"
|
|
|
|
LICENSE="Apache-2.0"
|
|
SLOT="0"
|
|
KEYWORDS="~amd64 ~x86"
|
|
# tests fail in chroot
|
|
# https://github.com/elastic/elasticsearch/issues/12018
|
|
RESTRICT="test"
|
|
IUSE="doc test"
|
|
|
|
# vulnerable pyyaml
|
|
# https://github.com/elastic/curator/issues/1415
|
|
RDEPEND="
|
|
>=dev-python/elasticsearch-py-7.0.4[${PYTHON_USEDEP}]
|
|
<dev-python/elasticsearch-py-8.0.0[${PYTHON_USEDEP}]
|
|
>=dev-python/click-6.7[${PYTHON_USEDEP}]
|
|
<dev-python/click-7.0[${PYTHON_USEDEP}]
|
|
>=dev-python/certifi-2019.9.11[${PYTHON_USEDEP}]
|
|
>=dev-python/requests-2.20.0[${PYTHON_USEDEP}]
|
|
>=dev-python/urllib3-1.24.2[${PYTHON_USEDEP}]
|
|
<dev-python/urllib3-1.26[${PYTHON_USEDEP}]
|
|
>=dev-python/voluptuous-0.9.3[${PYTHON_USEDEP}]"
|
|
DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]
|
|
>=dev-python/six-1.11.0[${PYTHON_USEDEP}]
|
|
dev-python/sphinx
|
|
dev-python/pyyaml[${PYTHON_USEDEP}]
|
|
dev-python/cx_Freeze[${PYTHON_USEDEP}]
|
|
dev-python/importlib_metadata[${PYTHON_USEDEP}]
|
|
test? ( ${RDEPEND}
|
|
virtual/jre
|
|
dev-python/mock[${PYTHON_USEDEP}]
|
|
dev-python/nose[${PYTHON_USEDEP}]
|
|
dev-python/six[${PYTHON_USEDEP}] )"
|
|
|
|
S="${WORKDIR}/${MY_PN}-${PV}"
|
|
|
|
python_prepare_all() {
|
|
# avoid downloading from net
|
|
sed -e '/^intersphinx_mapping/,+3d' -i docs/conf.py || die
|
|
|
|
# requests_aws4auth not in portage
|
|
sed -e '/boto3/d' \
|
|
-e '/requests_aws4auth/d' \
|
|
-e 's/pyyaml==3.13/pyyaml/g' \
|
|
-e '/tests_require/s/, "coverage", "nosexcover"//g' \
|
|
-i setup.cfg setup.py || die
|
|
|
|
# Bug 713342
|
|
sed -i 's/yaml.load/yaml.unsafe_load/g' curator/utils.py test/unit/* || die
|
|
|
|
distutils-r1_python_prepare_all
|
|
}
|
|
|
|
python_compile_all() {
|
|
emake -C docs -j1 man $(usex doc html "")
|
|
}
|
|
|
|
# running tests in non-chroot environments:
|
|
# FEATURES="test -usersandbox" emerge dev-python/elasticsearch-curator
|
|
python_test_all() {
|
|
# starts two ES instances (local,remote) and runs the tests
|
|
# https://github.com/elastic/curator/blob/master/travis-run.sh
|
|
local ES_INSTANCES="local remote"
|
|
local ES_PATH="${WORKDIR}/elasticsearch-${ES_VERSION}"
|
|
|
|
declare -A ES_PORT
|
|
ES_PORT[local]=9200
|
|
ES_PORT[remote]=9201
|
|
|
|
local i transport
|
|
declare -A ES_CONFIG_DIR ES_CONFIG_PATH ES_INSTANCE ES_LOG ES_PID
|
|
for i in ${ES_INSTANCES}; do
|
|
ES_CONFIG_DIR[$i]="${ES_PATH}/$i"
|
|
ES_CONFIG_PATH[$i]="${ES_CONFIG_DIR[$i]}/elasticsearch.yml"
|
|
ES_PID[$i]="${ES_PATH}/$i.pid"
|
|
ES_LOG[$i]="${ES_PATH}/logs/$i.log"
|
|
done
|
|
|
|
# configure ES instances
|
|
for i in ${ES_INSTANCES}; do
|
|
mkdir -p "${ES_CONFIG_DIR[$i]}" || die
|
|
cp ${ES_PATH}/config/{jvm.options,log4j2.properties} "${ES_CONFIG_DIR[$i]}"/ || die
|
|
echo 'network.host: 127.0.0.1' > "${ES_CONFIG_PATH[$i]}" || die
|
|
echo "http.port: ${ES_PORT[$i]}" >> "${ES_CONFIG_PATH[$i]}" || die
|
|
echo "cluster.name: $i" >> "${ES_CONFIG_PATH[$i]}" || die
|
|
echo "node.name: $i" >> "${ES_CONFIG_PATH[$i]}" || die
|
|
echo 'node.max_local_storage_nodes: 2' >> "${ES_CONFIG_PATH[$i]}" || die
|
|
transport=$((${ES_PORT[$i]}+100))
|
|
echo "transport.port: ${transport}" >> "${ES_CONFIG_PATH[$i]}" || die
|
|
echo "discovery.seed_hosts: [\"localhost:${transport}\"]" >> "${ES_CONFIG_PATH[$i]}" || die
|
|
echo "discovery.type: single-node" >> "${ES_CONFIG_PATH[$i]}" || die
|
|
done
|
|
|
|
echo 'path.repo: /' >> "${ES_CONFIG_PATH[local]}" || die
|
|
echo "reindex.remote.whitelist: localhost:${ES_PORT[remote]}" >> "${ES_CONFIG_PATH[local]}" || die
|
|
|
|
# start ES instances
|
|
for i in ${ES_INSTANCES}; do
|
|
ES_PATH_CONF=${ES_CONFIG_DIR[$i]} "${ES_PATH}/bin/elasticsearch" -d -p "${ES_PID[$i]}" || die
|
|
|
|
local j
|
|
local es_started=0
|
|
for j in {1..30}; do
|
|
grep -q "started" "${ES_LOG[$i]}" 2> /dev/null
|
|
if [[ $? -eq 0 ]]; then
|
|
einfo "Elasticsearch $i started"
|
|
es_started=1
|
|
eend 0
|
|
break
|
|
elif grep -q 'BindException\[Address already in use\]' "${ES_LOG[$i]}" 2>/dev/null; then
|
|
eend 1
|
|
eerror "Elasticsearch $i already running"
|
|
die "Cannot start Elasticsearch $i for tests"
|
|
else
|
|
einfo "Waiting for Elasticsearch $i"
|
|
eend 1
|
|
sleep 2
|
|
continue
|
|
fi
|
|
done
|
|
|
|
[[ $es_started -eq 0 ]] && die "Elasticsearch failed to start"
|
|
done
|
|
|
|
export TEST_ES_SERVER="localhost:${ES_PORT[local]}"
|
|
export REMOTE_ES_SERVER="localhost:${ES_PORT[remote]}"
|
|
|
|
# run tests
|
|
nosetests -v || die
|
|
|
|
for i in ${ES_INSTANCES}; do
|
|
pkill -F ${ES_PID[$i]}
|
|
done
|
|
}
|
|
|
|
python_install_all() {
|
|
use doc && local HTML_DOCS=( docs/_build/html/. )
|
|
doman docs/_build/man/*
|
|
distutils-r1_python_install_all
|
|
}
|
|
|
|
pkg_postinst() {
|
|
ewarn ""
|
|
ewarn "For Python 3 support information please read: http://click.pocoo.org/latest/python3/"
|
|
ewarn ""
|
|
ewarn "Example usage on Python 3:"
|
|
ewarn "export LC_ALL=en_US.UTF-8"
|
|
ewarn "export LANG=en_US.UTF-8"
|
|
ewarn "curator ..."
|
|
}
|