Tools.getString("HostBrowser.CRM.StandByOff"),
HostInfo.HOST_STANDBY_OFF_ICON,
ClusterBrowser.STARTING_PTEST_TOOLTIP,
new AccessMode(AccessMode.OP, AccessMode.NORMAL),
new AccessMode(AccessMode.OP, AccessMode.NORMAL))
.predicate(new Predicate() {
@Override
public boolean check() {
return !hostInfo.isStandby(runMode);
}
})
.enablePredicate(new EnablePredicate() {
@Override
public String check() {
if (!hostInfo.getHost().isCrmStatusOk()) {
return HostInfo.NO_PCMK_STATUS_STRING;
}
return null;
}
})
.addAction(new MenuAction() {
@Override
public void run(final String text) {
final Host dcHost = hostInfo.getBrowser().getClusterBrowser().getDCHost();
if (hostInfo.isStandby(runMode)) {
CRM.standByOff(dcHost, hostInfo.getHost(), runMode);
} else {
CRM.standByOn(dcHost, hostInfo.getHost(), runMode);
}
}
});
final ClusterBrowser cb = hostInfo.getBrowser().getClusterBrowser();
if (cb != null) {
final ButtonCallback standbyItemCallback = cb.new ClMenuItemCallback(hostInfo.getHost())
.addAction(new CallbackAction() {
@Override
public void run(final Host dcHost) {
if (hostInfo.isStandby(Application.RunMode.LIVE)) {
CRM.standByOff(dcHost, hostInfo.getHost(), Application.RunMode.TEST);
} else {
CRM.standByOn(dcHost, hostInfo.getHost(), Application.RunMode.TEST);
}
}
});
hostInfo.addMouseOverListener(standbyItem, standbyItemCallback);
}
items.add(standbyItem);
/* Migrate all services from this host. */
final MyMenuItem allMigrateFromItem =
menuFactory.createMenuItem(Tools.getString("HostInfo.CRM.AllMigrateFrom"),
HostInfo.HOST_STANDBY_ICON,
ClusterBrowser.STARTING_PTEST_TOOLTIP,
new AccessMode(AccessMode.OP, AccessMode.NORMAL),
new AccessMode(AccessMode.OP, AccessMode.NORMAL))
.enablePredicate(new EnablePredicate() {
@Override
public String check() {
if (!hostInfo.getHost().isCrmStatusOk()) {
return HostInfo.NO_PCMK_STATUS_STRING;
}
if (hostInfo.getBrowser().getClusterBrowser().getExistingServiceList(null).isEmpty()) {
return "there are no services to migrate";
}
return null;
}
})
.addAction(new MenuAction() {
@Override
public void run(final String text) {
for (final ServiceInfo si : cb.getExistingServiceList(null)) {
if (!si.isConstraintPlaceholder() && si.getGroupInfo() == null && si.getCloneInfo() == null) {
final List<String> runningOnNodes = si.getRunningOnNodes(Application.RunMode.LIVE);
if (runningOnNodes != null && runningOnNodes.contains(hostInfo.getHost().getName())) {
final Host dcHost = hostInfo.getHost();
si.migrateFromResource(dcHost, hostInfo.getHost().getName(), Application.RunMode.LIVE);
}
}
}
}
});
if (cb != null) {
final ButtonCallback allMigrateFromItemCallback = cb.new ClMenuItemCallback(hostInfo.getHost())
.addAction(new CallbackAction() {
@Override
public void run(final Host dcHost) {
for (final ServiceInfo si : cb.getExistingServiceList(null)) {
if (!si.isConstraintPlaceholder() && si.getGroupInfo() == null) {
final List<String> runningOnNodes = si.getRunningOnNodes(Application.RunMode.LIVE);
if (runningOnNodes != null && runningOnNodes.contains(hostInfo.getHost().getName())) {
si.migrateFromResource(dcHost, hostInfo.getHost().getName(), Application.RunMode.TEST);
}
}
}
}
});
hostInfo.addMouseOverListener(allMigrateFromItem, allMigrateFromItemCallback);
}
items.add(allMigrateFromItem);
/* Stop corosync/openais. */
final MyMenuItem stopCorosyncItem =
menuFactory.createMenuItem(Tools.getString("HostInfo.StopCorosync"),
HostInfo.HOST_STOP_COMM_LAYER_ICON,
ClusterBrowser.STARTING_PTEST_TOOLTIP,
Tools.getString("HostInfo.StopOpenais"),
HostInfo.HOST_STOP_COMM_LAYER_ICON,
ClusterBrowser.STARTING_PTEST_TOOLTIP,
new AccessMode(AccessMode.ADMIN, AccessMode.ADVANCED),
new AccessMode(AccessMode.ADMIN, AccessMode.NORMAL))
.enablePredicate(new EnablePredicate() {
@Override
public String check() {
final Host h = hostInfo.getHost();
if (!h.isInCluster()) {
return NOT_IN_CLUSTER;
}
return null;
}
})
.predicate(new Predicate() {
@Override
public boolean check() {
/* when both are running it's openais. */
return hostInfo.getHost().isCorosyncRunning() && !hostInfo.getHost().isOpenaisRunning();
}