/
VCenterEventHandler.java
140 lines (120 loc) · 4.81 KB
/
VCenterEventHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/**
* Copyright (c) 2015 Juniper Networks, Inc. All rights reserved.
*
* @author Andra Cismaru
*
* Handles functionality related to events received from VCenter
*/
package net.juniper.contrail.vcenter;
import org.apache.log4j.Logger;
import com.google.common.base.Throwables;
import com.vmware.vim25.DVPortgroupCreatedEvent;
import com.vmware.vim25.DVPortgroupDestroyedEvent;
import com.vmware.vim25.DVPortgroupReconfiguredEvent;
import com.vmware.vim25.DVPortgroupRenamedEvent;
import com.vmware.vim25.Event;
import com.vmware.vim25.VmClonedEvent;
import com.vmware.vim25.VmCreatedEvent;
import com.vmware.vim25.VmDeployedEvent;
import com.vmware.vim25.VmMacAssignedEvent;
import com.vmware.vim25.VmMacChangedEvent;
import com.vmware.vim25.DrsVmMigratedEvent;
import com.vmware.vim25.VmMigratedEvent;
import com.vmware.vim25.VmPoweredOffEvent;
import com.vmware.vim25.VmPoweredOnEvent;
import com.vmware.vim25.DrsVmPoweredOnEvent;
import com.vmware.vim25.VmReconfiguredEvent;
import com.vmware.vim25.VmRemovedEvent;
import com.vmware.vim25.VmRenamedEvent;
public class VCenterEventHandler {
VCenterDB vcenterDB;
VncDB vncDB;
private static final Logger s_logger =
Logger.getLogger(VCenterEventHandler.class);
VCenterEventHandler(VCenterDB vcenterDB, VncDB vncDB) {
this.vcenterDB = vcenterDB;
this.vncDB = vncDB;
}
public void handle(Event event) throws Exception {
s_logger.info("Process event " + event.getFullFormattedMessage());
if (event instanceof VmCreatedEvent
|| event instanceof VmClonedEvent
|| event instanceof VmDeployedEvent
|| event instanceof VmReconfiguredEvent
|| event instanceof VmRenamedEvent
|| event instanceof VmMacChangedEvent
|| event instanceof VmMacAssignedEvent
|| event instanceof DrsVmMigratedEvent
|| event instanceof DrsVmPoweredOnEvent
|| event instanceof VmMigratedEvent
|| event instanceof VmPoweredOnEvent
|| event instanceof VmPoweredOffEvent) {
handleVmUpdateEvent(event);
} else if (event instanceof VmRemovedEvent) {
handleVmDeleteEvent(event);
} else if (event instanceof DVPortgroupCreatedEvent
|| event instanceof DVPortgroupReconfiguredEvent
|| event instanceof DVPortgroupRenamedEvent) {
handleNetworkUpdateEvent(event);
} else if (event instanceof DVPortgroupDestroyedEvent) {
handleNetworkDeleteEvent(event);
} else {
handleEvent(event);
}
s_logger.info("Done processing event " + event.getFullFormattedMessage());
}
private void handleVmUpdateEvent(Event event) throws Exception {
VirtualMachineInfo newVmInfo = null;
try {
newVmInfo = new VirtualMachineInfo(event, vcenterDB, vncDB);
} catch (Exception e) {
s_logger.info("Skipping update event " + event.getClass().getName()
+" for missing VM, due to exception " + e);
s_logger.error(Throwables.getStackTraceAsString(e));
return;
}
VirtualMachineInfo oldVmInfo = MainDB.getVmById(newVmInfo.getUuid());
if (oldVmInfo != null) {
oldVmInfo.update(newVmInfo, vncDB);
} else {
newVmInfo.create(vncDB);
}
}
private void handleVmDeleteEvent(Event event) throws Exception {
VirtualMachineInfo vmInfo = MainDB.getVmByName(event.getVm().getName());
if (vmInfo == null) {
return;
}
VCenterNotify.unwatchVm(vmInfo);
vmInfo.delete(vncDB);
}
private void handleNetworkUpdateEvent(Event event) throws Exception {
VirtualNetworkInfo newVnInfo = null;
try {
newVnInfo = new VirtualNetworkInfo(event, vcenterDB, vncDB);
} catch (Exception e) {
s_logger.info("Skipping update event " + event.getClass().getName() +
" for missing network, due to exception " + e);
s_logger.error(Throwables.getStackTraceAsString(e));
return;
}
VirtualNetworkInfo oldVnInfo = MainDB.getVnByName(newVnInfo.getName());
if (oldVnInfo != null) {
oldVnInfo.update(newVnInfo, vncDB);
} else {
newVnInfo.create(vncDB);
VCenterNotify.watchVn(newVnInfo);
}
}
private void handleNetworkDeleteEvent(Event event) throws Exception {
VirtualNetworkInfo vnInfo = MainDB.getVnByName(event.getNet().getName());
if (vnInfo == null) {
return;
}
VCenterNotify.unwatchVn(vnInfo);
vnInfo.delete(vncDB);
}
private void handleEvent(Event event) {
s_logger.error("Event "+ event.getClass().getName() + " received, but not handled.");
}
}