diff --git a/Cargo.lock b/Cargo.lock index 8fdbfac..2576949 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,9 +28,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" [[package]] name = "async-stream" @@ -56,9 +56,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.79" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507401cad91ec6a857ed5513a2073c82a9b9048762b885bb98655b306964681" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", @@ -169,9 +169,9 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cc" -version = "1.0.91" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd97381a8cc6493395a5afc4c691c1084b3768db713b73aa215217aa245d153" +checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" [[package]] name = "cfg-if" @@ -190,9 +190,9 @@ dependencies = [ [[package]] name = "either" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" [[package]] name = "equivalent" @@ -279,9 +279,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06fddc2749e0528d2813f95e050e87e52c8cbbae56223b9babf73b3e53b0cc6" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", "libc", @@ -755,9 +755,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -1078,7 +1078,16 @@ dependencies = [ ] [[package]] -name = "terraform-provider-terustform" +name = "terraform-provider-example" +version = "0.1.0" +dependencies = [ + "eyre", + "terustform", + "tokio", +] + +[[package]] +name = "terustform" version = "0.1.0" dependencies = [ "base64 0.22.0", @@ -1100,6 +1109,15 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "terustform-macros" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "thread_local" version = "1.1.8" @@ -1112,9 +1130,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.35" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef89ece63debf11bc32d1ed8d078ac870cbeb44da02afb02a9ff135ae7ca0582" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "num-conv", @@ -1413,7 +1431,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -1433,17 +1451,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -1454,9 +1473,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -1466,9 +1485,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -1478,9 +1497,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.52.5" 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]] name = "windows_i686_msvc" @@ -1490,9 +1515,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -1502,9 +1527,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -1514,9 +1539,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -1526,9 +1551,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "yasna" diff --git a/Cargo.toml b/Cargo.toml index 872c15f..8835379 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,31 +1,13 @@ -[package] -name = "terraform-provider-terustform" -version = "0.1.0" -edition = "2021" +[workspace] +resolver = "2" +members = [ + "terustform", + "terustform-macros", + "terraform-provider-example", +] [profile.release] panic = "abort" [profile.dev] 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" diff --git a/terraform-provider-example/Cargo.toml b/terraform-provider-example/Cargo.toml new file mode 100644 index 0000000..6886fb8 --- /dev/null +++ b/terraform-provider-example/Cargo.toml @@ -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"] } diff --git a/src/example.rs b/terraform-provider-example/src/main.rs similarity index 91% rename from src/example.rs rename to terraform-provider-example/src/main.rs index 5a9c267..614ca32 100644 --- a/src/example.rs +++ b/terraform-provider-example/src/main.rs @@ -1,19 +1,25 @@ use std::collections::{BTreeMap, HashMap}; -use crate::{ +use terustform::{ framework::{ datasource::{self, DataSource}, provider::Provider, + value::StringValue, DResult, }, values::{Value, ValueKind}, }; +#[tokio::main] +async fn main() -> eyre::Result<()> { + terustform::serve(&ExampleProvider {}).await +} + pub struct ExampleProvider {} impl Provider for ExampleProvider { fn name(&self) -> String { - "terustform".to_owned() + "example".to_owned() } fn data_sources(&self) -> Vec> { @@ -23,6 +29,10 @@ impl Provider for ExampleProvider { struct ExampleDataSource {} +struct _ExampleDataSourceModel { + name: StringValue, +} + impl DataSource for ExampleDataSource { fn name(&self, provider_name: &str) -> String { format!("{provider_name}_kitty") diff --git a/terraform-provider-example/test/main.tf b/terraform-provider-example/test/main.tf new file mode 100644 index 0000000..35702fc --- /dev/null +++ b/terraform-provider-example/test/main.tf @@ -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 +} \ No newline at end of file diff --git a/terustform-macros/Cargo.toml b/terustform-macros/Cargo.toml new file mode 100644 index 0000000..39f1df4 --- /dev/null +++ b/terustform-macros/Cargo.toml @@ -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" diff --git a/terustform-macros/src/lib.rs b/terustform-macros/src/lib.rs new file mode 100644 index 0000000..023dd78 --- /dev/null +++ b/terustform-macros/src/lib.rs @@ -0,0 +1,6 @@ +#[proc_macro_derive(DataSourceModel)] +pub fn data_source_model( + _input: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + Default::default() +} diff --git a/terustform/Cargo.toml b/terustform/Cargo.toml new file mode 100644 index 0000000..4332dd1 --- /dev/null +++ b/terustform/Cargo.toml @@ -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" diff --git a/build.rs b/terustform/build.rs similarity index 100% rename from build.rs rename to terustform/build.rs diff --git a/proto/controller.proto b/terustform/proto/controller.proto similarity index 100% rename from proto/controller.proto rename to terustform/proto/controller.proto diff --git a/proto/tfplugin6.6.proto b/terustform/proto/tfplugin6.6.proto similarity index 100% rename from proto/tfplugin6.6.proto rename to terustform/proto/tfplugin6.6.proto diff --git a/src/cert.rs b/terustform/src/cert.rs similarity index 100% rename from src/cert.rs rename to terustform/src/cert.rs diff --git a/src/framework/datasource.rs b/terustform/src/framework/datasource.rs similarity index 100% rename from src/framework/datasource.rs rename to terustform/src/framework/datasource.rs diff --git a/src/framework/mod.rs b/terustform/src/framework/mod.rs similarity index 97% rename from src/framework/mod.rs rename to terustform/src/framework/mod.rs index 2c7c9d7..8f35126 100644 --- a/src/framework/mod.rs +++ b/terustform/src/framework/mod.rs @@ -2,6 +2,7 @@ pub mod datasource; pub mod provider; +pub mod value; use self::datasource::DataSource; diff --git a/src/framework/provider.rs b/terustform/src/framework/provider.rs similarity index 100% rename from src/framework/provider.rs rename to terustform/src/framework/provider.rs diff --git a/terustform/src/framework/value.rs b/terustform/src/framework/value.rs new file mode 100644 index 0000000..096c6e9 --- /dev/null +++ b/terustform/src/framework/value.rs @@ -0,0 +1 @@ +pub struct StringValue; \ No newline at end of file diff --git a/src/main.rs b/terustform/src/lib.rs similarity index 94% rename from src/main.rs rename to terustform/src/lib.rs index d206ad9..4ee5ab4 100644 --- a/src/main.rs +++ b/terustform/src/lib.rs @@ -1,8 +1,7 @@ mod cert; -mod framework; +pub mod framework; mod server; -mod values; -mod example; +pub mod values; use std::{env, path::PathBuf}; @@ -13,12 +12,7 @@ use tokio::net::UnixListener; use tonic::transport::{Certificate, ServerTlsConfig}; use tracing::{info, Level}; -#[tokio::main] -async fn main() -> eyre::Result<()> { - serve(&example::ExampleProvider {}).await -} - -async fn serve(provider: &dyn Provider) -> eyre::Result<()> { +pub async fn serve(provider: &dyn Provider) -> eyre::Result<()> { tracing_subscriber::fmt() .with_max_level(Level::DEBUG) .with_writer(std::io::stderr) diff --git a/src/server/convert.rs b/terustform/src/server/convert.rs similarity index 100% rename from src/server/convert.rs rename to terustform/src/server/convert.rs diff --git a/src/server/grpc.rs b/terustform/src/server/grpc.rs similarity index 100% rename from src/server/grpc.rs rename to terustform/src/server/grpc.rs diff --git a/src/server/mod.rs b/terustform/src/server/mod.rs similarity index 100% rename from src/server/mod.rs rename to terustform/src/server/mod.rs diff --git a/src/values.rs b/terustform/src/values.rs similarity index 99% rename from src/values.rs rename to terustform/src/values.rs index 6c46b46..1b69f92 100644 --- a/src/values.rs +++ b/terustform/src/values.rs @@ -2,12 +2,10 @@ // tftypes for types and values use std::{ - collections::{BTreeMap, HashMap, HashSet}, + collections::{BTreeMap, HashMap}, io::{self, Read}, }; -use rmp::encode::write_bool; - use crate::framework::{DResult, Diagnostics}; #[derive(Debug)] diff --git a/test/main.tf b/test/main.tf deleted file mode 100644 index 9fded06..0000000 --- a/test/main.tf +++ /dev/null @@ -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 -} \ No newline at end of file