sealer是阿里巴巴开源的基于kuberentes的集群镜像开源技术,能够把整个集群整体打包。
Sealer Cloud能够在线化帮忙用户进行集群打包分享和运行,Sealer cloud前后端也应用了十分先进的
rust+wasm技术实现,本短文接上一篇持续讲一些代码构造,嵌套以及列表循环相干内容,让咱们看下
rust有多优雅。
代码构造
sealer源码 外面间接有具体的代码供参考。
当然有趣味的同学能够参加到我的项目开发中来。
.├── components│ ├── footer.rs│ ├── header.rs # UI的header│ ├── image_info.rs│ ├── image_list.rs # 主体内容,镜像列表│ └── mod.rs├── main.rs # 主函数├── routes│ ├── login.rs│ └── mod.rs├── services│ ├── mod.rs│ └── requests.rs└── types
模块导入
应用函数让你的html更清晰
impl Component for Header {... fn view(&self) -> Html { html! { <nav class="navbar is-primary block" role="navigation" aria-label="main navigation"> { self.logo_name() } { self.search() } { self.login() } </nav> } }}
咱们肯定要防止把很多html都写在一个代码块中,yew外面就能够通过函数的形式把它们进行切分。
impl Header { fn logo_name(&self) -> Html { html! { <div class="navbar-brand"> <div class="navbar-item"> <i class="far fa-cloud fa-2x fa-pull-left"></i> <strong> { "Sealer Cloud" }</strong> </div> </div> } }...}
这样看起来就很清晰,view函数里调用上面的一个个Html模块。
在main中调用header模块
咱们在header中曾经实现了一个Header的Component,首先在mod.rs中把模块裸露进来:
pub mod header;pub mod image_list;
在main.rs中导入crate:
use crate::components::{header::Header, image_list::Images};
在main的主UI中导入header UI
通过 <Header />这样的形式即可
fn view(&self) -> Html { html! { <div> <Header /> <Images /> </div> }}
镜像列表List循环解决
先定义一个列表数组:
pub struct Image { name: String, body: String, }pub struct Images{ // props: Props, images: Vec<Image>}
在create函数中做一些初始化的事件:
fn create(props: Self::Properties, _: ComponentLink<Self>) -> Self { Images{ images: vec![ Image { name: String::from("kubernetes:v1.19.9"), body: String::from("sealer base image, kuberntes alpine, without calico") }, ...]
在UI中进行循环迭代:
fn image_list(&self) -> Html { html! { <div class="columns is-multiline"> { for self.images.iter().map(|image|{ self.image_info(image) }) } </div> } }
这里给map传入的是一个匿名函数,改函数返回单个镜像的详情。
单个镜像信息如下渲染:
fn image_info(&self,image: &Image) -> Html { html! { <div class="column is-6"> <div class="card"> <header class="card-header"> <p class="card-header-title"> { image.name.to_string() } </p> <button class="card-header-icon" aria-label="more options"> <span class="icon"> <i class="fal fa-expand" aria-hidden="true"></i> </span> </button> </header> <div class="card-content"> <div class="content"> { image.body.to_string() } <br /> <time datetime="2016-1-1">{ "11:09 PM - 1 Jan 2016" }</time> </div> </div> </div> </div> } }
这样一个镜像列表就做好了,是不是非常简单。
看一下整体成果:
kubernetes一键装置
sealer集群整体打包!