[Libguestfs] [RFC PATCH] virt-sysprep:add ipconfig for preparation

Wanlong Gao gaowanlong at cn.fujitsu.com
Mon Mar 5 15:21:54 UTC 2012


Hi Rich,

If have time, please give a comment ;)

Thanks
-Wanlong Gao

> Hi Rich:
> I just send a patch to request for your comments,
> then will do further work about this.
> things like this:
> 
> [root at Allen ~]# virt-sysprep --ipconfig="eth0:192.168.1.2,255.255.255.0,192.168.1.1" --enable=ipconfig -d clone-6u1
> 
> OR
> 
> [root at Allen ~]# virt-sysprep  -d clone-6u1
> 
> Please comments.
> 
> Thanks
> -Wanlong Gao
> 
> Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com>
> ---
>  clone/virt-sysprep.in |   50 ++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 49 insertions(+), 1 deletion(-)
> 
> diff --git a/clone/virt-sysprep.in b/clone/virt-sysprep.in
> index d505532..e4486d0 100644
> --- a/clone/virt-sysprep.in
> +++ b/clone/virt-sysprep.in
> @@ -26,7 +26,7 @@ version="@PACKAGE_VERSION@"
>  
>  TEMP=`getopt \
>          -o a:c:d:vVx \
> -        --long help,add:,connect:,domain:,enable:,format::,hostname:,list-operations,selinux-relabel,no-selinux-relabel,verbose,version \
> +        --long help,add:,connect:,domain:,enable:,format::,hostname:,ipconfig:,list-operations,selinux-relabel,no-selinux-relabel,verbose,version \
>          -n $program -- "$@"`
>  if [ $? != 0 ]; then
>      echo "$program: problem parsing the command line arguments"
> @@ -91,6 +91,9 @@ while true; do
>          --hostname)
>              hostname_param="$2"
>              shift 2;;
> +        --ipconfig)
> +            ipconfig_param="$2"
> +            shift 2;;
>          --list-operations)
>              enable=list
>              shift;;
> @@ -135,6 +138,7 @@ if [ -z "$enable" ]; then
>      dhcp_client_state=yes
>      dhcp_server_state=yes
>      hostname=yes
> +    ipconfig=yes
>      logfiles=yes
>      mail_spool=yes
>      net_hwaddr=yes
> @@ -150,6 +154,7 @@ elif [ "$enable" = "list" ]; then
>      echo "dhcp-client-state"
>      echo "dhcp-server-state"
>      echo "hostname"
> +    echo "ipconfig"
>      echo "logfiles"
>      echo "mail-spool"
>      echo "net-hwaddr"
> @@ -168,6 +173,7 @@ else
>              dhcp-client-state)     dhcp_client_state=yes ;;
>              dhcp-server-state)     dhcp_server_state=yes ;;
>              hostname)              hostname=yes ;;
> +            ipconfig)              ipconfig=yes ;;
>              logfiles)              logfiles=yes ;;
>              mail-spool)            mail_spool=yes ;;
>              net-hwaddr)            net_hwaddr=yes ;;
> @@ -286,6 +292,48 @@ if [ "$hostname" = "yes" ]; then
>      esac
>  fi
>  
> +if [ "$ipconfig" = "yes" ]; then
> +    case "$type/$distro" in
> +        linux/fedora|linux/rhel)
> +            if [ -d $mnt/etc/sysconfig/network-scripts ]; then
> +                if [ -z $ipconfig_param ]; then
> +                    rm_ipconfig ()
> +                    {
> +                        sed '/^IPADDR=/d;/^BOOTPROTO=/d;/^NETMASK=/d;/^GATEWAY=/d;/^DNS/d' \
> +                             < "$1" > "$1.new"
> +                        echo "BOOTPROTO=dhcp" >> "$1.new"
> +                        mv -f "$1.new" "$1"
> +                    }
> +                    export -f rm_ipconfig
> +                    find $mnt/etc/sysconfig/network-scripts \
> +                         -name 'ifcfg-*' -type f \
> +                         -exec bash -c 'rm_ipconfig "$0"' {} \;
> +                else
> +                    for (( i=1; i<8 ; i+=2 )); do
> +                        __device=$(echo "$ipconfig_param" | awk -v j=$i -F: '{print $j}')
> +                        if [ -z $__device ]; then
> +                            break
> +                        fi
> +                        __ipconfig=$(echo "$ipconfig_param" | awk -v j=$((i+1)) -F: '{print $j}')
> +                        __config_file=$(echo "$mnt/etc/sysconfig/network-scripts/ifcfg-$__device")
> +                        if [ -e $__config_file ]; then
> +                            __ip=$(echo "$__ipconfig" | awk -F, '{print $1}')
> +                            __mask=$(echo "$__ipconfig" | awk -F, '{print $2}')
> +                            __gw=$(echo "$__ipconfig" | awk -F, '{print $3}')
> +                            sed '/^IPADDR=/d;/^BOOTPROTO=/d;/^NETMASK=/d;/^GATEWAY=/d;/^DNS/d' \
> +                                 < "$__config_file" > "$__config_file.new"
> +                            echo "IPADDR=$__ip" >> "$__config_file.new"
> +                            echo "BOOTPROTO=static" >> "$__config_file.new"
> +                            echo "NETMASK=$__mask" >> "$__config_file.new"
> +                            echo "GATEWAY=$__gw" >> "$__config_file.new"
> +                            mv -f "$__config_file.new" "$__config_file"
> +                        fi
> +                    done
> +                fi
> +            fi
> +    esac
> +fi
> +
>  if [ "$logfiles" = "yes" ]; then
>      case "$type" in
>          linux)





More information about the Libguestfs mailing list