mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-29 04:04:45 +00:00
libs/types: modify implementation details
1. fix nit problems 2. use generic type when parsing different type Signed-off-by: Zhongtao Hu <zhongtaohu.tim@linux.alibaba.com>
This commit is contained in:
parent
05ad026fc0
commit
b9b6d70aae
@ -7,6 +7,7 @@
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::io::{self, BufReader, Result};
|
||||
use std::result::{self};
|
||||
use std::u32;
|
||||
|
||||
use serde::Deserialize;
|
||||
@ -330,74 +331,24 @@ impl Annotation {
|
||||
&mut self.annotations
|
||||
}
|
||||
|
||||
/// Get the value of annotation with `key`
|
||||
pub fn get_value<T>(
|
||||
&self,
|
||||
key: &str,
|
||||
) -> result::Result<Option<T>, <T as std::str::FromStr>::Err>
|
||||
where
|
||||
T: std::str::FromStr,
|
||||
{
|
||||
if let Some(value) = self.get(key) {
|
||||
return value.parse::<T>().map(Some);
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
/// Get the value of annotation with `key` as string.
|
||||
pub fn get(&self, key: &str) -> Option<String> {
|
||||
self.annotations.get(key).map(|v| String::from(v.trim()))
|
||||
}
|
||||
|
||||
/// Get the value of annotation with `key` as bool.
|
||||
pub fn get_bool(&self, key: &str) -> Result<Option<bool>> {
|
||||
if let Some(value) = self.get(key) {
|
||||
return value
|
||||
.parse::<bool>()
|
||||
.map_err(|_| {
|
||||
io::Error::new(
|
||||
io::ErrorKind::InvalidData,
|
||||
format!("Invalid input {} for bool", key),
|
||||
)
|
||||
})
|
||||
.map(Some);
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
/// Get the value of annotation with `key` as u32.
|
||||
pub fn get_u32(&self, key: &str) -> Result<Option<u32>> {
|
||||
if let Some(value) = self.get(key) {
|
||||
return value
|
||||
.parse::<u32>()
|
||||
.map_err(|_| {
|
||||
io::Error::new(
|
||||
io::ErrorKind::InvalidData,
|
||||
format!("Invalid input {} for u32", key),
|
||||
)
|
||||
})
|
||||
.map(Some);
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
/// Get the value of annotation with `key` as i32.
|
||||
pub fn get_i32(&self, key: &str) -> Result<Option<i32>> {
|
||||
if let Some(value) = self.get(key) {
|
||||
return value
|
||||
.parse::<i32>()
|
||||
.map_err(|_| {
|
||||
io::Error::new(
|
||||
io::ErrorKind::InvalidData,
|
||||
format!("Invalid input {} for i32", key),
|
||||
)
|
||||
})
|
||||
.map(Some);
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
/// Get the value of annotation with `key` as u64.
|
||||
pub fn get_u64(&self, key: &str) -> Result<Option<u64>> {
|
||||
if let Some(value) = self.get(key) {
|
||||
return value
|
||||
.parse::<u64>()
|
||||
.map_err(|_| {
|
||||
io::Error::new(
|
||||
io::ErrorKind::InvalidData,
|
||||
format!("Invalid input {} for u64", key),
|
||||
)
|
||||
})
|
||||
.map(Some);
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
// Miscellaneous annotations.
|
||||
@ -419,7 +370,7 @@ impl Annotation {
|
||||
|
||||
/// Get the annotation to specify the Resources.Memory.Swappiness.
|
||||
pub fn get_container_resource_swappiness(&self) -> Result<Option<u32>> {
|
||||
match self.get_u32(KATA_ANNO_CONTAINER_RES_SWAPPINESS) {
|
||||
match self.get_value::<u32>(KATA_ANNO_CONTAINER_RES_SWAPPINESS) {
|
||||
Ok(r) => {
|
||||
if r.unwrap_or_default() > 100 {
|
||||
return Err(io::Error::new(
|
||||
@ -430,7 +381,10 @@ impl Annotation {
|
||||
Ok(r)
|
||||
}
|
||||
}
|
||||
Err(e) => Err(e),
|
||||
Err(_e) => Err(io::Error::new(
|
||||
io::ErrorKind::InvalidData,
|
||||
"parse u32 error".to_string(),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
@ -461,6 +415,11 @@ impl Annotation {
|
||||
format!("agent {} not found", agent_name),
|
||||
));
|
||||
}
|
||||
let bool_err = io::Error::new(io::ErrorKind::InvalidData, "parse bool error".to_string());
|
||||
let u32_err = io::Error::new(io::ErrorKind::InvalidData, "parse u32 error".to_string());
|
||||
let u64_err = io::Error::new(io::ErrorKind::InvalidData, "parse u64 error".to_string());
|
||||
let i32_err = io::Error::new(io::ErrorKind::InvalidData, "parse i32 error".to_string());
|
||||
|
||||
let mut hv = config.hypervisor.get_mut(hypervisor_name).unwrap();
|
||||
let mut ag = config.agent.get_mut(agent_name).unwrap();
|
||||
for (key, value) in &self.annotations {
|
||||
@ -481,74 +440,87 @@ impl Annotation {
|
||||
hv.validate_jailer_path(value)?;
|
||||
hv.jailer_path = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_IO_THREADS => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_IO_THREADS => match self.get_value::<bool>(key)
|
||||
{
|
||||
Ok(r) => {
|
||||
hv.enable_iothreads = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
// Hypervisor Block Device related annotations
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_DRIVER => {
|
||||
hv.blockdev_info.block_device_driver = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_DISABLE_BLOCK_DEV_USE => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.disable_block_device_use = r.unwrap_or_default();
|
||||
KATA_ANNO_CFG_HYPERVISOR_DISABLE_BLOCK_DEV_USE => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.disable_block_device_use = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_CACHE_SET => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.block_device_cache_set = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_CACHE_SET => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.block_device_cache_set = r.unwrap_or_default();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_CACHE_DIRECT => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.block_device_cache_direct = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_CACHE_NOFLUSH => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.block_device_cache_noflush = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_CACHE_DIRECT => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.block_device_cache_direct = r.unwrap_or_default();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_DISABLE_IMAGE_NVDIMM => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.disable_image_nvdimm = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_BLOCK_DEV_CACHE_NOFLUSH => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.block_device_cache_noflush = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_DISABLE_IMAGE_NVDIMM => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.disable_image_nvdimm = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_MEMORY_OFFSET => match self.get_u64(key) {
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_MEMORY_OFFSET => match self.get_value::<u64>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.memory_offset = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(u64_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_VHOSTUSER_STORE => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.enable_vhost_user_store = r.unwrap_or_default();
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_VHOSTUSER_STORE => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.blockdev_info.enable_vhost_user_store = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_VHOSTUSER_STORE_PATH => {
|
||||
hv.blockdev_info.validate_vhost_user_store_path(value)?;
|
||||
hv.blockdev_info.vhost_user_store_path = value.to_string();
|
||||
@ -577,7 +549,7 @@ impl Annotation {
|
||||
KATA_ANNO_CFG_HYPERVISOR_CPU_FEATURES => {
|
||||
hv.cpu_info.cpu_features = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_VCPUS => match self.get_i32(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_VCPUS => match self.get_value::<i32>(key) {
|
||||
Ok(num_cpus) => {
|
||||
let num_cpus = num_cpus.unwrap_or_default();
|
||||
if num_cpus
|
||||
@ -599,49 +571,53 @@ impl Annotation {
|
||||
hv.cpu_info.default_vcpus = num_cpus;
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(i32_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_MAX_VCPUS => match self.get_u32(key) {
|
||||
Ok(r) => {
|
||||
hv.cpu_info.default_maxvcpus = r.unwrap_or_default();
|
||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_MAX_VCPUS => {
|
||||
match self.get_value::<u32>(key) {
|
||||
Ok(r) => {
|
||||
hv.cpu_info.default_maxvcpus = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
}
|
||||
// Hypervisor Device related annotations
|
||||
KATA_ANNO_CFG_HYPERVISOR_HOTPLUG_VFIO_ON_ROOT_BUS => match self.get_bool(key) {
|
||||
Ok(r) => {
|
||||
hv.device_info.hotplug_vfio_on_root_bus = r.unwrap_or_default();
|
||||
KATA_ANNO_CFG_HYPERVISOR_HOTPLUG_VFIO_ON_ROOT_BUS => {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.device_info.hotplug_vfio_on_root_bus = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_PCIE_ROOT_PORT => match self.get_u32(key) {
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_PCIE_ROOT_PORT => match self.get_value::<u32>(key) {
|
||||
Ok(r) => {
|
||||
hv.device_info.pcie_root_port = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_IOMMU => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_IOMMU => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.device_info.enable_iommu = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_IOMMU_PLATFORM => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_IOMMU_PLATFORM => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.device_info.enable_iommu_platform = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
// Hypervisor Machine related annotations
|
||||
@ -656,7 +632,7 @@ impl Annotation {
|
||||
hv.machine_info.entropy_source = value.to_string();
|
||||
}
|
||||
// Hypervisor Memory related annotations
|
||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_MEMORY => match self.get_u32(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_DEFAULT_MEMORY => match self.get_value::<u32>(key) {
|
||||
Ok(r) => {
|
||||
let mem = r.unwrap_or_default();
|
||||
if mem
|
||||
@ -678,100 +654,106 @@ impl Annotation {
|
||||
hv.memory_info.default_memory = mem;
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_MEMORY_SLOTS => match self.get_u32(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_MEMORY_SLOTS => match self.get_value::<u32>(key) {
|
||||
Ok(v) => {
|
||||
hv.memory_info.memory_slots = v.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
},
|
||||
|
||||
KATA_ANNO_CFG_HYPERVISOR_MEMORY_PREALLOC => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_MEMORY_PREALLOC => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.memory_info.enable_mem_prealloc = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_HUGE_PAGES => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_HUGE_PAGES => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.memory_info.enable_hugepages = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_FILE_BACKED_MEM_ROOT_DIR => {
|
||||
hv.memory_info.validate_memory_backend_path(value)?;
|
||||
hv.memory_info.file_mem_backend = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_VIRTIO_MEM => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_VIRTIO_MEM => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.memory_info.enable_virtio_mem = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_SWAP => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_SWAP => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.memory_info.enable_swap = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_GUEST_SWAP => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_GUEST_SWAP => match self.get_value::<bool>(key)
|
||||
{
|
||||
Ok(r) => {
|
||||
hv.memory_info.enable_guest_swap = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
// Hypervisor Network related annotations
|
||||
KATA_ANNO_CFG_HYPERVISOR_DISABLE_VHOST_NET => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_DISABLE_VHOST_NET => match self.get_value::<bool>(key)
|
||||
{
|
||||
Ok(r) => {
|
||||
hv.network_info.disable_vhost_net = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_RX_RATE_LIMITER_MAX_RATE => match self.get_u64(key) {
|
||||
Ok(r) => {
|
||||
hv.network_info.rx_rate_limiter_max_rate = r.unwrap_or_default();
|
||||
KATA_ANNO_CFG_HYPERVISOR_RX_RATE_LIMITER_MAX_RATE => {
|
||||
match self.get_value::<u64>(key) {
|
||||
Ok(r) => {
|
||||
hv.network_info.rx_rate_limiter_max_rate = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(u64_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_TX_RATE_LIMITER_MAX_RATE => {
|
||||
match self.get_value::<u64>(key) {
|
||||
Ok(r) => {
|
||||
hv.network_info.tx_rate_limiter_max_rate = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(u64_err);
|
||||
}
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_HYPERVISOR_TX_RATE_LIMITER_MAX_RATE => match self.get_u64(key) {
|
||||
Ok(r) => {
|
||||
hv.network_info.tx_rate_limiter_max_rate = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
}
|
||||
// Hypervisor Security related annotations
|
||||
KATA_ANNO_CFG_HYPERVISOR_GUEST_HOOK_PATH => {
|
||||
hv.security_info.validate_path(value)?;
|
||||
hv.security_info.guest_hook_path = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_ENABLE_ROOTLESS_HYPERVISOR => {
|
||||
match self.get_bool(key) {
|
||||
match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
hv.security_info.rootless = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -788,14 +770,16 @@ impl Annotation {
|
||||
KATA_ANNO_CFG_HYPERVISOR_VIRTIO_FS_CACHE => {
|
||||
hv.shared_fs.virtio_fs_cache = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_VIRTIO_FS_CACHE_SIZE => match self.get_u32(key) {
|
||||
Ok(r) => {
|
||||
hv.shared_fs.virtio_fs_cache_size = r.unwrap_or_default();
|
||||
KATA_ANNO_CFG_HYPERVISOR_VIRTIO_FS_CACHE_SIZE => {
|
||||
match self.get_value::<u32>(key) {
|
||||
Ok(r) => {
|
||||
hv.shared_fs.virtio_fs_cache_size = r.unwrap_or_default();
|
||||
}
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
}
|
||||
},
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_VIRTIO_FS_EXTRA_ARGS => {
|
||||
let args: Vec<String> =
|
||||
value.to_string().split(',').map(str::to_string).collect();
|
||||
@ -803,12 +787,12 @@ impl Annotation {
|
||||
hv.shared_fs.virtio_fs_extra_args.push(arg.to_string());
|
||||
}
|
||||
}
|
||||
KATA_ANNO_CFG_HYPERVISOR_MSIZE_9P => match self.get_u32(key) {
|
||||
KATA_ANNO_CFG_HYPERVISOR_MSIZE_9P => match self.get_value::<u32>(key) {
|
||||
Ok(v) => {
|
||||
hv.shared_fs.msize_9p = v.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
},
|
||||
|
||||
@ -829,37 +813,37 @@ impl Annotation {
|
||||
ag.kernel_modules.push(modules.to_string());
|
||||
}
|
||||
}
|
||||
KATA_ANNO_CFG_AGENT_TRACE => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_AGENT_TRACE => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
ag.enable_tracing = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_AGENT_CONTAINER_PIPE_SIZE => match self.get_u32(key) {
|
||||
KATA_ANNO_CFG_AGENT_CONTAINER_PIPE_SIZE => match self.get_value::<u32>(key) {
|
||||
Ok(v) => {
|
||||
ag.container_pipe_size = v.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(u32_err);
|
||||
}
|
||||
},
|
||||
//update runtume config
|
||||
KATA_ANNO_CFG_DISABLE_GUEST_SECCOMP => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_DISABLE_GUEST_SECCOMP => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
config.runtime.disable_guest_seccomp = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_ENABLE_PPROF => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_ENABLE_PPROF => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
config.runtime.enable_pprof = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_EXPERIMENTAL => {
|
||||
@ -872,20 +856,20 @@ impl Annotation {
|
||||
KATA_ANNO_CFG_INTER_NETWORK_MODEL => {
|
||||
config.runtime.internetworking_model = value.to_string();
|
||||
}
|
||||
KATA_ANNO_CFG_SANDBOX_CGROUP_ONLY => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_SANDBOX_CGROUP_ONLY => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
config.runtime.sandbox_cgroup_only = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_DISABLE_NEW_NETNS => match self.get_bool(key) {
|
||||
KATA_ANNO_CFG_DISABLE_NEW_NETNS => match self.get_value::<bool>(key) {
|
||||
Ok(r) => {
|
||||
config.runtime.disable_new_netns = r.unwrap_or_default();
|
||||
}
|
||||
Err(e) => {
|
||||
return Err(e);
|
||||
Err(_e) => {
|
||||
return Err(bool_err);
|
||||
}
|
||||
},
|
||||
KATA_ANNO_CFG_VFIO_MODE => {
|
||||
|
@ -9,4 +9,4 @@
|
||||
/// Annotation to enable SGX.
|
||||
///
|
||||
/// Hardware-based isolation and memory encryption.
|
||||
pub const SGXEPC: &str = "sgx.intel.com/epc";
|
||||
pub const SGX_EPC: &str = "sgx.intel.com/epc";
|
||||
|
@ -15,7 +15,7 @@ lazy_static! {
|
||||
"/usr/share/defaults/kata-containers/configuration.toml",
|
||||
];
|
||||
}
|
||||
pub const DEFAULT_AGENT_NAME: &str = "kata";
|
||||
pub const DEFAULT_AGENT_NAME: &str = "kata-agent";
|
||||
|
||||
pub const DEFAULT_INTERNETWORKING_MODEL: &str = "tcfilter";
|
||||
|
||||
@ -35,13 +35,13 @@ pub const DEFAULT_GUEST_HOOK_PATH: &str = "/opt";
|
||||
pub const DEFAULT_GUEST_VCPUS: u32 = 1;
|
||||
|
||||
// Default configuration for Dragonball
|
||||
pub const DEFAULT_DB_GUEST_KERNEL_IMAGE: &str = "vmlinuz";
|
||||
pub const DEFAULT_DB_GUEST_KERNEL_PARAMS: &str = "";
|
||||
pub const DEFAULT_DB_ENTROPY_SOURCE: &str = "/dev/urandom";
|
||||
pub const DEFAULT_DB_MEMORY_SIZE: u32 = 128;
|
||||
pub const DEFAULT_DB_MEMORY_SLOTS: u32 = 128;
|
||||
pub const MAX_DB_VCPUS: u32 = 256;
|
||||
pub const MIN_DB_MEMORY_SIZE: u32 = 64;
|
||||
pub const DEFAULT_DRAGONBALL_GUEST_KERNEL_IMAGE: &str = "vmlinuz";
|
||||
pub const DEFAULT_DRAGONBALL_GUEST_KERNEL_PARAMS: &str = "";
|
||||
pub const DEFAULT_DRAGONBALL_ENTROPY_SOURCE: &str = "/dev/urandom";
|
||||
pub const DEFAULT_DRAGONBALL_MEMORY_SIZE: u32 = 128;
|
||||
pub const DEFAULT_DRAGONBALL_MEMORY_SLOTS: u32 = 128;
|
||||
pub const MAX_DRAGONBALL_VCPUS: u32 = 256;
|
||||
pub const MIN_DRAGONBALL_MEMORY_SIZE: u32 = 64;
|
||||
// Default configuration for qemu
|
||||
pub const DEFAULT_QEMU_BINARY_PATH: &str = "qemu";
|
||||
pub const DEFAULT_QEMU_CONTROL_PATH: &str = "";
|
||||
|
@ -9,8 +9,8 @@ use std::sync::Arc;
|
||||
use std::u32;
|
||||
|
||||
use super::{default, register_hypervisor_plugin};
|
||||
use crate::config::default::MAX_DB_VCPUS;
|
||||
use crate::config::default::MIN_DB_MEMORY_SIZE;
|
||||
use crate::config::default::MAX_DRAGONBALL_VCPUS;
|
||||
use crate::config::default::MIN_DRAGONBALL_MEMORY_SIZE;
|
||||
use crate::config::hypervisor::{
|
||||
VIRTIO_BLK, VIRTIO_BLK_MMIO, VIRTIO_FS, VIRTIO_FS_INLINE, VIRTIO_PMEM,
|
||||
};
|
||||
@ -39,10 +39,10 @@ impl DragonballConfig {
|
||||
|
||||
impl ConfigPlugin for DragonballConfig {
|
||||
fn get_max_cpus(&self) -> u32 {
|
||||
MAX_DB_VCPUS
|
||||
MAX_DRAGONBALL_VCPUS
|
||||
}
|
||||
fn get_min_memory(&self) -> u32 {
|
||||
MIN_DB_MEMORY_SIZE
|
||||
MIN_DRAGONBALL_MEMORY_SIZE
|
||||
}
|
||||
fn name(&self) -> &str {
|
||||
HYPERVISOR_NAME_DRAGONBALL
|
||||
@ -54,25 +54,27 @@ impl ConfigPlugin for DragonballConfig {
|
||||
resolve_path!(db.jailer_path, "Dragonball jailer path {} is invalid: {}")?;
|
||||
|
||||
if db.boot_info.kernel.is_empty() {
|
||||
db.boot_info.kernel = default::DEFAULT_DB_GUEST_KERNEL_IMAGE.to_string();
|
||||
db.boot_info.kernel = default::DEFAULT_DRAGONBALL_GUEST_KERNEL_IMAGE.to_string();
|
||||
}
|
||||
if db.boot_info.kernel_params.is_empty() {
|
||||
db.boot_info.kernel_params = default::DEFAULT_DB_GUEST_KERNEL_PARAMS.to_string();
|
||||
db.boot_info.kernel_params =
|
||||
default::DEFAULT_DRAGONBALL_GUEST_KERNEL_PARAMS.to_string();
|
||||
}
|
||||
|
||||
if db.cpu_info.default_maxvcpus > default::MAX_DB_VCPUS {
|
||||
db.cpu_info.default_maxvcpus = default::MAX_DB_VCPUS;
|
||||
if db.cpu_info.default_maxvcpus > default::MAX_DRAGONBALL_VCPUS {
|
||||
db.cpu_info.default_maxvcpus = default::MAX_DRAGONBALL_VCPUS;
|
||||
}
|
||||
|
||||
if db.machine_info.entropy_source.is_empty() {
|
||||
db.machine_info.entropy_source = default::DEFAULT_DB_ENTROPY_SOURCE.to_string();
|
||||
db.machine_info.entropy_source =
|
||||
default::DEFAULT_DRAGONBALL_ENTROPY_SOURCE.to_string();
|
||||
}
|
||||
|
||||
if db.memory_info.default_memory == 0 {
|
||||
db.memory_info.default_memory = default::DEFAULT_DB_MEMORY_SIZE;
|
||||
db.memory_info.default_memory = default::DEFAULT_DRAGONBALL_MEMORY_SIZE;
|
||||
}
|
||||
if db.memory_info.memory_slots == 0 {
|
||||
db.memory_info.memory_slots = default::DEFAULT_DB_MEMORY_SLOTS;
|
||||
db.memory_info.memory_slots = default::DEFAULT_DRAGONBALL_MEMORY_SLOTS;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
@ -131,8 +133,8 @@ impl ConfigPlugin for DragonballConfig {
|
||||
}
|
||||
|
||||
if (db.cpu_info.default_vcpus > 0
|
||||
&& db.cpu_info.default_vcpus as u32 > default::MAX_DB_VCPUS)
|
||||
|| db.cpu_info.default_maxvcpus > default::MAX_DB_VCPUS
|
||||
&& db.cpu_info.default_vcpus as u32 > default::MAX_DRAGONBALL_VCPUS)
|
||||
|| db.cpu_info.default_maxvcpus > default::MAX_DRAGONBALL_VCPUS
|
||||
{
|
||||
return Err(eother!(
|
||||
"Dragonball hypervisor can not support {} vCPUs",
|
||||
|
@ -6,7 +6,6 @@
|
||||
//! A sample for vendor to customize the runtime implementation.
|
||||
|
||||
use super::*;
|
||||
use crate::{eother, sl};
|
||||
use slog::Level;
|
||||
/// Vendor customization runtime configuration.
|
||||
#[derive(Debug, Default, Deserialize, Serialize)]
|
||||
|
@ -30,7 +30,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
std::process::Command::new("mkdir")
|
||||
@ -167,7 +167,7 @@ mod tests {
|
||||
anno_hash.insert(KATA_ANNO_CFG_EXPERIMENTAL.to_string(), "c,d,e".to_string());
|
||||
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -281,7 +281,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -290,7 +290,7 @@ mod tests {
|
||||
"fvfvfvfvf".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -304,7 +304,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -313,7 +313,7 @@ mod tests {
|
||||
"false".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -327,7 +327,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -374,7 +374,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_fail_to_change_memory_slots_because_of_less_than_zero() {
|
||||
let content = include_str!("texture/configuration-anno-0.toml");
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let qemu = QemuConfig::new();
|
||||
@ -386,7 +386,7 @@ mod tests {
|
||||
"-1".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -400,7 +400,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -409,7 +409,7 @@ mod tests {
|
||||
"10".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -423,7 +423,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -432,7 +432,7 @@ mod tests {
|
||||
"400".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -446,7 +446,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -455,7 +455,7 @@ mod tests {
|
||||
"false1".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
@ -469,7 +469,7 @@ mod tests {
|
||||
let qemu = QemuConfig::new();
|
||||
qemu.register();
|
||||
|
||||
let config = TomlConfig::load(&content).unwrap();
|
||||
let config = TomlConfig::load(content).unwrap();
|
||||
KataConfig::set_active_config(Some(config), "qemu", "agent0");
|
||||
|
||||
let mut anno_hash = HashMap::new();
|
||||
@ -478,7 +478,7 @@ mod tests {
|
||||
"ddc".to_string(),
|
||||
);
|
||||
let anno = Annotation::new(anno_hash);
|
||||
let mut config = TomlConfig::load(&content).unwrap();
|
||||
let mut config = TomlConfig::load(content).unwrap();
|
||||
|
||||
assert!(anno
|
||||
.update_config_by_annotation(&mut config, "qemu", "agent0")
|
||||
|
Loading…
Reference in New Issue
Block a user