mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Co-authored-by: John Bampton <jbampton@users.noreply.github.com> Co-authored-by: dahn <daan@onecht.net>
147 lines
4.7 KiB
Java
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);
|
|
}
|