package org.zstack.compute.vm;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.zstack.core.db.DatabaseFacade;
import org.zstack.header.core.workflow.Flow;
import org.zstack.header.core.workflow.FlowRollback;
import org.zstack.header.core.workflow.FlowTrigger;
import org.zstack.header.network.l3.L3NetworkInventory;
import org.zstack.header.vm.VmInstanceConstant;
import org.zstack.header.vm.VmInstanceSpec;
import org.zstack.header.vm.VmInstanceVO;
import java.util.Map;
/**
* Created by frank on 7/19/2015.
*/
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
public class VmSetDefaultL3NetworkOnAttachingFlow implements Flow {
@Autowired
private DatabaseFacade dbf;
@Override
public void run(FlowTrigger trigger, Map data) {
VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString());
if (spec.getVmInventory().getDefaultL3NetworkUuid() != null) {
trigger.next();
return;
}
L3NetworkInventory l3 = spec.getL3Networks().get(0);
VmInstanceVO vm = dbf.findByUuid(spec.getVmInventory().getUuid(), VmInstanceVO.class);
vm.setDefaultL3NetworkUuid(l3.getUuid());
dbf.update(vm);
data.put(VmSetDefaultL3NetworkOnAttachingFlow.class, true);
trigger.next();
}
@Override
public void rollback(FlowRollback trigger, Map data) {
if (data.containsKey(VmSetDefaultL3NetworkOnAttachingFlow.class)) {
VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString());
VmInstanceVO vm = dbf.findByUuid(spec.getVmInventory().getUuid(), VmInstanceVO.class);
vm.setDefaultL3NetworkUuid(null);
dbf.update(vm);
}
trigger.rollback();
}
}