cloudstack/api/src/main/java/com/cloud/resource/RollingMaintenanceManager.java
Vishesh 594c70dde0
Sync precommit config from main (#7732)
Co-authored-by: John Bampton <jbampton@users.noreply.github.com>
Co-authored-by: dahn <daan@onecht.net>
2023-07-07 11:18:16 +02:00

147 lines
4.7 KiB
Java

// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package com.cloud.resource;
import com.cloud.host.Host;
import com.cloud.utils.Pair;
import com.cloud.utils.Ternary;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.api.command.admin.resource.StartRollingMaintenanceCmd;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.Configurable;
import java.util.Date;
import java.util.List;
public interface RollingMaintenanceManager extends Configurable {
ConfigKey<Integer> KvmRollingMaintenanceStageTimeout = new ConfigKey<>("Advanced", Integer.class,
"kvm.rolling.maintenance.stage.timeout", "1800",
"Wait timeout (in seconds) for a rolling maintenance stage update from hosts",
true, ConfigKey.Scope.Global);
ConfigKey<Integer> KvmRollingMaintenancePingInterval = new ConfigKey<>("Advanced", Integer.class,
"kvm.rolling.maintenance.ping.interval", "10",
"Ping interval in seconds between management server and hosts performing stages during rolling maintenance",
true, ConfigKey.Scope.Global);
ConfigKey<Integer> KvmRollingMaintenanceWaitForMaintenanceTimeout = new ConfigKey<>("Advanced", Integer.class,
"kvm.rolling.maintenance.wait.maintenance.timeout", "1800",
"Timeout (in seconds) to wait for a host preparing to enter maintenance mode",
true, ConfigKey.Scope.Global);
class HostSkipped {
private Host host;
private String reason;
public HostSkipped(Host host, String reason) {
this.host = host;
this.reason = reason;
}
public Host getHost() {
return host;
}
public void setHost(Host host) {
this.host = host;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
class HostUpdated {
private Host host;
private Date start;
private Date end;
private String outputMsg;
public HostUpdated(Host host, Date start, Date end, String outputMsg) {
this.host = host;
this.start = start;
this.end = end;
this.outputMsg = outputMsg;
}
public Host getHost() {
return host;
}
public void setHost(Host host) {
this.host = host;
}
public Date getStart() {
return start;
}
public void setStart(Date start) {
this.start = start;
}
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this.end = end;
}
public String getOutputMsg() {
return outputMsg;
}
public void setOutputMsg(String outputMsg) {
this.outputMsg = outputMsg;
}
}
enum Stage {
PreFlight, PreMaintenance, Maintenance, PostMaintenance;
public Stage next() {
switch (this) {
case PreFlight:
return PreMaintenance;
case PreMaintenance:
return Maintenance;
case Maintenance:
return PostMaintenance;
case PostMaintenance:
return null;
}
throw new CloudRuntimeException("Unexpected stage: " + this);
}
}
enum ResourceType {
Pod, Cluster, Zone, Host
}
/**
* Starts rolling maintenance as specified in cmd
* @param cmd command
* @return tuple: (SUCCESS, DETAILS, (HOSTS_UPDATED, HOSTS_SKIPPED))
*/
Ternary<Boolean, String, Pair<List<HostUpdated>, List<HostSkipped>>> startRollingMaintenance(StartRollingMaintenanceCmd cmd);
Pair<ResourceType, List<Long>> getResourceTypeIdPair(StartRollingMaintenanceCmd cmd);
}