mirror of
				https://github.com/kata-containers/kata-containers.git
				synced 2025-11-04 11:50:15 +00:00 
			
		
		
		
	kata-types: validate KataVirtualVolume object
Implement method validate() for KataVirtualVolume to validate message format. Signed-off-by: Jiang Liu <gerry@linux.alibaba.com>
This commit is contained in:
		@@ -258,6 +258,88 @@ impl KataVirtualVolume {
 | 
				
			|||||||
            ..Default::default()
 | 
					            ..Default::default()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Validate virtual volume object.
 | 
				
			||||||
 | 
					    pub fn validate(&self) -> Result<()> {
 | 
				
			||||||
 | 
					        match self.volume_type.as_str() {
 | 
				
			||||||
 | 
					            KATA_VIRTUAL_VOLUME_DIRECT_BLOCK => {
 | 
				
			||||||
 | 
					                if self.source.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!(
 | 
				
			||||||
 | 
					                        "missing source device for directly assigned block volume"
 | 
				
			||||||
 | 
					                    ));
 | 
				
			||||||
 | 
					                } else if self.fs_type.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!(
 | 
				
			||||||
 | 
					                        "missing filesystem for directly assigned block volume"
 | 
				
			||||||
 | 
					                    ));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            KATA_VIRTUAL_VOLUME_IMAGE_RAW_BLOCK | KATA_VIRTUAL_VOLUME_LAYER_RAW_BLOCK => {
 | 
				
			||||||
 | 
					                if self.source.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("missing source device for raw block volume"));
 | 
				
			||||||
 | 
					                } else if self.fs_type.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("missing filesystem for raw block volume"));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            KATA_VIRTUAL_VOLUME_IMAGE_NYDUS_BLOCK | KATA_VIRTUAL_VOLUME_LAYER_NYDUS_BLOCK => {
 | 
				
			||||||
 | 
					                if self.source.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("missing meta blob for nydus block volume"));
 | 
				
			||||||
 | 
					                } else if self.fs_type.as_str() != "rafsv6" {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("invalid filesystem for nydus block volume"));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                match self.nydus_image.as_ref() {
 | 
				
			||||||
 | 
					                    None => {
 | 
				
			||||||
 | 
					                        return Err(anyhow!(
 | 
				
			||||||
 | 
					                            "missing nydus configuration info for nydus block volume"
 | 
				
			||||||
 | 
					                        ))
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    Some(nydus) => {
 | 
				
			||||||
 | 
					                        if nydus.config.is_empty() {
 | 
				
			||||||
 | 
					                            return Err(anyhow!(
 | 
				
			||||||
 | 
					                                "missing configuration info for nydus block volume"
 | 
				
			||||||
 | 
					                            ));
 | 
				
			||||||
 | 
					                        } else if nydus.snapshot_dir.is_empty() {
 | 
				
			||||||
 | 
					                            return Err(anyhow!(
 | 
				
			||||||
 | 
					                                "missing snapshot directory for nydus block volume"
 | 
				
			||||||
 | 
					                            ));
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            KATA_VIRTUAL_VOLUME_IMAGE_NYDUS_FS | KATA_VIRTUAL_VOLUME_LAYER_NYDUS_FS => {
 | 
				
			||||||
 | 
					                if self.source.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("missing meta blob for nydus fs volume"));
 | 
				
			||||||
 | 
					                } else if self.fs_type.as_str() != "rafsv6" && self.fs_type.as_str() != "rafsv5" {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("invalid filesystem for nydus fs volume"));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                match self.nydus_image.as_ref() {
 | 
				
			||||||
 | 
					                    None => {
 | 
				
			||||||
 | 
					                        return Err(anyhow!(
 | 
				
			||||||
 | 
					                            "missing nydus configuration info for nydus block volume"
 | 
				
			||||||
 | 
					                        ))
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    Some(nydus) => {
 | 
				
			||||||
 | 
					                        if nydus.config.is_empty() {
 | 
				
			||||||
 | 
					                            return Err(anyhow!(
 | 
				
			||||||
 | 
					                                "missing configuration info for nydus block volume"
 | 
				
			||||||
 | 
					                            ));
 | 
				
			||||||
 | 
					                        } else if nydus.snapshot_dir.is_empty() {
 | 
				
			||||||
 | 
					                            return Err(anyhow!(
 | 
				
			||||||
 | 
					                                "missing snapshot directory for nydus block volume"
 | 
				
			||||||
 | 
					                            ));
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            KATA_VIRTUAL_VOLUME_IMAGE_GUEST_PULL => {
 | 
				
			||||||
 | 
					                if self.source.is_empty() {
 | 
				
			||||||
 | 
					                    return Err(anyhow!("missing image reference for guest pulling volume"));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            _ => {}
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Ok(())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl TryFrom<&DirectVolumeMountInfo> for KataVirtualVolume {
 | 
					impl TryFrom<&DirectVolumeMountInfo> for KataVirtualVolume {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user