%PDF- %PDF-
| Direktori : /opt/webdir/bin/menu/01_hosts/ |
| Current File : //opt/webdir/bin/menu/01_hosts/01_add_host.sh |
#!/bin/bash
PROGNAME=$(basename $0)
PROGPATH=$(dirname $0)
. $PROGPATH/functions.sh || exit 1
create_host() {
local host_addr="$1"
# test if host_addr is IP
is_ip_addr=$(echo "$host_addr" | egrep -c '^([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}$')
# test if hostname contains correct chars
if [[ $is_ip_addr -eq 0 ]]; then
test_hostname "$host_addr"
[[ $test_hostname -eq 0 ]] && return 1
fi
local host_user=root
local host_pass= # password for ssh connect
local host_iden= # unique identifier for the server
# test if defined host exist in server list (small check without name resolution)
[[ -z "$POOL_SERVER_LIST" ]] && cache_pool_info
is_host_in_pool=$(echo "$POOL_SERVER_LIST" | \
grep -c "\(^$host_addr:\|:$host_addr:\|=$host_addr\)")
[[ $DEBUG -gt 0 ]] && echo "$POOL_SERVER_LIST"
if [[ $is_host_in_pool -gt 0 ]]; then
print_message "$HM0200" "$(get_text "$HM0032" "$host_addr")" "" any_key
return 1
# host not found, try add it
else
if [[ $is_ip_addr -eq 0 ]]; then
print_message "$HM0033 (default: $host_addr): " \
"" "" host_iden "$host_addr"
else
print_message "$HM0033: " \
"" "" host_iden
fi
test_hostname "$host_iden"
[[ $test_hostname -eq 0 ]] && return 1
# get user password for ssh
print_message "$(get_text "$HM0034" "$host_user")" "" "-s" host_pass
# find out ANSIBLE_SSHKEY_PRIVATE and ANSIBLE_SSHKEY_PUBLIC
print_color_text "$(get_text "$HM0035" "$host_addr")"
copy_sshkey "$host_addr" "$host_user" "$host_pass"
copy_sshkey_rtn=$?
if [[ $copy_sshkey_rtn -gt 0 ]]; then
# check the error on the known to us: User must change password
if [[ $(echo "$ANSIBLE_COPY_MSG" | \
grep -ci "User must change password") -gt 0 ]]; then
# change user password
echo "$ANSIBLE_COPY_MSG"
change_password_viassh "$host_addr" "$host_user" "$host_pass"
change_password_viassh_rtn=$?
# try update
if [[ $change_password_viassh_rtn -gt 0 ]]; then
print_message "$HM0200" \
"$(get_text "$HM0036" "$ANSIBLE_CHPWD_MSG" "$log_changepwd")" \
'' any_key
return 1
# password is updated => try copy again
else
copy_sshkey "$host_addr" "$host_user" "$host_pass"
copy_sshkey_rtn=$?
if [[ $copy_sshkey_rtn -gt 0 ]]; then
print_message "$HM0200" \
"$(get_text "$HM0037" "$ANSIBLE_COPY_MSG" "$log_copy_keys")" \
'' any_key
return 1
fi
fi
# unknown error
else
print_message "$HM0200" \
"$(get_text "$HM0037" "$ANSIBLE_COPY_MSG" "$log_copy_keys")" \
'' any_key
return 1
fi
fi
fi
print_color_text "$(get_text "$HM0038" "$ANSIBLE_SSHKEY_PUBLIC" "$host_addr")"
# short name and server-id in ansible config
add_server_to_pool "$host_iden" "$host_addr"
add_server_to_pool_rtn=$?
if [[ $add_server_to_pool_rtn -gt 0 ]]; then
print_message "$HM0200" \
"$HM0039: $ANSIBLE_ADD_MSG" \
"" any_key
return 1
else
print_message "$HM0201" \
"$(get_text "$HM0040" "$host_iden" "$host_addr")" \
"" any_key
return 0
fi
}
# create host in the ansible config and copy ssh key on it
sub_menu() {
host_logo="$HM0041"
menu_00="$HM0042"
menu_01=" $HM0041"
HOST_MENU_SELECT=
until [[ -n "$HOST_MENU_SELECT" ]]; do
clear
echo -e "\t\t\t" $logo
echo -e "\t\t\t" $host_logo
echo
print_pool_info
# is there some task which can interrupted by adding new host (iptables and so on)
get_task_by_type '(common|monitor|mysql)' POOL_HOST_TASK_LOCK POOL_HOST_TASK_LIST
print_task_by_type '(common|monitor|mysql)' "$POOL_HOST_TASK_LOCK" "$POOL_HOST_TASK_LIST"
if [[ $POOL_HOST_TASK_LOCK -eq 1 ]]; then
menu_list="\n\t$menu_00"
else
menu_list="\n\t$menu_00\n\t$menu_01"
fi
print_menu
if [[ $POOL_HOST_TASK_LOCK -eq 1 ]]; then
print_message "$HM0202" '' '' HOST_MENU_SELECT 0
else
print_message "$HM0043" '' '' HOST_MENU_SELECT
fi
# process selection
case "$HOST_MENU_SELECT" in
"0") exit ;;
*) create_host "$HOST_MENU_SELECT" ;;
esac
[[ $? -eq 0 ]] && POOL_SERVER_LIST=
HOST_MENU_SELECT=
done
}
sub_menu