mirror of
https://github.com/MichaelCade/90DaysOfDevOps.git
synced 2025-02-06 17:21:02 +07:00
86 lines
1.9 KiB
Bash
86 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
set -o pipefail
|
|
|
|
source "$(dirname "${BASH_SOURCE[0]}")/helpers.sh"
|
|
|
|
|
|
# --------------------------------------------------------
|
|
# Users declarations
|
|
|
|
declare -A users_passwords
|
|
users_passwords=(
|
|
[logstash_internal]="${LOGSTASH_INTERNAL_PASSWORD:-}"
|
|
[kibana_system]="${KIBANA_SYSTEM_PASSWORD:-}"
|
|
)
|
|
|
|
declare -A users_roles
|
|
users_roles=(
|
|
[logstash_internal]='logstash_writer'
|
|
)
|
|
|
|
# --------------------------------------------------------
|
|
# Roles declarations
|
|
|
|
declare -A roles_files
|
|
roles_files=(
|
|
[logstash_writer]='logstash_writer.json'
|
|
)
|
|
|
|
# --------------------------------------------------------
|
|
|
|
|
|
echo "-------- $(date) --------"
|
|
|
|
state_file="$(dirname ${BASH_SOURCE[0]})/state/.done"
|
|
if [[ -e "$state_file" ]]; then
|
|
log "State file exists at '${state_file}', skipping setup"
|
|
exit 0
|
|
fi
|
|
|
|
log 'Waiting for availability of Elasticsearch'
|
|
wait_for_elasticsearch
|
|
sublog 'Elasticsearch is running'
|
|
|
|
for role in "${!roles_files[@]}"; do
|
|
log "Role '$role'"
|
|
|
|
declare body_file
|
|
body_file="$(dirname "${BASH_SOURCE[0]}")/roles/${roles_files[$role]:-}"
|
|
if [[ ! -f "${body_file:-}" ]]; then
|
|
sublog "No role body found at '${body_file}', skipping"
|
|
continue
|
|
fi
|
|
|
|
sublog 'Creating/updating'
|
|
ensure_role "$role" "$(<"${body_file}")"
|
|
done
|
|
|
|
for user in "${!users_passwords[@]}"; do
|
|
log "User '$user'"
|
|
if [[ -z "${users_passwords[$user]:-}" ]]; then
|
|
sublog 'No password defined, skipping'
|
|
continue
|
|
fi
|
|
|
|
declare -i user_exists=0
|
|
user_exists="$(check_user_exists "$user")"
|
|
|
|
if ((user_exists)); then
|
|
sublog 'User exists, setting password'
|
|
set_user_password "$user" "${users_passwords[$user]}"
|
|
else
|
|
if [[ -z "${users_roles[$user]:-}" ]]; then
|
|
err ' No role defined, skipping creation'
|
|
continue
|
|
fi
|
|
|
|
sublog 'User does not exist, creating'
|
|
create_user "$user" "${users_passwords[$user]}" "${users_roles[$user]}"
|
|
fi
|
|
done
|
|
|
|
mkdir -p "$(dirname "${state_file}")"
|
|
touch "$state_file"
|