Package com.vmware.aurora.vc

Source Code of com.vmware.aurora.vc.VcClusterConfig$VmHAConfig

/***************************************************************************
* Copyright (c) 2012-2013 VMware, Inc. All Rights Reserved.
* Licensed 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.vmware.aurora.vc;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.vmware.aurora.global.Configuration;
import com.vmware.aurora.util.CommonUtil;
import com.vmware.vim.binding.vim.cluster.ConfigInfoEx;
import com.vmware.vim.binding.vim.cluster.DasAdmissionControlPolicy;
import com.vmware.vim.binding.vim.cluster.DasConfigInfo;
import com.vmware.vim.binding.vim.cluster.DasVmConfigInfo;
import com.vmware.vim.binding.vim.cluster.DasVmSettings;
import com.vmware.vim.binding.vim.cluster.DrsConfigInfo;
import com.vmware.vim.binding.vim.cluster.FailoverHostAdmissionControlPolicy;
import com.vmware.vim.binding.vim.cluster.FailoverLevelAdmissionControlPolicy;
import com.vmware.vim.binding.vim.cluster.FailoverResourcesAdmissionControlPolicy;
import com.vmware.vim.binding.vim.cluster.VmToolsMonitoringSettings;

@SuppressWarnings("serial")
public class VcClusterConfig implements Serializable {
   public static enum AdmCtlPolType {
      FailoverHostPolicy(FailoverHostAdmissionControlPolicy.class), FailoverResourcePolicy(
            FailoverResourcesAdmissionControlPolicy.class), FailoverLevelPolicy(
            FailoverLevelAdmissionControlPolicy.class), UnknownPolicy(null);

      private Class<? extends DasAdmissionControlPolicy> polClass;

      AdmCtlPolType(Class<? extends DasAdmissionControlPolicy> polClass) {
         this.polClass = polClass;
      }

      private static AdmCtlPolType getInstance(DasAdmissionControlPolicy polObj) {
         for (AdmCtlPolType polType : AdmCtlPolType.values()) {
            if (polType.polClass != null && polType.polClass.isInstance(polObj)) {
               return polType;
            }
         }
         return UnknownPolicy;
      }
   }

   public static boolean skipHADRSCheck() {
      return Configuration.getBoolean("vc.skipClusterHACheck", false);
   }

   public static class VmHAConfig implements Serializable {
      private String id;
      private DasConfigInfo.VmMonitoringState vmMonState; // strict
      private int vmMonFailInterval; // lenient
      private int vmMonMaxFailures; // lenient
      private int vmMonMaxFailuresWindow; // lenient
      private int vmMonMinUptime; // lenient

      VmHAConfig(String id, DasConfigInfo.VmMonitoringState vmMonState, int vmMonFailInterval,
            int vmMonMaxFailures, int vmMonMaxFailuresWindow, int vmMonMinUptime) {
         this.id = id;
         this.vmMonState = vmMonState;
         this.vmMonFailInterval = vmMonFailInterval;
         this.vmMonMaxFailures = vmMonMaxFailures;
         this.vmMonMaxFailuresWindow = vmMonMaxFailuresWindow;
         this.vmMonMinUptime = vmMonMinUptime;
      }

      VmHAConfig(DasVmConfigInfo vmConfig, VmHAConfig defaultVmHAConfig) {
         DasVmSettings vmHASettings = vmConfig.getDasSettings();
         VmToolsMonitoringSettings toolsSettings = vmHASettings.getVmToolsMonitoringSettings();

         vmMonState = (toolsSettings.getVmMonitoring() != null
               ? DasConfigInfo.VmMonitoringState.valueOf(toolsSettings.getVmMonitoring())
               : defaultVmHAConfig.vmMonState);
         vmMonFailInterval = (toolsSettings.getFailureInterval() != null
               ? toolsSettings.getFailureInterval()
               : defaultVmHAConfig.vmMonFailInterval);
         vmMonMaxFailures = (toolsSettings.getMaxFailures() != null
               ? toolsSettings.getMaxFailures()
               : defaultVmHAConfig.vmMonMaxFailures);
         vmMonMaxFailuresWindow = (toolsSettings.getMaxFailureWindow() != null
               ? toolsSettings.getMaxFailureWindow()
               : defaultVmHAConfig.vmMonMaxFailuresWindow);
         vmMonMinUptime = (toolsSettings.getMinUpTime() != null
               ? toolsSettings.getMinUpTime()
               : defaultVmHAConfig.vmMonMinUptime);
      }

      public List<String> getHADRSIncompatReasons(VmHAConfig reference, boolean strict) {
         List<String> reasons = new ArrayList<String>();
         CommonUtil.checkCond((vmMonState == reference.vmMonState), reasons,
               id + " monitoring state is not " + reference.vmMonState.toString() + ".");
         if (!strict) {
            CommonUtil.checkCond((vmMonFailInterval >= reference.vmMonFailInterval), reasons,
                  id + " failure interval is less than " + reference.vmMonFailInterval + ".");
            CommonUtil.checkCond((vmMonMaxFailures >= reference.vmMonMaxFailures), reasons,
                  id + " maximum per-VM resets are less than " + reference.vmMonMaxFailures + ".");
            CommonUtil.checkCond((vmMonMaxFailuresWindow >= reference.vmMonMaxFailuresWindow), reasons,
                  id + " maximum resets time window is less than " + reference.vmMonMaxFailuresWindow + " seconds.");
            CommonUtil.checkCond((vmMonMinUptime >= reference.vmMonMinUptime), reasons,
                  id + " minumum uptime is less than " + reference.vmMonMinUptime + " seconds.");
         }
         return reasons;
      }

      public List<String> getHADRSIncompatReasons(boolean strict) {
         return getHADRSIncompatReasons(GoldenVmHAConfig, strict);
      }

      public boolean isHADRSCompatible(VmHAConfig reference, boolean strict) {
         return getHADRSIncompatReasons(reference, strict).isEmpty();
      }

      public boolean isHADRSCompatible(boolean strict) {
         return isHADRSCompatible(GoldenVmHAConfig, strict);
      }

      public String toString() {
         StringBuffer buf = new StringBuffer(id);
         return buf.append("vmMonState").append("=").append(vmMonState)
               .append(";").append("vmMonFailInterval")
               .append("=").append(vmMonFailInterval).append(";")
               .append("vmMonMaxFailures").append("=").append(vmMonMaxFailures)
               .append(";").append("vmMonMaxFailuresWindow").append("=")
               .append(vmMonMaxFailuresWindow).append(";")
               .append("vmMonMinUptime").append("=").append(vmMonMinUptime)
               .append(";").toString();
      }
   }

   private boolean haEnabled; // strict
   private boolean admCtlEnabled; // strict
   private VmHAConfig defaultVmHAConfig; // strict, lenient (see VmConfig)
   private DasConfigInfo.ServiceState hostMonEnabled; // lenient
   private AdmCtlPolType admCtlPol; // lenient
   private int resAdmPolCpuPerc; // lenient
   private int resAdmPolMemPerc; // lenient
   private boolean drsEnabled; // lenient

   public static final VmHAConfig GoldenVmHAConfig = new VmHAConfig("GoldenVM",
         DasConfigInfo.VmMonitoringState.vmAndAppMonitoring,
         30, // vmMonFailInterval
         3, // vmMonMaxFailures
         3600, // vmMonMaxFailuresWindow
         120 // vmMonMinUptime
         );
   public static final VcClusterConfig GoldenConfig = new VcClusterConfig(true, // haEnabled
         true, // admCtlEnabled
         GoldenVmHAConfig, // defaultVmHAConfig
         DasConfigInfo.ServiceState.enabled, // hostMonEnabled
         AdmCtlPolType.FailoverResourcePolicy, // admCtlPol
         5, // resAdmPolCpuPerc
         5, // resAdmPolMemPerc
         true // drsEnabled
         );

   private VcClusterConfig(boolean haEnabled, boolean admCtlEnabled,
         VmHAConfig defaultVmHAConfig,
         DasConfigInfo.ServiceState hostMonEnabled, AdmCtlPolType admCtlPol,
         int resAdmPolCpuPerc, int resAdmPolMemPerc, boolean drsEnabled) {
      this.haEnabled = haEnabled;
      this.admCtlEnabled = admCtlEnabled;
      this.hostMonEnabled = hostMonEnabled;
      this.defaultVmHAConfig = defaultVmHAConfig;
      this.admCtlPol = admCtlPol;
      this.resAdmPolCpuPerc = resAdmPolCpuPerc;
      this.resAdmPolMemPerc = resAdmPolMemPerc;
      this.drsEnabled = drsEnabled;
   }

   public static VcClusterConfig create(ConfigInfoEx config) {
      DasConfigInfo dasConfig = config.getDasConfig();
      DrsConfigInfo drsConfig = config.getDrsConfig();
      DasVmSettings vmSettings = dasConfig.getDefaultVmSettings();
      VmToolsMonitoringSettings toolsSettings =
            vmSettings.getVmToolsMonitoringSettings();
      DasAdmissionControlPolicy pol = dasConfig.getAdmissionControlPolicy();
      AdmCtlPolType polType = AdmCtlPolType.getInstance(pol);
      FailoverResourcesAdmissionControlPolicy resAdmCtlPol =
            (pol instanceof FailoverResourcesAdmissionControlPolicy
                  ? (FailoverResourcesAdmissionControlPolicy) pol
                  : null);
      VmHAConfig defaultVmHAConfig = new VmHAConfig("Cluster VM default setting",
            DasConfigInfo.VmMonitoringState.valueOf(dasConfig.getVmMonitoring()),
            toolsSettings.getFailureInterval(),
            toolsSettings.getMaxFailures(),
            toolsSettings.getMaxFailureWindow(),
            toolsSettings.getMinUpTime());
      return new VcClusterConfig(dasConfig.getEnabled(),
            dasConfig.getAdmissionControlEnabled(),
            defaultVmHAConfig,
            DasConfigInfo.ServiceState.valueOf(dasConfig.getHostMonitoring()),
            polType,
            (resAdmCtlPol != null ? resAdmCtlPol.getCpuFailoverResourcesPercent() : 0),
            (resAdmCtlPol != null ? resAdmCtlPol.getMemoryFailoverResourcesPercent() : 0),
            drsConfig.getEnabled());
   }

   public List<String> getHADRSIncompatReasons(VcClusterConfig reference, boolean strict) {
      List<String> reasons = new ArrayList<String>();
      CommonUtil.checkCond((haEnabled == reference.haEnabled), reasons,
            "Parent cluster HA is " + (haEnabled ? "" : "not ") + "enabled.");
      CommonUtil.checkCond((drsEnabled == reference.drsEnabled), reasons,
            "Parent cluster DRS is " + (drsEnabled ? "" : "not ") + "enabled.");
      CommonUtil.checkCond((hostMonEnabled.equals(reference.hostMonEnabled)), reasons,
            "Parent cluster host monitoring is not " + reference.hostMonEnabled.toString() + ".");
      defaultVmHAConfig.getHADRSIncompatReasons(reference.defaultVmHAConfig, strict);

      if (!strict) {
         CommonUtil.checkCond((admCtlEnabled == reference.admCtlEnabled), reasons,
               "Parent cluster admission control policy is " + (admCtlEnabled ? "" : "not ") + "enabled.");
      }
      return reasons;
   }

   public List<String> getHADRSIncompatReasons(boolean strict) {
      return getHADRSIncompatReasons(GoldenConfig, strict);
   }

   public String toString() {
      StringBuffer buf = new StringBuffer();
      return buf.append("haEnabled").append("=").append(haEnabled).append(";")
            .append("admCtlEnabled").append("=").append(admCtlEnabled)
            .append(";").append(defaultVmHAConfig).append("hostMonEnabled")
            .append("=").append(hostMonEnabled).append(";").append("admCtlPol")
            .append("=").append(admCtlPol).append(";")
            .append("resAdmPolCpuPerc").append("=").append(resAdmPolCpuPerc)
            .append(";").append("resAdmPolMemPerc").append("=")
            .append(resAdmPolMemPerc).append(";").append("drsEnabled")
            .append("=").append(drsEnabled).append(";").toString();
   }

   public VmHAConfig getDefaultVmHAConfig() {
      return defaultVmHAConfig;
   }

   public boolean getHAEnabled() {
      return haEnabled;
   }

   public boolean getDRSEnabled() {
      return drsEnabled;
   }
}
TOP

Related Classes of com.vmware.aurora.vc.VcClusterConfig$VmHAConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.