[libvirt] [PATCH] parallels: delete old networks in prlsdkDoApplyConfig before adding new ones

Dmitry Guryanov dguryanov at odin.com
Tue Apr 7 15:50:47 UTC 2015


On 04/06/2015 06:53 PM, Maxim Nestratov wrote:
> In order to change an existing domain we delete all existing devices and add
> new from scratch. In case of network devices we should also delete corresponding
> virtual networks (if any) before removing actual devices from xml. In the patch,
> we do it by extending prlsdkDoApplyConfig with a new parameter, which stands for
> old xml, and calling prlsdkDelNet every time old xml is specified.

ACK

>
> Signed-off-by: Maxim Nestratov <mnestratov at parallels.com>
> ---
>   src/parallels/parallels_sdk.c |   24 +++++++++++++++---------
>   1 files changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/src/parallels/parallels_sdk.c b/src/parallels/parallels_sdk.c
> index c36b772..64a2d15 100644
> --- a/src/parallels/parallels_sdk.c
> +++ b/src/parallels/parallels_sdk.c
> @@ -2935,7 +2935,8 @@ prlsdkAddFS(PRL_HANDLE sdkdom, virDomainFSDefPtr fs)
>   static int
>   prlsdkDoApplyConfig(virConnectPtr conn,
>                       PRL_HANDLE sdkdom,
> -                    virDomainDefPtr def)
> +                    virDomainDefPtr def,
> +                    virDomainDefPtr olddef)
>   {
>       PRL_RESULT pret;
>       size_t i;
> @@ -2997,6 +2998,16 @@ prlsdkDoApplyConfig(virConnectPtr conn,
>       if (prlsdkRemoveBootDevices(sdkdom) < 0)
>           goto error;
>   
> +    if(olddef) {
> +        for (i = 0; i < olddef->nnets; i++)
> +            prlsdkDelNet(conn->privateData, olddef->nets[i]);
> +    }
> +
> +    for (i = 0; i < def->nnets; i++) {
> +        if (prlsdkAddNet(sdkdom, conn->privateData, def->nets[i]) < 0)
> +           goto error;
> +    }
> +
>       if (prlsdkApplyGraphicsParams(sdkdom, def) < 0)
>           goto error;
>   
> @@ -3008,11 +3019,6 @@ prlsdkDoApplyConfig(virConnectPtr conn,
>               goto error;
>       }
>   
> -    for (i = 0; i < def->nnets; i++) {
> -        if (prlsdkAddNet(sdkdom, conn->privateData, def->nets[i]) < 0)
> -           goto error;
> -    }
> -
>       for (i = 0; i < def->ndisks; i++) {
>           bool bootDisk = false;
>   
> @@ -3060,7 +3066,7 @@ prlsdkApplyConfig(virConnectPtr conn,
>       if (PRL_FAILED(waitJob(job, privconn->jobTimeout)))
>           return -1;
>   
> -    ret = prlsdkDoApplyConfig(conn, sdkdom, new);
> +    ret = prlsdkDoApplyConfig(conn, sdkdom, new, dom->def);
>   
>       if (ret == 0) {
>           job = PrlVm_CommitEx(sdkdom, PVCF_DETACH_HDD_BUNDLE);
> @@ -3100,7 +3106,7 @@ prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def)
>       pret = PrlVmCfg_SetOfflineManagementEnabled(sdkdom, 0);
>       prlsdkCheckRetGoto(pret, cleanup);
>   
> -    ret = prlsdkDoApplyConfig(conn, sdkdom, def);
> +    ret = prlsdkDoApplyConfig(conn, sdkdom, def, NULL);
>       if (ret)
>           goto cleanup;
>   
> @@ -3162,7 +3168,7 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
>   
>       }
>   
> -    ret = prlsdkDoApplyConfig(conn, sdkdom, def);
> +    ret = prlsdkDoApplyConfig(conn, sdkdom, def, NULL);
>       if (ret)
>           goto cleanup;
>   


-- 
Dmitry Guryanov




More information about the libvir-list mailing list