Skip to content

Commit 883dc32

Browse files
committed
changes:
1. handle vm hostname change for dns registration 2. generate event for dns name collision 3. remove dns record lifecycle subscriber
1 parent 3567819 commit 883dc32

File tree

8 files changed

+159
-209
lines changed

8 files changed

+159
-209
lines changed

api/src/main/java/com/cloud/event/EventTypes.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,7 @@ public class EventTypes {
877877
public static final String EVENT_DNS_ZONE_DELETE = "DNS.ZONE.DELETE";
878878
public static final String EVENT_DNS_RECORD_CREATE = "DNS.RECORD.CREATE";
879879
public static final String EVENT_DNS_RECORD_DELETE = "DNS.RECORD.DELETE";
880+
public static final String EVENT_DNS_NAME_COLLISION = "DNS.NAME.COLLISION";
880881

881882
static {
882883

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,6 +1376,7 @@ public class ApiConstants {
13761376
public static final String INSTANCE_ID = "instanceId";
13771377
public static final String OLD_STATE = "oldState";
13781378
public static final String NEW_STATE = "newState";
1379+
public static final String OLD_HOST_NAME = "oldHostName";
13791380

13801381

13811382
public static final String PARAMETER_DESCRIPTION_ACTIVATION_RULE = "Quota tariff's activation rule. It can receive a JS script that results in either " +

api/src/main/java/org/apache/cloudstack/dns/DnsProvider.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@
2424
import com.cloud.utils.component.Adapter;
2525

2626
public interface DnsProvider extends Adapter {
27-
28-
interface Topics {
29-
String DNS_RECORD_LIFECYCLE = "dns.record.lifecycle";
30-
}
31-
3227
DnsProviderType getProviderType();
3328

3429
// Validates connectivity to the server

api/src/main/java/org/apache/cloudstack/dns/DnsProviderManager.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,9 @@
3737
import org.apache.cloudstack.api.response.DnsZoneResponse;
3838
import org.apache.cloudstack.api.response.ListResponse;
3939

40-
import com.cloud.network.Network;
4140
import com.cloud.user.Account;
4241
import com.cloud.utils.component.Manager;
4342
import com.cloud.utils.component.PluggableService;
44-
import com.cloud.vm.Nic;
45-
import com.cloud.vm.VirtualMachine;
4643

4744
public interface DnsProviderManager extends Manager, PluggableService {
4845

@@ -75,8 +72,6 @@ public interface DnsProviderManager extends Manager, PluggableService {
7572

7673
boolean disassociateZoneFromNetwork(DisassociateDnsZoneFromNetworkCmd cmd);
7774

78-
void deleteDnsRecordForVM(VirtualMachine instance, Network network, Nic nic);
79-
8075
void checkDnsServerPermission(Account caller, DnsServer dnsServer);
8176

8277
void checkDnsZonePermission(Account caller, DnsZone dnsZone);

engine/api/src/main/java/com/cloud/vm/VirtualMachineManager.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ public interface VirtualMachineManager extends Manager {
112112

113113
interface Topics {
114114
String VM_POWER_STATE = "vm.powerstate";
115-
String VM_LIFECYCLE = "vm.lifecycle";
115+
String VM_LIFECYCLE_STATE = "vm.lifecycle.state";
116+
String VM_ACTION = "vm.action";
116117
}
117118

118119
/**

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818

1919
import static com.cloud.event.EventTypes.EVENT_NIC_CREATE;
2020
import static com.cloud.event.EventTypes.EVENT_NIC_DELETE;
21+
import static com.cloud.event.EventTypes.EVENT_VM_UPDATE;
2122
import static com.cloud.hypervisor.Hypervisor.HypervisorType.Functionality;
2223
import static com.cloud.storage.Volume.IOPS_LIMIT;
2324
import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
24-
import static com.cloud.vm.VirtualMachineManager.Topics.VM_LIFECYCLE;
25+
import static com.cloud.vm.VirtualMachineManager.Topics.VM_ACTION;
26+
import static com.cloud.vm.VirtualMachineManager.Topics.VM_LIFECYCLE_STATE;
2527
import static org.apache.cloudstack.api.ApiConstants.MAX_IOPS;
2628
import static org.apache.cloudstack.api.ApiConstants.MIN_IOPS;
2729

@@ -163,6 +165,7 @@
163165
import org.apache.commons.lang3.StringUtils;
164166
import org.apache.commons.lang3.builder.ToStringBuilder;
165167
import org.apache.commons.lang3.builder.ToStringStyle;
168+
import org.apache.logging.log4j.util.Strings;
166169
import org.jetbrains.annotations.NotNull;
167170
import org.jetbrains.annotations.Nullable;
168171
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -1554,7 +1557,7 @@ private void publishVmLifecycleMessageBus(UserVm instance, @Nullable VirtualMach
15541557
event.put(ApiConstants.OLD_STATE, oldState != null ? oldState : State.Unknown);
15551558
event.put(ApiConstants.NEW_STATE, newState);
15561559
event.put(ApiConstants.TIME_STAMP, System.currentTimeMillis());
1557-
messageBus.publish(_name, VM_LIFECYCLE, PublishScope.GLOBAL, event);
1560+
messageBus.publish(_name, VM_LIFECYCLE_STATE, PublishScope.GLOBAL, event);
15581561
} catch (Exception ex) {
15591562
logger.warn("Failed to publish lifecycle event for Instance: {}", instance.getUuid(), ex);
15601563
}
@@ -1576,6 +1579,24 @@ private void publishNicEventMessageBus(Long instanceId, Long accountId, Long nic
15761579
}
15771580
}
15781581

1582+
private void publishVmHostNameUpdateMessageBus(long instanceId, String oldHostName, String hostName) {
1583+
if (Strings.isBlank(hostName) || oldHostName.equalsIgnoreCase(hostName)) {
1584+
return;
1585+
}
1586+
try {
1587+
Map<String, Object> event = new HashMap<>();
1588+
event.put(ApiConstants.EVENT_ID, UUID.randomUUID().toString());
1589+
event.put(ApiConstants.INSTANCE_ID, instanceId);
1590+
event.put(ApiConstants.OLD_HOST_NAME, oldHostName);
1591+
event.put(ApiConstants.HOST_NAME, hostName);
1592+
event.put(ApiConstants.EVENT_TYPE, EVENT_VM_UPDATE);
1593+
event.put(ApiConstants.TIME_STAMP, System.currentTimeMillis());
1594+
messageBus.publish(_name, VM_ACTION, PublishScope.GLOBAL, event);
1595+
} catch (Exception ex) {
1596+
logger.error("Failed to publish Instance action event for ID: {}", instanceId, ex);
1597+
}
1598+
}
1599+
15791600
/**
15801601
* Set NIC as default if VM has no default NIC
15811602
* @param vmInstance VM instance to be checked
@@ -2964,7 +2985,7 @@ protected void updateVmExtraConfig(UserVmVO userVm, String extraConfig, boolean
29642985
}
29652986

29662987
@Override
2967-
@ActionEvent(eventType = EventTypes.EVENT_VM_UPDATE, eventDescription = "updating Vm")
2988+
@ActionEvent(eventType = EVENT_VM_UPDATE, eventDescription = "updating Vm")
29682989
public UserVm updateVirtualMachine(UpdateVMCmd cmd) throws ResourceUnavailableException, InsufficientCapacityException {
29692990
validateInputsAndPermissionForUpdateVirtualMachineCommand(cmd);
29702991

@@ -3340,6 +3361,7 @@ public UserVm updateVirtualMachine(long id, String displayName, String group, Bo
33403361
}
33413362

33423363
if (State.Running == vm.getState()) {
3364+
publishVmHostNameUpdateMessageBus(vm.getId(), vm.getHostName(), hostName);
33433365
updateDns(vm, hostName);
33443366
}
33453367

0 commit comments

Comments
 (0)