CDK-Ansible
#Ansible #Rust #tokio
https://gyazo.com/f62b0a586c3431db2fd5bf5065ec5daa
https://crates.io/crates/cdk-ansible
https://github.com/pollenjp/cdk-ansible
詳しくは README を御覧ください
https://github.com/users/pollenjp/projects/10/views/1
部誌:独習KMC vol.22 執筆 にて紹介
Rust で Ansible Playbook を生成するツール
AWS CDK に似た思想であり、プログラミング言語 (Rust) を使って Ansible Playbook (YAML) を生成する
経緯
Ansible は YAML で記述するが故に制限された操作しか行えなかった
複雑なことをしようとするとどうしても非直感的で処理を追うことが困難
そこで、プログラミング言語を使って記述することで以下を実現した
静的に決定することができる値は事前に処理
関数やオブジェクト思考による、複雑な記述の抽象化
プログラミング言語やLSP (Language Server Protocol)の機能を十分に利用した快適な開発者体験
柔軟な並列単位の指定 #21 (v0.2.0~)
README.md より抜粋
code:rs
// let play1, play2, play3, ...
pub struct SampleStack {
exe_play: ExePlay,
}
impl SampleStack {
pub fn new(hp: &HostPool) -> Self {
let hosts = hp.localhost.name.as_str();
Self {
exe_play: ExeSequential(vec![
ExeSingle(Box::new(play1)),
ExeSingle(Box::new(play2)),
ExeParallel(vec![
ExeParallel(vec![
ExeSingle(Box::new(play3)),
ExeSingle(Box::new(play4)),
ExeSingle(Box::new(play5)),
]),
ExeSequential(vec![
ExeSingle(Box::new(play6)),
ExeSingle(Box::new(play7)),
]),
ExeSingle(Box::new(play8)),
]),
ExeSingle(Box::new(play9)),
]),
}
}
}
code:mermaid
stateDiagram-v2
* --> play1
play1 --> play2
state ForkExeParallel1 <<fork>>
play2 --> ForkExeParallel1
state ForkExeParallel2 <<fork>>
ForkExeParallel1 --> ForkExeParallel2
ForkExeParallel2 --> play3
ForkExeParallel2 --> play4
ForkExeParallel2 --> play5
state JoinExeParallel2 <<join>>
play3 --> JoinExeParallel2
play4 --> JoinExeParallel2
play5 --> JoinExeParallel2
ForkExeParallel1 --> play6
play6 --> play7
ForkExeParallel1 --> play8
state JoinExeParallel1 <<join>>
JoinExeParallel2 --> JoinExeParallel1
play7 --> JoinExeParallel1
play8 --> JoinExeParallel1
JoinExeParallel1 --> play9
play9 --> *