workspace

This commit is contained in:
nora 2024-04-14 22:03:39 +02:00
parent 43747f9cda
commit eea39e1f16
22 changed files with 166 additions and 107 deletions

103
Cargo.lock generated
View file

@ -28,9 +28,9 @@ dependencies = [
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.81" version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519"
[[package]] [[package]]
name = "async-stream" name = "async-stream"
@ -56,9 +56,9 @@ dependencies = [
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.79" version = "0.1.80"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -169,9 +169,9 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.91" version = "1.0.94"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd97381a8cc6493395a5afc4c691c1084b3768db713b73aa215217aa245d153" checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
@ -190,9 +190,9 @@ dependencies = [
[[package]] [[package]]
name = "either" name = "either"
version = "1.10.0" version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
[[package]] [[package]]
name = "equivalent" name = "equivalent"
@ -279,9 +279,9 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.13" version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06fddc2749e0528d2813f95e050e87e52c8cbbae56223b9babf73b3e53b0cc6" checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
@ -755,9 +755,9 @@ dependencies = [
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.35" version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@ -1078,7 +1078,16 @@ dependencies = [
] ]
[[package]] [[package]]
name = "terraform-provider-terustform" name = "terraform-provider-example"
version = "0.1.0"
dependencies = [
"eyre",
"terustform",
"tokio",
]
[[package]]
name = "terustform"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"base64 0.22.0", "base64 0.22.0",
@ -1100,6 +1109,15 @@ dependencies = [
"tracing-subscriber", "tracing-subscriber",
] ]
[[package]]
name = "terustform-macros"
version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "thread_local" name = "thread_local"
version = "1.1.8" version = "1.1.8"
@ -1112,9 +1130,9 @@ dependencies = [
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.35" version = "0.3.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef89ece63debf11bc32d1ed8d078ac870cbeb44da02afb02a9ff135ae7ca0582" checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
dependencies = [ dependencies = [
"deranged", "deranged",
"num-conv", "num-conv",
@ -1413,7 +1431,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [ dependencies = [
"windows-targets 0.52.4", "windows-targets 0.52.5",
] ]
[[package]] [[package]]
@ -1433,17 +1451,18 @@ dependencies = [
[[package]] [[package]]
name = "windows-targets" name = "windows-targets"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
dependencies = [ dependencies = [
"windows_aarch64_gnullvm 0.52.4", "windows_aarch64_gnullvm 0.52.5",
"windows_aarch64_msvc 0.52.4", "windows_aarch64_msvc 0.52.5",
"windows_i686_gnu 0.52.4", "windows_i686_gnu 0.52.5",
"windows_i686_msvc 0.52.4", "windows_i686_gnullvm",
"windows_x86_64_gnu 0.52.4", "windows_i686_msvc 0.52.5",
"windows_x86_64_gnullvm 0.52.4", "windows_x86_64_gnu 0.52.5",
"windows_x86_64_msvc 0.52.4", "windows_x86_64_gnullvm 0.52.5",
"windows_x86_64_msvc 0.52.5",
] ]
[[package]] [[package]]
@ -1454,9 +1473,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]] [[package]]
name = "windows_aarch64_gnullvm" name = "windows_aarch64_gnullvm"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
@ -1466,9 +1485,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
@ -1478,9 +1497,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
@ -1490,9 +1515,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
@ -1502,9 +1527,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
[[package]] [[package]]
name = "windows_x86_64_gnullvm" name = "windows_x86_64_gnullvm"
@ -1514,9 +1539,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]] [[package]]
name = "windows_x86_64_gnullvm" name = "windows_x86_64_gnullvm"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
@ -1526,9 +1551,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
version = "0.52.4" version = "0.52.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
[[package]] [[package]]
name = "yasna" name = "yasna"

View file

@ -1,31 +1,13 @@
[package] [workspace]
name = "terraform-provider-terustform" resolver = "2"
version = "0.1.0" members = [
edition = "2021" "terustform",
"terustform-macros",
"terraform-provider-example",
]
[profile.release] [profile.release]
panic = "abort" panic = "abort"
[profile.dev] [profile.dev]
panic = "abort" panic = "abort"
[dependencies]
base64 = "0.22.0"
eyre = "0.6.12"
prost = "0.12.4"
rcgen = "0.13.1"
rmp = "0.8.12"
rustls = { version = "0.23.4", default-features = false, features = ["ring", "logging", "std", "tls12"] }
serde = "1.0.197"
serde_json = "1.0.115"
tempfile = "3.10.1"
time = "0.3.35"
tokio = { version = "1.37.0", features = ["full"] }
tokio-stream = { version = "0.1.15", features = ["net"] }
tokio-util = "0.7.10"
tonic = { version = "0.11.0", features = ["tls"] }
tracing = "0.1.40"
tracing-subscriber = "0.3.18"
[build-dependencies]
tonic-build = "0.11.0"

View file

@ -0,0 +1,10 @@
[package]
name = "terraform-provider-example"
version = "0.1.0"
edition = "2021"
[dependencies]
eyre = "0.6.12"
terustform = { path = "../terustform" }
tokio = { version = "1.37.0", features = ["full"] }

View file

@ -1,19 +1,25 @@
use std::collections::{BTreeMap, HashMap}; use std::collections::{BTreeMap, HashMap};
use crate::{ use terustform::{
framework::{ framework::{
datasource::{self, DataSource}, datasource::{self, DataSource},
provider::Provider, provider::Provider,
value::StringValue,
DResult, DResult,
}, },
values::{Value, ValueKind}, values::{Value, ValueKind},
}; };
#[tokio::main]
async fn main() -> eyre::Result<()> {
terustform::serve(&ExampleProvider {}).await
}
pub struct ExampleProvider {} pub struct ExampleProvider {}
impl Provider for ExampleProvider { impl Provider for ExampleProvider {
fn name(&self) -> String { fn name(&self) -> String {
"terustform".to_owned() "example".to_owned()
} }
fn data_sources(&self) -> Vec<Box<dyn DataSource>> { fn data_sources(&self) -> Vec<Box<dyn DataSource>> {
@ -23,6 +29,10 @@ impl Provider for ExampleProvider {
struct ExampleDataSource {} struct ExampleDataSource {}
struct _ExampleDataSourceModel {
name: StringValue,
}
impl DataSource for ExampleDataSource { impl DataSource for ExampleDataSource {
fn name(&self, provider_name: &str) -> String { fn name(&self, provider_name: &str) -> String {
format!("{provider_name}_kitty") format!("{provider_name}_kitty")

View file

@ -0,0 +1,24 @@
terraform {
required_providers {
example = {
source = "github.com/Nilstrieb/example"
}
}
}
provider "example" {}
//resource "terustform_hello" "test1" {}
data "example_kitty" "kitty" {
name = "aa mykitten"
}
data "example_kitty" "hellyes" {
name = "aa a cute kitty"
}
output "cat1" {
value = data.example_kitty.kitty.meow
}
output "cat2" {
value = data.example_kitty.hellyes.meow
}

View file

@ -0,0 +1,12 @@
[package]
name = "terustform-macros"
version = "0.1.0"
edition = "2021"
[lib]
proc-macro = true
[dependencies]
proc-macro2 = "1.0.79"
quote = "1.0.36"
syn = "2.0.58"

View file

@ -0,0 +1,6 @@
#[proc_macro_derive(DataSourceModel)]
pub fn data_source_model(
_input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
Default::default()
}

25
terustform/Cargo.toml Normal file
View file

@ -0,0 +1,25 @@
[package]
name = "terustform"
version = "0.1.0"
edition = "2021"
[dependencies]
base64 = "0.22.0"
eyre = "0.6.12"
prost = "0.12.4"
rcgen = "0.13.1"
rmp = "0.8.12"
rustls = { version = "0.23.4", default-features = false, features = ["ring", "logging", "std", "tls12"] }
serde = "1.0.197"
serde_json = "1.0.115"
tempfile = "3.10.1"
time = "0.3.35"
tokio = { version = "1.37.0", features = ["full"] }
tokio-stream = { version = "0.1.15", features = ["net"] }
tokio-util = "0.7.10"
tonic = { version = "0.11.0", features = ["tls"] }
tracing = "0.1.40"
tracing-subscriber = "0.3.18"
[build-dependencies]
tonic-build = "0.11.0"

View file

@ -2,6 +2,7 @@
pub mod datasource; pub mod datasource;
pub mod provider; pub mod provider;
pub mod value;
use self::datasource::DataSource; use self::datasource::DataSource;

View file

@ -0,0 +1 @@
pub struct StringValue;

View file

@ -1,8 +1,7 @@
mod cert; mod cert;
mod framework; pub mod framework;
mod server; mod server;
mod values; pub mod values;
mod example;
use std::{env, path::PathBuf}; use std::{env, path::PathBuf};
@ -13,12 +12,7 @@ use tokio::net::UnixListener;
use tonic::transport::{Certificate, ServerTlsConfig}; use tonic::transport::{Certificate, ServerTlsConfig};
use tracing::{info, Level}; use tracing::{info, Level};
#[tokio::main] pub async fn serve(provider: &dyn Provider) -> eyre::Result<()> {
async fn main() -> eyre::Result<()> {
serve(&example::ExampleProvider {}).await
}
async fn serve(provider: &dyn Provider) -> eyre::Result<()> {
tracing_subscriber::fmt() tracing_subscriber::fmt()
.with_max_level(Level::DEBUG) .with_max_level(Level::DEBUG)
.with_writer(std::io::stderr) .with_writer(std::io::stderr)

View file

@ -2,12 +2,10 @@
// tftypes for types and values // tftypes for types and values
use std::{ use std::{
collections::{BTreeMap, HashMap, HashSet}, collections::{BTreeMap, HashMap},
io::{self, Read}, io::{self, Read},
}; };
use rmp::encode::write_bool;
use crate::framework::{DResult, Diagnostics}; use crate::framework::{DResult, Diagnostics};
#[derive(Debug)] #[derive(Debug)]

View file

@ -1,29 +0,0 @@
terraform {
required_providers {
terustform = {
source = "github.com/Nilstrieb/terustform"
}
}
}
provider "terustform" {}
//resource "terustform_hello" "test1" {}
data "terustform_kitty" "kitty" {
name = "aa mykitten"
}
data "terustform_kitty" "hellyes" {
name = "aa a cute kitty"
}
output "meow" {
value = data.terustform_kitty.kitty.id
}
output "cat1" {
value = data.terustform_kitty.kitty.meow
}
output "cat2" {
value = data.terustform_kitty.hellyes.meow
}