CDK Ansible by Rust
This project is in an alpha state.
CDK-Ansible is a CDK (Cloud Development Kit) for Ansible, and inspired by AWS CDK.
While Ansible's playbook and inventory files are written in YAML format, managing YAML templating can be challenging.
CDK-Ansible enables you to generate Ansible files using Rust as a type-safe programming language.
WARNING: This project does not use JSii.
Features
- cdk-ansible can define an abstract Ansible Playbook using Rust.
- cdk-ansible-cli (
cdk-ansiblecommand) generates Rust code compatible with existing Ansible modules.
Version Compatibility
{cdk-ansible,cdk-ansible-cli}>=0.2.0 compatibility is shown in the table below.
| cdk-ansible | cdk-ansible-cli |
|---|---|
>=0.2.0 |
>=0.2.0 |
{cdk-ansible,cdk-ansible-cli}<v0.2.0 are guaranteed to work only with matching versions.
What can cdk-ansible do?
Full example project can see in cdk-ansible-examples's cli-init directory.
Define Ansible Play in Rust.
let play = Boxnew,
Create cdk-ansible's Stack and define the relationship between Play in Rust (Sequential, Parallel, etc.).
// let play1, play2, play3, ...
%%{init: {'theme': 'redux', 'themeVariables': { 'fontSize': '30pt'}}}%%
stateDiagram
direction LR
state ForkExeParallel1 <<fork>>
state ForkExeParallel2 <<fork>>
state JoinExeParallel2 <<join>>
state JoinExeParallel1 <<join>>
[*] --> play1
play1 --> play2
play2 --> ForkExeParallel1
ForkExeParallel1 --> ForkExeParallel2
ForkExeParallel2 --> play3
ForkExeParallel2 --> play4
ForkExeParallel2 --> play5
play3 --> JoinExeParallel2
play4 --> JoinExeParallel2
play5 --> JoinExeParallel2
ForkExeParallel1 --> play6
play6 --> play7
ForkExeParallel1 --> play8
JoinExeParallel2 --> JoinExeParallel1
play7 --> JoinExeParallel1
play8 --> JoinExeParallel1
JoinExeParallel1 --> play9
play9 --> [*]
Instantiate CDK-Ansible's App and add Inventory and Stack to it.
Run your app.
If your ansible command is installed through uv, pass --playbook-command option like below.
cdk-ansible-cli (cdk-ansible command)
Install
mise
MISE is recommended as it allows you to keep the versions of the cdk-ansible crate and CLI in sync.
binstall
shell
cargo install
Requirements
- cdk-ansible-cli
- rustfmt
rustup component add rustfmt
- rustfmt
Tutorial
Init cdk-ansible project
While we plan to provide an init command in the future, for now it is recommended to copy the following sample project.
Create Ansible Module package for the workspace
Running cdk-ansible module command generates a Rust package for the specified Ansible module.
# '<namespace>.<collection>.<module>' only generates the specified module.
cdkam_ansible in below example is auto-generated by cdk-ansible module command.
your-cdk-ansible-app/
|-- Cargo.toml
`-- crates/
`-- my-app/ ... your app (run `cdk_ansible::App`)
`-- cdkam_ansible/ ... auto-generated by `cdk-ansible module` command
|-- Cargo.toml
`-- src/
|-- lib.rs
|-- m/ansible/builtin/debug.rs
`-- ...
cdk-ansible module command has other options.
# '<namespace>.<collection>' generates all modules in the collection.
# '<namespace>' generates all modules in the namespace.
# If you don't specify `--module-name` or `--module-name-regex`,
# all modules accessible from your ansible environment will be generated.
# (This is the same as `--module-name-regex '*'`)
# If you are using uv to manage your ansible project, move to the directory or specify the `--project` option.