mirror of
https://github.com/MichaelCade/90DaysOfDevOps.git
synced 2025-02-02 20:34:40 +07:00
183 lines
3.6 KiB
Bash
183 lines
3.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Log a message.
|
|
function log {
|
|
echo "[+] $1"
|
|
}
|
|
|
|
# Log a message at a sub-level.
|
|
function sublog {
|
|
echo " ⠿ $1"
|
|
}
|
|
|
|
# Log an error.
|
|
function err {
|
|
echo "[x] $1" >&2
|
|
}
|
|
|
|
# Poll the 'elasticsearch' service until it responds with HTTP code 200.
|
|
function wait_for_elasticsearch {
|
|
local elasticsearch_host="${ELASTICSEARCH_HOST:-elasticsearch}"
|
|
|
|
local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}' "http://${elasticsearch_host}:9200/" )
|
|
|
|
if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then
|
|
args+=( '-u' "elastic:${ELASTIC_PASSWORD}" )
|
|
fi
|
|
|
|
local -i result=1
|
|
local output
|
|
|
|
# retry for max 300s (60*5s)
|
|
for _ in $(seq 1 60); do
|
|
output="$(curl "${args[@]}" || true)"
|
|
if [[ "${output: -3}" -eq 200 ]]; then
|
|
result=0
|
|
break
|
|
fi
|
|
|
|
sleep 5
|
|
done
|
|
|
|
if ((result)); then
|
|
echo -e "\n${output::-3}"
|
|
fi
|
|
|
|
return $result
|
|
}
|
|
|
|
# Verify that the given Elasticsearch user exists.
|
|
function check_user_exists {
|
|
local username=$1
|
|
|
|
local elasticsearch_host="${ELASTICSEARCH_HOST:-elasticsearch}"
|
|
|
|
local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}'
|
|
"http://${elasticsearch_host}:9200/_security/user/${username}"
|
|
)
|
|
|
|
if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then
|
|
args+=( '-u' "elastic:${ELASTIC_PASSWORD}" )
|
|
fi
|
|
|
|
local -i result=1
|
|
local -i exists=0
|
|
local output
|
|
|
|
output="$(curl "${args[@]}")"
|
|
if [[ "${output: -3}" -eq 200 || "${output: -3}" -eq 404 ]]; then
|
|
result=0
|
|
fi
|
|
if [[ "${output: -3}" -eq 200 ]]; then
|
|
exists=1
|
|
fi
|
|
|
|
if ((result)); then
|
|
echo -e "\n${output::-3}"
|
|
else
|
|
echo "$exists"
|
|
fi
|
|
|
|
return $result
|
|
}
|
|
|
|
# Set password of a given Elasticsearch user.
|
|
function set_user_password {
|
|
local username=$1
|
|
local password=$2
|
|
|
|
local elasticsearch_host="${ELASTICSEARCH_HOST:-elasticsearch}"
|
|
|
|
local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}'
|
|
"http://${elasticsearch_host}:9200/_security/user/${username}/_password"
|
|
'-X' 'POST'
|
|
'-H' 'Content-Type: application/json'
|
|
'-d' "{\"password\" : \"${password}\"}"
|
|
)
|
|
|
|
if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then
|
|
args+=( '-u' "elastic:${ELASTIC_PASSWORD}" )
|
|
fi
|
|
|
|
local -i result=1
|
|
local output
|
|
|
|
output="$(curl "${args[@]}")"
|
|
if [[ "${output: -3}" -eq 200 ]]; then
|
|
result=0
|
|
fi
|
|
|
|
if ((result)); then
|
|
echo -e "\n${output::-3}\n"
|
|
fi
|
|
|
|
return $result
|
|
}
|
|
|
|
# Create the given Elasticsearch user.
|
|
function create_user {
|
|
local username=$1
|
|
local password=$2
|
|
local role=$3
|
|
|
|
local elasticsearch_host="${ELASTICSEARCH_HOST:-elasticsearch}"
|
|
|
|
local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}'
|
|
"http://${elasticsearch_host}:9200/_security/user/${username}"
|
|
'-X' 'POST'
|
|
'-H' 'Content-Type: application/json'
|
|
'-d' "{\"password\":\"${password}\",\"roles\":[\"${role}\"]}"
|
|
)
|
|
|
|
if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then
|
|
args+=( '-u' "elastic:${ELASTIC_PASSWORD}" )
|
|
fi
|
|
|
|
local -i result=1
|
|
local output
|
|
|
|
output="$(curl "${args[@]}")"
|
|
if [[ "${output: -3}" -eq 200 ]]; then
|
|
result=0
|
|
fi
|
|
|
|
if ((result)); then
|
|
echo -e "\n${output::-3}\n"
|
|
fi
|
|
|
|
return $result
|
|
}
|
|
|
|
# Ensure that the given Elasticsearch role is up-to-date, create it if required.
|
|
function ensure_role {
|
|
local name=$1
|
|
local body=$2
|
|
|
|
local elasticsearch_host="${ELASTICSEARCH_HOST:-elasticsearch}"
|
|
|
|
local -a args=( '-s' '-D-' '-m15' '-w' '%{http_code}'
|
|
"http://${elasticsearch_host}:9200/_security/role/${name}"
|
|
'-X' 'POST'
|
|
'-H' 'Content-Type: application/json'
|
|
'-d' "$body"
|
|
)
|
|
|
|
if [[ -n "${ELASTIC_PASSWORD:-}" ]]; then
|
|
args+=( '-u' "elastic:${ELASTIC_PASSWORD}" )
|
|
fi
|
|
|
|
local -i result=1
|
|
local output
|
|
|
|
output="$(curl "${args[@]}")"
|
|
if [[ "${output: -3}" -eq 200 ]]; then
|
|
result=0
|
|
fi
|
|
|
|
if ((result)); then
|
|
echo -e "\n${output::-3}\n"
|
|
fi
|
|
|
|
return $result
|
|
}
|