Skip to content

Commit

Permalink
Merge pull request #91 from dotxlem/fix-terraform-providers
Browse files Browse the repository at this point in the history
Fix Terraform provider bugs & uprev `terraform` binary to v1.3.2
  • Loading branch information
dotxlem authored Oct 6, 2022
2 parents ab1fb47 + 657b742 commit a7a9dba
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 21 deletions.
17 changes: 9 additions & 8 deletions cli/src/providers/aws_lambda.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,10 +453,10 @@ impl Template for LambdaBaseTemplate {
fn tmpl() -> &'static str {
r#"# AssemblyLift AWS Lambda Provider Begin
provider aws {
alias = "{{project_name}}-aws-lambda"
region = "{{options.aws_region}}"
}
// provider aws {
// alias = "{{project_name}}-aws-lambda"
// region = "{{options.aws_region}}"
// }
"#
}
Expand Down Expand Up @@ -584,10 +584,11 @@ impl Template for FunctionTemplate {
r#"# Begin function `{{function_name}}` (in `{{service_name}}`)
{{#if large_payload}}resource aws_s3_object asml_{{service_name}}_{{function_name}} {
key = "{{function_name}}.zip"
bucket = aws_s3_bucket.asml_{{service_name}}_functions.id
source = "${local.project_path}/net/services/{{service_name}}/{{function_name}}/{{function_name}}.zip"
etag = filemd5("${local.project_path}/net/services/{{service_name}}/{{function_name}}/{{function_name}}.zip")
provider = aws.{{project_name}}-aws-lambda
key = "{{function_name}}.zip"
bucket = aws_s3_bucket.asml_{{service_name}}_functions.id
source = "${local.project_path}/net/services/{{service_name}}/{{function_name}}/{{function_name}}.zip"
etag = filemd5("${local.project_path}/net/services/{{service_name}}/{{function_name}}/{{function_name}}.zip")
}{{/if}}
resource aws_lambda_function asml_{{service_name}}_{{function_name}} {
Expand Down
8 changes: 4 additions & 4 deletions cli/src/providers/k8s.rs
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,10 @@ impl Template for KubernetesBaseTemplate {
fn tmpl() -> &'static str {
r#"# AssemblyLift K8S Provider Begin
provider kubernetes {
alias = "{{project_name}}-k8s"
config_path = pathexpand("~/.kube/config")
}
// provider kubernetes {
// alias = "{{project_name}}-k8s"
// config_path = pathexpand("~/.kube/config")
// }
{{#each registries}}{{#if this.is_ecr}}provider aws {
alias = "{{../project_name}}-k8s"
Expand Down
8 changes: 4 additions & 4 deletions cli/src/terraform/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ use crate::terraform::relative_binary_path;

pub fn init() {
let mut terraform_result = process::Command::new(relative_binary_path())
.arg("-chdir=./net")
.arg("init")
.arg("./net")
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()
Expand All @@ -20,9 +20,9 @@ pub fn init() {

pub fn plan() {
let mut terraform_result = process::Command::new(relative_binary_path())
.arg("-chdir=./net")
.arg("plan")
.arg("-out=./net/plan")
.arg("./net")
.arg("-out=./plan")
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()
Expand All @@ -36,8 +36,8 @@ pub fn plan() {

pub fn apply() {
let mut terraform_result = process::Command::new(relative_binary_path())
.arg("-chdir=./net")
.arg("apply")
.arg("./net/plan")
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.spawn()
Expand Down
4 changes: 2 additions & 2 deletions cli/src/terraform/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@ pub fn fetch(project_path: &PathBuf) {

#[cfg(target_os = "linux")]
let mut response = reqwest::blocking::get(
"https://releases.hashicorp.com/terraform/0.14.8/terraform_0.14.8_linux_amd64.zip",
"https://releases.hashicorp.com/terraform/1.3.2/terraform_1.3.2_linux_amd64.zip",
)
.unwrap();
#[cfg(target_os = "macos")]
let mut response = reqwest::blocking::get(
"https://releases.hashicorp.com/terraform/0.14.8/terraform_0.14.8_darwin_amd64.zip",
"https://releases.hashicorp.com/terraform/1.3.2/terraform_1.3.2_darwin_amd64.zip",
)
.unwrap();

Expand Down
26 changes: 23 additions & 3 deletions cli/src/transpiler/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ impl Context {
provider: Rc::new(Provider {
name: d.provider.name.clone(),
options: d.provider.options.clone(),
tf_name: "nil".to_string(),
}),
})
.collect();
Expand All @@ -74,6 +75,11 @@ impl Context {
provider: Rc::new(Provider {
name: service_provider.name.clone(),
options: service_provider.options.clone(),
tf_name: match &*service_provider.name {
"aws-lambda" => "aws",
"k8s" => "kubernetes",
_ => "nil"
}.to_string(),
}),
is_root: service_manifest.api.is_root,
domain_name: service_manifest.api.domain_name,
Expand Down Expand Up @@ -194,13 +200,18 @@ impl Castable for Context {
None => (false, None, None),
};

let mut providers: Vec<Rc<Provider>> =
ctx.services.iter().map(|s| s.provider.clone()).collect();
providers.dedup_by(|a, b| a.name.eq_ignore_ascii_case(&*b.name));

let tmpl = ContextTemplate {
project_name: self.project.name.clone(),
project_path: self.project.path.clone(),
user_inject,
remote_state,
state_bucket_name,
lock_table_name,
providers: providers.clone(),
};
hcl_content.push_str(&*tmpl.render());

Expand Down Expand Up @@ -228,9 +239,6 @@ impl Castable for Context {
}

let mut out: Vec<Artifact> = Vec::new();
let mut providers: Vec<Rc<Provider>> =
ctx.services.iter().map(|s| s.provider.clone()).collect();
providers.dedup_by(|a, b| a.name.eq_ignore_ascii_case(&*b.name));
for p in providers {
// println!("DEBUG casting provider {}", p.name.clone());
let provider = PROVIDERS
Expand Down Expand Up @@ -332,9 +340,11 @@ impl Service {
}
}

#[derive(Serialize)]
pub struct Provider {
pub name: String,
pub options: Arc<StringMap<String>>,
tf_name: String,
}

pub struct Function {
Expand Down Expand Up @@ -384,6 +394,7 @@ pub struct ContextTemplate {
pub remote_state: bool,
pub state_bucket_name: Option<String>,
pub lock_table_name: Option<String>,
pub providers: Vec<Rc<Provider>>,
}

impl Template for ContextTemplate {
Expand Down Expand Up @@ -412,8 +423,17 @@ locals {
project_name = "{{project_name}}"
project_path = "{{project_path}}"
}
{{#each providers}}
provider {{tf_name}} {
alias = "{{../project_name}}-{{name}}"
region = "{{options.aws_region}}"
}
{{/each}}
{{#if user_inject}}module "usermod" {
source = "../user_tf"
providers = {
{{#each providers}} {{this.tf_name}}.{{../project_name}}-{{this.name}} = {{this.tf_name}}.{{../project_name}}-{{this.name}}{{/each}}
}
}{{/if}}
{{#if remote_state}}terraform {
backend "s3" {
Expand Down

0 comments on commit a7a9dba

Please sign in to comment.