blob: 610c5be759f3a74a17a611878108549761c081d2 [file] [log] [blame]
/*
*
* 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.cloud.agent.properties;
/**
* Class of constant agent's properties available to configure on
* "agent.properties".
*<br><br>
* Not all available agent properties are defined here, but we should work to
* migrate them on demand to this class.
*
* @param <T> type of the default value.
*/
public class AgentProperties{
private static final String DEFAULT = "default";
/**
* MANDATORY: The GUID to identify the agent with.<br>
* Generated with "uuidgen".<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> GUID = new Property<>("guid", null, String.class);
/**
* The java class which the agent loads to execute.<br>
* Data type: String.<br>
* Default value: <code>com.cloud.hypervisor.kvm.resource.LibvirtComputingResource</code>
*/
public static final Property<String> RESOURCE = new Property<>("resource", "com.cloud.hypervisor.kvm.resource.LibvirtComputingResource");
/**
* The number of threads running in the agent.<br>
* Data type: Integer.<br>
* Default value: <code>5</code>
*/
protected final Property<Integer> workers = new Property<>("workers", 5);
/**
* The IP address of the management server.<br>
* Data type: String.<br>
* Default value: <code>localhost</code>
*/
public static final Property<String> HOST = new Property<>("host", "localhost");
/**
* The time interval (in seconds) after which the agent will check if the connected host is the preferred host.<br>
* After that interval, if the agent is connected to one of the secondary/backup hosts, it will attempt to reconnect to the preferred host.<br>
* For more information see the agent.properties file.<br>
* Data type: Integer.<br>
* Default value: <code>null</code>
*/
public static final Property<Long> HOST_LB_CHECK_INTERVAL = new Property<>("host.lb.check.interval", null, Long.class);
/**
* The port that the management server is listening on.<br>
* Data type: Integer.<br>
* Default value: <code>8250</code>
*/
public static final Property<Integer> PORT = new Property<>("port", 8250);
/**
* The cluster which the agent belongs to.<br>
* Data type: String.<br>
* Default value: <code>default</code>
*/
public static final Property<String> CLUSTER = new Property<>("cluster", DEFAULT);
/**
* The pod which the agent belongs to.<br>
* Data type: String.<br>
* Default value: <code>default</code>
*/
public static final Property<String> POD = new Property<>("pod", DEFAULT);
/**
* The zone which the agent belongs to.<br>
* Data type: String.<br>
* Default value: <code>default</code>
*/
public static final Property<String> ZONE = new Property<>("zone", DEFAULT);
/**
* Public NIC device. If this property is commented, it will be autodetected on service startup.<br>
* Data type: String.<br>
* Default value: <code>cloudbr0</code>
*/
public static final Property<String> PUBLIC_NETWORK_DEVICE = new Property<>("public.network.device", "cloudbr0");
/**
* Private NIC device. If this property is commented, it will be autodetected on service startup.<br>
* Data type: String.<br>
* Default value: <code>cloudbr1</code>
*/
public static final Property<String> PRIVATE_NETWORK_DEVICE = new Property<>("private.network.device", "cloudbr1");
/**
* Guest NIC device. If this property is commented, the value of the private NIC device will be used.<br>
* Data type: String.<br>
* Default value: the private NIC device value.
*/
public static final Property<String> GUEST_NETWORK_DEVICE = new Property<>("guest.network.device", null, String.class);
/**
* Local storage path.<br>
* This property allows multiple values to be entered in a single String. The differente values must be separated by commas.<br>
* Data type: String.<br>
* Default value: <code>/var/lib/libvirt/images/</code>
*/
public static final Property<String> LOCAL_STORAGE_PATH = new Property<>("local.storage.path", "/var/lib/libvirt/images/");
/**
* Directory where Qemu sockets are placed.<br>
* These sockets are for the Qemu Guest Agent and SSVM provisioning.<br>
* Make sure that AppArmor or SELinux allows Libvirt to write there.<br>
* Data type: String.<br>
* Default value: <code>/var/lib/libvirt/qemu</code>
*/
public static final Property<String> QEMU_SOCKETS_PATH = new Property<>("qemu.sockets.path", "/var/lib/libvirt/qemu");
/**
* MANDATORY: The UUID for the local storage pool.<br>
* This property allows multiple values to be entered in a single String. The differente values must be separated by commas.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> LOCAL_STORAGE_UUID = new Property<>("local.storage.uuid", null, String.class);
/**
* Location for KVM virtual router scripts.<br>
* The path defined in this property is relative to the directory "/usr/share/cloudstack-common/".<br>
* Data type: String.<br>
* Default value: <code>scripts/network/domr</code>
*/
public static final Property<String> DOMR_SCRIPTS_DIR = new Property<>("domr.scripts.dir", "scripts/network/domr");
/**
* The timeout (in ms) for time-consuming operations, such as create/copy a snapshot.<br>
* Data type: Integer.<br>
* Default value: <code>7200</code>
*/
public static final Property<Integer> CMDS_TIMEOUT = new Property<>("cmds.timeout", 7200);
/**
* This parameter sets the VM migration speed (in mbps). The default value is -1,<br>
* which means that the agent will try to guess the speed of the guest network and consume all possible bandwidth.<br>
* When entering a value, make sure to enter it in megabits per second.<br>
* Data type: Integer.<br>
* Default value: <code>-1</code>
*/
public static final Property<Integer> VM_MIGRATE_SPEED = new Property<>("vm.migrate.speed", -1);
/**
* Sets target downtime (in ms) at end of livemigration, the 'hiccup' for final copy.<br>
* Higher numbers make livemigration easier, lower numbers may cause migration to never complete.<br>
* Less than 1 means hypervisor default (20ms).<br>
* Data type: Integer.<br>
* Default value: <code>-1</code>
*/
public static final Property<Integer> VM_MIGRATE_DOWNTIME = new Property<>("vm.migrate.downtime", -1);
/**
* Busy VMs may never finish migrating, depending on the environment. <br>
* Therefore, if configured, this option will pause the VM after the time entered (in ms) to force the migration to finish.<br>
* Less than 1 means disabled.<br>
* Data type: Integer.<br>
* Default value: <code>-1</code>
*/
public static final Property<Integer> VM_MIGRATE_PAUSEAFTER = new Property<>("vm.migrate.pauseafter", -1);
/**
* Time (in seconds) to wait for VM migration to finish. Less than 1 means disabled.<br>
* For more information see the agent.properties file.<br>
* Data type: Integer.<br>
* Default value: <code>-1</code>
*/
public static final Property<Integer> VM_MIGRATE_WAIT = new Property<>("vm.migrate.wait", -1);
/**
* Agent Hooks is the way to override default agent behavior to extend the functionality without excessive coding for a custom deployment.<br>
* There are 3 arguments needed for the hook to be called: the base directory (defined in agent.hooks.basedir),<br>
* the name of the script that is located in the base directory (defined in agent.hooks.*.script)<br>
* and the method that is going to be called on the script (defined in agent.hooks.*.method).<br>
* This property defines the agent hooks base directory, where all hooks are located.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>/etc/cloudstack/agent/hooks</code>
*/
public static final Property<String> AGENT_HOOKS_BASEDIR = new Property<>("agent.hooks.basedir", "/etc/cloudstack/agent/hooks");
/**
* This property is used with the agent.hooks.basedir property to define the Libvirt VM XML transformer script.<br>
* The method to be called on the script is defined in the property agent.hooks.libvirt_vm_xml_transformer.method.<br>
* Libvirt XML transformer hook does XML-to-XML transformation.<br>
* The provider can use this to add/remove/modify some sort of attributes in Libvirt XML domain specification.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>libvirt-vm-xml-transformer.groovy</code>
*/
public static final Property<String> AGENT_HOOKS_LIBVIRT_VM_XML_TRANSFORMER_SCRIPT = new Property<>("agent.hooks.libvirt_vm_xml_transformer.script", "libvirt-vm-xml-transformer.groovy");
/**
* This property is used with the agent.hooks.basedir and agent.hooks.libvirt_vm_xml_transformer.script properties to define the Libvirt VM XML transformer method.<br>
* Libvirt XML transformer hook does XML-to-XML transformation.<br>
* The provider can use this to add/remove/modify some sort of attributes in Libvirt XML domain specification.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>transform</code>
*/
public static final Property<String> AGENT_HOOKS_LIBVIRT_VM_XML_TRANSFORMER_METHOD = new Property<>("agent.hooks.libvirt_vm_xml_transformer.method", "transform");
/**
* This property is used with the agent.hooks.basedir property to define the Libvirt VM on start script.<br>
* The method to be called on the script is defined in the property agent.hooks.libvirt_vm_on_start.method.<br>
* The hook is called right after Libvirt successfully launched the VM.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>libvirt-vm-state-change.groovy</code>
*/
public static final Property<String> AGENT_HOOKS_LIBVIRT_VM_ON_START_SCRIPT = new Property<>("agent.hooks.libvirt_vm_on_start.script", "libvirt-vm-state-change.groovy");
/**
* This property is used with the agent.hooks.basedir and agent.hooks.libvirt_vm_on_start.script properties to define the Libvirt VM on start method.<br>
* The hook is called right after Libvirt successfully launched the VM.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>onStart</code>
*/
public static final Property<String> AGENT_HOOKS_LIBVIRT_VM_ON_START_METHOD = new Property<>("agent.hooks.libvirt_vm_on_start.method", "onStart");
/**
* This property is used with the agent.hooks.basedir property to define the Libvirt VM on stop script.<br>
* The method to be called on the script is defined in the property agent.hooks.libvirt_vm_on_stop.method.<br>
* The hook is called right after Libvirt successfully stopped the VM.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>libvirt-vm-state-change.groovy</code>
*/
public static final Property<String> AGENT_HOOKS_LIBVIRT_VM_ON_STOP_SCRIPT = new Property<>("agent.hooks.libvirt_vm_on_stop.script", "libvirt-vm-state-change.groovy");
/**
* This property is used with the agent.hooks.basedir and agent.hooks.libvirt_vm_on_stop.script properties to define the Libvirt VM on stop method.<br>
* The hook is called right after libvirt successfully stopped the VM.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>onStop</code>
*/
public static final Property<String> AGENT_HOOKS_LIBVIRT_VM_ON_STOP_METHOD = new Property<>("agent.hooks.libvirt_vm_on_stop.method", "onStop");
/**
* Sets the type of bridge used on the hypervisor. This defines what commands the resource will use to setup networking.<br>
* Possible values: native | openvswitch <br>
* Data type: String.<br>
* Default value: <code>native</code>
*/
public static final Property<String> NETWORK_BRIDGE_TYPE = new Property<>("network.bridge.type", "native");
/**
* Sets the driver used to plug and unplug NICs from the bridges.<br>
* A sensible default value will be selected based on the network.bridge.type but can be overridden here.<br>
* Value for native = com.cloud.hypervisor.kvm.resource.BridgeVifDriver<br>
* Value for openvswitch = com.cloud.hypervisor.kvm.resource.OvsVifDriver<br>
* Value to enable direct networking in libvirt = com.cloud.hypervisor.kvm.resource.DirectVifDriver (should not be used on hosts that run system VMs)<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> LIBVIRT_VIF_DRIVER = new Property<>("libvirt.vif.driver", null, String.class);
/**
* Setting to enable direct networking in libvirt.<br>
* Should not be used on hosts that run system VMs.<br>
* For more information see the agent.properties file.<br>
* Possible values: private | bridge | vepa <br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> NETWORK_DIRECT_SOURCE_MODE = new Property<>("network.direct.source.mode", null, String.class);
/**
* Setting to enable direct networking in libvirt.<br>
* Should not be used on hosts that run system VMs.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> NETWORK_DIRECT_DEVICE = new Property<>("network.direct.device", null, String.class);
/**
* Sets DPDK Support on OpenVSwitch.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> OPENVSWITCH_DPDK_ENABLED = new Property<>("openvswitch.dpdk.enabled", false);
/**
* Sets DPDK Support on OpenVSwitch (path).<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> OPENVSWITCH_DPDK_OVS_PATH = new Property<>("openvswitch.dpdk.ovs.path", null, String.class);
public static final Property<String> HEALTH_CHECK_SCRIPT_PATH =
new Property<>("agent.health.check.script.path", null, String.class);
/**
* Sets the hypervisor type.<br>
* Possible values: kvm | lxc <br>
* Data type: String.<br>
* Default value: <code>kvm</code>
*/
public static final Property<String> HYPERVISOR_TYPE = new Property<>("hypervisor.type", "kvm");
/**
* Specifies a directory on the host local storage for temporary storing direct download templates.<br>
* Data type: String.<br>
* Default value: <code>/var/lib/libvirt/images</code>
*/
public static final Property<String> DIRECT_DOWNLOAD_TEMPORARY_DOWNLOAD_LOCATION = new Property<>("direct.download.temporary.download.location",
"/var/lib/libvirt/images");
/**
* Specifies a directory on the host local storage for creating and hosting the config drives.<br>
* Data type: String.<br>
* Default value: <code>/var/cache/cloud</code>
*/
public static final Property<String> HOST_CACHE_LOCATION = new Property<>("host.cache.location", "/var/cache/cloud");
/**
* Sets the rolling maintenance hook scripts directory.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> ROLLING_MAINTENANCE_HOOKS_DIR = new Property<>("rolling.maintenance.hooks.dir", null, String.class);
/**
* Disables the rolling maintenance service execution.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> ROLLING_MAINTENANCE_SERVICE_EXECUTOR_DISABLED = new Property<>("rolling.maintenance.service.executor.disabled", false);
/**
* Sets the hypervisor URI.<br>
* Value for KVM: qemu:///system<br>
* Value for LXC: lxc:///<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> HYPERVISOR_URI = new Property<>("hypervisor.uri", null, String.class);
/**
* Setting to enable the CPU model to KVM guest globally.<br>
* Possible values: custom | host-model | host-passthrough <br>
* For more information on each value see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> GUEST_CPU_MODE = new Property<>("guest.cpu.mode", null, String.class);
/**
* Custom CPU model. This param is only valid if property guest.cpu.mode=custom.<br>
* For more information see the agent.properties file.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> GUEST_CPU_MODEL = new Property<>("guest.cpu.model", null, String.class);
/**
* This param will set the CPU architecture for the domain to override what the management server would send.<br>
* In case of arm64 (aarch64), this will change the machine type to 'virt' and add a SCSI and a USB controller in the domain XML.<br>
* Possible values: x86_64 | aarch64 <br>
* Data type: String.<br>
* Default value: <code>null</code> (will set use the architecture of the VM's OS).
*/
public static final Property<String> GUEST_CPU_ARCH = new Property<>("guest.cpu.arch", null, String.class);
/**
* This param will require CPU features on the CPU section.<br>
* The features listed in this property must be separated by a blank space (see example below).<br>
* Possible values: vmx vme <br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> GUEST_CPU_FEATURES = new Property<>("guest.cpu.features", null, String.class);
/**
* Disables memory ballooning on VM guests for overcommit.<br>
* By default overcommit feature enables balloon and sets currentMemory to a minimum value.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> VM_MEMBALLOON_DISABLE = new Property<>("vm.memballoon.disable", false);
/**
* Set to true to check disk activity on VM's disks before starting a VM.<br>
* This only applies to QCOW2 files, and ensures that there is no other running instance accessing the file before starting.<br>
* It works by checking the modified time against the current time, so care must be taken to ensure that the cluster's time is synchronized, otherwise VMs may fail to start.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> VM_DISKACTIVITY_CHECKENABLED = new Property<>("vm.diskactivity.checkenabled", false);
/**
* Timeout (in seconds) for giving up on waiting for VM's disk files to become inactive.<br>
* Hitting this timeout will result in failure to start VM.<br>
* Value must be greater than 0 (zero), otherwise the default value will be used.<br>
* Data type: Integer.<br>
* Default value: <code>120</code>
*/
public static final Property<Integer> VM_DISKACTIVITY_CHECKTIMEOUT_S = new Property<>("vm.diskactivity.checktimeout_s", 120);
/**
* The length of time (in ms) that the disk needs to be inactive in order to pass the check.<br>
* This means current time minus time of disk file needs to be greater than this number.<br>
* It also has the side effect of setting the minimum threshold between a stop and start of a given VM.<br>
* Value must be greater than 0 (zero), otherwise the default value will be used.<br>
* Data type: Long.<br>
* Default value: <code>30000L</code>
*/
public static final Property<Long> VM_DISKACTIVITY_INACTIVETIME_MS = new Property<>("vm.diskactivity.inactivetime_ms", 30000L);
/**
* Some newer linux kernels are incapable of reliably migrating VMs with KVMclock.<br>
* This is a workaround for the bug, admin can set this to true per-host.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> KVMCLOCK_DISABLE = new Property<>("kvmclock.disable", false);
/**
* This enables the VirtIO Random Number Generator device for guests. <br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> VM_RNG_ENABLE = new Property<>("vm.rng.enable", false);
/**
* The model of VirtIO Random Number Generator (RNG) to present to the Guest.<br>
* Currently only 'random' is supported.<br>
* Data type: String.<br>
* Default value: <code>random</code>
*/
public static final Property<String> VM_RNG_MODEL = new Property<>("vm.rng.model", "random");
/**
* Local Random Number Device Generator to use for VirtIO RNG for Guests.<br>
* This is usually /dev/random, but it might be different per platform.<br>
* Data type: String.<br>
* Default value: <code>/dev/random</code>
*/
public static final Property<String> VM_RNG_PATH = new Property<>("vm.rng.path", "/dev/random");
/**
* The amount of bytes the Guest may request/obtain from the RNG in the period specified in the property vm.rng.rate.period.<br>
* Data type: Integer.<br>
* Default value: <code>2048</code>
*/
public static final Property<Integer> VM_RNG_RATE_BYTES = new Property<>("vm.rng.rate.bytes", 2048);
/**
* The number of milliseconds in which the guest is allowed to obtain the bytes specified in vm.rng.rate.bytes.<br>
* Data type: Integer.<br>
* Default value: <code>1000</code>
*/
public static final Property<Integer> VM_RNG_RATE_PERIOD = new Property<>("vm.rng.rate.period", 1000);
/**
* Timeout value for aggregation commands to be sent to the virtual router (in seconds).<br>
* Data type: Long.<br>
* Default value: <code>null</code>
*/
public static final Property<Long> ROUTER_AGGREGATION_COMMAND_EACH_TIMEOUT = new Property<>("router.aggregation.command.each.timeout", null, Long.class);
/**
* Allows to virtually increase the amount of RAM (in MB) available on the host.<br>
* This property can be useful if the host uses Zswap, KSM features and other memory compressing technologies.<br>
* For example: if the host has 2GB of RAM and this property is set to 2048, the amount of RAM of the host will be read as 4GB.<br>
* Data type: Integer.<br>
* Default value: <code>0</code>
*/
public static final Property<Integer> HOST_OVERCOMMIT_MEM_MB = new Property<>("host.overcommit.mem.mb", 0);
/**
* How much host memory (in MB) to reserve for non-allocation.<br>
* A useful parameter if a node uses some other software that requires memory, or in case that OOM Killer kicks in.<br>
* If this parameter is used, property host.overcommit.mem.mb must be set to 0.<br>
* Data type: Integer.<br>
* Default value: <code>1024</code>
*/
public static final Property<Integer> HOST_RESERVED_MEM_MB = new Property<>("host.reserved.mem.mb", 1024);
/**
* How many host CPUs to reserve for non-allocation.<br>
* This can be used to set aside CPU cores on the host for other tasks, such as running hyperconverged storage<br>
* processes, etc.
* Data type: Integer.<br>
* Default value: <code>0</code>
*/
public static final Property<Integer> HOST_RESERVED_CPU_CORE_COUNT = new Property<>("host.reserved.cpu.count", 0);
/**
* The model of Watchdog timer to present to the Guest.<br>
* For all models refer to the libvirt documentation.<br>
* Data type: String.<br>
* Default value: <code>i6300esb</code>
*/
public static final Property<String> VM_WATCHDOG_MODEL = new Property<>("vm.watchdog.model", "i6300esb");
/**
* Action to take when the Guest/Instance is no longer notifying the Watchdog timer.<br>
* Possible values: none | reset | poweroff <br>
* Data type: String.<br>
* Default value: <code>none</code>
*/
public static final Property<String> VM_WATCHDOG_ACTION = new Property<>("vm.watchdog.action", "none");
/**
* Automatically clean up iSCSI sessions not attached to any VM.<br>
* Should be enabled for users using managed storage (for example solidfire).<br>
* Should be disabled for users with unmanaged iSCSI connections on their hosts.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> ISCSI_SESSION_CLEANUP_ENABLED = new Property<>("iscsi.session.cleanup.enabled", false);
/**
* Heartbeat update timeout (in ms).<br>
* Depending on the use case, this timeout might need increasing/decreasing.<br>
* Data type: Integer.<br>
* Default value: <code>60000</code>
*/
public static final Property<Integer> HEARTBEAT_UPDATE_TIMEOUT = new Property<>("heartbeat.update.timeout", 60000);
/**
* The timeout (in seconds) to retrieve the target's domain ID when migrating a VM with KVM. <br>
* Data type: Integer. <br>
* Default value: <code>10</code>
*/
public static final Property<Integer> VM_MIGRATE_DOMAIN_RETRIEVE_TIMEOUT = new Property<>("vm.migrate.domain.retrieve.timeout", 10);
/**
* This parameter specifies if the host must be rebooted when something goes wrong with the heartbeat.<br>
* Data type: Boolean.<br>
* Default value: <code>true</code>
*/
public static final Property<Boolean> REBOOT_HOST_AND_ALERT_MANAGEMENT_ON_HEARTBEAT_TIMEOUT
= new Property<>("reboot.host.and.alert.management.on.heartbeat.timeout", true);
/**
* Enables manually setting CPU's topology on KVM's VM. <br>
* Data type: Boolean.<br>
* Default value: <code>true</code>
*/
public static final Property<Boolean> ENABLE_MANUALLY_SETTING_CPU_TOPOLOGY_ON_KVM_VM = new Property<>("enable.manually.setting.cpu.topology.on.kvm.vm", true);
/**
* Manually sets the host CPU speed (in MHz), in cases where CPU scaling support detects the value is wrong. <br>
* Data type: Integer.<br>
* Default value: <code>0</code>
*/
public static final Property<Integer> HOST_CPU_MANUAL_SPEED_MHZ = new Property<>("host.cpu.manual.speed.mhz", 0);
/**
* Defines the location for Hypervisor scripts.<br>
* The path defined in this property is relative.<br>
* To locate the script, ACS first tries to concatenate the property path with "/usr/share/cloudstack-agent/lib/".<br>
* If it fails, it will test each folder of the path, decreasing one by one, until it reaches root.<br>
* If the script is not found, ACS will repeat the same steps concatenating the property path with "/usr/share/cloudstack-common/".<br>
* The path defined in this property is relative to the directory "/usr/share/cloudstack-common/".<br>
* Data type: String.<br>
* Default value: <code>scripts/vm/hypervisor</code>
*/
public static final Property<String> HYPERVISOR_SCRIPTS_DIR = new Property<>("hypervisor.scripts.dir", "scripts/vm/hypervisor");
/**
* Defines the location for KVM scripts.<br>
* The path defined in this property is relative.<br>
* To locate the script, ACS first tries to concatenate the property path with "/usr/share/cloudstack-agent/lib/".<br>
* If it fails, it will test each folder of the path, decreasing one by one, until it reaches root.<br>
* If the script is not found, ACS will repeat the same steps concatenating the property path with "/usr/share/cloudstack-common/".<br>
* The path defined in this property is relative to the directory "/usr/share/cloudstack-common/".<br>
* Data type: String.<br>
* Default value: <code>scripts/vm/hypervisor/kvm</code>
*/
public static final Property<String> KVM_SCRIPTS_DIR = new Property<>("kvm.scripts.dir", "scripts/vm/hypervisor/kvm");
/**
* Specifies start MAC address for private IP range.<br>
* Data type: String.<br>
* Default value: <code>00:16:3e:77:e2:a0</code>
*/
public static final Property<String> PRIVATE_MACADDR_START = new Property<>("private.macaddr.start", "00:16:3e:77:e2:a0");
/**
* Specifies start IP for private IP range. <br>
* Data type: String.<br>
* Default value: <code>192.168.166.128</code>
*/
public static final Property<String> PRIVATE_IPADDR_START = new Property<>("private.ipaddr.start", "192.168.166.128");
/**
* Defines Local Bridge Name.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> PRIVATE_BRIDGE_NAME = new Property<>("private.bridge.name", null, String.class);
/**
* Defines private network name.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> PRIVATE_NETWORK_NAME = new Property<>("private.network.name", null, String.class);
/**
* Defines the location for network scripts.<br>
* The path defined in this property is relative.<br>
* To locate the script, ACS first tries to concatenate the property path with "/usr/share/cloudstack-agent/lib/".<br>
* If it fails, it will test each folder of the path, decreasing one by one, until it reaches root.<br>
* If the script is not found, ACS will repeat the same steps concatenating the property path with "/usr/share/cloudstack-common/".<br>
* The path defined in this property is relative to the directory "/usr/share/cloudstack-common/".<br>
* Data type: String.<br>
* Default value: <code>scripts/vm/network/vnet</code>
*/
public static final Property<String> NETWORK_SCRIPTS_DIR = new Property<>("network.scripts.dir", "scripts/vm/network/vnet");
/**
* Defines the location for storage scripts.<br>
* The path defined in this property is relative.<br>
* To locate the script, ACS first tries to concatenate the property path with "/usr/share/cloudstack-agent/lib/".<br>
* If it fails, it will test each folder of the path, decreasing one by one, until it reaches root.<br>
* If the script is not found, ACS will repeat the same steps concatenating the property path with "/usr/share/cloudstack-common/".<br>
* The path defined in this property is relative to the directory "/usr/share/cloudstack-common/".<br>
* Data type: String.<br>
* Default value: <code>scripts/storage/qcow2</code>
*/
public static final Property<String> STORAGE_SCRIPTS_DIR = new Property<>("storage.scripts.dir", "scripts/storage/qcow2");
/**
* Time (in seconds) to wait for the VM to shutdown gracefully.<br>
* If the time is exceeded shutdown will be forced.<br>
* Data type: Integer.<br>
* Default value: <code>120</code>
*/
public static final Property<Integer> STOP_SCRIPT_TIMEOUT = new Property<>("stop.script.timeout", 120);
/**
* Definition of VMs video model type.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> VM_VIDEO_HARDWARE = new Property<>("vm.video.hardware", null, String.class);
/**
* Definition of VMs video, specifies the amount of RAM in kibibytes (blocks of 1024 bytes).<br>
* Data type: Integer.<br>
* Default value: <code>0</code>
*/
public static final Property<Integer> VM_VIDEO_RAM = new Property<>("vm.video.ram", 0);
/**
* System VM ISO path.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> SYSTEMVM_ISO_PATH = new Property<>("systemvm.iso.path", null, String.class);
/**
* If set to "true", allows override of the properties: private.macaddr.start, private.ipaddr.start, private.ipaddr.end.<br>
* Data type: Boolean.<br>
* Default value: <code>false</code>
*/
public static final Property<Boolean> DEVELOPER = new Property<>("developer", false);
/**
* Can only be used if developer = true. This property is used to define the local bridge name and private network name.<br>
* Data type: String.<br>
* Default value: <code>null</code>
*/
public static final Property<String> INSTANCE = new Property<>("instance", null, String.class);
/**
* Shows the path to the base directory in which NFS servers are going to be mounted.<br>
* Data type: String.<br>
* Default value: <code>/mnt</code>
*/
public static final Property<String> MOUNT_PATH = new Property<>("mount.path", "/mnt");
/**
* Port listened by the console proxy.
* Data type: Integer.<br>
* Default value: <code>443</code>
*/
public static final Property<Integer> CONSOLEPROXY_HTTPLISTENPORT = new Property<>("consoleproxy.httpListenPort", 443);
/**
* Data type: Integer.<br>
* Default value: <code>5</code>
*/
public static final Property<Integer> PING_RETRIES = new Property<>("ping.retries", 5);
/**
* Returns {@link AgentProperties#workers}.
*/
public Property<Integer> getWorkers() {
return workers;
}
/**
* The time interval (in seconds) at which the balloon driver will get memory stats updates. This is equivalent to Libvirt's <code>--period</code> parameter when using the dommemstat command.
* Data type: Integer.<br>
* Default value: <code>0</code>
*/
public static final Property<Integer> VM_MEMBALLOON_STATS_PERIOD = new Property<>("vm.memballoon.stats.period", 0);
/**
* The number of iothreads
* Data type: Integer.<br>
* Default value: <code>1</code>
*/
public static final Property<Integer> IOTHREADS = new Property<>("iothreads", 1);
/**
* BGP controll CIDR
* Data type: String.<br>
* Default value: <code>169.254.0.0/16</code>
*/
public static final Property<String> CONTROL_CIDR = new Property<>("control.cidr", "169.254.0.0/16");
public static class Property <T>{
private String name;
private T defaultValue;
private Class<T> typeClass;
Property(String name, T value) {
init(name, value);
}
Property(String name, T defaultValue, Class<T> typeClass) {
this.typeClass = typeClass;
init(name, defaultValue);
}
private void init(String name, T defaultValue) {
this.name = name;
this.defaultValue = defaultValue;
if (defaultValue != null) {
this.typeClass = (Class<T>)defaultValue.getClass();
}
}
public String getName() {
return name;
}
public T getDefaultValue() {
return defaultValue;
}
public Class<T> getTypeClass() {
return typeClass;
}
}
}