The ipv6 address has the special character colon ":", so we can use the new function to pick it out. We can use the new function to parse the passed parameter. The passed parameter is hostname/domain, if it is satisfied with the condition that it is without colon ":", and contanis the [a-zA-Z].
Add a new function to simplify to get the ip address, if the specified address is a domain/hostname in /etc/kdump.conf. The function will parse the passed parameter, and use the "getent ahost" to get the ip address, if passed parameter is domain/hostname.
Signed-off-by: Minfei Huang mhuang@redhat.com --- dracut-module-setup.sh | 1 + kdump-lib.sh | 48 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 11 deletions(-)
diff --git a/dracut-module-setup.sh b/dracut-module-setup.sh index 8d451b4..f5fce2f 100755 --- a/dracut-module-setup.sh +++ b/dracut-module-setup.sh @@ -628,6 +628,7 @@ install() { inst "/bin/dd" "/bin/dd" inst "/bin/tail" "/bin/tail" inst "/bin/date" "/bin/date" + inst "/bin/getent" "/bin/getent" inst "/bin/sync" "/bin/sync" inst "/bin/cut" "/bin/cut" inst "/sbin/makedumpfile" "/sbin/makedumpfile" diff --git a/kdump-lib.sh b/kdump-lib.sh index b886c5d..cc33e01 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -170,21 +170,47 @@ get_remote_host() echo $_config_val }
-# check the remote server ip address tpye -is_ipv6_target() +# Convert hostname to ip address, echo the original value if $1 is already an ip address. +# $1: hostname or ip address +get_ip_address() { - local _server _server_tmp + local _ip_address + + _ip_address=`getent ahosts $1 | head -n 1 | cut -d' ' -f1` + _ip_address=${_ip_address:-$1} + echo $_ip_address +} + +# the ipv6 address has the special character colon ":", so we can pick it out. +# we can pass a ip address, if ipv6 address, will return ipv6 address, +# otherwise return NULL +is_ipv6_host() +{ + local _addr=$(get_ip_address $1) + echo $_addr | grep -q ":" +} + +get_network_target() +{ + local _target
if is_ssh_dump_target; then - _server=`get_option_value ssh` + _target=`get_option_value ssh` elif is_nfs_dump_target; then - _server=`get_option_value nfs` + _target=`get_option_value nfs` fi
- [ -z "$_server" ] && return 1 - _server=`get_remote_host $_server` - _server_tmp=$_server - _server=`getent ahosts $_server | head -n 1 | cut -d' ' -f1` - _server=${_server:-$_server_tmp} - echo $_server | grep -q ":" + [ -z "$_target" ] && return + + _target=`get_remote_host $_target` + echo $_target +} + +# check the remote server ip address tpye +is_ipv6_target() +{ + local _target=$(get_network_target) + + [ -z "$_target" ] && return 1 + echo $(is_ipv6_host $_target) }