mirror of https://git.envs.net/envs/ops.git
Merge branch 'dev_users_info'
This commit is contained in:
commit
61ab1d6b3f
|
@ -19,6 +19,47 @@ TMP_JSON='/tmp/users_info.json_tmp'
|
|||
|
||||
clear_lastline() { sed -i '$ s/,$//' "$TMP_JSON" ; }
|
||||
|
||||
|
||||
progress_userarray() {
|
||||
for field in "${!line_to_set[@]}"; do
|
||||
field_name="${field//,*/}"
|
||||
field_count="${field//*,/}"
|
||||
|
||||
if [[ ":${field_is_array[*]}:" =~ $field_name ]] && ! [[ ":${field_finished[*]}:" =~ $field_name ]]; then
|
||||
# begin of user def. array
|
||||
if [ -z "$field_in_progress" ] && [ "$field_count" -eq 0 ]; then
|
||||
fin_count='0'
|
||||
field_in_progress="$field_name"
|
||||
cat << EOM >> "$TMP_JSON"
|
||||
"$field_name": [
|
||||
"${line_to_set[$field]}",
|
||||
EOM
|
||||
elif [ "$field_in_progress" = "$field_name" ] && [ "$field_count" = "$(( $fin_count + 1 ))" ]; then
|
||||
# continue user def. array
|
||||
fin_count="$(( $fin_count + 1 ))"
|
||||
cat << EOM >> "$TMP_JSON"
|
||||
"${line_to_set[$field]}",
|
||||
EOM
|
||||
if [ "$field_count" = "${hc_field_entry[$field_name]}" ]; then
|
||||
# end of user def. array
|
||||
# remove trailing ',' on last user entry
|
||||
clear_lastline
|
||||
cat << EOM >> "$TMP_JSON"
|
||||
],
|
||||
EOM
|
||||
unset field_in_progress
|
||||
field_finished+=( "$field_name" )
|
||||
else
|
||||
progress_userarray
|
||||
fi
|
||||
elif ! [ "$field_in_progress" = "$field_name" ] && ! [[ ":${field_queue[*]}:" =~ $field_name ]]; then
|
||||
field_queue+=( "$field_name" )
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
cat << EOM > "$TMP_JSON"
|
||||
{
|
||||
"timestamp": "$(date +'%s')",
|
||||
|
@ -116,35 +157,39 @@ EOM
|
|||
fi
|
||||
# user custom infos from .envs file (max. 10 entrys)
|
||||
if [ -f "$INFO_FILE" ]; then
|
||||
count_entry='0' # use to limit entrys
|
||||
count_field_entry='0' # use to separat array line by line
|
||||
count_entry='0'
|
||||
|
||||
unset field_exists ; declare -a field_exists=() # contains field names to limit entrys
|
||||
unset field_is_array ; declare -a field_is_array=() # contains array fields to printf correct json entrys
|
||||
unset line_to_set ; declare -A line_to_set # contains user info lines
|
||||
unset hc_field_entry ; declare -A hc_field_entry # contains highest_count_field_entry
|
||||
|
||||
# check 'INFO_FILE' and add entrys to 'line_to_set' array
|
||||
while read -r LINE ; do
|
||||
if [[ -n "$LINE" ]] && ! [[ "$LINE" = '#'* ]] \
|
||||
if [ -n "$LINE" ] && ! [[ "$LINE" = '#'* ]] \
|
||||
&& ! [[ "$LINE" = 'desc='* ]] && ! [[ "$LINE" = 'ssh_pubkey='* ]]; then
|
||||
user_field="${LINE//=*/}"
|
||||
user_value="${LINE//*=/}"
|
||||
|
||||
if ! [[ ":${field_exists[*]}:" =~ $user_field ]]; then
|
||||
# entry will be a single line
|
||||
count_entry="$(( "$count_entry" + 1 ))"; [ "$count_entry" -le '10' ] || continue
|
||||
count_field_entry='0'
|
||||
count_entry="$(( "$count_entry" + 1 ))" ; [ "$count_entry" -lt '10' ] || continue
|
||||
|
||||
field_exists+=( "$user_field" )
|
||||
line_to_set["$user_field","$count_field_entry"]+="$user_value"
|
||||
else
|
||||
# entry will be a array
|
||||
# entry will be a array (max. 32 entrys)
|
||||
if ! [[ ":${field_is_array[*]}:" =~ $user_field ]]; then
|
||||
field_is_array+=( "$user_field" )
|
||||
fi
|
||||
count_field_entry="$(( "$count_field_entry" +1 ))"
|
||||
count_field_entry="$(( "$count_field_entry" +1 ))" ; [ "$count_field_entry" -lt '32' ] || continue
|
||||
|
||||
hc_field_entry[$user_field]="$count_field_entry"
|
||||
line_to_set["$user_field","$count_field_entry"]+="$user_value"
|
||||
fi
|
||||
fi
|
||||
done <<< "$(tac "$INFO_FILE")" # read file from buttom
|
||||
done < "$INFO_FILE"
|
||||
|
||||
# add users custom entrys from line_to_set (single lines before arrays)
|
||||
#
|
||||
|
@ -158,40 +203,21 @@ EOM
|
|||
EOM
|
||||
fi
|
||||
done
|
||||
|
||||
#
|
||||
# array line entrys
|
||||
field_in_progress=''
|
||||
unset field_queue ; declare -a field_queue=()
|
||||
unset field_finished ; declare -a field_finished=()
|
||||
|
||||
for field in "${!line_to_set[@]}"; do
|
||||
field_name="${field//,*/}"
|
||||
field_count="${field//*,/}"
|
||||
progress_userarray
|
||||
|
||||
if [[ ":${field_is_array[*]}:" =~ $field_name ]]; then
|
||||
# begin of user def. array
|
||||
if ! [ "$field_in_progress" = "$field_name" ]; then
|
||||
field_in_progress="$field_name"
|
||||
|
||||
cat << EOM >> "$TMP_JSON"
|
||||
"$field_name": [
|
||||
"${line_to_set[$field]}",
|
||||
EOM
|
||||
else
|
||||
# continue user def. array
|
||||
cat << EOM >> "$TMP_JSON"
|
||||
"${line_to_set[$field]}",
|
||||
EOM
|
||||
if [ "$field_count" -eq '0' ]; then
|
||||
# end of user def. array
|
||||
# remove trailing ',' on last user entry
|
||||
unset field_in_progress
|
||||
clear_lastline
|
||||
cat << EOM >> "$TMP_JSON"
|
||||
],
|
||||
EOM
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ -n "${line_to_set[*]}" ]; then
|
||||
# shellcheck disable=SC2034
|
||||
for x in "${!field_queue[@]}"; do
|
||||
progress_userarray
|
||||
done
|
||||
fi
|
||||
|
||||
# ssh
|
||||
# only print ssh-pubkey if user has enabled
|
||||
|
@ -213,7 +239,6 @@ EOM
|
|||
# remove trailing ',' (no ssh-pubkey print out)
|
||||
clear_lastline
|
||||
fi
|
||||
## if line 118
|
||||
else
|
||||
# no "$INFO_FILE" file
|
||||
# remove trailing ',' for the last user entry
|
||||
|
|
Loading…
Reference in New Issue